LangChain开发框架(三)-- LECL介绍及LangChain基本使用方法,大模型入门到精通,收藏这篇就足够了!

在前面介绍了LangChain的快速使用方法,本篇来对LangChain的基本使用方法做一些完善,在后面会针对实战案例来对一些细节进行讨论,具体的实战会包括RAG、agent、MCP、langgraph结合等。

一、LCEL介绍

在这里插入图片描述

1.1 什么是 LCEL?——LangChain Expression Language 详解

在现代大语言模型(LLM)应用的构建中,LangChain 提供了一种全新的表达范式,被称为 LCEL(LangChain Expression Language)。它不仅简化了模型交互的编排过程,还增强了组合的灵活性和可维护性。本文将从概念、设计目的、核心特性和实际价值几个方面,系统性地介绍 LCEL 的本质。


1.2 LCEL 的定义

LCEL,全称为 LangChain Expression Language,是一种专为 LangChain 框架设计的表达语言。它通过一种链式组合的方式,允许开发者使用清晰、声明式的语法来构建语言模型驱动的应用流程。

简单来说,LCEL 是一种“函数式管道风格”的组件组合机制,用于连接各种可执行单元(Runnable)。这些单元包括提示模板、语言模型、输出解析器、工具函数等。


1.3 设计目的

LCEL 的设计初衷在于:

  1. 模块化构建:将模型调用流程拆解为独立、可重用的组件。
  2. 逻辑可视化:通过语法符号(如管道符 |)呈现出明确的数据流路径。
  3. 统一运行接口:所有 LCEL 组件都实现了 .invoke().stream().batch() 等标准方法,便于在同步、异步或批处理环境下调用。
  4. 脱离框架限制:相比传统的 Chain 类和 Agent 架构,LCEL 更轻量、更具表达力,减少依赖的“黑盒”逻辑。

1.4 核心组成

1. Runnable 接口

LCEL 的一切基础单元都是 Runnable 对象,它是一种统一的可调用接口,支持如下形式:

  • .invoke(input):同步调用
  • .stream(input):流式生成
  • .batch(inputs):批量执行
2. 管道运算符 |

这是 LCEL 最具特色的语法符号。多个 Runnable 对象可以通过 | 串联起来,形成清晰的数据处理链。例如:

