Skip to content

Commit c4797e1

Browse files
committed
chore: release v3.3.18
1 parent e1f4978 commit c4797e1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2060
-872
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,8 +1098,8 @@ packages/
10981098

10991099
## 🛡️ 写入策略说明
11001100

1101-
- **Claude/Gemini/OpenCode**:尽量保留用户已有字段,仅覆盖认证相关必要字段
1102-
- **Codex**:写入 `config.toml``auth.json`(两者都会先备份为 `.bak`,再覆盖写入;`auth.json` 仅保留 `OPENAI_API_KEY``config.toml` 仅保留一个 `model_providers`
1101+
- **常规管理命令**(如 `ccman cx` / `ccman cc` / `ccman gm` / `ccman oc` / `ccman openclaw`):默认采用增量更新,尽量保留用户已有字段
1102+
- **快捷配置命令**(如 `ccman gmn` / `ccman gmn1` / `ccman gmncode`):对所涉及工具执行覆盖式写入,确保快速落下已知可用配置
11031103
- **Gemini** 会写入 `settings.json``.env`
11041104
- **OpenCode** 会写入 `~/.config/opencode/opencode.json`
11051105

Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,271 @@
1+
# OpenClaw 图像输入与 GPT 模板调整分析
2+
3+
## 1. 背景
4+
5+
本次调整有两个目标:
6+
7+
1.`packages/core/templates` 中涉及 GPT 的模板模型统一收敛到:
8+
- `gpt-5.4`
9+
- `gpt-5.3-codex`
10+
2. 修正 OpenClaw 当前模板中“图片输入无法稳定走主模型识别”的问题
11+
12+
用户期望是:
13+
14+
- **优先使用 `gpt-5.4`**
15+
- **如果配置允许多个模型,则保留多个模型**
16+
- 但不能为了“支持更多输入类型”而随意在配置里乱加能力声明
17+
18+
---
19+
20+
## 2. 代码现状与问题定位
21+
22+
本次核对的关键文件:
23+
24+
- `packages/core/templates/openclaw/openclaw.base.template.json`
25+
- `packages/core/templates/openclaw/models.base.template.json`
26+
- `packages/core/templates/opencode/opencode.json`
27+
- `packages/core/src/writers/openclaw.ts`
28+
- `packages/core/src/writers/opencode.ts`
29+
30+
### 2.1 旧问题一:OpenClaw 模型能力被声明成 text-only
31+
32+
在原始模板中,OpenClaw 的两个模型都被写成了:
33+
34+
- `input: ["text"]`
35+
36+
这会带来一个直接后果:
37+
38+
- 即使底层模型本身支持图片,OpenClaw 也可能先把它视为“当前主模型不接受图片”
39+
- 之后再转向 `imageModel``tools.media` 对应的外部识别路径
40+
41+
### 2.2 旧问题二:没有显式声明 `imageModel`
42+
43+
原始模板只设置了:
44+
45+
- `agents.defaults.model.primary`
46+
47+
但没有显式设置:
48+
49+
- `agents.defaults.imageModel`
50+
51+
这意味着:
52+
53+
- 当主模型被用户切换成一个文本型模型时,图片请求缺少明确的“原生图像模型兜底”
54+
- OpenClaw 更容易走工具链或外部媒体理解链路
55+
56+
### 2.3 旧问题三:第二模型还是旧的 `gpt-5.2-codex`
57+
58+
模板中第二模型仍是:
59+
60+
- `gpt-5.2-codex`
61+
62+
这和本次要求的统一目标不一致,应更新为:
63+
64+
- `gpt-5.3-codex`
65+
66+
---
67+
68+
## 3. OpenClaw 官方文档结论
69+
70+
本次判断主要参考 OpenClaw 官方文档:
71+
72+
- AI Providers:<https://docs.openclaw.ai/configuration/ai-providers>
73+
- Configuration(自定义 provider / 模型列表示例):<https://docs.openclaw.ai/configuration/configuration>
74+
- Tools(`media` 工具说明):<https://docs.openclaw.ai/configuration/tools>
75+
76+
结合文档,可以确认三点:
77+
78+
### 3.1 `input` 是“模型能力声明”,不是任意开关
79+
80+
官方配置示例中的自定义模型条目,会为每个模型单独声明输入能力,例如:
81+
82+
- `["text"]`
83+
- `["text", "image"]`
84+
85+
这说明:
86+
87+
- `input` 的语义是“告诉 OpenClaw 这个模型原生支持哪些输入模态”
88+
- 不是“我希望它支持什么,就写什么”
89+
90+
因此,如果某个模型并没有官方确认支持某种输入,就不应该随意加进 `input`
91+
92+
### 3.2 `imageModel` 是图片请求的专用兜底模型
93+
94+
官方文档说明:
95+
96+
- 当当前主模型不支持图片时,OpenClaw 会使用 `imageModel`
97+
98+
这意味着更稳妥的做法是:
99+
100+
- 把真正可处理图片的模型放到 `imageModel`
101+
- 而不是把所有候选模型都声明成 image-capable
102+
103+
### 3.3 `tools.media` 是另一条链路
104+
105+
官方工具文档说明 `media` 工具可负责媒体理解,并且支持自动检测外部能力来源。
106+
107+
因此当前项目里出现:
108+
109+
- 用户发图后没有走主模型原生视觉
110+
- 反而去调工具或外部识别链路
111+
112+
并不是偶然,而是配置层会直接影响 OpenClaw 的路由决策。
113+
114+
---
115+
116+
## 4. 本次采用的安全配置策略
117+
118+
### 4.1 最终策略
119+
120+
本次最终采用“两个模型都按官方能力声明 image 输入”的方案:
121+
122+
- `gpt-5.4`
123+
- 作为主模型
124+
- 声明 `input: ["text", "image"]`
125+
- 同时作为 `imageModel`
126+
- `gpt-5.3-codex`
127+
- 作为第二模型保留
128+
- 声明 `input: ["text", "image"]`
129+
130+
### 4.2 为什么这样更稳
131+
132+
因为这里要同时满足两件事:
133+
134+
1. 让 OpenClaw 在默认情况下明确知道:`gpt-5.4` 可以原生收图
135+
2. 让模板能力声明与官方模型能力保持一致
136+
137+
也就是说:
138+
139+
- `gpt-5.4` 负责默认主模型与图片兜底
140+
- `gpt-5.3-codex` 也具备原生图片输入声明
141+
- 同时仍通过 `imageModel` 保持优先路由到 `gpt-5.4`
142+
143+
---
144+
145+
## 5. “如果还要解析其他类型怎么办?”
146+
147+
结论是:
148+
149+
- **需要额外加**
150+
- **但不能现在随便加**
151+
152+
必须同时满足两个前提:
153+
154+
1. OpenClaw 官方配置明确支持该输入类型
155+
2. 实际接入的底层模型 / API 也真的支持该输入类型
156+
157+
否则会出现两类风险:
158+
159+
- 配置写了,但 OpenClaw 根本不识别这个能力值
160+
- OpenClaw 识别了,但底层模型不支持,最后仍会失败或退回工具链
161+
162+
### 5.1 当前不建议直接添加的原因
163+
164+
截至本次核对,我能从 OpenClaw 官方配置文档中稳定确认的自定义 provider 输入能力,核心是:
165+
166+
- `text`
167+
- `image`
168+
169+
**没有找到足够明确的官方文档**说明可以直接在这个字段里安全地扩展为例如:
170+
171+
- `audio`
172+
- `pdf`
173+
- `file`
174+
- `video`
175+
176+
因此当前不建议凭猜测把这些值写进模板。
177+
178+
### 5.2 正确做法
179+
180+
如果后续你希望支持更多模态,建议按下面顺序推进:
181+
182+
1. 先核 OpenClaw 官方文档或源码,确认 `input` 支持的合法枚举
183+
2. 再核实际模型文档,确认该模型是否支持该模态
184+
3. 只有两边都成立,才把能力写进模板
185+
186+
在这之前,其他类型更适合走:
187+
188+
- OpenClaw 的工具链能力
189+
- 或上游预处理 / 转换链路
190+
191+
---
192+
193+
## 6. 本次实际落地改动
194+
195+
### 6.1 OpenClaw 模板
196+
197+
已调整:
198+
199+
- `packages/core/templates/openclaw/openclaw.base.template.json`
200+
- `packages/core/templates/openclaw/models.base.template.json`
201+
202+
改动内容:
203+
204+
- 保留 `gpt-5.4` 为首选模型
205+
- 将第二模型从 `gpt-5.2-codex` 改为 `gpt-5.3-codex`
206+
-`gpt-5.4``input` 改为 `["text", "image"]`
207+
-`gpt-5.3-codex``input` 也改为 `["text", "image"]`
208+
- 新增 `agents.defaults.imageModel = "{{providerName}}/gpt-5.4"`
209+
210+
### 6.2 OpenClaw 内置回退模板
211+
212+
已同步调整:
213+
214+
- `packages/core/src/writers/openclaw.ts`
215+
216+
避免模板文件缺失时,运行时行为和磁盘模板不一致。
217+
218+
### 6.3 OpenCode 模板与默认模型集合
219+
220+
已同步调整:
221+
222+
- `packages/core/templates/opencode/opencode.json`
223+
- `packages/core/src/writers/opencode.ts`
224+
225+
改动内容:
226+
227+
- 第二模型从 `gpt-5.2-codex` 改为 `gpt-5.3-codex`
228+
- 默认模型集合保留两个模型
229+
- 合并写回时也会自动补齐第二模型,避免用户已有配置里丢失它
230+
231+
---
232+
233+
## 7. 验证结果
234+
235+
本次验证全部在隔离测试目录进行,没有触碰本地真实配置。
236+
237+
已执行:
238+
239+
- `pnpm --filter=@ccman/core build`
240+
- `pnpm --filter=@ccman/core exec vitest run src/writers/openclaw.test.ts src/tool-manager.openclaw.test.ts src/writers/opencode.test.ts`
241+
242+
结果:
243+
244+
- 3 个测试文件通过
245+
- 8 个测试用例通过
246+
247+
覆盖点包括:
248+
249+
- OpenClaw 默认写入
250+
- OpenClaw merge 行为
251+
- OpenClaw manager 写入
252+
- OpenCode 默认写入
253+
- OpenCode merge / overwrite 行为
254+
255+
---
256+
257+
## 8. 最终建议
258+
259+
当前最合理的结论是:
260+
261+
- **不要把 OpenClaw 的 `input` 当成任意扩展能力开关**
262+
- **先把图片这条链路配置正确**
263+
- **优先由 `gpt-5.4` 承担图片输入**
264+
- **`imageModel` 显式兜底**
265+
- **同时让 `gpt-5.3-codex` 的能力声明与官方模型页保持一致**
266+
267+
如果你下一步要继续做“音频 / PDF / 其他附件”的原生输入支持,我建议单独开一个分析项,先核:
268+
269+
1. OpenClaw 官方允许的 `input` 枚举
270+
2. 目标模型的真实模态支持矩阵
271+
3. 是否应该走 `tools.media`,还是走模型原生多模态

docs/analysis/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
4. [备份策略最终收敛](./备份策略最终收敛.md)
1111
5. [命令级备份清单](./命令级备份清单.md)
1212
6. [Changesets 自动化迁移分析](./changesets-自动化迁移分析.md)
13+
7. [快捷配置与常规管理写入策略核对报告](./快捷配置与常规管理写入策略核对报告.md)
14+
8. [OpenClaw 图像输入与 GPT 模板调整分析](./OpenClaw-图像输入与GPT模板调整分析.md)
1315

1416
## 建议阅读顺序
1517

0 commit comments

Comments
 (0)