SuperAPI AI 工具集

ai-python-ui-adapter

前端与建站

查看项目

更新于 10-16 04:06

技能介绍

用途

ai-python-ui-adapter 用于在 AI SDK for Python 的流与 AI SDK UI 的 useChat 客户端之间建立连接。当后端使用 Python 生成 AI 流式响应,而前端使用 AI SDK UI 的 useChat 进行聊天交互时,该适配器负责两端数据格式与事件的转换。

主要能力

根据资料,适配器处理以下内容:

  • UIMessage 解析
  • 消息 ID
  • 工具状态
  • 审批(approvals)
  • 子代理 MessageBundle 值
  • AI SDK UI 流事件

使用方式

前端

使用 useChat 并配置 transport 与自动发送条件:

const chat = useChat({
  transport: new DefaultChatTransport({ api: "/api/chat" }),
  sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithApprovalResponses,
});

使用 chat.sendMessage(...) 发送用户输入。在审批按钮中使用 chat.addToolApprovalResponse(...)。

后端请求

定义请求模型并转换消息与审批:

class ChatRequest(pydantic.BaseModel):
    messages: list[ai.ui.ai_sdk.UIMessage]

messages, approvals = ai.ui.ai_sdk.to_messages(request.messages)
ai.ui.ai_sdk.apply_approvals(approvals)

后端流

构造流式响应体,遍历事件并在钩子状态为 pending 时延迟钩子,然后通过 to_sse 转换为 SSE 块:

async def body():
    async with agent.run(model, messages) as stream:
        async def events():
            async for event in stream:
                if (
                    isinstance(event, ai.events.HookEvent)
                    and event.hook.status == "pending"
                ):
                    ai.defer_hook(event.hook)
                yield event

        async for chunk in ai.ui.ai_sdk.to_sse(events()):
            yield chunk

return StreamingResponse(
    body(),
    headers=ai.ui.ai_sdk.UI_MESSAGE_STREAM_HEADERS,
)

保存的 UI 历史

如需保存的 UI 历史,使用:

ui_messages = ai.ui.ai_sdk.to_ui_messages(messages)

适用场景

适用于 Python 后端 AI 流需要被 AI SDK UI 的 useChat 客户端消费的场景,尤其是涉及工具调用状态、审批交互、子代理消息以及需要保存 UI 历史的情况。

限制

适配器只负责上述数据与事件转换。开发者需要自行处理:

  • HTTP 路由
  • 认证
  • 存储
  • 会话查找
  • 前端渲染
  • 何时延迟钩子

关于该技能的收费、价格、平台支持范围、性能效果等,资料中暂未提供。