OpenClaw 接入 Venice AI:隐私优先模型提供商的安装、配置与源码级解析
【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 🦞项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw
本文以 OpenClaw 官方文档 Venice AI 为主体,讲解如何在 OpenClaw 中安装并配置 Venice AI 模型提供商插件,覆盖隐私模式、内置模型目录、运行时模型发现、流式与工具调用兼容、计费与用量查询等核心内容,并结合仓库中 venice 插件源码 展开底层原理说明。读完本文,你将能够独立完成 Venice 插件安装、API Key 配置、默认模型切换,并理解其定价规则与兼容性补丁的实现机制。
Venice AI 与 OpenClaw:隐私优先推理接入
Venice AI 提供隐私优先的推理服务:开源模型以不记录日志的方式运行,同时通过匿名代理方式提供 Claude、GPT、Gemini 与 Grok 等闭源模型的访问。其所有端点均为 OpenAI 兼容协议(/v1),这意味着 OpenClaw 可以复用既有的 OpenAI 兼容接入能力,仅通过一个插件即可完成对接。
在 OpenClaw 仓库中,该能力由@openclaw/venice-provider插件实现,插件入口位于 extensions/venice/index.ts,注册信息见 openclaw.plugin.json:
- Provider ID:
venice - Contracts:
usageProviders(提供用量/余额查询能力) - Base URL:
https://api.venice.ai/api/v1 - API 风格:
openai-completions - 默认模型:
zai-org-glm-4.7
两种隐私模式
Venice 的核心卖点是隐私模式的选择,官方文档给出了清晰的对比:
| 模式 | 行为 | 模型 |
|---|---|---|
| Private(私有) | 提示词与响应永不被存储或记录,临时性(ephemeral) | GLM、Gemma、Grok、Qwen、DeepSeek、Kimi、Venice Uncensored 等 |
| Anonymized(匿名代理) | 经 Venice 代理转发,转发前剥离元数据 | Claude、GPT 及部分 Qwen 模型 |
⚠️ 重要说明:匿名代理模型并非完全隐私。Venice 在转发前会剥离元数据,但底层供应商(OpenAI、Anthropic、Google、xAI)仍会处理该请求。当需要完整隐私保护时,应使用 Private 模式模型。
插件在 onboarding 提示中也明确传达了这一点(见 index.ts):支持 "private"(完全私有)与 "anonymized"(代理)两种模式,并引导用户到https://venice.ai/settings/api获取 API Key。
安装与配置三步走
第 1 步:安装插件
openclaw plugins install @openclaw/venice-provider插件可通过 npm 或 ClawHub 安装,ClawHub 规格为clawhub:@openclaw/venice-provider(见 package.json 中的openclaw.install字段)。插件要求宿主机版本>=2026.6.9,当前插件版本为2026.9.3,pluginApi兼容要求>=2026.9.3。
第 2 步:获取 API Key
- 在 venice.ai 注册账号
- 进入Settings > API Keys > Create new key
- 复制 API Key(格式为
vapi_xxxxxxxxxxxx)
第 3 步:配置 OpenClaw
官方文档提供三种配置方式:
交互式(推荐)
openclaw onboard --auth-choice venice-api-key该命令会提示输入 API Key(或复用已有的VENICE_API_KEY环境变量),列出可用的 Venice 模型,并设置默认模型。这一行为由插件中的 onboard.ts 驱动:它通过createModelCatalogPresetAppliers把默认模型引用(zai-org-glm-4.7)、openai-completionsAPI、Venice Base URL 以及别名GLM 4.7写入配置。
环境变量方式
export VENICE_API_KEY="vapi_xxxxxxxxxxxx"非交互式(脚本/CI 场景)
openclaw onboard --non-interactive --accept-risk --skip-health \ --auth-choice venice-api-key \ --venice-api-key "vapi_xxxxxxxxxxxx"其中--venice-api-key是插件清单中声明的 CLI 选项(见 openclaw.plugin.json 的providerAuthChoices),对应的配置项为veniceApiKey。
第 4 步:验证设置
openclaw agent --model venice/zai-org-glm-4.7 --message "Hello, are you working?"模型选择策略
官方文档给出的模型选择建议:
- 默认模型:
venice/zai-org-glm-4.7(私有推理) - 最强匿名代理选项:
venice/claude-opus-5
openclaw models set venice/zai-org-glm-4.7 openclaw models list --all --provider venice也可以运行openclaw configure,在Model/auth provider > Venice AI中选择。
按使用场景选择的速查表:
| 使用场景 | 模型 | 理由 |
|---|---|---|
| 通用对话(默认) | zai-org-glm-4.7 | Venice 官方默认特性 |
| 最佳整体质量 | claude-opus-5 | 当前主推的匿名代理 Opus 模型 |
| 隐私 + 编码 | qwen3-coder-480b-a35b-instruct-turbo | 大上下文私有编码模型 |
| 快速 + 廉价 | google-gemma-4-31b-it | 低成本主推私有视觉模型 |
| 复杂私有任务 | deepseek-v3.2 | 主推私有推理模型 |
| Uncensored(无审查) | venice-uncensored-1-2 | 当前 Venice 无审查模型 |
内置模型目录:16 个可见模型
插件清单 openclaw.plugin.json 的modelCatalog.providers.venice.models内置了完整的种子目录,运行时加载逻辑见 models.ts(buildManifestModelProviderConfig生成离线目录,decorateVeniceModelDefinition统一标注supportsUsageInStreaming: false兼容位)。
Private 模型(10 个)——完全私有、无日志
| 模型 ID | 名称 | 上下文 | 备注 |
|---|---|---|---|
zai-org-glm-5-2 | GLM 5.2 | 1M | 推荐,编码 |
zai-org-glm-4.7 | GLM 4.7 | 198k | 私有推理 |
venice-uncensored-1-2 | Venice Uncensored 1.2 | 128k | 最无审查,视觉 |
google-gemma-4-31b-it | Google Gemma 4 31B Instruct | 256k | 推荐,视觉 |
kimi-k2-6 | Kimi K2.6 | 256k | 推荐,编码,视觉 |
deepseek-v3.2 | DeepSeek V3.2 | 160k | 推荐,推理 |
qwen3-235b-a22b-thinking-2507 | Qwen3 235B Thinking | 128k | 默认推理 |
qwen3-coder-480b-a35b-instruct-turbo | Qwen3 Coder 480B Turbo | 256k | 默认编码 |
qwen3-vl-235b-a22b | Qwen3 VL 235B | 128k | 默认视觉 |
grok-4-5 | Grok 4.5 | 500k | 推荐,编码,视觉 |
Anonymized 模型(6 个)——经 Venice 代理
| 模型 ID | 名称 | 上下文 | 备注 |
|---|---|---|---|
qwen-3-7-max | Qwen 3.7 Max (via Venice) | 1M | 推荐,编码,视觉 |
qwen-3-7-plus | Qwen 3.7 Plus (via Venice) | 1M | 推荐,编码,视觉 |
claude-fable-5 | Claude Fable 5 (via Venice) | 1M | 推荐,编码,视觉 |
claude-opus-5 | Claude Opus 5 (via Venice) | 1M | 推荐,编码,视觉 |
claude-sonnet-4-6 | Claude Sonnet 4.6 (via Venice) | 1M | 推荐,编码,视觉 |
openai-gpt-56-sol | GPT-5.6 Sol (via Venice) | 1M | 推荐,视觉 |
已弃用兼容行(3 个)——从选择器中隐藏
| 模型 ID | 替代品 |
|---|---|
zai-org-glm-4.6 | zai-org-glm-4.7 |
google-gemma-3-27b-it | google-gemma-4-31b-it |
kimi-k2-5 | kimi-k2-6 |
清单中这些行带有"status": "deprecated"与"replacedBy"字段,因此会从模型选择器中隐藏,仅保留兼容性引用。
此外,Grok 系 Venice 模型(grok-4-3等)会应用与原生 xAI 提供商相同的工具 schema 兼容补丁,因为二者共享相同的上游工具调用格式。该逻辑实现在 index.ts:applyXaiModelCompat会设置toolSchemaProfile: "xai"、声明不支持minLength/maxLength/minItems/maxItems/minContains/maxContains等 schema 关键字,并采用html-entities工具调用参数编码;凡模型 ID 包含grok即命中该补丁。
模型发现机制:manifest 种子 + 运行时刷新
内置目录本质上是 manifest 驱动的种子列表。运行时 OpenClaw 会从 Venice 的/modelsAPI 刷新它;若 API 不可达,则回退到种子列表。/models端点是公开的(列模型无需认证),但推理需要有效 API Key。
这一机制在源码中有具体参数可循(models.ts):
timeoutMs: 10_000(发现请求超时 10 秒)ttlMs: 60_000(发现结果缓存 60 秒)authentication: "none"(列表端点免认证)projectRows: projectVeniceModels(将 API 行投影为 OpenClaw 模型定义)
projectVeniceModels的投影逻辑值得注意:对于已知模型(种子目录中存在),保留目录的 input/context 等配置,但用 API 返回的实时价格(parseVeniceModelPricing)覆盖成本;若 API 返回maxCompletionTokens,则会在已知 maxTokens 与硬上限131_072之间取最小值更新maxTokens;若 API 明确标注不支持函数调用(supportsFunctionCalling: false),会写入supportsTools: false兼容位。对于未知模型(API 新增),则根据model_spec.capabilities推断reasoning(ID 含 thinking/reason/r1 或声明 supportsReasoning)、视觉能力(supportsVision→input: ["text", "image"])等属性,使用默认上下文 128k、默认 maxTokens 4096 兜底。
Venice 可能继续接受已退役的模型 ID 作为提供商侧别名;但 OpenClaw 目录只公布/models返回的规范模型 ID。
DeepSeek V4 replay 兼容行为
如果 Venice 暴露 DeepSeek V4 模型(如deepseek-v4-pro、deepseek-v4-flash),OpenClaw 会在 Venice 省略时补齐 assistant 消息中必需的reasoning_contentreplay 字段,并从请求负载中剥离thinking/reasoning/reasoning_effort(Venice 会拒绝这些模型上的 DeepSeek 原生 thinking 控制)。
该修复与原生 DeepSeek 提供商自身的 thinking 控制是相互独立的。源码实现见 stream.ts:createVeniceStreamWrapper通过createPayloadPatchStreamWrapper包装底层流函数,当model.provider === "venice"且模型 ID 命中deepseek-v4-flash/deepseek-v4-pro时,删除上述三个 thinking 字段,并以thinkingEnabled: true、replaceNullReasoningContent: true调用normalizeOpenAICompatibleReasoningReplay补齐 replay。
流式与工具支持
| 特性 | 支持情况 |
|---|---|
| 流式输出 | 所有模型 |
| 函数调用 | 所有可见种子模型;动态发现的行遵循 API 元数据 |
| 视觉/图像 | 上表标记 "Vision" 的模型 |
| JSON 模式 | 通过response_format |
Gemini 历史工具调用兼容补丁
除 DeepSeek V4 与 Grok 补丁外,stream.ts 还实现了 Gemini 系模型的历史工具调用兼容逻辑:
- 对
gemini-*前缀的 Venice 模型,在历史 assistant 消息存在thoughtSignature时,将其回填到新一轮请求对应 tool_call 的thought_signature字段; - 对 Gemini 3 系模型(
/^gemini-3(?:[.-]|$)/),若历史调用缺少签名,则降级处理:把历史工具结果改写为 user 消息文本([Historical tool result for <tool>: ...]),避免上游因缺少签名而拒绝请求。
这类补丁的目标是让多轮工具调用对话在切换模型路由后仍能稳定重放历史上下文。
计费与定价机制
Venice 采用积分制。匿名代理模型的价格约等于直接调用 API 的价格加少量 Venice 费用,最新费率以官网定价页为准。
OpenClaw 在模型发现阶段会从 Venice 公开的GET /api/v1/models响应中读取实时价格,同一解析器也供托管的目录发布器使用。已知与新发现的模型使用 API 的完整价目表(USD/百万 tokens);manifest 价格只是离线种子。当实时价格缺失或无效时,已知模型回退到完整种子价目表;无有效定价的未知模型保持零估计——这不代表模型免费;而 API 显式给出的零费率则是有效的。
扩展价格(tiered pricing)规则
当 API 提供扩展定价时,其费率仅当总提示输入超过context_token_threshold时才作用于整个请求。提示输入包含未缓存输入、缓存读取与缓存写入;输出 tokens 不参与档位选择。恰好等于阈值的请求仍使用基础费率。基础与扩展费率必须来自同一份 schedule;无效的扩展 schedule 不会与种子或其他来源的价格混用。
源码层面,pricing-api.ts 的parseVeniceModelPricing按此实现:读取input/output/cache_input/cache_write四个字段的usd值(缓存字段缺省视为 0,表示缓存不支持或不收费),若有extended块则读取其费率与阈值,把阈值向下取整 +1 作为分档起点,产出tieredPricing: [{base, range: [0, start]}, {rates, range: [start]}]。若扩展 schedule 缺失缓存费率而基础费率有缓存字段,则整体拒绝该 schedule,避免用基础费率去推算缓存档位。Grok 4.5 与 Qwen 3.7 Plus 在清单中即带有这种双档定价。
成本覆盖的优先级
- 显式
models.providers.venice.models[].cost条目覆盖目录估算(包括显式 0); - 省略
cost或写{}时继承目录 schedule; - 部分扁平覆盖会继承缺失的基础费率并移除继承的档位;显式
tieredPricing优先,tieredPricing: []表示选择扁平定价; - Agent 本地的根级
models.json价格优先级最高。
与 onboarding / discovery 的交互
- 新 onboarding 在
models.mode: "merge"下不把生成的目录行写入配置,避免它们成为价格钉子(price pins);重新 onboarding 会保留已有模型条目、别名与模型选择。 - 在
models.mode: "replace"下,onboarding 会保留显式种子行,因为该模式禁用了 discovery。对应源码见 onboard.ts:仅在replace模式下写入catalogModels。 - 已序列化的成本永远不会被自动移除或迁移,即使它们匹配旧的种子值。启用 merge 模式后,建议备份配置,只删除不需要的
cost字段以恢复目录定价,保留有意的覆盖。 - Discovery 会复用已获取的行与缓存;用量展示不发价格请求,运行中的 Gateway 不会立刻采纳每次上游价格变化。托管目录更新在既有的重启边界生效,详见 Hosted model catalog。
- 仅在源配置中做 sizing 类编辑,不要把运行时快照生成的模型行整体拷回源配置:整体替换模型数组会把继承的成本固化为显式覆盖。
- 历史记录成本保留;当前价格只填充缺失成本或未知价格的零占位符,详见 Token use and costs。
用量与余额查询
插件通过usageProviderscontract 提供余额查询能力(usage.ts),请求https://api.venice.ai/api/v1/billing/balance,携带Authorization: Bearer <key>,响应上限 1MB。它会解析:
- DIEM 余额与USD 余额(
balances.diem/balances.usd); - DIEM epoch 分配(
diemEpochAllocation),并据此计算 epoch 已用百分比与 budget 行; - 消费货币(
consumptionCurrency)会以大写形式展示为 plan; - 若
canConsume === false,则标记 "API consumption unavailable"。
网络失败返回 "Usage unavailable",HTTP 错误按状态码构造快照,响应解析失败返回 "Malformed usage response",均有防御性兜底。
常用命令速查
# 默认私有模型 openclaw agent --model venice/zai-org-glm-4.7 --message "Quick health check" # Claude Opus 经 Venice(匿名代理) openclaw agent --model venice/claude-opus-5 --message "Summarize this task" # 无审查模型 openclaw agent --model venice/venice-uncensored-1-2 --message "Draft options" # 带图像的视觉模型 openclaw agent --model venice/qwen3-vl-235b-a22b --message "Review attached image" # 编码模型 openclaw agent --model venice/qwen3-coder-480b-a35b-instruct-turbo --message "Refactor this function"故障排查
API Key 不被识别
openclaw models list --provider venice确认 API Key 已配置且以vapi_开头;不要打印或分享其值。从源码看,Key 的解析路径为ctx.resolveApiKeyFromConfigAndStore({ envDirect: [ctx.env.VENICE_API_KEY] })(index.ts),即环境变量、配置与凭据存储三处均可提供。
模型不可用
运行openclaw models list --all --provider venice查看当前可用模型;目录会随 Venice 上架/下架模型而变化。也可关注上文提到的运行时发现机制——新模型通常会在/modelsAPI 出现后自动进入列表。
连接问题
Venice API 位于https://api.venice.ai/api/v1。请确认你的网络允许 HTTPS 访问该主机。
更多帮助参见 Troubleshooting 与 FAQ。
高级配置:配置文件示例
{ env: { vars: { VENICE_API_KEY: "vapi_..." } }, agents: { defaults: { model: { primary: "venice/zai-org-glm-4.7" } } }, models: { mode: "merge", providers: { venice: { baseUrl: "https://api.venice.ai/api/v1", apiKey: "${VENICE_API_KEY}", api: "openai-completions", models: [ { id: "zai-org-glm-4.7", name: "GLM 4.7", reasoning: true, input: ["text"], contextWindow: 198000, maxTokens: 16384, }, ], }, }, }, }要点解读:
env.vars.VENICE_API_KEY与models.providers.venice.apiKey均可用于注入密钥,后者支持${VENICE_API_KEY}变量插值;api: "openai-completions"与baseUrl必须与插件内置值保持一致(见 openclaw.plugin.json),否则请求无法路由;agents.defaults.model.primary设置全局默认模型;models.mode: "merge"让 onboarding 与 discovery 生成的行不落盘为价格钉子(见上文定价规则);- 手写的
models[].cost会覆盖目录估算(含显式 0);省略则继承目录 schedule(如 GLM 4.7 的种子价 input 0.55 / output 2.65 USD 每百万 tokens,见 openclaw.plugin.json); contextWindow/maxTokens的种子默认值分别见 models.ts 的VENICE_DEFAULT_CONTEXT_WINDOW = 128_000与VENICE_DEFAULT_MAX_TOKENS = 4096。
延伸阅读
- Model selection(模型提供方选择、模型引用与故障转移)
- Hosted model catalog(托管目录更新机制)
- Token use and costs(Token 用量与成本语义)
- 插件官方 README 见 extensions/venice/README.md,其安装命令与本文一致:
openclaw plugins install @openclaw/venice-provider
【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 🦞项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考