用途
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 路由
- 认证
- 存储
- 会话查找
- 前端渲染
- 何时延迟钩子
关于该技能的收费、价格、平台支持范围、性能效果等,资料中暂未提供。