ounter(line
prompt | model | parser

表示数据将依次传入提示模板、模型和输出解析器,最终输出结构化结果。

3. PromptTemplate 与 OutputParser

LCEL 强调组件之间的职责明确,Prompt 只负责模板化输入,Parser 只负责格式化输出,Model 只负责推理。


1.5 典型优势

特性描述
简洁语法使用 `` 运算符提升可读性
灵活组合可任意组合 Prompt、模型、工具、函数等组件
明确边界每个步骤职责分明,方便调试与重用
可嵌套扩展支持函数包装、自定义中间组件和流式拓展
与 Gradio/FastAPI 集成良好可用于构建 API、UI 聊天等多种场景

1.6 总结

LCEL 是 LangChain 在 2024 年末引入的一项重要特性,标志着从传统 Agent 架构向“声明式、组合式”开发范式的转变。它不仅让开发者能以更清晰的方式组织 LLM 工作流,也大大提高了系统的可维护性与可测试性。

二、LangChain 六大核心模块详解

前一篇大概介绍了LangChain 六大核心模块,下面将详细介绍 LangChain 的六大核心模块,包括 Model I/O、Retrieval、Memory、Chains、Agents 和 Callbacks,并统一使用 deepseek-chat 模型进行代码示例演示。

建议大家在进行模型调用时,不要直接将key写在代码中,在当前的项目主目录下创建一个`.env`文件,将相关的配置信息以环境变量的形式读入代码中。

1. Model I/O 模块

核心功能

Model I/O 模块是 LangChain 的基础,负责与语言模型进行交互,包括输入处理、模型调用和输出解析。

主要组件
组件功能描述
Prompts管理模型输入的模板和格式化
LLMs提供与各种语言模型的统一接口
Output Parsers解析模型输出为结构化数据
代码实现
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain_core.prompts import ChatPromptTemplate
from langchain.chat_models import init_chat_model
from langchain_core.output_parsers import StrOutputParser
# 1. 定义提示词模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的AI助手。"),
("user", "{input}")
])
# 2. 初始化模型 - 请根据DeepSeek的实际安装包替换ChatDeepSeek
llm = init_chat_model(model="deepseek-chat", temperature=0.7)
# 3. 定义输出解析器
output_parser = StrOutputParser()
# 4. 使用LCEL组合成链
chain = prompt | llm | output_parser
# 调用链
response = chain.invoke({"input": "请解释一下什么是机器学习。"})
print(response)
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
当然可以!我很乐意为你解释什么是机器学习。
这是一个可以用一句话概括的核心定义:
**机器学习是人工智能的一个分支,其核心是让计算机通过“学习”数据中的规律和模式,从而获得预测或决策的能力,而无需进行显式的编程。**
下面我们来详细拆解这个定义,让它更容易理解:
### 1. 核心思想:从“编程”到“学习”
*   **传统编程**:我们给计算机输入**规则(程序)** 和**数据**,计算机输出**答案**。
*   例如:我们写一个程序来识别猫,规则可能是“如果有胡须、尖耳朵、长尾巴,那就是猫”。这个规则需要程序员自己总结并精确地写出来。
*   **机器学习**:我们给计算机输入**数据**和对应的**答案**,计算机自己找出连接数据和答案的**规则(模型)**。
*   例如:我们给计算机看成千上万张“猫”和“非猫”的图片(数据+答案),计算机通过算法自己总结出猫的特征(比如毛茸茸的纹理、眼睛的形状等),最终形成一个可以识别新图片中是否有猫的模型。
所以,机器学习的本质是 **“让机器自己从数据中学习规则”**。
### 2. 一个简单的类比:教孩子认动物
想象一下你教一个孩子认识“狗”:
1.  你给他看很多不同品种、大小、颜色的狗的图片,并告诉他“这是狗”。
2.  你也给他看一些猫、马、汽车的图片,并告诉他“这不是狗”。
3.  经过一段时间的学习,孩子的大脑会自己总结出“狗”的关键特征(比如四条腿、摇尾巴、汪汪叫等)。
4.  之后,当他看到一只他从未见过的狗时,他也能正确地认出那是狗。
**机器学习的过程与此非常相似:**
*   **数据** = 你给孩子看的各种图片。
*   **答案(标签)** = 你告诉孩子“是狗”或“不是狗”。
*   **学习算法** = 孩子大脑总结规律的过程。
*   **模型** = 孩子大脑中形成的关于“狗”的概念。
*   **预测** = 孩子识别新动物。
### 3. 机器学习的三种主要类型
根据学习方式的不同,机器学习主要分为三类:
1.  **监督学习**
*   **特点**:数据是**带标签的**。就像有标准答案的学习资料。
*   **目标**:学习输入到输出之间的映射关系,用于**预测**。
*   **例子**:
*   **分类**:判断邮件是否为垃圾邮件(标签:垃圾/非垃圾)。
*   **回归**:预测房价(标签:具体价格)。
2.  **无监督学习**
*   **特点**:数据是**没有标签的**。就像给了一堆没有分类的杂物。
*   **目标**:从数据中发现内在的**结构或模式**。
*   **例子**:
*   **聚类**:根据客户的购物习惯将他们分成不同的群体,用于精准营销。
*   **降维**:将高维数据(如几百万像素的图片)压缩成核心特征,便于可视化或处理。
3.  **强化学习**
*   **特点**:像一个智能体通过与环境的**互动**来学习。通过“试错”并根据结果(奖励或惩罚)来调整自己的行为策略。
*   **目标**:学习一套在特定环境下能获得最大累积奖励的**行动策略**。
*   **例子**:
*   AlphaGo 学习下围棋。
*   自动驾驶汽车学习如何安全行驶。
*   机器人学习走路。
### 4. 机器学习的常见应用
机器学习已经渗透到我们生活的方方面面:
*   **推荐系统**: Netflix、淘宝、抖音根据你的喜好推荐影片、商品和视频。
*   **图像识别**: 人脸解锁手机、医学影像分析(识别肿瘤)。
*   **自然语言处理**: 智能客服、语音助手(Siri、小爱同学)、机器翻译。
*   **金融风控**: 银行用机器学习模型检测信用卡欺诈交易。
*   **自动驾驶**: 识别道路、行人和车辆,并做出驾驶决策。
### 总结
简单来说,**机器学习就是赋予计算机从历史经验(数据)中学习并不断改进的能力**。它不是用固定的指令去解决特定问题,而是提供一个通用的框架,让机器能够通过分析数据来解决各种各样的问题,并且随着数据的增多,它的表现会越来越好。
希望这个解释能帮助你理解机器学习!如果你对某个特定类型或应用感兴趣,我们可以继续深入探讨。

2. Retrieval 模块

核心功能

Retrieval 模块用于从外部数据源中检索相关信息,构建基于知识的问答系统。

