当前位置: 首页 > news >正文

【LangChain核心组件】Callbacks机制深度剖析与实战指南

目录

一、通俗解释(举个🌰)

二、具体能干啥?

三、怎么用?(一句话说透)

四、小结

五、为什么Callbacks是LangChain的灵魂组件?

六、Callbacks核心API解析

1、 基础回调处理器

2、 标准实现方案对比

七、代码示例

代码一:回调函数定义和执行方式

代码二:不使用回调

代码三:使用回调函数

八、是否使用回调的区别

1、回调机制使用方式

2、执行流程差异

3、输出效果对比

4、代码结构差异

5、最佳实践建议

附:执行效果差异示意图


在 LangChain 中,​​回调函数​​就像给 AI 程序装了一个“事件监听器”或“自动小助手”。它的作用是:​​在 AI 执行任务的各个关键节点,自动触发你设定的操作​​。比如监控进度、记录日志,甚至实时显示生成结果。


一、通俗解释(举个🌰)

想象你在看厨师做菜:

  1. ​厨师开始切菜​​ → 你记录开始时间(回调函数:on_llm_start
  2. ​每切完一片菜​​ → 你数一片数量(回调函数:on_llm_new_token
  3. ​菜切完了​​ → 你喊“上菜!”(回调函数:on_llm_end
  4. ​切到手了​​ → 你立刻递创可贴(回调函数:on_llm_error

这就是回调函数的作用:​​在 AI 做事的每个步骤里,帮你自动完成额外任务​​。


二、具体能干啥?

  1. ​实时看进度​
    比如 AI 生成文字时,每输出一个词就显示到屏幕上(像打字效果)。

  2. ​算钱省成本​
    自动统计 AI 用了多少“字数额度”(比如 OpenAI 按字数收费),帮你控制预算。

  3. ​出错了能处理​
    如果 AI 调用网络接口失败,自动发邮件通知你,而不是让程序卡死。

  4. ​存日志好复盘​
    把 AI 每次对话记录自动保存到文件,方便后期查看哪里出了问题。

  5. 监控与日志​​:回调函数用于在模型运行时捕获关键事件(如开始、结束、生成Token等),并输出调试信息。
  6. ​应用场景​​:常用于调试、性能监控、流式输出处理等

三、怎么用?(一句话说透)

写一个“监听函数”,告诉 LangChain:“当 AI ​​开始干活/干完活/干到一半/出错时​​,就执行我这个函数”。
(比如:每次 AI 生成文字,就把内容实时推送到网页聊天框里)


四、小结

回调函数就是给 AI 装“监控”和“自动化工具”,让程序更智能、更可控。不需要懂代码细节,记住它能帮你​​自动响应事件​​就行。


五、为什么Callbacks是LangChain的灵魂组件?

在大语言模型应用开发中,回调机制扮演着至关重要的角色。LangChain通过Callbacks实现了:

  1. 全链路可观测性:实时追踪LLM调用、工具执行、任务链流转

  2. 执行过程干预:动态修改提示词、调整温度参数、过滤敏感内容

  3. 性能监控:统计token消耗、记录响应延迟、分析错误率

  4. 流式处理:实现逐token输出、实时进度展示等交互体验

通过下面的架构图可以看到,Callbacks贯穿整个LangChain执行生命周期:


六、Callbacks核心API解析

1、 基础回调处理器
class BaseCallbackHandler:"""处理LLM/Chain/Tool/Agent各阶段事件的抽象基类"""def on_llm_start(self, serialized, prompts, **kwargs):"""LLM开始生成时触发"""def on_llm_new_token(self, token, **kwargs):"""流式输出时每个token的生成事件"""def on_chain_end(self, outputs, **kwargs):"""任务链完成时收集最终结果"""# 共14个关键事件处理点...
2、 标准实现方案对比
配置方式优点缺点适用场景
显式回调列表支持多处理器并行需手动管理处理器实例生产环境
verbose=True零配置快速启用只能输出到stdout快速调试
自定义Handler完全定制处理逻辑开发成本较高特殊需求

 

七、代码示例

代码一:回调函数定义和执行方式

说明:该代码主要是颜色定义和执行回调函数的一种形式,不可运行。

from typing import Any, Dict, List, Unionclass BaseCallbackHandler:"""基础回调处理器,可用于处理来自langchain的回调。"""def on_llm_start(self, serialized: Dict[str, Any], prompts: List[str], **kwargs: Any) -> Any:"""当LLM开始运行时触发。"""def on_chat_model_start(self, serialized: Dict[str, Any], messages: List[List[BaseMessage]], **kwargs: Any  # type: ignore) -> Any:"""当聊天模型开始运行时触发。"""def on_llm_new_token(self, token: str, **kwargs: Any) -> Any:"""生成新LLM token时触发。仅在启用流式传输时可用。"""def on_llm_end(self, response: LLMResult, **kwargs: Any) -> Any:  # type: ignore"""当LLM运行结束时触发。"""def on_llm_error(self, error: Union[Exception, KeyboardInterrupt], **kwargs: Any) -> Any:"""当LLM发生错误时触发。"""def on_chain_start(self, serialized: Dict[str, Any], inputs: Dict[str, Any], **kwargs: Any) -> Any:"""当任务链开始运行时触发。"""def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> Any:"""当任务链运行结束时触发。"""def on_chain_error(self, error: Union[Exception, KeyboardInterrupt], **kwargs: Any) -> Any:"""当任务链发生错误时触发。"""def on_tool_start(self, serialized: Dict[str, Any], input_str: str, **kwargs: Any) -> Any:"""当工具开始运行时触发。"""def on_tool_end(self, output: str, **kwargs: Any) -> Any:"""当工具运行结束时触发。"""def on_tool_error(self, error: Union[Exception, KeyboardInterrupt], **kwargs: Any) -> Any:"""当工具发生错误时触发。"""def on_text(self, text: str, **kwargs: Any) -> Any:"""处理任意文本时触发。"""def on_agent_action(self, action: AgentAction, **kwargs: Any) -> Any:  # type: ignore"""当代理执行动作时触发。"""def on_agent_finish(self, finish: AgentFinish, **kwargs: Any) -> Any:  # type: ignore"""当代理结束运行时触发。"""

代码二:不使用回调

说明:该代码直接通过千问大模型进行推理,没有采用回调

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain#一、加载配置环境
load_dotenv()#二、初始化大模型
qwen=ChatOpenAI(model="qwen-max",api_key=os.getenv("DASHSCOPE_API_KEY"),openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",temperature=0.0)#三、定义提示模板
prompt=ChatPromptTemplate.from_template("1+{number}=")#四、初始化链(不使用回调)
print("不使用回调函数")
chain=LLMChain(llm=qwen,prompt=prompt,)
print("返回结果:",chain.invoke({"number":2}))

运行结果

不使用回调函数
d:\computer_soft\Microsoft VS Code\python_project\my_app\AI大模型应用开发\A3\A3.2_LangChain原理\一、LangChain技术原理\2、核心组件\5、Callbacks\test.py:22: LangChainDeprecationWarning: The class `LLMChain` was deprecated in LangChain 0.1.17 and will be removed in 1.0. Use :meth:`~RunnableSequence, e.g., `prompt | llm`` instead.
  chain=LLMChain(
返回结果: {'number': 2, 'text': '1+2=3'}


代码三:使用回调函数

说明:这段代码演示了LangChain中​​回调函数(Callbacks)​​和​​调试输出​​的核心用法,知识要点可概括如下:

两种启用回调的方式​

  • ​方式一:显式绑定回调处理器​
    通过 callbacks=[handler] 参数将 StdOutCallbackHandler 附加到链(LLMChain),运行时自动输出详细步骤日志。

chain = LLMChain(..., callbacks=[handler])  # 手动绑定回调
  • 方式二:启用 verbose 标志​
    设置 verbose=True 时,LangChain默认启用 StdOutCallbackHandler,效果等同于方式一。

chain2 = LLMChain(..., verbose=True)  # 隐式启用回调
from langchain.callbacks import StdOutCallbackHandler
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
import os
from dotenv import load_dotenv#一、初始化配置环境
load_dotenv()# 二、初始化回调处理器
handler = StdOutCallbackHandler()# 三、初始化模型
llm = ChatOpenAI(model="qwen-max",api_key=os.getenv("DASHSCOPE_API_KEY"),openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",temperature=0.0
)# 四、定义提示模板)
prompt = PromptTemplate.from_template("1 + {number} = ")# 五、初始化链(使用回调)
print("\n使用回调函数的方式")
chain = LLMChain(llm=llm, prompt=prompt, callbacks=[handler])  # 关键:添加 callbacks
# 使用verbose标志:然后,让我们使用`verbose`标志来实现相同的结果
chain2 = LLMChain(llm=llm, prompt=prompt, verbose=True)#六、输出结果
print("回调方式一:\n",chain.invoke({"number":2}))
print("回调方式二:\n",chain2.invoke({"number":2}))

运行结果

> Entering new LLMChain chain...
Prompt after formatting:
1 + 2 = 
> Finished chain.
回调方式一:
 {'number': 2, 'text': '1 + 2 = 3'}


> Entering new LLMChain chain...
Prompt after formatting:
1 + 2 =

> Finished chain.
回调方式二:
 {'number': 2, 'text': '1 + 2 = 3'}


八、是否使用回调的区别

1、回调机制使用方式

以下是代码二和代码三的区别对比

对比维度不使用回调使用回调
回调配置方式先创建带回调的chain,后覆盖为无回调的chain同时展示两种回调方式:显式回调处理器 和 verbose标志
回调生效情况最终实际未使用回调(被后续无回调chain覆盖)明确对比两种回调方式的效果
代码逻辑存在逻辑矛盾:先配置回调后又覆盖逻辑清晰:分别演示不同配置方式
2、执行流程差异

# 代码一流程
1. 创建带回调的chain(但后续被覆盖)
2. 重新创建无回调的chain(最终生效)
3. 执行无回调调用

# 代码二流程
1. 创建两种配置的chain:
   - 方式一:callbacks=[handler] 
   - 方式二:verbose=True
2. 分别执行两种调用

 

3、输出效果对比
回调方式输出内容示例
无回调仅返回结果:{'number': 2, 'text': '1 + 2 = 3'}
显式回调打印LLM执行过程日志:
> Entering new LLMChain chain...
...
verbose=True与显式回调效果相同,底层使用默认的StdOutCallbackHandler
4、代码结构差异
特性不回调使用回调
代码注释简单注释分步骤详细注释(一、二、三...)
演示目的单一场景对比两种回调配置方式
错误示例包含配置覆盖错误无错误示范
5、最佳实践建议
  1. 避免配置覆盖:不要重复初始化同名chain对象

  2. 回调选择原则

    • 需要自定义处理时使用 callbacks=[...]

    • 快速调试时使用 verbose=True(内部自动使用StdOutCallbackHandler)

  3. 生产环境推荐:使用显式回调处理器,便于扩展和自定义日志处理

附:执行效果差异示意图

 代码一输出:
不使用回调函数
{'number': 2, 'text': '1 + 2 = 3'}
结果返回: {'number': 2, 'text': '1 + 2 = 3'}

代码二输出:
使用回调函数的方式

> Entering new LLMChain chain...
Prompt after formatting:
1 + 2 = 

> Finished chain.
回调方式一:
 {'number': 2, 'text': '1 + 2 = 3'}

> Entering new LLMChain chain...
Prompt after formatting:
1 + 2 = 

> Finished chain.
回调方式二:
 {'number': 2, 'text': '1 + 2 = 3'}

相关文章:

【LangChain核心组件】Callbacks机制深度剖析与实战指南

目录 一、通俗解释(举个🌰) 二、具体能干啥? 三、怎么用?(一句话说透) 四、小结 五、为什么Callbacks是LangChain的灵魂组件? 六、Callbacks核心API解析 1、 基础回调处理器 …...

回调函数用法详细讲解

目录 一、通过几个例子,浅谈一下我的学习见解! 二、typedef关键字用法回顾 1)基本语法 2)主要用途 1、为基本数据类型定义别名 2、为复杂类型定义别名 >>1.数组类型 >>2.指针类型 >>3.结构体类型 >…...

Nature子刊:科学家绘制与全身性癫痫发作相关的大脑网络图谱,为新的脑刺激疗法铺平道路

癫痫是一种古老的神经系统疾病,其历史可以追溯到数千年前。在古代,癫痫患者常被误解为受到神灵的惩罚或灵魂的附体,这种误解导致患者在社会中遭受歧视和排斥。然而,随着现代医学的发展,我们逐渐揭开了癫痫的神秘面纱&a…...

postman使用技巧

postman使用技巧 pre-request需求:三方对接的接口需要在请求头中添加如下参数pre-request 中获取环境变量中的变量值pre-request 中添加请求头 参考: pre-request 需求:三方对接的接口需要在请求头中添加如下参数 Accept: application/json…...

代码随想录算法训练营第十九天

LeetCode题目: 77. 组合216. 组合总和 III17. 电话号码的字母组合2537. 统计好子数组的数目(每日一题)516. 最长回文子序列1039. 多边形三角剖分的最低得分543. 二叉树的直径124. 二叉树中的最大路径和2246. 相邻字符不同的最长路径 其他: 今日总结 往期打卡 77. 组合 跳转: 7…...

MySQL联表查询底层原理

MySQL联表查询底层原理 1. 连接算法概述 MySQL在执行联表查询时,主要使用以下三种算法: 1.1 嵌套循环连接(Nested-Loop Join) -- 基本原理:对于左表的每一行,都要在右表中查找所有匹配的行 -- 示例查询…...

静态链接part2

编译 语义分析 由语义分析器完成,这个步骤只是完成了对表达式的语法层面的分析,它并不了解这个语句是否真的有意义(例如在C语言中两个指针做乘法运算,这个语句在语法上是合法的,但是没有什么意义;还有同样…...

在边缘端进行tensorflow模型的部署(小白初探)

1.配置tensorflow的环境 (我是安装GPU版本的) 建议参考这个博主的文章,确实非常快速! 十分钟安装Tensorflow-gpu2.6.0本机CUDA12 以及numpymatplotlib各包版本协调问题_tensorflow cuda12-CSDN博客 2.学习自制数据集 &#xf…...

合成数据如何赋能大模型预训练:效果与效率的双重加速器

目录 合成数据如何赋能大模型预训练:效果与效率的双重加速器 一、预训练模型为何需要合成数据? ✅ 克服真实数据的稀缺与偏倚 ✅ 控制训练内容结构与分布 ✅ 提升学习效率与训练稳定性 二、哪些预训练任务适合用合成数据? 三、如何构建…...

【n8n docker 部署的代理问题】解决n8n部署无法访问openai等外国大模型厂商的api

n8n docker 部署的代理问题:解决无法访问 OpenAI 等外国大模型厂商的 API 问题背景 在使用 n8n 进行自动化工作流开发时,经常需要调用 OpenAI 等外国大模型厂商的 API。然而,由于网络限制,直接部署的 n8n 容器无法访问这些 API …...

MongoDB 分账号限制数据访问

MongoDB 分账号限制数据访问 在 MongoDB 中,可以通过几种方式实现不同账号只能访问特定数据的需求,类似于你在 PostgreSQL 中实现的功能。 1. 基于角色的访问控制 (RBAC) 创建用户并分配角色 // 创建只能读取特定数据库的用户 use admin db.createUs…...

可控硅的工作原理和设计参考

可控硅物理结构如下图所示,P-N-P-N,就象两只背靠背的三极管。我们先来分析栅极不作电气联接的情况。当可控硅阴极电位大于阳极电位,J1和J3结反偏,器件截止。当可控硅阴极电位小于阳极电位,J1和J3正偏,但J2反…...

搭建axure cloud私有化平台

要求 https://blog.csdn.net/ss810540895/article/details/145833470 能不能找个空闲服务器,搭建一下 axure服务器,之前他们提供的免费服务终止了,我们需要尽快搭建一下服务。 步骤 mysql 数据库密码 Tbit36987. 分配权限 CREATE USER root…...

【无标题】spark SQL核心编程

MySQL Spark SQL 可以通过 JDBC 从关系型数据库中读取数据的方式创建 DataFrame&#xff0c;通过对 DataFrame 一系列的计算后&#xff0c;还可以将数据再写回关系型数据库中。 IDEA通过JDBC对MySQL进行操作&#xff1a; 1&#xff09; 导入依赖 <dependency> &l…...

PostgreSql dump导入问题集合

PostgreSql dump导入问题集合 删除数据库无法删除问题 SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datnametest AND pid<>pg_backend_pid();版本检查 pg_restore -l D:/suian/vrms2_backup.dump > D:/suian/vrms22list.txt…...

使用DeepSeek如何提升课题申报书中研究内容的专业性?25个进阶DeepSeek指令

家人们&#xff01;搞课题申报的是不是都知道&#xff0c;课题申报书里的研究内容那可是重中之重&#xff0c;写得专业不专业直接影响申报能不能成功。今天咱就来唠唠怎么用DeepSeek提升课题申报书中研究内容的专业性&#xff0c;我还给大家准备了25个进阶使用小妙招哦&#xf…...

文章记单词 | 第33篇(六级)

一&#xff0c;单词释义 poison [ˈpɔɪzn] n. 毒药&#xff1b;毒物&#xff1b;有害的思想&#xff08;或心情等&#xff09;&#xff1b;vt. 毒死&#xff1b;毒害&#xff1b;下毒&#xff1b;在… 中放毒&#xff1b;污染&#xff1b;adj. 有毒的justification [ˌdʒʌ…...

【LangChain核心组件】Memory:让大语言模型拥有持续对话记忆的工程实践

目录 一、Memory架构设计解析 1. 核心组件关系图 2. 代码中的关键实现 二、对话记忆的工程实现 1. 消息结构化存储 2. 动态提示组装机制 三、Memory类型选型指南 四、生产环境优化实践 1. 记忆容量控制 2. 记忆分片策略 3. 记忆检索增强 五、典型问题调试技巧 1. …...

GD32裸机程序-SFUD接口文件记录

SFUD gitee地址 SFUD spi初始化 /********************************************************************************* file : bsp_spi.c* author : shchl* brief : None* version : 1.0* attention : None* date : 25-…...

天元证券|调仓曝光!首批科技基金一季报出炉

4月15日&#xff0c;中欧基金、永赢基金、长城基金等公募基金公司旗下部分权益类基金产品一季报出炉。 券商中国记者梳理发现&#xff0c;永赢信息产业智选混合主要聚焦信息技术领域布局&#xff0c;前十大重仓股中9只股票属于信息技术行业&#xff0c;合计占基金资产净值比例达…...

【开源项目】Excel手撕AI算法深入理解(四):AlphaFold、Autoencoder

项目源码地址&#xff1a;https://github.com/ImagineAILab/ai-by-hand-excel.git 一、AlphaFold AlphaFold 是 DeepMind 开发的突破性 AI 算法&#xff0c;用于预测蛋白质的三维结构。它的出现解决了生物学领域长达 50 年的“蛋白质折叠问题”&#xff0c;被《科学》杂志评为…...

React-router v7 第四章(路由传参)

参数传递 React-router 一共有三种方式进行参数传递&#xff0c;参数传递指的是在路由跳转时&#xff0c;将参数传递给目标路由。 Query方式 Query的方式就是使用 ? 来传递参数&#xff0c;例如&#xff1a; #多个参数用 & 连接 /user?name小满zs&age18跳转方式&…...

常用密码技术初探

记得前几年有一部电影叫做《解除好友2&#xff1a;暗网》&#xff0c;它讲述了主角捡到一台电脑&#xff0c;并用它与好友进行视频通讯&#xff0c;但一名黑客通过网络技术篡改了通讯内容&#xff0c;最终导致所有参与视频通话的人都遭遇不测。 电影当然存在夸张成分&#xff…...

电脑知识 | TCP通俗易懂详解 <二>tcp首部

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f583;TCP快递单填写&#xff08;必填部分&#xff09; 1.&#x1f338;TCP快递单样式 2.&#x1f3e2;填写名称 3.&#x1f522;TCP序号 4. ✔️TCP确认号 ​编辑5.✅️确认号的确认号 6.&#x1f4cf;首部长度 …...

09-RocketMQ 深度解析:从原理到实战,构建可靠消息驱动微服务

RocketMQ 深度解析&#xff1a;从原理到实战&#xff0c;构建可靠消息驱动微服务 一、RocketMQ 核心定位与架构探秘 1.1 分布式消息领域的中流砥柱 在分布式系统中&#xff0c;消息队列是实现异步通信、解耦服务、削峰填谷的关键组件。RocketMQ 作为阿里巴巴开源的分布式消息…...

MyBatis 如何使用

1. 环境准备 添加依赖&#xff08;Maven&#xff09; 在 pom.xml 中添加 MyBatis 和数据库驱动依赖&#xff1a; <dependencies><!-- MyBatis 核心库 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId&g…...

AI日报 - 2025年04月17日

&#x1f31f; 今日概览(60秒速览) ▎&#x1f916; AGI突破 | OpenAI新模型或证人类未解定理&#xff0c;研究达Level 4 OpenAI安全博客暗示模型将创造新科学&#xff0c;能连接概念提新实验。CEO预测AI将证明人类未解定理&#xff0c;研究员称已达AGI第四层级。 ▎&#x1f4…...

【Leetcode-Hot100】缺失的第一个正数

题目 解答 有一处需要注意&#xff0c;我使用注释部分进行交换值&#xff0c;报错&#xff1a;超出时间限制。有人知道是为什么吗&#xff1f;难道是先给nums[i]赋值后&#xff0c;从而改变了后一项的索引&#xff1f; class Solution(object):def firstMissingPositive(sel…...

Servlet简单示例

Servlet简单示例 文章说明 Servlet 虽然是一门旧技术了&#xff0c;但是它的基础性和广泛性仍然不可忽视&#xff1b;我在实践中发现不少同学经常会被它的一些特性给困惑住&#xff1b;时常出现404等错误&#xff0c;这里我写下这篇文章&#xff0c;介绍Servlet的不同版本的特…...

spring:注解@Component、@Controller、@Service、@Reponsitory

背景 spring框架的一个核心功能是IOC&#xff0c;就是将Bean初始化加载到容器中&#xff0c;Bean是如何加载到容器的&#xff0c;可以使用spring注解方式或者spring XML配置方式。 spring注解方式直接对项目中的类进行注解&#xff0c;减少了配置文件内容&#xff0c;更加便于…...

LLM做逻辑推理题 - 野鸭蛋的故事

题目: 四个旅游家&#xff08;张虹、印玉、东晴、西雨&#xff09;去不同的岛屿去旅行&#xff0c;每个人都在岛上发现了野鸡蛋&#xff08;1个到3个&#xff09;。4人的年龄各不相同&#xff0c;是由18岁到21岁。已知&#xff1a; ①东晴是18岁。 ②印玉去了A岛。 ③21岁的女…...

Linux的目录结构(介绍,具体目录结构)

目录 介绍 具体目录结构 简洁的目录解释 详细的目录解释 介绍 Linux的文件系统是采用级层式的树状目录结构&#xff0c;在此结构的最上层是根目录“/”。Linux的世界中&#xff0c;一切皆文件&#xff08;比如&#xff1a;Linux会把硬件映射成文件来管理&#xff09; 具体目…...

C++Cherno 学习笔记day21 [86]-[90] 持续集成、静态分析、参数计算顺序、移动语义、stdmove与移动赋值操作符

b站Cherno的课[86]-[90] 一、C持续集成二、C静态分析三、C的参数计算顺序四、C移动语义五、stdmove与移动赋值操作符 一、C持续集成 Jenkins 商业软件 二、C静态分析 静态分析器会检查你的代码&#xff0c;并尝试检测各种错误&#xff0c;这些错误 可能是你无意中编写的&am…...

python学习 -- 综合案例1:设计一款基于python的飞机大战小游戏

本文目录 pygame模块介绍核心模块与功能开发流程 本文案例 - 飞机大战开发流程1. 导入必要的库2. 定义常量3. 创建精灵类4. 主程序 运行游戏 总结 pygame模块介绍 Pygame 是基于 Python 的开源、跨平台游戏开发库&#xff0c;依托 SDL&#xff08;Simple DirectMedia Layer&am…...

开启 Python 编程之旅:基础入门实战班全解析

重要的东西放前面 开启 Python 编程之旅&#xff1a;基础入门实战班全解析 开启Python编程之旅&#xff1a;基础入门实战班全解析 在当下热门的编程语言中&#xff0c;Python凭借简洁易读的语法、强大的功能和丰富的库&#xff0c;在数据科学、人工智能、Web开发等诸多领域大…...

Linux笔记---动静态库(原理篇)

1. ELF文件格式 动静态库文件的构成是什么样的呢&#xff1f;或者说二者的内容是什么&#xff1f; 实际上&#xff0c;可执行文件&#xff0c;目标文件&#xff0c;静态库文件&#xff0c;动态库文件都是使用ELF文件格式进行组织的。 ELF&#xff08;Executable and Linkable…...

SpringBoot整合Logback日志框架深度实践

一、依赖与默认集成机制 SpringBoot从2.x版本开始默认集成Logback日志框架&#xff0c;无需手动添加额外依赖。当项目引入spring-boot-starter-web时&#xff0c;该组件已包含spring-boot-starter-logging&#xff0c;其底层实现基于LogbackSLF4J组合。这种设计使得开发者只需…...

Spring Boot中接入DeepSeek的流式输出

第一步&#xff0c;添加依赖&#xff1a; <!-- WebFlux 响应式支持 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId> </dependency> 第二步&#xff0c;配置We…...

路由交换网络专题 | 第四章 | 生成树 | VRRP | 边缘端口

拓扑图 &#xff08;1&#xff09;SW1、SW2、SW3 三台交换机之间存在环路问题&#xff0c;需要通过生成树协议破环&#xff0c;请简述二层环路可能导致的问题。 因为交换机在收到一个广播帧之后&#xff0c;会对非接收端口进行转发。每台交换机都转发的话&#xff0c;就行形成一…...

SFOS2:常用容器(布局)介绍

一、前言 最近在进行sailfish os的开发&#xff0c;由于在此之前并没有从事过QT开发的工作&#xff0c;所以对这一套颇为生疏&#xff0c;以此记录一下。以下内容不一定完全准确&#xff0c;开发所使用的是Qt Quick 2.6与Sailfish.Silica 1.0两个库。 二、布局 1.Qt Quick 2.…...

VS qt 联合开发环境下的多国语言翻译

添加Linguist 文件方法&#xff0c;如同添加类文件的方式&#xff0c;那样&#xff1a; 其他跟QT的一样的流程&#xff0c;另外在main函数里要注册一下&#xff0c; QTextCodec::setCodecForLocale(textCodec); QTranslator translator5; QString trans5 fi…...

基于 Python 的 ROS2 应用开发全解析

引言 在机器人操作系统&#xff08;ROS&#xff09;不断发展的进程中&#xff0c;ROS2 作为新一代的机器人框架&#xff0c;带来了诸多显著的改进与新特性。Python 作为一种简洁、高效且具有强大数据处理能力的编程语言&#xff0c;在 ROS2 应用开发中占据着重要地位。本文将深…...

AI分析师

01 实操 人工 公司需要开发了一个XX系统&#xff0c;在文件夹中包含了XX.csv&#xff0c;其中每一行表示一个XX样本&#xff0c;最后一列为每个样本的标签&#xff0c;现需要设计模型与系统&#xff0c;请按照以下要求完成算法测试。根据要求完成以下任务&#xff0c;将完成的…...

Redis核心数据类型在实际项目中的典型应用场景解析

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Redis作为高性能的键值存储系统&#xff0c;在现代软件开发中扮演着重要角色。其多样化的数据结构为开发者提供了灵活的解决方案&#xff0c;本文将通过真实项…...

LLamaIndex中经常使用的三个模块

from aiostream import stream from fastapi import Request from fastapi.responses import StreamingResponse from llama_index.core.chat_engine.types import StreamingAgentChatResponse这四个模块每一个都很实用&#xff0c;在实际开发中经常用到&#xff0c;下面我就详…...

Idea集成AI:CodeGeeX开发

当入职新公司&#xff0c;或者调到新项目组进行开发时&#xff0c;需要快速熟悉项目代码 而新的项目代码&#xff0c;可能有很多模块&#xff0c;很多的接口&#xff0c;很复杂的业务逻辑&#xff0c;更加有与之前自己的代码风格不一致的现有复杂代码 更别提很多人写代码不喜…...

软考 中级软件设计师 考点知识点笔记总结 day12 计算机网络基础知识

文章目录 计算机网络基础5.1、计算机网络基础知识5.1.1 计算机网络分类5.1.2 七层网络体系结构5.1.3 网络标准5.1.4 TCP/IP协议族5.1.5 IP地址和IPv6简介5.1.6 Internet服务 计算机网络基础 要求掌握以下内容 5.1、计算机网络基础知识 网络体系结构 传输介质 传输技术 传输…...

【扩散模型(十三)】Break-A-Scene 可控生成,原理与代码详解(中)Cross Attn Loss 代码篇

系列文章目录 【扩散模型&#xff08;一&#xff09;】中介绍了 Stable Diffusion 可以被理解为重建分支&#xff08;reconstruction branch&#xff09;和条件分支&#xff08;condition branch&#xff09;【扩散模型&#xff08;二&#xff09;】IP-Adapter 从条件分支的视…...

C语言数字图像处理---2.31统计滤波器

本文介绍空域滤波器中的一种:统计滤波器 [定义与算法] 统计滤波(Statistic Filter)定义:基于图像处理中的邻域统计方法,对邻域内的像素信息进行统计,如基于均值和方差的信息,用于平滑或去噪图像,同时保留边缘信息。 算法步骤如下: 统计滤波器的优点和缺点主要包…...

流程设计实战:流程架构设计六步法

目录 简介 1、梳理业务模式及场景 2、甄别核心业务能力 3、搭建差异化的业务流程框架 4、定义L4流程能力 5、L4流程串联 6、展开L5业务流程 作者简介 简介 以往在设计流程的时候&#xff0c;我多数都是采用的自下而上的方式&#xff0c;从具体场景、具体问题出发去做流…...