引言
在现代应用中,流式传输事件可以显著提升用户体验和系统效率。当你在使用LangChain工具与聊天模型、信息检索器或其他可运行组件互动时,了解如何访问内部事件或配置它们是非常重要的。本指南将引导你如何正确传递参数以使用 astream_events() 方法来实现这一目标。
主要内容
1. 了解流事件基础
LangChain提供了一种强大的机制来生成和流式传输事件。然而,如果你在Python ≤ 3.10中运行异步代码,LangChain不能自动将配置(包括astream_events()所需的回调)传播给子运行对象。这通常是无法从自定义可运行组件或工具中看到事件的原因。
2. 配置传播和兼容性
如果你运行的是Python ≥ 3.11,RunnableConfig 会自动传播到子运行对象中。然而,为了确保代码在旧版本Python中运行良好,手动传播 RunnableConfig 依然是个好主意。
3. 手动传播配置
如果你有一个自定义工具,它调用一个链条来通过提示一个聊天模型返回仅10个字,并反转输出,下面将演示如何手动传递 RunnableConfig。
示例工具定义:
from langchain_core.runnables import RunnableConfig
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool
@tool
async def special_summarization_tool_with_config(
long_text: str, config: RunnableConfig
) -> str:
"""A tool that summarizes input text using advanced techniques."""
prompt = ChatPromptTemplate.from_template(
"You are an expert writer. Summarize the following text in 10 words or less:\n\n{long_text}"
)
def reverse(x: str):
return x[::-1]
chain = prompt | model | StrOutputParser() | reverse
# 将配置对象作为参数传递给任何执行的运行对象
summary = await chain.ainvoke({"long_text": long_text}, config=config)
return summary
代码示例
一个完整的示例展示如何使用 astream_events() 方法:
stream = special_summarization_tool_with_config.astream_events(
{"long_text": LONG_TEXT}, version="v2"
)
async for event in stream:
if event["event"] == "on_chat_model_end":
print(event)
此代码尝试捕获聊天模型的结束事件,但在Python ≤ 3.10中将不会触发,除非你手动传播配置。
常见问题和解决方案
-
问题: 在Python ≤ 3.10中没有事件触发。 解决方案: 手动传播
RunnableConfig到子运行对象。 -
问题: 如何确保在所有Python版本中都能顺利运行? 解决方案: 即便在Python ≥ 3.11中也手动传递配置,以确保兼容性。
总结和进一步学习资源
通过本指南,你了解了如何在LangChain工具中实现事件流。在此基础上,你可以探索更多使用工具的指南:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---