主要组件
组件功能描述
Document Loaders从各种来源加载文档
Text Splitters将长文档分割为小块
Vector Stores存储和检索向量化文档
Retrievers执行相似性搜索
代码实现
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.chat_models import init_chat_model
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain.embeddings import init_embeddings
from langchain_core.runnables import RunnablePassthrough
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor
from langchain.retrievers import EnsembleRetriever
from langchain.retrievers import BM25Retriever
from langchain_core.documents import Document
# 1. 文档加载与处理
docs = [
"LangChain 将 LLM、工具、检索串成可观测工作流。",
"LangGraph 用状态图编排多步骤/多智能体流程,适合生产级代理。",
"检索增强生成(RAG)通过结合检索器和生成模型来提高回答质量。",
"向量数据库用于高效存储和检索嵌入向量,支持相似性搜索。"
]
# 2. 文本分割 - 优化参数
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=120,
chunk_overlap=20,
separators=["\n\n", "\n", "。", "!", "?", ";", ",", " ", ""]  # 中文友好的分隔符
)
splits = text_splitter.create_documents(docs)
# 3. 嵌入模型初始化
emb = init_embeddings(
"openai:text-embedding-3-small",
openai_api_key="sk-cRtxv5U9AdK45kVNr4InXs3oIUTnnb6L3H5xJ9AaAA7qUe53",
openai_api_base="https://chatapi.littlewheat.com/v1"
)
# 4. 向量存储与检索器
vectordb = FAISS.from_documents(splits, emb)
base_retriever = vectordb.as_retriever(
search_type="similarity",  # 可选 "similarity", "mmr", "similarity_score_threshold"
search_kwargs={"k": 3}  # 返回前3个最相关文档
)
# 5. 高级检索技术:上下文压缩 :cite[10]
llm = init_chat_model("deepseek:deepseek-chat")
compressor = LLMChainExtractor.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=base_retriever
)
# 6. 混合检索策略(语义 + 关键词):cite[10]
bm25_retriever = BM25Retriever.from_documents(splits)
bm25_retriever.k = 3
ensemble_retriever = EnsembleRetriever(
retrievers=[base_retriever, bm25_retriever],
weights=[0.7, 0.3]  # 语义检索权重更高
)
# 7. RAG链构建
def format_docs(docs):
"""格式化检索到的文档"""
return "\n\n".join(f"• {doc.page_content}" for doc in docs)
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的技术助手。请严格依据以下上下文信息回答问题。\n\n上下文:{context}\n\n要求:如果上下文信息不足以回答问题,请明确说'根据已知信息无法完整回答这个问题。'"),
("human", "问题:{question}")
])
# 使用LCEL构建RAG链 :cite[1]:cite[3]
rag_chain = (
{"context": compression_retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# 8. 测试不同检索器效果
def test_retrieval_systems(question):
"""测试不同检索系统的效果"""
print(f"问题: {question}")
# 基础向量检索
basic_docs = base_retriever.invoke(question)
print(f"\n基础检索结果数: {len(basic_docs)}")
# 压缩检索
compressed_docs = compression_retriever.invoke(question)
print(f"压缩检索结果数: {len(compressed_docs)}")
# 混合检索
ensemble_docs = ensemble_retriever.invoke(question)
print(f"混合检索结果数: {len(ensemble_docs)}")
# 生成回答
response = rag_chain.invoke(question)
print(f"\n回答: {response}")
print("=" * 50)
# 9. 持久化向量存储(可选)
# vectordb.save_local("faiss_index")
# 加载时使用: vectordb = FAISS.load_local("faiss_index", emb, allow_dangerous_deserialization=True)
# 测试示例
test_questions = [
"LangGraph 适合哪些场景?",
"什么是检索增强生成?",
"LangChain 的主要功能是什么?"
]
for question in test_questions:
test_retrieval_systems(question)
问题: LangGraph 适合哪些场景?
基础检索结果数: 3
压缩检索结果数: 1
混合检索结果数: 4
回答: 根据已知信息,LangGraph 适合用于编排多步骤或多智能体的流程,尤其适用于生产级代理场景。
==================================================
问题: 什么是检索增强生成?
基础检索结果数: 3
压缩检索结果数: 1
混合检索结果数: 4
回答: 根据已知信息,检索增强生成(RAG)是一种通过结合检索器和生成模型来提高回答质量的技术。
==================================================
问题: LangChain 的主要功能是什么?
基础检索结果数: 3
压缩检索结果数: 1
混合检索结果数: 4
回答: 根据已知信息,LangChain 的主要功能是将 LLM(大语言模型)、工具和检索串成可观测的工作流。
==================================================

3. Memory 模块

核心功能

Memory 模块为对话系统提供记忆能力,保存和检索历史对话信息。

主要类型
Memory 类型适用场景
ConversationBufferMemory简短对话,需要完整历史
ConversationBufferWindowMemory长对话,需要控制记忆长度
ConversationSummaryMemory超长对话,需要摘要
ConversationEntityMemory需要记住具体实体信息
代码实现
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.chat_models import init_chat_model
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.output_parsers import StrOutputParser
from langchain.memory import ChatMessageHistory
from langchain_core.runnables import RunnablePassthrough
# 初始化模型
llm = init_chat_model("deepseek:deepseek-chat")
# 创建对话记忆存储
message_history = ChatMessageHistory()
# 构建带有记忆的提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个友好的AI助手,能够记住对话历史并与人进行连贯的对话。"),
MessagesPlaceholder(variable_name="history"),  # 这里会注入历史消息
("human", "{input}")
])
# 创建对话链
conversation_chain = (
{
"history": lambda x: message_history.messages,  # 获取历史消息
"input": RunnablePassthrough()
}
| prompt
| llm
| StrOutputParser()
)
def chat_with_memory(user_input):
"""带有记忆的对话函数"""
# 获取AI回复
response = conversation_chain.invoke(user_input)
# 将用户输入和AI回复都保存到历史中
message_history.add_user_message(user_input)
message_history.add_ai_message(response)
return response
# 测试对话
print("AI: 你好!我是您的AI助手,我可以记住我们的对话。您叫什么名字?")
# 第一轮对话
user_input1 = "我叫小明"
response1 = chat_with_memory(user_input1)
print(f"用户: {user_input1}")
print(f"AI: {response1}")
# 第二轮对话 - AI会记得名字
user_input2 = "你还记得我的名字吗?"
response2 = chat_with_memory(user_input2)
print(f"用户: {user_input2}")
print(f"AI: {response2}")
# 查看记忆内容
print(f"\n当前对话历史:")
for i, message in enumerate(message_history.messages):
role = "用户" if message.type == "human" else "AI"
print(f"{role}: {message.content}")
用户: 我叫小明
AI: 你好,小明!很高兴认识你。今天有什么我可以帮你的吗?无论是学习、生活还是其他问题,我都很乐意和你聊聊!😊
用户: 你还记得我的名字吗?
AI: 当然记得!你刚才告诉我你叫小明。我会认真记住我们的对话内容,以便更好地帮助你。有什么想聊的吗?😄
当前对话历史:
用户: 我叫小明
AI: 你好,小明!很高兴认识你。今天有什么我可以帮你的吗?无论是学习、生活还是其他问题,我都很乐意和你聊聊!😊
用户: 你还记得我的名字吗?
AI: 当然记得!你刚才告诉我你叫小明。我会认真记住我们的对话内容,以便更好地帮助你。有什么想聊的吗?😄

