跳转至

配置参考

所有配置集中在 .olav/config/api.json 文件中。运行 olav init 会创建一个基础版本。

功能声明

ID 声明 状态
C-L2-38 agent_overrides 为不同 Agent 指定不同 LLM 模型 ✅ v0.10.0
C-L2-39 OLAV_LLM_* 环境变量覆盖配置文件 ✅ v0.10.0

保护配置文件

api.json 包含 API 密钥,不要提交到 Git。请将 .olav/config/ 加入 .gitignore


文件结构

{
  "shared":    { ... },
  "llm":       { ... },
  "embedding": { ... },
  "reranker":  { ... },
  "auth":      { ... },
  "agent_overrides": { ... }
}

部署模式(三档)

OLAV 把 LLM / Embedding / Reranker 三个端点设计成可独立切换。下面三档都是契约级支持,按你的网络/合规/算力条件选:

用本地 SentenceTransformer embed + 关 reranker。零 cloud key,不出本机。首次启动自动从 HuggingFace 下载嵌入模型(约 440 MB)。

{
  "llm": {
    "provider": "ollama",
    "model": "qwen3.6:27b",
    "base_url": "http://localhost:11434/v1",
    "model_provider": "openai",
    "context_budget": 64000
  },
  "embedding": {
    "mode": "local",
    "local": { "model": "BAAI/bge-base-en-v1.5", "device": "cpu" }
  },
  "reranker": { "enabled": false },
  "auth": { "mode": "token" }
}

Memory 完整可用:语义搜索 + BM25/FTS。轻量替代:把 bge-base-en-v1.5 换成 bge-small-en-v1.5(130 MB,384 dim)。

完全不要 embed/rerank。Memory 退化为 BM25 关键字搜索;语义召回失效,但功能完整不崩溃。适合测试容器、气隙环境、嵌入式部署。

{
  "llm": {
    "provider": "ollama",
    "model": "qwen3.6:27b",
    "base_url": "http://localhost:11434/v1",
    "model_provider": "openai"
  },
  "embedding": { "mode": "none" },
  "reranker":  { "enabled": false },
  "auth": { "mode": "token" }
}

Cloud LLM + Cloud embed + Cloud rerank。每个端点带各自的 API key,per-section 优先级保证不会串。

{
  "llm": {
    "provider": "custom",
    "model": "google/gemma-4-31b-it:free",
    "base_url": "https://openrouter.ai/api/v1",
    "model_provider": "openai",
    "api_key": "sk-or-v1-XXXXX",
    "context_budget": 64000
  },
  "embedding": {
    "mode": "api",
    "api": {
      "model": "pplx-embed-v1-0.6b",
      "base_url": "https://api.perplexity.ai/v1",
      "api_key": "pplx-XXXXX"
    }
  },
  "reranker": {
    "enabled": true,
    "kind": "openrouter",
    "model": "cohere/rerank-4-fast",
    "base_url": "https://openrouter.ai/api/v1",
    "api_key": "sk-or-v1-XXXXX"
  },
  "auth": { "mode": "token" }
}

可以混搭:「Cloud LLM + 本地 embed + 无 rerank」是最常见的性价比组合。

在档位间切换

  • api.json 即生效 — 重启 olav 进程或开新 session,无需 rebuild。
  • embed 维度变化触发 LanceDB 重建 — 不同嵌入模型 dim 不同(bge-base=768 / pplx-embed=1024 / text-embedding-3-small=1536)。LanceDB 锁 dim,启动时若 dim 不一致会报 EmbeddingDimMismatchError。两种解法:
    • olav agent install <wheel> 任意 skill — 触发 allow_dim_swap=True,自动重建 + 重新 prime。会清空 user memory,但 system-level guides/expert KB 自动重建。
    • 手动备份 + 重建:mv .olav/databases/memory.lance{,.backup} 然后跑任何会重新 prime 的命令。
  • shared.api_key 设置 — 默认空字符串。只在所有端点共用一把 key 时填(少见)。不要 把单 service 的 key 放 shared,会导致跨 service 错配。

共享配置

shared 部分包含跨端点的全局默认值。

字段 必填 默认值 说明
api_key "" 跨端点共用的 API key。仅在 LLM + embed + rerank 都用同一个 provider 时设;多 provider 部署留空
timeout 120 默认请求超时(秒)

API key 优先级(Patch B / 2026-05)

每个端点有独立的 api_key 解析顺序:

  1. per-sectionllm.api_key / embedding.api.api_key / reranker.api_key(首选)
  2. sharedshared.api_key(兜底,homogeneous 部署用)
  3. 环境变量OPENAI_API_KEY / ANTHROPIC_API_KEY(最后兜底)

