Hermes + DeepSeek 本地代理操作指南
Hermes + DeepSeek 本地代理操作指南
使用 Hermes Agent 作为本地代理,通过 DeepSeek 模型调度其他 AI Agent 进行本地操作,避免直接暴露原始 Provider 被封。
目录
1. 为什么需要本地代理
风险场景
| 场景 | 风险 |
|---|---|
| 直接调用 OpenAI API | IP 被封、账号被限流 |
| 直接调用 Claude API | 地区限制、请求被拒绝 |
| 频繁切换 Provider | 触发风控、API Key 被吊销 |
| 多 Agent 共享同一 Key | 用量异常、被封号 |
本地代理的优势
┌─────────────────────────────────────────────────────────┐
│ 用户 │
│ │ │
│ ▼ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Hermes Agent │───▶│ DeepSeek │ ← 唯一对外出口 │
│ │ (本地代理) │ │ (中转层) │ │
│ └──────────────┘ └──────────────┘ │
│ │ │
│ ┌────┴────┬────────┬────────┐ │
│ ▼ ▼ ▼ ▼ │
│ Claude Codex OpenCode Kimi ← 本地 Agent │
│ (本地) (本地) (本地) (本地) 不直接对外 │
└─────────────────────────────────────────────────────────┘
优势:
- 单一出口: 只有 DeepSeek 对外发起请求,其他 Agent 完全本地
- 流量混淆: DeepSeek 的 OpenAI-compatible 协议与正常请求无异
- IP 隔离: 本地 Agent 不直接访问外部 API,避免 IP 被标记
- Key 隔离: 每个 Agent 使用独立的本地 Profile,不共享原始 Key
2. 核心原理
2.1 双层代理架构
Layer 1: Hermes Agent (调度层)
└── 使用 DeepSeek 模型进行任务理解和调度
└── 生成调用其他 Agent 的指令
Layer 2: innate-aiswitcher (适配层)
└── 将 DeepSeek 的调度指令转换为具体 Agent 的启动命令
└── 为每个 Agent 创建独立的临时配置
Layer 3: 本地 Agent (执行层)
└── Claude Code: 临时 settings.json
└── Codex CLI: 临时 CODEX_HOME
└── OpenCode: 临时环境变量
└── Kimi: 临时环境变量
2.2 数据流
用户输入 → Hermes (DeepSeek) → 任务分解 → innate-aiswitcher → 启动本地 Agent → 本地执行 → 结果返回
关键点: 本地 Agent 的 API 调用通过 innate-aiswitcher 的临时配置完成,不暴露用户的真实 Provider 配置。
3. 环境准备
构建 innate-aiswitcher 后,可用 task serve 启动 Web UI(http://127.0.0.1:8090/)图形化配置 Provider/Profile,或使用下方 CLI 脚本。
3.1 安装依赖
#!/bin/bash
# setup-local-proxy.sh
# 一键配置本地代理环境
set -e
echo "=== 本地代理环境配置 ==="
# 1. 安装 innate-aiswitcher
echo "[1/4] 安装 innate-aiswitcher..."
cd /path/to/innate-aiswitcher
task build || go build -o bin/aisw ./cmd/aisw
# 2. 安装 Hermes Agent
echo "[2/4] 安装 Hermes Agent..."
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
source ~/.bashrc
# 3. 安装其他本地 Agent
echo "[3/4] 安装本地 Agent..."
npm install -g @anthropic-ai/claude-code 2>/dev/null || true
npm install -g @openai/codex 2>/dev/null || true
curl -fsSL https://get.opencode.ai | bash 2>/dev/null || true
# 4. 设置环境变量
echo "[4/4] 设置环境变量..."
cat >> ~/.bashrc << 'EOF'
# innate-aiswitcher 本地代理配置
export DEEPSEEK_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
export PATH="$PATH:/path/to/innate-aiswitcher/bin"
EOF
echo "=== 配置完成 ==="
echo "请编辑 ~/.bashrc 填入真实的 API Key"
echo "然后运行: source ~/.bashrc"
3.2 环境变量模板
# ~/.bashrc 或 ~/.zshrc
# DeepSeek 代理层(唯一对外)
export DEEPSEEK_API_KEY="sk-your-deepseek-key"
# 本地 Agent 的原始 Key(不直接使用,通过 aisw 代理)
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
export MINIMAX_API_KEY="sk-..."
export KIMI_API_KEY="sk-..."
# innate-aiswitcher 路径
export PATH="$PATH:$HOME/innate-aiswitcher/bin"
4. 配置 Hermes + DeepSeek 作为代理
4.1 添加 DeepSeek Provider
# 添加 DeepSeek 作为代理层 Provider
aisw provider add deepseek \
--base-url https://api.deepseek.com/v1 \
--api-key-env DEEPSEEK_API_KEY \
--protocol openai_chat \
--model deepseek-chat \
--endpoint chat_completions=/chat/completions \
--endpoint models=/models
4.2 添加本地 Agent 的 Provider(用于临时配置)
# MiniMax OpenAI-compatible(供 Codex/OpenCode/Hermes 使用)
aisw provider add minimax-openai \
--base-url https://api.minimaxi.com/v1 \
--api-key-env MINIMAX_API_KEY \
--protocol openai_chat \
--model MiniMax-M3 \
--endpoint chat_completions=/chat/completions \
--endpoint models=/models
# MiniMax Claude-compatible(供 Claude Code 使用)
aisw provider add minimax-claude \
--base-url https://api.minimaxi.com/anthropic \
--api-key-env MINIMAX_API_KEY \
--protocol anthropic \
--model claude-3-5-sonnet-20241022 \
--endpoint messages=/v1/messages \
--endpoint models=/v1/models
# Kimi OpenAI-compatible(供 Codex/OpenCode/Hermes 使用)
aisw provider add kimi-openai \
--base-url https://api.moonshot.cn/v1 \
--api-key-env KIMI_API_KEY \
--protocol openai_chat \
--model moonshot-v1-8k \
--endpoint chat_completions=/chat/completions \
--endpoint models=/models
# Kimi Claude-compatible(供 Claude Code 使用)
aisw provider add kimi-claude \
--base-url https://api.moonshot.cn/anthropic \
--api-key-env KIMI_API_KEY \
--protocol anthropic \
--model claude-3-5-sonnet-20241022 \
--endpoint messages=/v1/messages \
--endpoint models=/v1/models
# Xiaomi MiMo(供 Codex/OpenCode/Hermes 使用)
aisw provider add xiaomi-openai \
--base-url https://api.mimo.xiaomi.com/v1 \
--api-key-env XIAOMI_API_KEY \
--protocol openai_chat \
--model mimo-7b \
--endpoint chat_completions=/chat/completions \
--endpoint models=/models
4.3 创建 Hermes 代理 Profile
# Hermes + DeepSeek(主代理)
aisw profile add hermes-deepseek \
--agent hermes \
--provider deepseek \
--model deepseek-chat
# Hermes + MiniMax(备用代理)
aisw profile add hermes-minimax \
--agent hermes \
--provider minimax-openai \
--model MiniMax-M3
# Hermes + Kimi(备用代理)
aisw profile add hermes-kimi \
--agent hermes \
--provider kimi-openai \
--model moonshot-v1-8k
# Hermes + Xiaomi(备用代理)
aisw profile add hermes-xiaomi \
--agent hermes \
--provider xiaomi-openai \
--model mimo-7b
4.4 创建本地 Agent 的 Profile
# Claude Code + MiniMax
aisw profile add claude-minimax \
--agent claude \
--provider minimax-claude \
--model claude-3-5-sonnet-20241022
# Claude Code + Kimi
aisw profile add claude-kimi \
--agent claude \
--provider kimi-claude \
--model claude-3-5-sonnet-20241022
# Codex + MiniMax
aisw profile add codex-minimax \
--agent codex \
--provider minimax-openai \
--model MiniMax-M3
# Codex + Kimi
aisw profile add codex-kimi \
--agent codex \
--provider kimi-openai \
--model moonshot-v1-8k
# Codex + DeepSeek
aisw profile add codex-deepseek \
--agent codex \
--provider deepseek \
--model deepseek-chat
# OpenCode + MiniMax
aisw profile add opencode-minimax \
--agent opencode \
--provider minimax-openai \
--model MiniMax-M3
# OpenCode + DeepSeek
aisw profile add opencode-deepseek \
--agent opencode \
--provider deepseek \
--model deepseek-chat
# Kimi CLI + Moonshot
aisw profile add kimi-default \
--agent kimi \
--provider kimi-openai \
--model moonshot-v1-8k
5. 通过代理调用其他 Agent
5.1 手动调度模式
# 1. 启动 Hermes 代理
aisw start hermes hermes-deepseek
# 2. 在 Hermes 中输入任务,例如:
# "帮我用 Claude Code 分析这个项目的代码结构"
# 3. Hermes 会生成调度指令,用户手动执行:
aisw start claude claude-minimax --cwd /path/to/project
# 4. 或者在 Hermes 中输入:
# "用 Codex 帮我写一段 Python 爬虫"
# 5. 手动启动 Codex:
aisw start codex codex-minimax
5.2 自动调度模式(通过 Hermes Skills)
# 在 Hermes 中启用本地调度 skill
# 创建 ~/.hermes/skills/local-agent-dispatch/SKILL.md
SKILL.md 内容:
# Local Agent Dispatch
## Description
Dispatch tasks to local AI agents through innate-aiswitcher.
## Procedure
1. Analyze the user's task to determine the best agent:
- Code analysis → Claude Code
- Code generation → Codex CLI
- Quick edits → OpenCode
- Chinese context → Kimi CLI
2. Generate the aisw command:
```bash
aisw start <agent> <profile> --cwd <path>
Execute the command in a subprocess.
Return the results to the user.
Examples
- “分析代码” →
aisw start claude claude-minimax --cwd . - “写代码” →
aisw start codex codex-minimax - “快速编辑” →
aisw start opencode opencode-minimax
### 5.3 批量调度脚本
```bash
#!/bin/bash
# dispatch-agent.sh
# 根据任务类型自动调度本地 Agent
TASK="$1"
CWD="${2:-.}"
case "$TASK" in
"analyze"|"review"|"audit")
echo "调度 Claude Code 进行代码分析..."
aisw start claude claude-minimax --cwd "$CWD"
;;
"generate"|"write"|"create")
echo "调度 Codex CLI 进行代码生成..."
aisw start codex codex-minimax --cwd "$CWD"
;;
"edit"|"fix"|"patch")
echo "调度 OpenCode 进行快速编辑..."
aisw start opencode opencode-minimax --cwd "$CWD"
;;
"chinese"|"cn"|"moonshot")
echo "调度 Kimi CLI 处理中文任务..."
aisw start kimi kimi-default --cwd "$CWD"
;;
*)
echo "未知任务类型: $TASK"
echo "可用类型: analyze, generate, edit, chinese"
exit 1
;;
esac
使用:
chmod +x dispatch-agent.sh
./dispatch-agent.sh analyze /path/to/project
./dispatch-agent.sh generate /path/to/project
./dispatch-agent.sh edit /path/to/project
6. 防封策略详解
6.1 策略一:单一出口
# 只让 DeepSeek 对外,其他 Agent 完全本地
# 配置防火墙规则(可选)
# macOS: 阻止其他 Agent 直接访问外部 API
sudo pfctl -e
sudo cat > /etc/pf.conf << 'EOF'
# 只允许 DeepSeek 出口
pass out on en0 inet proto tcp to api.deepseek.com port 443
block out on en0 inet proto tcp to any port 443
EOF
sudo pfctl -f /etc/pf.conf
⚠️ 注意:防火墙规则需谨慎配置,避免影响正常网络使用。
6.2 策略二:临时配置隔离
# innate-aiswitcher 自动为每个 Agent 创建临时配置
# 每次启动都是全新的临时目录
# 查看临时配置示例(dry-run)
aisw start claude claude-minimax --dry-run
# 输出示例:
# {
# "command": "claude --settings /tmp/aisw-claude-xxx.json",
# "env": {},
# "files": {
# "settings": "/tmp/aisw-claude-xxx.json"
# }
# }
# 临时文件在 Agent 退出后自动清理
6.3 策略三:Key 轮换
#!/bin/bash
# rotate-keys.sh
# 定期轮换 API Key(如果支持多个 Key)
# DeepSeek 支持多个 Key 轮换
export DEEPSEEK_API_KEY_1="sk-..."
export DEEPSEEK_API_KEY_2="sk-..."
export DEEPSEEK_API_KEY_3="sk-..."
# 随机选择 Key
KEYS=("$DEEPSEEK_API_KEY_1" "$DEEPSEEK_API_KEY_2" "$DEEPSEEK_API_KEY_3")
RANDOM_KEY="${KEYS[$RANDOM % ${#KEYS[@]}]}"
export DEEPSEEK_API_KEY="$RANDOM_KEY"
# 更新 aisw 配置
aisw provider add deepseek \
--base-url https://api.deepseek.com/v1 \
--api-key-env DEEPSEEK_API_KEY \
--protocol openai_chat \
--model deepseek-chat
6.4 策略四:请求频率控制
# 在 Hermes 配置中限制请求频率
# ~/.hermes/config.yaml
agent:
max_turns: 50 # 限制单会话轮数
# 使用 sleep 控制批量请求
for task in task1 task2 task3; do
./dispatch-agent.sh "$task"
sleep 5 # 间隔 5 秒
done
6.5 策略五:本地模型兜底
# 当外部 API 不可用时,切换到本地模型
# 使用 Ollama 或 LM Studio 作为兜底
# 安装 Ollama
curl -fsSL https://ollama.com/install.sh | bash
# 拉取本地模型
ollama pull qwen2.5:7b
# 添加本地 Provider
aisw provider add local-ollama \
--base-url http://localhost:11434/v1 \
--api-key dummy \
--protocol openai_chat \
--model qwen2.5:7b
# 创建兜底 Profile
aisw profile add hermes-local \
--agent hermes \
--provider local-ollama \
--model qwen2.5:7b
7. 一键配置脚本
7.1 完整一键配置
#!/bin/bash
# setup-hermes-proxy.sh
# 一键配置 Hermes + DeepSeek 本地代理环境
set -e
echo "=== Hermes + DeepSeek 本地代理配置 ==="
# 检查环境变量
if [ -z "$DEEPSEEK_API_KEY" ]; then
echo "错误: 请设置 DEEPSEEK_API_KEY"
exit 1
fi
# 1. 添加 DeepSeek Provider
echo "[1/6] 添加 DeepSeek Provider..."
aisw provider add deepseek \
--base-url https://api.deepseek.com/v1 \
--api-key-env DEEPSEEK_API_KEY \
--protocol openai_chat \
--model deepseek-chat \
--endpoint chat_completions=/chat/completions \
--endpoint models=/models
# 2. 添加 MiniMax Provider(如果配置了 Key)
if [ -n "$MINIMAX_API_KEY" ]; then
echo "[2/6] 添加 MiniMax Provider..."
aisw provider add minimax-openai \
--base-url https://api.minimaxi.com/v1 \
--api-key-env MINIMAX_API_KEY \
--protocol openai_chat \
--model MiniMax-M3 \
--endpoint chat_completions=/chat/completions \
--endpoint models=/models
aisw provider add minimax-claude \
--base-url https://api.minimaxi.com/anthropic \
--api-key-env MINIMAX_API_KEY \
--protocol anthropic \
--model claude-3-5-sonnet-20241022 \
--endpoint messages=/v1/messages \
--endpoint models=/v1/models
fi
# 3. 添加 Kimi Provider(如果配置了 Key)
if [ -n "$KIMI_API_KEY" ]; then
echo "[3/6] 添加 Kimi Provider..."
aisw provider add kimi-openai \
--base-url https://api.moonshot.cn/v1 \
--api-key-env KIMI_API_KEY \
--protocol openai_chat \
--model moonshot-v1-8k \
--endpoint chat_completions=/chat/completions \
--endpoint models=/models
aisw provider add kimi-claude \
--base-url https://api.moonshot.cn/anthropic \
--api-key-env KIMI_API_KEY \
--protocol anthropic \
--model claude-3-5-sonnet-20241022 \
--endpoint messages=/v1/messages \
--endpoint models=/v1/models
fi
# 4. 添加 Xiaomi Provider(如果配置了 Key)
if [ -n "$XIAOMI_API_KEY" ]; then
echo "[4/6] 添加 Xiaomi Provider..."
aisw provider add xiaomi-openai \
--base-url https://api.mimo.xiaomi.com/v1 \
--api-key-env XIAOMI_API_KEY \
--protocol openai_chat \
--model mimo-7b \
--endpoint chat_completions=/chat/completions \
--endpoint models=/models
fi
# 5. 创建 Hermes 代理 Profile
echo "[5/6] 创建 Hermes 代理 Profile..."
aisw profile add hermes-deepseek \
--agent hermes \
--provider deepseek \
--model deepseek-chat
# 6. 创建本地 Agent Profile
echo "[6/6] 创建本地 Agent Profile..."
[ -n "$MINIMAX_API_KEY" ] && aisw profile add claude-minimax \
--agent claude --provider minimax-claude --model claude-3-5-sonnet-20241022
[ -n "$MINIMAX_API_KEY" ] && aisw profile add codex-minimax \
--agent codex --provider minimax-openai --model MiniMax-M3
[ -n "$KIMI_API_KEY" ] && aisw profile add claude-kimi \
--agent claude --provider kimi-claude --model claude-3-5-sonnet-20241022
[ -n "$KIMI_API_KEY" ] && aisw profile add codex-kimi \
--agent codex --provider kimi-openai --model moonshot-v1-8k
[ -n "$XIAOMI_API_KEY" ] && aisw profile add hermes-xiaomi \
--agent hermes --provider xiaomi-openai --model mimo-7b
echo ""
echo "=== 配置完成 ==="
echo ""
echo "启动代理: aisw start hermes hermes-deepseek"
echo ""
echo "可用 Profile:"
aisw profile list
7.2 使用方法
# 1. 设置环境变量
export DEEPSEEK_API_KEY="sk-..."
export MINIMAX_API_KEY="sk-..."
export KIMI_API_KEY="sk-..."
export XIAOMI_API_KEY="sk-..."
# 2. 运行一键配置
chmod +x setup-hermes-proxy.sh
./setup-hermes-proxy.sh
# 3. 启动 Hermes 代理
aisw start hermes hermes-deepseek
# 4. 在 Hermes 中调度其他 Agent
# 输入: "用 Claude 分析代码"
# 然后手动执行: aisw start claude claude-minimax
8. 故障排查
8.1 常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
| DeepSeek 返回 401 | API Key 无效 | 检查 DEEPSEEK_API_KEY |
| Hermes 无法启动 | HERMES_HOME 冲突 |
确认无其他 Hermes 实例运行 |
| Claude 启动失败 | settings.json 格式错误 | 检查 --dry-run 输出 |
| Codex 启动失败 | CODEX_HOME 权限问题 |
检查临时目录权限 |
| 本地 Agent 无法访问 API | 网络隔离 | 检查防火墙规则 |
8.2 调试命令
# 查看所有 Provider
aisw provider list
# 查看所有 Profile
aisw profile list
# 测试 DeepSeek 连通性
aisw test provider deepseek
# Dry-run 查看启动计划
aisw start hermes hermes-deepseek --dry-run
aisw start claude claude-minimax --dry-run
aisw start codex codex-minimax --dry-run
# 查看临时文件(启动后)
ls /tmp/aisw-*
# 查看 Hermes 日志
hermes doctor
cat ~/.hermes/logs/agent.log
8.3 恢复默认配置
# 重置所有配置
rm -rf ~/.innate-aiswitcher/pb_data
rm -f ~/.innate-aiswitcher/config.toml
# 重新初始化
aisw config template --path ~/.innate-aiswitcher/config.toml
aisw config import --path ~/.innate-aiswitcher/config.toml --no-backup
附录:完整 Profile 矩阵
| Agent \ Provider | DeepSeek | MiniMax | Kimi | Xiaomi | OpenAI |
|---|---|---|---|---|---|
| Hermes | ✅ hermes-deepseek | ✅ hermes-minimax | ✅ hermes-kimi | ✅ hermes-xiaomi | ✅ hermes-openai |
| Claude Code | ❌ 不支持 | ✅ claude-minimax | ✅ claude-kimi | ❌ 不支持 | ✅ claude-openai |
| Codex CLI | ✅ codex-deepseek | ✅ codex-minimax | ✅ codex-kimi | ❌ 不支持 | ✅ codex-openai |
| OpenCode | ✅ opencode-deepseek | ✅ opencode-minimax | ❌ 未配置 | ❌ 不支持 | ✅ opencode-openai |
| Kimi CLI | ❌ 不支持 | ❌ 不支持 | ✅ kimi-default | ❌ 不支持 | ❌ 不支持 |
| Gemini CLI | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| Trae CLI | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
注:✅ 表示已配置,❌ 表示协议不兼容或未配置。Claude Code 需要
anthropic协议,Codex/OpenCode/Hermes 需要openai_chat协议。
本指南对应 innate-aiswitcher 当前代码版本。如有更新,请以官方文档为准。