高级封装

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
# 使用内置的ConversationBufferMemory
memory = ConversationBufferMemory(return_messages=True)
# 创建对话链
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=False  # 设为True可以看到详细的执行过程
)
# 进行多轮对话
print("=== 多轮对话演示 ===")
dialogue = [
"你好,我叫李华",
"我今年25岁,是一名软件工程师",
"你还记得我的名字和职业吗?",
"我最喜欢的编程语言是Python",
"总结一下你了解的关于我的信息"
]
for user_input in dialogue:
response = conversation.predict(input=user_input)
print(f"用户: {user_input}")
print(f"AI: {response}")
print("-" * 40)
# 查看完整的记忆内容
print("\n📝 完整记忆内容:")
print(memory.buffer)
=== 多轮对话演示 ===
用户: 你好,我叫李华
AI: 你好李华!很高兴认识你!😊 我是一个AI助手,可以和你聊天、回答问题、帮助你解决各种问题。你今天过得怎么样?有什么想聊的话题或者需要我帮助的地方吗?比如我们可以聊聊天气、生活、学习、工作,或者任何你感兴趣的事情!
----------------------------------------
用户: 我今年25岁,是一名软件工程师
AI: 太棒了!25岁的软件工程师,这正是一个充满活力和发展潜力的阶段!😊
作为软件工程师,你的工作一定很有趣也很有挑战性吧?不知道你主要专注于哪个技术栈呢?是前端开发、后端架构、移动端开发,还是全栈?
我猜你的日常可能涉及到:
- 编写和调试代码
- 参与技术方案设计
- 与团队成员协作开发
- 学习新的技术和框架
这个行业变化很快,需要持续学习,但同时也带来了很多成长机会。你现在在做什么有趣的项目吗?或者最近在学习和探索什么新技术?
我很想听听你在工作中的一些经历和感受!毕竟软件工程不仅仅是写代码,还涉及到解决问题、创造价值,这些都是很有意思的话题!💻✨
----------------------------------------
用户: 你还记得我的名字和职业吗?
AI: 当然记得!你叫李华,今年25岁,是一名软件工程师。我们刚才还聊到你的工作内容和可能涉及的技术领域呢!😊
作为软件工程师,你最近在忙什么有趣的项目吗?或者有没有遇到什么特别的技术挑战想分享一下?我很乐意听听你的故事~ 💻✨
----------------------------------------
用户: 我最喜欢的编程语言是Python
AI: 太棒了!Python是一门非常优秀的编程语言!🐍 作为软件工程师,选择Python真的很明智,它既强大又灵活。
Python的魅力在于它的:
- **简洁优雅的语法** - 让代码更易读易写
- **丰富的生态系统** - Django、Flask、NumPy、Pandas等强大的库
- **多领域应用** - Web开发、数据分析、人工智能、自动化脚本等
- **强大的社区支持** - 遇到问题很容易找到解决方案
我猜你喜欢Python可能是因为:
✨ 开发效率高,快速实现想法
✨ 代码可读性好,维护起来相对轻松
✨ 在机器学习和数据科学领域的突出表现
✨ 跨平台特性,部署方便
你现在主要用Python做什么类型的开发呢?是Web后端、数据分析、自动化脚本,还是AI相关的项目?我很好奇你在实际工作中是如何发挥Python的威力的!🚀
另外,Python 3.12的一些新特性比如更快的执行速度、改进的错误信息提示,你觉得在实际项目中有明显感受吗?
----------------------------------------
用户: 总结一下你了解的关于我的信息
AI: 根据我们的对话,我了解到关于您的以下信息:
**基本信息:**
- 姓名:李华
- 年龄:25岁
- 职业:软件工程师
**技术偏好:**
- 最喜欢的编程语言:Python
- 可能涉及的技术领域:前端开发、后端架构、移动端开发或全栈(基于我之前询问的内容)
**工作内容推测:**
- 日常可能包括编写调试代码、技术方案设计、团队协作等
- 需要持续学习新技术和框架
我对您的了解主要来自这几轮对话,如果有任何不准确的地方,或者您想补充更多信息,请随时告诉我!我很乐意继续了解您的工作经历、项目情况,或者您使用Python的具体场景。😊
有什么其他方面您想让我记住的吗?
----------------------------------------
📝 完整记忆内容:
[HumanMessage(content='你好,我叫李华', additional_kwargs={}, response_metadata={}), AIMessage(content='你好李华!很高兴认识你!😊 我是一个AI助手,可以和你聊天、回答问题、帮助你解决各种问题。你今天过得怎么样?有什么想聊的话题或者需要我帮助的地方吗?比如我们可以聊聊天气、生活、学习、工作,或者任何你感兴趣的事情!', additional_kwargs={}, response_metadata={}), HumanMessage(content='我今年25岁,是一名软件工程师', additional_kwargs={}, response_metadata={}), AIMessage(content='太棒了!25岁的软件工程师,这正是一个充满活力和发展潜力的阶段!😊\n\n作为软件工程师,你的工作一定很有趣也很有挑战性吧?不知道你主要专注于哪个技术栈呢?是前端开发、后端架构、移动端开发,还是全栈?\n\n我猜你的日常可能涉及到:\n- 编写和调试代码\n- 参与技术方案设计\n- 与团队成员协作开发\n- 学习新的技术和框架\n\n这个行业变化很快,需要持续学习,但同时也带来了很多成长机会。你现在在做什么有趣的项目吗?或者最近在学习和探索什么新技术?\n\n我很想听听你在工作中的一些经历和感受!毕竟软件工程不仅仅是写代码,还涉及到解决问题、创造价值,这些都是很有意思的话题!💻✨', additional_kwargs={}, response_metadata={}), HumanMessage(content='你还记得我的名字和职业吗?', additional_kwargs={}, response_metadata={}), AIMessage(content='当然记得!你叫李华,今年25岁,是一名软件工程师。我们刚才还聊到你的工作内容和可能涉及的技术领域呢!😊  \n作为软件工程师,你最近在忙什么有趣的项目吗?或者有没有遇到什么特别的技术挑战想分享一下?我很乐意听听你的故事~ 💻✨', additional_kwargs={}, response_metadata={}), HumanMessage(content='我最喜欢的编程语言是Python', additional_kwargs={}, response_metadata={}), AIMessage(content='太棒了!Python是一门非常优秀的编程语言!🐍 作为软件工程师,选择Python真的很明智,它既强大又灵活。\n\nPython的魅力在于它的:\n- **简洁优雅的语法** - 让代码更易读易写\n- **丰富的生态系统** - Django、Flask、NumPy、Pandas等强大的库\n- **多领域应用** - Web开发、数据分析、人工智能、自动化脚本等\n- **强大的社区支持** - 遇到问题很容易找到解决方案\n\n我猜你喜欢Python可能是因为:\n✨ 开发效率高,快速实现想法\n✨ 代码可读性好,维护起来相对轻松\n✨ 在机器学习和数据科学领域的突出表现\n✨ 跨平台特性,部署方便\n\n你现在主要用Python做什么类型的开发呢?是Web后端、数据分析、自动化脚本,还是AI相关的项目?我很好奇你在实际工作中是如何发挥Python的威力的!🚀\n\n另外,Python 3.12的一些新特性比如更快的执行速度、改进的错误信息提示,你觉得在实际项目中有明显感受吗?', additional_kwargs={}, response_metadata={}), HumanMessage(content='总结一下你了解的关于我的信息', additional_kwargs={}, response_metadata={}), AIMessage(content='根据我们的对话,我了解到关于您的以下信息:\n\n**基本信息:**\n- 姓名:李华\n- 年龄:25岁\n- 职业:软件工程师\n\n**技术偏好:**\n- 最喜欢的编程语言:Python\n- 可能涉及的技术领域:前端开发、后端架构、移动端开发或全栈(基于我之前询问的内容)\n\n**工作内容推测:**\n- 日常可能包括编写调试代码、技术方案设计、团队协作等\n- 需要持续学习新技术和框架\n\n我对您的了解主要来自这几轮对话,如果有任何不准确的地方,或者您想补充更多信息,请随时告诉我!我很乐意继续了解您的工作经历、项目情况,或者您使用Python的具体场景。😊\n\n有什么其他方面您想让我记住的吗?', additional_kwargs={}, response_metadata={})]