per-section 优先意味着多 provider 部署不会被 shared 串联污染:你可以 llm.api_key=sk-or-v1-... 同时 embedding.api.api_key=pplx-...,两个端点各拿各的 key。


LLM 配置

OLAV 支持多种 LLM 提供商。选择你使用的提供商:

{
  "shared": { "api_key": "sk-..." },
  "llm": {
    "provider": "openai",
    "model": "gpt-4o"
  }
}

{
  "shared": { "api_key": "sk-ant-..." },
  "llm": {
    "provider": "anthropic",
    "model": "claude-3-5-sonnet-20241022"
  }
}
Anthropic 模型自动启用 Prompt Caching,减少重复请求的成本。

{
  "shared": { "api_key": "sk-or-..." },
  "llm": {
    "provider": "custom",
    "model": "x-ai/grok-2",
    "base_url": "https://openrouter.ai/api/v1"
  }
}
通过 OpenRouter 可以使用几乎所有主流模型。

{
  "llm": {
    "provider": "ollama",
    "model": "llama3.1",
    "base_url": "http://localhost:11434"
  }
}
无需 API Key,数据不出本机。shared.api_key 可省略。

LLM 字段说明

字段 必填 默认值 说明
provider 提供商:openai / anthropic / azure_openai / ollama / groq / mistral / custom
model 模型 ID(如 gpt-4oclaude-3-5-sonnet-20241022
api_key 按提供商覆盖密钥(通常使用 shared.api_key
base_url custom 提供商必填,其他可选(用于自建代理)
temperature 0.1 生成温度,越低越确定性
max_tokens 32000 最大生成 Token 数

向量嵌入配置

知识库和 Agent 记忆使用向量嵌入做语义搜索。三种 mode:

"embedding": {
  "mode": "api",
  "api": {
    "model": "openai/text-embedding-3-small",
    "base_url": "https://openrouter.ai/api/v1",
    "api_key": "sk-or-v1-..."
  },
  "fallback": { "enabled": true }
}
fallback 启用后,API 不可用时自动回退本地模型(需要 local 块同时配好)。

"embedding": {
  "mode": "local",
  "local": {
    "model": "BAAI/bge-base-en-v1.5",
    "device": "cpu"
  }
}
用 SentenceTransformer 本地推理,仅 CPU/GPU 即可,无 cloud 依赖。常用模型:

模型 dim 大小 备注
BAAI/bge-base-en-v1.5 768 440 MB 高质量,CPU 即可
BAAI/bge-small-en-v1.5 384 130 MB 极轻量
BAAI/bge-small-zh-v1.5 512 90 MB 中文
paraphrase-multilingual-MiniLM-L12-v2 384 470 MB 50+ 语言

"embedding": { "mode": "none" }
完全不加载嵌入。Memory 写入会用零向量占位、读取走 BM25/FTS 关键字搜索。不会崩溃,但语义召回失效。适合:CI 测试容器、隔离网设备、不需要语义搜索的纯 LLM 场景。


Reranker 配置

Reranker 在 Memory 召回后加一个 cross-encoder 重排序步骤,提升 top-K 相关性。默认关闭,开启后效果与 reranker 模型质量强相关(实测某些本地小模型反而让结果变差)。

"reranker": { "enabled": false }

"reranker": {
  "enabled": true,
  "kind": "llama_cpp",
  "base_url": "http://localhost:11433"
}
需 llama-server 启动时带 --reranking flag,加载 BERT-class cross-encoder(如 bge-reranker-v2-m3)。

"reranker": {
  "enabled": true,
  "kind": "openrouter",
  "model": "cohere/rerank-4-fast",
  "base_url": "https://openrouter.ai/api/v1",
  "api_key": "sk-or-v1-..."
}
kind 接受 openrouter / cohere / openai_compat / openai,都走 POST {base_url}/rerank body shape {query, documents, model}api_key 缺省时回退 shared.api_key

Reranker 字段

字段 必填 说明
enabled true / false
kind 启用时必填 llama_cpp / openrouter / cohere / openai_compat / openai / ollama
base_url 启用时必填 端点根路径(不含 /rerank
model cloud kinds 必填 模型 ID
api_key cloud kinds 必填(或 fallback shared) Bearer token

环境变量 OLAV_RERANKER_DISABLE=1 可临时关闭,无需改文件。


认证模式

auth 部分配置,决定如何识别用户身份:

模式 适用场景 说明
none 个人使用、本地开发 默认,使用操作系统用户名
token 小团队 OLAV 内置令牌认证
ldap 企业 对接 LDAP 目录
ad 企业 对接 Active Directory
oidc SSO 对接 OpenID Connect

为不同 Agent 指定不同模型

你可以为特定 Agent 使用不同的 LLM 模型——比如快速查询用便宜的小模型,复杂分析用强大的大模型:

"agent_overrides": {
  "core": { "model": "gpt-4o-mini" },
  "audit": { "provider": "anthropic", "model": "claude-3-5-sonnet-20241022" }
}

未在 agent_overrides 中指定的 Agent 使用顶层 llm 配置。


环境变量

所有配置都可以通过环境变量覆盖,优先级高于 api.json

环境变量 对应配置 说明
OLAV_LLM_MODEL llm.model 模型 ID
OLAV_LLM_API_KEY shared.api_key API 密钥
OLAV_LLM_BASE_URL llm.base_url API 地址
OPENAI_API_KEY shared.api_key OpenAI 快捷方式
ANTHROPIC_API_KEY shared.api_key Anthropic 快捷方式
OLAV_WEB_PORT Web 服务端口(Round 19 加 env override)
OLAV_WEB_HOST Web 服务绑定地址

上下文 / prompt 预算调试环境变量

R36 / R42 后平台暴露两个运维级可观测性开关,默认关闭;取值 1 / true / yes / on 即开启。

环境变量 引入 作用
OLAV_DEBUG_CONTEXT Round 36 启用后 agent._inject_static_context 每 agent 发一条多行 INFO 日志,列每条静态引用的字节 / 估算 token 以及总量对照当前 tier 的 context_budget。用于"为什么这 agent 一启动就吃 6K tokens"类诊断。
OLAV_DEBUG_SUMMARIZATION Round 42 启用后 build_summarization_middleware 打印解析后的 tier + trigger + keep 设置,让运维验证 tier 敏感 summarization 策略(small=50% / medium=65% / large=80% of context_budget)实际生效。
OLAV_STATIC_CONTEXT_MODE Round 24 强制 static_context mode(always / on_intent / lazy),不论 per-agent frontmatter 声明。

Tier & Resolver 开关

环境变量 引入 作用
OLAV_LLM_MODEL_TIER Sprint 0b 强制 small / medium / large 层级,不改 config 即可切。驱动 TIER_DEFAULTS 所有 key(context_budget、recall_top_k、return_compact_chars、summarization_trigger_pct、execute_sql_context_rows、search_logs_default_limit 等)。
OLAV_BACKUP_COMMANDS_PATH Round 46 backup_only_commands.yaml 查找的优先级 0 覆盖。指向存在的文件时覆盖三条默认候选;指向不存在的文件时 fall through 到默认(typo 不会静默关闭 loader)。
OLAV_SANDBOX_NETNS 1 强制每次 sandbox 子进程使用 network namespace 隔离。
OLAV_MEMORY_DB_PATH 覆盖 olav_recall_memory 的 LanceDB 存储路径。

CI/CD 推荐用环境变量

在 CI/CD 流水线中,推荐通过环境变量而非文件传递密钥,避免密钥写入磁盘。


远程 AsyncSubAgent

OLAV 可将 LangGraph Cloud 或自托管 LangGraph 部署接入为 AsyncSubAgent。在 api.json 中添加 async_subagents 数组:

{
    "async_subagents": [
        {
            "name": "remote-ops",
            "description": "运行在 LangGraph Cloud 上的高算力 Ops Agent",
            "url": "https://my-deployment.langsmith.com",
            "assistant_id": "ops",
            "api_key_env": "LANGGRAPH_API_KEY"
        }
    ]
}
字段 必填 说明
name 唯一 SubAgent 名称(供 olav_delegate 工具路由)
description 供 Orchestrator 路由决策的描述
url LangGraph 部署 URL
assistant_id 远程部署上的 Graph/Assistant ID
api_key_env 持有 API 密钥的环境变量名,未设置时回退到 LANGGRAPH_API_KEY

远程 SubAgent 在启动时与本地 workspace SubAgent 一起加载。连接失败时优雅跳过,不阻塞本地 Agent 初始化。


Hook 系统

~/.olav/hooks.json 中配置由 OLAV 会话事件触发的外部命令:

{
    "hooks": [
        { "event": "session.start", "command": "notify-send 'OLAV 会话已启动'" },
        { "event": "tool.call",     "command": "logger -t olav '工具: $OLAV_HOOK_TOOL'" }
    ]
}

完整事件参考见 Agent Harness → 事件 Hook 系统