背景
Memo 当前 provider 层基于 OpenAI SDK 调用 chat.completions.create,但参数能力与 SDK 最新能力存在明显缺口。
本 issue 目标:基于最新 OpenAI SDK 能力做一次 provider 能力补齐设计,并给出可执行升级路线。
调研结论(2026-05)
1) SDK 版本差异
Memo 当前依赖 :openai@^6.10.0(package.json)
npm 最新版本 :6.38.0(npm view openai version)
2) 官方推荐方向
OpenAI Node README 明确:Responses API 是主 API ,Chat Completions 仍长期支持。
3) Memo 当前 provider 实现现状
仅走 chat.completions.create(...):packages/core/src/runtime/defaults.ts
请求构建仅覆盖:model/messages/tools/tool_choice/parallel_tool_calls
buildChatCompletionRequest(...):packages/core/src/runtime/model_profile.ts
wire API 被固定为:chat_completions
ModelWireApi = 'chat_completions':packages/core/src/runtime/model_profile.ts
model_profiles 当前仅支持:
supports_parallel_tool_calls
supports_reasoning_content
context_window
定义见:packages/core/src/config/config.ts
TUI 当前无入口编辑 reasoning_effort / response_format / verbosity / stream 等 provider 参数。
能力对比矩阵(最新 SDK vs 当前 Memo)
能力
OpenAI SDK(6.38)
Memo 当前
差距
Chat 基础调用
✅
✅
无
reasoning_effort(chat)
✅
❌
未透传
verbosity(chat)
✅
❌
未透传
response_format(json_schema/json_object/text)
✅
❌
未透传
prompt_cache_key/retention
✅
❌
未透传
service_tier / safety_identifier
✅
❌
未透传
prediction
✅
❌
未透传
modalities/audio
✅
❌
未透传
stream + stream_options
✅
⚠️ (仅非流)
未实现流式通道
Responses API (client.responses.create)
✅(主路径)
❌
完全未接入
Responses reasoning 配置(reasoning.effort/summary)
✅
❌
完全未接入
Responses 内建工具(web/file/code_interpreter/mcp 等)
✅
❌
完全未接入
Responses 会话状态(previous_response_id / truncation)
✅
❌
完全未接入
Provider 特有扩展字段(如 deepseek thinking)
运行时可传(TS 非强约束场景)
❌(无扩展参数机制)
缺少扩展透传层
升级方案(建议分三阶段)
Phase 1(低风险补齐:Chat 参数透传)
目标:在不切换 wire API 的前提下,快速释放新参数能力。
扩展 ModelProfileOverride(config.toml 可配置)
新增可选字段(建议首批):
reasoning_effort
verbosity
response_format(支持 text/json_object/json_schema)
prompt_cache_key / prompt_cache_retention
service_tier
safety_identifier
stream(后续 Phase 2 真正生效)
扩展 buildChatCompletionRequest(...) 参数合成逻辑
加入 provider 级“额外请求字段”机制(例如 extra_request_fields)
用于兼容 OpenAI-compatible 服务的非标准字段(如 thinking)
增补单测:配置解析 + 请求构建 + 回归
Phase 2(流式能力打通)
目标:让 onChunk 真正生效。
在 core callLLM 中支持 stream: true 分支
解析 chat streaming 事件增量并回调 _onChunk
处理 tool call streaming 聚合(保持现有工具调用行为一致)
TUI 增加 streaming 开关(会话级/配置级)
Phase 3(引入 Responses API 双栈)
目标:升级架构到“可选 wire API”,逐步向 Responses 迁移。
ModelWireApi 扩展为:'chat_completions' | 'responses'
新增 buildResponsesRequest(...) + responses -> LLMResponse 归一化层
将 tool definitions 映射到 Responses tools
支持 Responses 关键能力:
reasoning 对象
previous_response_id
truncation
text 配置(结构化输出)
在 provider/model profile 层提供迁移开关(按 provider:model 灰度)
可升级项拆分(可直接建子任务)
core/config: 扩展 ModelProfileOverride schema 与序列化/反序列化
core/runtime: 扩展 chat 请求构建字段
core/runtime: 增加 provider extra_request_fields 合并策略(白名单 + 透传日志)
core/runtime: streaming 支持与事件归一化
core/runtime: Responses API adapter(请求构建 + 响应归一化)
tui: /effort、/format(或统一 /model-params)入口(可关联 feat(tui): 增加 /effort 命令用于推理强度与上下文策略切换 #211 )
docs: 配置文档新增 provider 参数与 wire API 说明
tests: defaults/model_profile/config/tui 命令端到端覆盖
兼容性与风险
兼容性 :默认保持 chat_completions 不变,新增能力均为可选配置,避免破坏现有用户。
风险点 :
不同 OpenAI-compatible 厂商对新字段支持不一致(需 provider/model 级开关)
streaming + tool call 的增量拼装复杂,需重点测试
Responses API 的 tool item 语义与当前 LLMResponse 存在映射差异
验收标准
背景
Memo 当前 provider 层基于 OpenAI SDK 调用
chat.completions.create,但参数能力与 SDK 最新能力存在明显缺口。本 issue 目标:基于最新 OpenAI SDK 能力做一次 provider 能力补齐设计,并给出可执行升级路线。
调研结论(2026-05)
1) SDK 版本差异
openai@^6.10.0(package.json)6.38.0(npm view openai version)2) 官方推荐方向
3) Memo 当前 provider 实现现状
chat.completions.create(...):packages/core/src/runtime/defaults.tsmodel/messages/tools/tool_choice/parallel_tool_callsbuildChatCompletionRequest(...):packages/core/src/runtime/model_profile.tschat_completionsModelWireApi = 'chat_completions':packages/core/src/runtime/model_profile.tsmodel_profiles当前仅支持:supports_parallel_tool_callssupports_reasoning_contentcontext_windowpackages/core/src/config/config.tsreasoning_effort / response_format / verbosity / stream等 provider 参数。能力对比矩阵(最新 SDK vs 当前 Memo)
reasoning_effort(chat)verbosity(chat)response_format(json_schema/json_object/text)prompt_cache_key/retentionservice_tier/safety_identifierpredictionmodalities/audiostream+stream_optionsclient.responses.create)reasoning.effort/summary)previous_response_id/truncation)thinking)升级方案(建议分三阶段)
Phase 1(低风险补齐:Chat 参数透传)
目标:在不切换 wire API 的前提下,快速释放新参数能力。
ModelProfileOverride(config.toml可配置)reasoning_effortverbosityresponse_format(支持text/json_object/json_schema)prompt_cache_key/prompt_cache_retentionservice_tiersafety_identifierstream(后续 Phase 2 真正生效)buildChatCompletionRequest(...)参数合成逻辑extra_request_fields)thinking)Phase 2(流式能力打通)
目标:让
onChunk真正生效。callLLM中支持stream: true分支_onChunkPhase 3(引入 Responses API 双栈)
目标:升级架构到“可选 wire API”,逐步向 Responses 迁移。
ModelWireApi扩展为:'chat_completions' | 'responses'buildResponsesRequest(...)+responses -> LLMResponse归一化层toolsreasoning对象previous_response_idtruncationtext配置(结构化输出)可升级项拆分(可直接建子任务)
core/config: 扩展ModelProfileOverrideschema 与序列化/反序列化core/runtime: 扩展 chat 请求构建字段core/runtime: 增加 providerextra_request_fields合并策略(白名单 + 透传日志)core/runtime: streaming 支持与事件归一化core/runtime: Responses API adapter(请求构建 + 响应归一化)tui:/effort、/format(或统一/model-params)入口(可关联 feat(tui): 增加 /effort 命令用于推理强度与上下文策略切换 #211)docs: 配置文档新增 provider 参数与 wire API 说明tests: defaults/model_profile/config/tui 命令端到端覆盖兼容性与风险
chat_completions不变,新增能力均为可选配置,避免破坏现有用户。LLMResponse存在映射差异验收标准
reasoning_effort/verbosity/response_formatchat_completions或responses