4. Chains 模块

核心功能

Chains 模块将多个组件连接起来,构建复杂的工作流程。

主要类型
Chain 类型功能描述
LLMChain基本的模型调用链
SequentialChain顺序执行多个链
TransformChain数据转换链
RouterChain路由到不同的子链
代码实现
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
# 1. 定义一个更复杂的提示词模板,包含上下文和历史
prompt_template = ChatPromptTemplate.from_messages([
("system", "你是一个乐于助人的助手。根据以下上下文和对话历史回答问题。\n\n上下文:{context}"),
MessagesPlaceholder(variable_name="history"),
("user", "{question}")
])
# 2. 构建一个模拟的检索器(这里用固定文本代替,实际可接入向量数据库)
def mock_retriever(question: str):
# 模拟根据问题返回相关上下文
return "这是一个模拟的上下文:机器学习是人工智能的一个分支。"
# 3. 使用LCEL组合一个包含检索和记忆的复杂链
chain = (
{
"context": lambda x: mock_retriever(x["question"]),
"question": RunnablePassthrough(),
"history": lambda x: x.get("history", [])  # 从输入中获取历史
}
| prompt_template
| llm  # 使用之前定义的llm
| StrOutputParser()
)
# 假设我们有一段历史
history_messages = []  # 这里可以填入之前的对话消息
# 调用链
result = chain.invoke({
"question": "机器学习是什么?",
"history": history_messages
})
print(result)
机器学习是人工智能的一个分支,专注于开发算法和统计模型,使计算机系统能够通过数据学习和改进,而无需显式编程。

