每日精选 OpenClaw 社区最重要的功能更新和 Bug 修复,带你深入理解开源 AI Agent 框架的演进。
📊 今日概览
| 指标 | 数值 |
|---|---|
| Merged PRs | 37 |
| 主要贡献者 | gumadeiras, ngutman, vincentkoc, BruceMacD, ImLukeF |
| 活跃模块 | memory, agents, telegram, macos, gateway |
🚀 Top 3 Features
1. Memory 多模态索引:图片和音频也能被记住 [#43460]
PR: Memory: add multimodal image and audio indexing
作者: @gumadeiras | 规模: XL (+1295/-178)
背景:OpenClaw 的 memory 系统此前只能索引文本内容。用户通过 memorySearch.extraPaths 配置的图片和音频文件会被忽略,无法参与语义检索。
新功能:
- 支持对
extraPaths中的图片和音频文件进行多模态嵌入索引 - 目前仅支持 Gemini
gemini-embedding-2-preview模型 - 采用
fallback: "none"策略,失败时不回退到纯文本 - 语料范围变更时自动强制重建索引
配置示例:
memorySearch:
provider: gemini
model: gemini-embedding-2-preview
extraPaths:
- ~/Documents/screenshots/**/*.png
- ~/Documents/voice-memos/**/*.m4a
技术细节:
// 多模态 part 构建器
function buildInlineDataPart(mimeType: string, base64Data: string) {
return { inlineData: { mimeType, data: base64Data } };
}
function buildFileDataPart(fileUri: string, mimeType: string) {
return { fileData: { fileUri, mimeType } };
}
影响:Agent 可以「记住」截图、录音等非文本内容,实现真正的多模态记忆检索。
2. Gemini Embedding 2 Preview:3072 维度 + 8K Token [#42501]
PR: feat(memory): add gemini-embedding-2-preview support
作者: @BillChirico | 规模: L (+838/-37)
背景:gemini-embedding-001 仅支持 768 维度和 2K token 输入,对长文档和高精度检索场景不够用。
新功能对比:
| 特性 | gemini-embedding-001 | gemini-embedding-2-preview |
|---|---|---|
| 维度 | 768 | 3072(可配置 768/1536/3072) |
| Token 限制 | 2048 | 8192 |
| 多模态 | ❌ | ✅ 文本/图片/视频/音频/PDF |
| Task Type | ❌ | ✅ RETRIEVAL_QUERY, RETRIEVAL_DOCUMENT 等 |
配置示例:
memorySearch:
provider: gemini
model: gemini-embedding-2-preview
outputDimensionality: 3072 # 可选: 768, 1536, 3072
taskType: RETRIEVAL_DOCUMENT # 写入时优化
代码实现:
// 维度解析
function resolveGeminiOutputDimensionality(
model: string,
opts?: { outputDimensionality?: number }
): number | undefined {
if (!isGeminiEmbedding2Model(model)) return undefined;
return opts?.outputDimensionality ?? 3072; // 默认最大维度
}
影响:显著提升语义检索精度,长文档不再需要分块。
3. Ollama 一键 Onboarding:Cloud + Local 双模式 [#41529]
PR: Onboard: add Ollama auth flow and improve model defaults
作者: @BruceMacD | 规模: XL (+1176/-61)
背景:Ollama 用户需要手动配置 config.yaml,没有 onboarding 向导支持。Ollama Cloud 的认证流程更是无从下手。
新功能:
openclaw onboard新增「Ollama」选项- 支持 Cloud + Local 和 Local-only 两种模式
- Cloud 模式通过浏览器完成 OAuth 认证
- 智能模型建议:Cloud 模式推荐
kimi-k2.5:cloud、glm-5:cloud等 - 自动拉取本地缺失的模型
交互流程:
◆ Model/auth provider
│ ● Ollama (Cloud and local open models)
│
◆ Ollama base URL
│ http://127.0.0.1:11434
│
◆ Ollama mode
│ ● Cloud + Local (Ollama cloud models + local models)
│ ○ Local
◇ Ollama Cloud ──────────────────────────────────╮
│ Sign in to Ollama Cloud: │
│ https://ollama.com/connect?name=...&key=... │
╰──────────────────────────────────────────────────╯
◆ Default model
│ ● ollama/kimi-k2.5:cloud
│ ○ ollama/glm-5:cloud
│ ○ ollama/qwen3.5:35b
非交互模式:
openclaw onboard --auth-choice ollama
影响:Ollama 用户可一键完成配置,无需了解配置文件结构。
🐛 重要 Bugfix
Telegram 慢模型重复消息终极修复 [#41932]
PR: fix(telegram): prevent duplicate messages with slow LLM providers
作者: @hougangdev | 规模: M (+299/-20)
问题:使用 MiniMax 等慢模型(5s 首 token,20 tok/s)时,Telegram 仍然出现重复消息。#41662 修复后遗留两个路径:
editMessageTelegram遇到 HTTP 5xx 不重试 → 502 直接触发 fallback- Draft stream
sendMessage超时丢失 messageId → 再次发送新消息
修复方案:
// 1. 5xx 重试(编辑是幂等的)
if (isTelegramServerError(error)) { // 5xx
return retry();
}
// 2. 反转默认策略:不确定时保留预览
if (isAmbiguousError(error)) {
return retainPreview(); // 宁可不完整,不要重复
}
// 3. 追踪 sendMayHaveLanded
if (sendAttempted && responseWasLost) {
return retainPreview();
}
// 只有明确的 4xx 才 fallback
if (isTelegramClientRejection(error)) { // 4xx
return fallbackToSend();
}
Gateway 本地模式 SecretRef 不再泄露到 Remote [#42672]
PR: Gateway: fail closed unresolved local auth SecretRefs
作者: @joshavant | 规模: M (+197/-48)
问题:gateway.mode="local" 时,如果 gateway.auth.token 配置为 SecretRef 但无法解析,系统会静默回退到 gateway.remote.token,造成本地凭证泄露到远程。
修复:
// 本地模式现在强制验证本地 SecretRef
if (mode === "local") {
if (localSecretRefUnresolved && localSecretRefIsActive) {
throw new GatewaySecretRefUnavailableError("gateway.auth.token");
// 不再悄悄用 remote fallback
}
}
影响:安全加固,防止配置错误导致凭证走错路径。
Context Pruning 不再跳过带图片的 Tool Results [#43045]
PR: fix(context-pruning): prune image-containing tool results instead of skipping them
作者: @frankekn | 规模: M (+197/-19)
问题:Soft pruning 遇到只有图片的 tool result 时会跳过,导致图片 payload 不被替换,context 膨胀。
修复前后对比:
// Before: 图片结果被跳过
if (result.content.every(c => c.type === "image")) {
return result; // 原样保留
}
// After: 图片结果也被替换
return {
...result,
content: [{ type: "text", text: "[pruned image content]" }]
};
计费错误不再被误判为 Context Overflow [#40409]
PR: fix(agents): check billing errors before context overflow heuristics
作者: @ademczuk | 规模: S (+101/-7)
问题:OpenRouter 等 provider 的计费错误包含 "request size exceeds" 等文本,被 isLikelyContextOverflowError 误判,用户看到「Context overflow: prompt too large」而非计费提示。
修复:
function isLikelyContextOverflowError(error: string): boolean {
// 新增:计费错误优先短路
if (isBillingErrorMessage(error)) {
return false; // 让计费路径处理
}
// 原有的 context overflow 检测逻辑...
}
有效回复被误替换为计费错误 [#40616]
PR: fix(agents): prevent false billing error replacing valid response text
作者: @ingyukoh | 规模: S (+54/-14)
问题:AssistantMessage 有 errorMessage(如 memory_search 后台失败)但 stopReason 不是 "error" 时,sanitizeUserFacingText 会扫描有效回复内容中的计费关键词(如 "payment required"),用计费错误消息替换整个回复。
修复:
// Before: errorMessage 存在就标记 errorContext
const errorContext = msg.stopReason === "error" || Boolean(msg.errorMessage?.trim());
// After: 只看 stopReason
const errorContext = msg.stopReason === "error";
// errorMessage 由 formatAssistantErrorText 单独处理
影响:Web 界面显示正确回复,但 Telegram/Signal 显示计费错误的问题消失了。
🍎 macOS App 更新
Chat Model Selector & Thinking 状态持久化 [#42314]
PR: macOS: add chat model selector and persist thinking
作者: @ImLukeF | 规模: XL (+1126/-13)
- 聊天界面新增模型选择器
- Thinking 模式选择会持久化到 chat state
- Session-aware picker/chat wiring
远程 Gateway 认证提示优化 [#43100]
PR: macOS/onboarding: prompt for remote gateway auth tokens
作者: @ngutman | 规模: XL (+868/-194)
- Remote 连接失败时明确区分「需要 token」vs「token 错误」vs「已通过配对设备认证」
- 显示 token 获取指南:
openclaw config get gateway.auth.token
🛠️ 其他改进
Provider 与 API
- #42313 新增 Opencode Go provider 支持
- #43475 保留 OpenAI Responses API 的
phase参数 - #43248 修复 env proxy bootstrap,model traffic 现在正确走代理
- #42934 Azure OpenAI + Responses API 的
storeoverride 修复
CLI & Terminal
- #43520 Skills JSON 输出清理 ANSI 控制字符,Windows 终端 fallback ASCII 边框
- #42849 Skills 表格宽度在 Terminal.app 和 iTerm 间稳定
Memory & Embedding
- #43409 Gemini embedding 归一化,与 local/Ollama provider 对齐
小修复
- #43436
codingprofile 恢复web_search和web_fetch工具 - #42911 冷却原因默认值从
rate_limit改为unknown,避免误导 - #43205 Venice 402 计费错误识别,触发 model fallback
- #42362 Hook context 补齐
trigger和channelId字段 - #42096 修复
model.input为 undefined 时的崩溃
iOS
- #42991 新增本地 beta/TestFlight 发布流程
📝 Schema 修复
一批 Zod schema 与 TypeScript 类型不一致的问题被修复:
- #35608 Discord
autoThread字段补齐 - #35578 Signal
accountUuid字段补齐 - #35498 Telegram
editMessage/createForumTopic字段补齐 - #39226 OpenAI TTS
speed/instructions字段补齐
🔒 安全加固
Docker Sandbox 环境变量顺序修复 [#42256]
PR: fix(sandbox): sanitize Docker env before marking OPENCLAW_CLI
作者: @vincentkoc | 规模: S (+41/-14)
- Docker env 先消毒,再注入
OPENCLAW_CLImarker - Windows 不再允许通过
docker.cmdwrapper 走 shell 执行
📚 往期回顾:2026-03-09 |2026-03-08
下期预告:关注 Discord voice channel 支持、WhatsApp Business API 集成等功能。
本日报由 OpenClaw 社区自动生成,欢迎在 GitHub 参与讨论。