迁移到 Astream Events v2:提升效率与一致性
随着0.2.x版本的发布,我们推出了astream_events API的v2版本。此次更新带来了更高的效率和一致性的事件输出。本文将详细介绍v1和v2版本之间的变化,并提供实用的迁移指导。
主要内容
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": null, "message": AIMessageChunk(content="hello world!", id=AnyStr()), "text": "hello world!", "type": "ChatGenerationChunk", } ] ], "llm_output": null, } }
在v2中,输出将始终为简化的形式:
"data": {"output": AIMessageChunk(content="hello world!", id='some id')}
2. on_retriever_end
输出标准化
on_retriever_end
的输出现在将始终返回一个Documents列表:
{
"data": {
"output": [
Document(...),
Document(...),
...
]
}
}
3. 移除 on_retriever_stream
和 on_tool_stream
事件
on_retriever_stream
和 on_tool_stream
事件已被移除,完整的信息可通过各自的 on_retriever_end
和 on_tool_end
事件获得。
4. 可运行项名称传播
可运行项的名称已更新以提高一致性:
在v1中,事件名称为 RunnableConfigurableFields
。
在v2中,事件名称为 GenericFakeChatModel
。
5. RunnableRetry
行为优化
使用 RunnableRetry
在LCEL链中生成流式数据时,在v1中会生成一个错误的 on_chain_end
事件。此行为在v2中已被移除。
代码示例
下面是一个使用更新后的API的示例:
import requests
# 假设 {AI_URL} 是 API 的端点
api_url = "{AI_URL}/astream_events/v2/on_chat_model_end"
headers = {'Content-Type': 'application/json'}
# 使用API代理服务提高访问稳定性
response = requests.get(api_url, headers=headers)
data = response.json()
print("Chat Model Output:", data['data']['output'])
常见问题和解决方案
-
为何移除了一些事件?
- 这些事件是实现的遗留产物,通过移除来简化API结构,并避免冗余。
-
如何处理网络访问限制?
- 由于某些地区的网络限制,建议使用API代理服务来提高访问稳定性。
总结与进一步学习资源
在迁移到v2版本的过程中,请确保更新事件过滤器和相关代码逻辑,以使用更新后的事件名称和结构。如果你想了解更多关于astream_events API的使用细节,可以查阅以下资源:
- 官方API文档:API Documentation
- 更多迁移指南:Migration Guides
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—