5. Agents 模块

核心功能

Agents 模块让语言模型能够使用工具并执行复杂任务。

核心概念
组件功能描述
Agent决策实体,决定使用哪个工具
Tools代理可以使用的函数或服务
Toolkits相关工具的集合
Agent Executor运行代理的环境
代码实现
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain_core.tools import tool
# 注意:Agent相关的Executor可能在langchain_experimental中,请关注官方更新
# 定义工具
@tool
def custom_calculator(input_text):
"""用于执行数学计算"""
try:
# 安全地评估数学表达式
result = eval(input_text)
return f"计算结果: {result}"
except:
return "计算失败,请检查表达式"
# 初始化代理 - 具体API可能随版本调整,建议查阅最新文档
tools = [custom_calculator]
# 将工具绑定到模型
llm_with_tools = llm.bind_tools(tools)
# 运行代理
# agent.run("计算15的平方是多少?")
print(custom_calculator.name)
print(custom_calculator.description)
print(custom_calculator.args)
custom_calculator
用于执行数学计算
{'input_text': {'title': 'Input Text'}}

使用

ounter(lineounter(lineounter(lineounter(lineounter(line
response = llm_with_tools.invoke("计算15的平方是多少?")
print(response)
content='我来帮您计算15的平方。' additional_kwargs={'tool_calls': [{'id': 'call_00_E5TmqCLMaLUI5y0gRViLzgPq', 'function': {'arguments': '{"input_text": "15^2"}', 'name': 'custom_calculator'}, 'type': 'function', 'index': 0}], 'refusal': None} response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 149, 'total_tokens': 175, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 149}, 'model_name': 'deepseek-chat', 'system_fingerprint': 'fp_ffc7281d48_prod0820_fp8_kvcache', 'id': '3ea6e024-6310-4135-9892-76f22aa5ff9f', 'service_tier': None, 'finish_reason': 'tool_calls', 'logprobs': None} id='run--60666dfe-aa3c-41c4-9f87-71c579123a9f-0' tool_calls=[{'name': 'custom_calculator', 'args': {'input_text': '15^2'}, 'id': 'call_00_E5TmqCLMaLUI5y0gRViLzgPq', 'type': 'tool_call'}] usage_metadata={'input_tokens': 149, 'output_tokens': 26, 'total_tokens': 175, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}}

解析

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
response.additional_kwargs
{'tool_calls': [{'id': 'call_00_E5TmqCLMaLUI5y0gRViLzgPq',
'function': {'arguments': '{"input_text": "15^2"}',
'name': 'custom_calculator'},
'type': 'function',
'index': 0}],
'refusal': None}

6. Callbacks 模块

核心功能

Callbacks 模块用于在 LangChain 执行过程中进行监控、日志记录和自定义处理。

主要用途
回调类型功能描述
日志记录记录执行过程和结果
监控实时监控链的执行状态
流式处理实现流式输出
自定义处理在特定节点执行自定义逻辑
代码实现
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
import asyncio
prompt = ChatPromptTemplate.from_messages([
("system", "仅依据给定{context}回答;若缺少依据请说“我不知道”。"),
("human", "{question}")  # 模板期望一个名为 'question' 的变量
])
# 使用LCEL链的astream_log方法监控执行过程
async def monitor_chain():
chain = prompt | llm | StrOutputParser()
# 在输入字典中同时提供 'context' 和 'question'
async for event in chain.astream_log({
"context": "这是一个模拟的上下文。",  # 为 context 提供模拟值
"question": "请写一首关于秋天的短诗。"
}, include_names=["ChatDeepSeek"]):
print(f"Event: {event}")
await monitor_chain()
Event: RunLogPatch({'op': 'replace',
'path': '',
'value': {'final_output': None,
'id': 'a045b1dc-d2c7-4f3a-8425-d9c689a2f9f3',
'logs': {},
'name': 'RunnableSequence',
'streamed_output': [],
'type': 'chain'}})
模型开始运行
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek',
'value': {'end_time': None,
'final_output': None,
'id': '10f79ad6-e9ab-46c7-bf7d-399bed07e613',
'metadata': {'ls_model_name': 'deepseek-chat',
'ls_model_type': 'chat',
'ls_provider': 'openai',
'ls_temperature': None},
'name': 'ChatDeepSeek',
'start_time': '2025-10-11T06:39:55.444+00:00',
'streamed_output': [],
'streamed_output_str': [],
'tags': ['seq:step:2'],
'type': 'llm'}})
Event: RunLogPatch({'op': 'add', 'path': '/logs/ChatDeepSeek/streamed_output_str/-', 'value': ''},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': ''},
{'op': 'replace', 'path': '/final_output', 'value': ''})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '依据'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='依据', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '依据'},
{'op': 'replace', 'path': '/final_output', 'value': '依据'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '给定的'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='给定的', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '给定的'},
{'op': 'replace', 'path': '/final_output', 'value': '依据给定的'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '模拟'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='模拟', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '模拟'},
{'op': 'replace', 'path': '/final_output', 'value': '依据给定的模拟'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '上下文'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='上下文', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '上下文'},
{'op': 'replace', 'path': '/final_output', 'value': '依据给定的模拟上下文'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': ','},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content=',', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': ','},
{'op': 'replace', 'path': '/final_output', 'value': '依据给定的模拟上下文,'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '我可以'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='我可以', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '我可以'},
{'op': 'replace', 'path': '/final_output', 'value': '依据给定的模拟上下文,我可以'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '创作'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='创作', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '创作'},
{'op': 'replace', 'path': '/final_output', 'value': '依据给定的模拟上下文,我可以创作'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '一首'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='一首', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '一首'},
{'op': 'replace', 'path': '/final_output', 'value': '依据给定的模拟上下文,我可以创作一首'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '关于'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='关于', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '关于'},
{'op': 'replace', 'path': '/final_output', 'value': '依据给定的模拟上下文,我可以创作一首关于'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '秋天的'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='秋天的', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '秋天的'},
{'op': 'replace', 'path': '/final_output', 'value': '依据给定的模拟上下文,我可以创作一首关于秋天的'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '短'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='短', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '短'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '诗'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='诗', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '诗'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': ':\n\n'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content=':\n\n', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': ':\n\n'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '秋风'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='秋风', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '秋风'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '轻'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='轻', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '轻'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '拂'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='拂', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '拂'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '叶'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='叶', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '叶'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '金黄'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='金黄', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '金黄'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': ','},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content=',', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': ','},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '  \n'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='  \n', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '  \n'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '稻'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='稻', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '稻'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '浪'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='浪', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '浪'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '翻'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='翻', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '翻'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '涌'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='涌', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '涌'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '送'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='送', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '送'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '晚'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='晚', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '晚'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '香'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='香', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '香'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '。'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='。', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '。'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香。'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '  \n'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='  \n', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '  \n'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香。  \n'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '寒'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='寒', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '寒'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香。  \n寒'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '蝉'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='蝉', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '蝉'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香。  \n寒蝉'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '渐'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='渐', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '渐'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香。  \n寒蝉渐'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '隐'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='隐', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '隐'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香。  \n寒蝉渐隐'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '霜'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='霜', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '霜'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香。  \n寒蝉渐隐霜'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '初'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='初', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '初'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香。  \n寒蝉渐隐霜初'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '降'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='降', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '降'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香。  \n寒蝉渐隐霜初降'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': ','},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content=',', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': ','},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香。  \n寒蝉渐隐霜初降,'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '  \n'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='  \n', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '  \n'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '独'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='独', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '独'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '坐'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='坐', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '坐'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '闲'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='闲', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '闲'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '庭'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='庭', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '庭'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '品'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='品', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '品'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '桂'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='桂', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '桂'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '芳'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='芳', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '芳'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '。'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='。', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '。'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '  \n\n'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='  \n\n', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '  \n\n'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '如果'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='如果', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '如果'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '实际'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='实际', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '实际'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '需求'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='需求', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '需求'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '不同'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='不同', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '不同'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': ','},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content=',', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': ','},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同,'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '请'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='请', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '请'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同,请'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '提供'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='提供', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '提供'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同,请提供'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '更多'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='更多', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '更多'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同,请提供更多'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '依据'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='依据', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '依据'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同,请提供更多依据'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': ','},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content=',', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': ','},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同,请提供更多依据,'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '我会'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='我会', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '我会'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同,请提供更多依据,我会'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '调整'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='调整', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '调整'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同,请提供更多依据,我会调整'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '内容'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='内容', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '内容'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同,请提供更多依据,我会调整内容'})
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output_str/-',
'value': '。'},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='。', additional_kwargs={}, response_metadata={}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613')})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': '。'},
{'op': 'replace',
'path': '/final_output',
'value': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同,请提供更多依据,我会调整内容。'})
Event: RunLogPatch({'op': 'add', 'path': '/logs/ChatDeepSeek/streamed_output_str/-', 'value': ''},
{'op': 'add',
'path': '/logs/ChatDeepSeek/streamed_output/-',
'value': AIMessageChunk(content='', additional_kwargs={}, response_metadata={'finish_reason': 'stop', 'model_name': 'deepseek-chat', 'system_fingerprint': 'fp_ffc7281d48_prod0820_fp8_kvcache'}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613', usage_metadata={'input_tokens': 30, 'output_tokens': 61, 'total_tokens': 91, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}})})
Event: RunLogPatch({'op': 'add', 'path': '/streamed_output/-', 'value': ''})
模型运行结束
Event: RunLogPatch({'op': 'add',
'path': '/logs/ChatDeepSeek/final_output',
'value': {'generations': [[{'generation_info': {'finish_reason': 'stop',
'model_name': 'deepseek-chat',
'system_fingerprint': 'fp_ffc7281d48_prod0820_fp8_kvcache'},
'message': AIMessageChunk(content='依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n\n秋风轻拂叶金黄,  \n稻浪翻涌送晚香。  \n寒蝉渐隐霜初降,  \n独坐闲庭品桂芳。  \n\n如果实际需求不同,请提供更多依据,我会调整内容。', additional_kwargs={}, response_metadata={'finish_reason': 'stop', 'model_name': 'deepseek-chat', 'system_fingerprint': 'fp_ffc7281d48_prod0820_fp8_kvcache'}, id='run--10f79ad6-e9ab-46c7-bf7d-399bed07e613', usage_metadata={'input_tokens': 30, 'output_tokens': 61, 'total_tokens': 91, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}}),
'text': '依据给定的模拟上下文,我可以创作一首关于秋天的短诗:\n'
'\n'
'秋风轻拂叶金黄,  \n'
'稻浪翻涌送晚香。  \n'
'寒蝉渐隐霜初降,  \n'
'独坐闲庭品桂芳。  \n'
'\n'
'如果实际需求不同,请提供更多依据,我会调整内容。',
'type': 'ChatGenerationChunk'}]],
'llm_output': None,
'run': None,
'type': 'LLMResult'}},
{'op': 'add',
'path': '/logs/ChatDeepSeek/end_time',
'value': '2025-10-11T06:40:01.041+00:00'})

根据您提供的输出内容,我们可以解读 Callbacks 执行路径和功能。以下是事件流和回调系统的执行逻辑。

1)事件流概述

回调系统通过 RunLogPatch 事件在每个操作阶段输出日志,记录模型执行的每个步骤。这些事件通过不同的路径展示了模型的状态和数据流。主要的操作包括:

  1. 模型开始运行:在模型执行时,回调首先记录初始状态,如模型 ID 和类型。
  • 事件内容:“模型开始运行” → 此时记录了关于模型启动的基本信息。
  1. 逐步输出内容的流式传输:随着模型执行,输出被逐步生成。每生成一部分内容,都会通过回调事件进行更新。
  • 示例:模型逐步生成文本并逐步流式传输,输出如“依据”,“给定的”,“模拟”,“上下文”等。每个输出片段都会记录到日志中,并传递到最终的 final_output 字段。
  1. 输出的拼接:随着每一段内容的生成,模型将逐步拼接最终的文本输出。例如:
  • 第一段:依据
  • 第二段:依据给定的
  • 第三段:依据给定的模拟
  • … 逐步生成完整的诗句。
  1. 最终输出的生成:所有的生成内容最终合并成一个完整的输出,表示完整的生成文本内容。这里,最终输出是一个包含秋天主题短诗的生成结果。
  2. 模型结束:当模型运行完成时,最后的回调记录 final_output 的值并标记模型运行的结束时间。

2)事件的具体解释

  • Event: RunLogPatch:这是回调事件的标志,每个事件都会记录模型执行的不同阶段。op 是操作类型(如 addreplace),path 是数据路径,value 是新值。
  • 模型生成过程中的流式输出
  • 每当模型输出一个新的文本片段时,回调系统会记录它,记录的路径包括 /logs/ChatDeepSeek/streamed_output/streamed_output,以及 streamed_output_str 和内容。
  • 每个输出片段通过 AIMessageChunk 形式保存,包含输出内容、模型元数据(如模型名称、ID、生成方式等)。
  • 最终输出的合并
  • 当所有部分生成完成后,最终的完整输出会被替换为 final_output,这时会记录完整生成的诗句。
  • 完成后,事件日志会更新 end_time,表示模型运行的结束。

3) 功能说明

  1. 流式传输(Streaming)
  • 该系统支持流式传输输出,每次生成一个片段时就传递一个事件。这使得回调能够实时获取模型的输出内容,并通过日志记录。
  1. 模型状态更新
  • 每个阶段的状态更新都通过回调记录,如模型的开始、输出的流式生成、最终输出的拼接等。可以根据日志实时跟踪模型的执行过程和结果。
  1. 日志的实时监控
  • 回调可以帮助开发者或系统管理员实时监控模型的执行情况。每个输出片段都通过回调记录,可以在日志中查看模型是否按预期生成文本。

4)小结

Callbacks 模块通过回调事件在每个阶段输出详细的执行信息。通过事件流,我们可以:

  • 实时查看模型的生成进程;
  • 跟踪每个生成阶段;
  • 获取最终的模型输出;
  • 监控模型的运行时间和其他元数据。

想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年 AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享

👇👇扫码免费领取全部内容👇👇

一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势

想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI

1. 100+本大模型方向电子书

在这里插入图片描述

2. 26 份行业研究报告:覆盖多领域实践与趋势

报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:

  • 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
  • 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
  • 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
  • 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。

3. 600+套技术大会 PPT:听行业大咖讲实战

PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:

在这里插入图片描述

  • 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
  • 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
  • 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
  • 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。

二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走

想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!

1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位

面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析

2. 102 道 AI 大模型真题:直击大模型核心考点

针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:

3. 97 道 LLMs 真题:聚焦大型语言模型高频问题

专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:


三、路线必明: AI 大模型学习路线图,1 张图理清核心内容

刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!

在这里插入图片描述

路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

img

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

img

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

img

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

img

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

img

L5阶段:专题集丨特训篇 【录播课】

img
四、资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值