配置文件结构

text
~/.hermes/
├── config.yaml      # 主配置文件
├── .env             # 环境变量(API 密钥等敏感信息)
├── auth.json        # 认证配置
├── SOUL.md          # 代理身份定义
├── MEMORY.md        # 代理记忆
├── USER.md          # 用户档案
├── memories/        # 外部记忆存储
├── skills/          # 已安装技能
├── cron/            # 定时任务配置
├── sessions/        # 会话数据(SQLite state.db)
└── logs/            # 日志文件

config.yaml 完整配置

LLM 提供商配置

yaml
# LLM 提供商配置
provider: nous               # 默认提供商

providers:
  nous:
    api_key: ${NOUS_API_KEY}
    model: hermes-3-llama-3.1-405b
    base_url: https://api.nousresearch.com/v1

  openai:
    api_key: ${OPENAI_API_KEY}
    model: gpt-4o
    base_url: https://api.openai.com/v1

  anthropic:
    api_key: ${ANTHROPIC_API_KEY}
    model: claude-sonnet-4-20250514
    base_url: https://api.anthropic.com

  deepseek:
    api_key: ${DEEPSEEK_API_KEY}
    model: deepseek-chat
    base_url: https://api.deepseek.com/v1

辅助模型配置

Hermes 使用轻量级模型处理特定任务以节省成本:

yaml
# 辅助模型(默认使用 Gemini Flash)
auxiliary_models:
  provider: google
  model: gemini-2.0-flash

  # 可为不同任务指定不同模型
  tasks:
    vision: gemini-2.0-flash
    web_extract: gemini-2.0-flash
    approval: gemini-2.0-flash
    compression: gemini-2.0-flash
    session_search: gemini-2.0-flash
    skills_hub: gemini-2.0-flash
    mcp: gemini-2.0-flash
    memory_flush: gemini-2.0-flash

工具配置

yaml
# 工具配置
tools:
  # 启用的工具集
  enabled:
    - browser
    - terminal
    - file
    - search
    - code_execution
    - memory
    - skills

  # 终端后端配置
  terminal:
    backend: local              # local | docker | ssh | modal | daytona | singularity
    timeout: 300                # 命令超时(秒)
    working_dir: ~              # 工作目录

    # Docker 后端配置
    docker:
      image: ubuntu:22.04
      auto_remove: true
      security:
        read_only_root: true
        no_new_privileges: true
        resource_limits:
          memory: "512m"
          cpu: "1.0"
        network_mode: none
        allowed_commands:
          - python3
          - node
          - npm
          - git

    # SSH 后端配置
    ssh:
      host: remote-server.com
      port: 22
      user: deploy
      key_file: ~/.ssh/id_rsa

记忆配置

yaml
# 记忆配置
memory:
  provider: builtin            # builtin | mem0 | honcho | openviking | ...

  # 外部记忆提供商
  mem0:
    api_key: ${MEM0_API_KEY}
    user_id: default-user

语音配置

yaml
# 语音配置
voice:
  stt:
    provider: faster-whisper    # faster-whisper | groq | openai
    language: zh
    model: base

  tts:
    provider: edge-tts          # edge-tts | elevenlabs | openai | neutts
    voice: zh-CN-XiaoxiaoNeural
    speed: 1.0

上下文压缩配置

yaml
# 上下文压缩
context:
  compression:
    enabled: true
    threshold: 0.5              # 触发压缩的阈值(50%)
    protect_first_n: 3          # 保护前 N 轮对话
    protect_last_n: 4           # 保护后 N 轮对话

安全配置

yaml
# 安全配置
security:
  # DM 配对
  dm_pairing:
    enabled: true
    code_length: 8              # 配对码长度
    ttl: 3600                   # 配对码有效期(秒)
    rate_limit: 5               # 每分钟尝试次数限制
    max_failures: 5             # 最大失败次数

  # 智能审批
  approvals:
    mode: smart                 # manual | smart | off
    auto_approve_tools:
      - search
      - session_search
      - memory

  # SSRF 防护
  ssrf_protection:
    block_private_networks: true
    block_cloud_metadata: true
    allowed_domains: []

  # 网站黑名单
  website_blocklist:
    enabled: true
    domains: []

MCP 配置

yaml
# MCP 服务器配置
mcp:
  servers:
    filesystem:
      transport: stdio
      command: npx
      args: ["-y", "@anthropic/mcp-server-filesystem", "/data"]

网关配置

yaml
# 消息网关配置
gateway:
  sessions:
    reset_policy:
      time: "04:00"
      idle_timeout: 1440
    persistence: true
    progress_notifications: true

环境变量

敏感信息应存储在 .env 文件中:

bash
# ~/.hermes/.env
NOUS_API_KEY=nous_xxxxx
OPENAI_API_KEY=sk-xxxxx
ANTHROPIC_API_KEY=sk-ant-xxxxx
DEEPSEEK_API_KEY=sk-xxxxx
GROQ_API_KEY=gsk_xxxxx
ELEVENLABS_API_KEY=sk_xxxxx

安全提示:切勿将 .env 文件提交到版本控制。确保 .env 已添加到 .gitignore 中。

配置文件(Profiles)

Hermes 支持多个配置文件,实现完全隔离的实例:

bash
# 使用特定 Profile 启动
hermes --profile work
hermes --profile personal

# 为网关指定 Profile
hermes gateway start --profile production