Skip to content

服务端 AI Chat API 协议升级:对齐 Vercel/ai Data Stream Protocol 以支持 objectui 前端 #1029

@hotlong

Description

@hotlong

背景

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/自定义工具能力

技术方案

  1. 新增 Vercel LLM Adapter:实现 VercelLLMAdapter,直接用 Vercel AI SDK(streamText/generateText)作为生产 adapter。MemoryAdapter 作为本地测试。
  2. 路由层协议转换:在 /api/v1/ai/chat handler 内部,自动支持 Vercel useChat 的平铺格式,通过 systemPrompt 字段 prepend system message,并按 stream 字段选择 Data Stream 响应。
  3. Vercel Data Stream 输出:新增 vercel-stream-encoder.ts,将 service-ai 的 AsyncIterable<AIStreamEvent> 转为 Vercel Data Stream 帧格式(0:文本, 9:tool, e:结束等)。作为 HTTP Server 层的输出路径。
  4. 保持核心服务协议不变:所有变更限定在 adapter/路由/HTTP 响应层,AIServicecontracts 类型完全兼容历史实现。
  5. 补充测试: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 客户端)扩展

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions