-
Notifications
You must be signed in to change notification settings - Fork 1
服务端 AI Chat API 协议升级:对齐 Vercel/ai Data Stream Protocol 以支持 objectui 前端 #1029
Copy link
Copy link
Closed
Description
背景
objectui 前端已全量采用 Vercel AI SDK(@ai-sdk/react/useChat),其消息/流式协议、ToolCall协议等与 Vercel 官方标准强绑定,要求服务端完全兼容 Vercel/ai 的API格式与响应协议。
目前 service-ai 虽已具备丰富API能力(chat、stream、tools、agents、conversations等),但协议细节与 Vercel 官方(Data Stream Protocol)有显著差异,导致 objectui 前端无法直接对接。
调整目标
- 服务端
/api/v1/ai/chat能作为 objectui/console 的唯一 AI API,兼容 Vercel AI Data Stream 协议,可被 @ai-sdk/react/useChat 直接消费,无需自定义适配。 - 支持双模式:JSON 响应(非流式)、Data Stream 响应(流式,默认)
- 请求体与字段自动兼容 Vercel 用例(平铺、systemPrompt、stream 字段等)
- 向下兼容 service-ai SDK 客户端/CLI/旧前端等原有用法
- 不破坏现有 tool calling/多轮会话/agent/自定义工具能力
技术方案
- 新增 Vercel LLM Adapter:实现
VercelLLMAdapter,直接用 Vercel AI SDK(streamText/generateText)作为生产 adapter。MemoryAdapter 作为本地测试。 - 路由层协议转换:在
/api/v1/ai/chathandler 内部,自动支持 Vercel useChat 的平铺格式,通过systemPrompt字段 prepend system message,并按stream字段选择 Data Stream 响应。 - Vercel Data Stream 输出:新增
vercel-stream-encoder.ts,将 service-ai 的AsyncIterable<AIStreamEvent>转为 Vercel Data Stream 帧格式(0:文本, 9:tool, e:结束等)。作为 HTTP Server 层的输出路径。 - 保持核心服务协议不变:所有变更限定在 adapter/路由/HTTP 响应层,
AIService与contracts类型完全兼容历史实现。 - 补充测试:adapter、stream encoder、路由平铺兼容性单测,保障所有原有路由和新协议全量覆盖。
影响范围
/api/v1/ai/chat可兼容 objectui useChat 及所有 Vercel AI 客户端- 保持原 /chat/stream 及非流式 JSON 响应接口不变,向下兼容 CLI/SDK 用户
- agent/tool 多轮调用流程统一升级,无破坏性调整
步骤清单
- 新增 VercelLLMAdapter
- 新增 vercel-stream-encoder 工具
- 改造 ai-routes 支持平铺 body + systemPrompt + stream Data Stream 响应
- HTTP Server 层根据 RouteResponse.vercelDataStream 标志输出 Vercel 帧格式 SSE
- 所有功能补充单元测试/集成测试
- Update CHANGELOG.md, 补充 migration 指南
预期效果
- Console Floating Chatbot/AI Chat 直接对接新版 /api/v1/ai/chat,无中间协议桥接/代码冗余
- Vercel AI SDK 新特性上线后即可低成本升级
- 服务端协议和核心能力抽象更加清晰,便于未来多模式(非 Vercel 客户端)扩展
Reactions are currently unavailable