为 OpenCode CLI 配置两个可随时切换的专用大模型API密钥:
# 创建OpenCode配置目录
mkdir -p ~/.config/opencode
cat > ~/.config/opencode/config.yaml << 'EOF'
# OpenCode 配置文件
# 版本: 1.0
# 模型配置
models:
# DeepSeek Reasoner (v3.2)
deepseek-reasoner:
provider: "deepseek"
api_key: "${DEEPSEEK_API_KEY}" # 从环境变量读取
model: "deepseek-reasoner"
endpoint: "https://api.deepseek.com/v1"
version: "v3.2"
context_window: 128000
max_tokens: 4096
temperature: 0.1 # 代码生成推荐较低温度
# 字节跳动 Doubao 2.0 Code
doubao-code:
provider: "volcengine"
api_key: "${DOUBAO_API_KEY}" # 从环境变量读取
model: "doubao-2.0-code"
endpoint: "https://ark.cn-beijing.volces.com/api/v3"
context_window: 32000
max_tokens: 4096
temperature: 0.1
# 默认模型
default_model: "deepseek-reasoner"
# 全局设置
settings:
max_retries: 3
timeout_seconds: 120
cache_enabled: true
cache_dir: "~/.cache/opencode"
log_level: "info"
log_file: "~/.cache/opencode/logs/opencode.log"
EOF
# 编辑bash配置文件
cat >> ~/.bashrc << 'EOF'
# OpenCode API 密钥配置
export DEEPSEEK_API_KEY="sk-你的实际deepseek密钥"
export DOUBAO_API_KEY="你的实际doubao密钥"
# 安全提示:不要将此文件提交到版本控制
EOF
# 立即生效
source ~/.bashrc
# 可选:创建更安全的密钥文件
mkdir -p ~/.secrets
echo "sk-你的实际deepseek密钥" > ~/.secrets/deepseek_api_key.txt
echo "你的实际doubao密钥" > ~/.secrets/doubao_api_key.txt
chmod 600 ~/.secrets/*.txt
# 创建切换脚本目录
mkdir -p ~/bin
# 创建模型切换脚本
cat > ~/bin/switch-opencode-model << 'EOF'
#!/bin/bash
# OpenCode 模型切换脚本
MODEL="$1"
CONFIG_FILE="$HOME/.config/opencode/config.yaml"
case "$MODEL" in
"deepseek"|"deepseek-reasoner")
# 切换到DeepSeek
if [ -f "$CONFIG_FILE" ]; then
sed -i 's/default_model:.*/default_model: "deepseek-reasoner"/' "$CONFIG_FILE"
else
echo "default_model: \"deepseek-reasoner\"" > "$CONFIG_FILE"
fi
echo "✅ 已切换到 DeepSeek Reasoner (v3.2)"
;;
"doubao"|"doubao-code")
# 切换到Doubao
if [ -f "$CONFIG_FILE" ]; then
sed -i 's/default_model:.*/default_model: "doubao-code"/' "$CONFIG_FILE"
else
echo "default_model: \"doubao-code\"" > "$CONFIG_FILE"
fi
echo "✅ 已切换到 Doubao 2.0 Code"
;;
"status")
# 显示当前模型
if [ -f "$CONFIG_FILE" ]; then
CURRENT_MODEL=$(grep "default_model:" "$CONFIG_FILE" | cut -d'"' -f2)
echo "当前模型: $CURRENT_MODEL"
else
echo "未找到配置文件"
fi
;;
*)
echo "用法: switch-opencode-model [deepseek|doubao|status]"
echo ""
echo "可用选项:"
echo " deepseek 切换到 DeepSeek Reasoner (v3.2)"
echo " doubao 切换到 Doubao 2.0 Code"
echo " status 显示当前使用的模型"
exit 1
;;
esac
EOF
chmod +x ~/bin/switch-opencode-model
cat > ~/bin/opencode-env << 'EOF'
#!/bin/bash
# OpenCode 环境管理脚本
ACTION="$1"
MODEL="$2"
case "$ACTION" in
"use")
case "$MODEL" in
"deepseek")
export OPECODE_DEFAULT_MODEL="deepseek-reasoner"
export OPECODE_API_KEY="$DEEPSEEK_API_KEY"
export OPECODE_ENDPOINT="https://api.deepseek.com/v1"
echo "设置使用 DeepSeek Reasoner"
;;
"doubao")
export OPECODE_DEFAULT_MODEL="doubao-2.0-code"
export OPECODE_API_KEY="$DOUBAO_API_KEY"
export OPECODE_ENDPOINT="https://ark.cn-beijing.volces.com/api/v3"
echo "设置使用 Doubao 2.0 Code"
;;
*)
echo "未知模型: $MODEL"
exit 1
;;
esac
;;
"current")
echo "当前模型: ${OPECODE_DEFAULT_MODEL:-未设置}"
echo "API端点: ${OPECODE_ENDPOINT:-未设置}"
;;
*)
echo "用法: opencode-env [use|current] [deepseek|doubao]"
exit 1
;;
esac
EOF
chmod +x ~/bin/opencode-env
# 使用配置文件中设置的默认模型
opencode "编写一个Python函数计算斐波那契数列"
# 方法1:使用--model参数
opencode --model deepseek-reasoner "生成一个REST API示例"
opencode --model doubao-code "优化这段JavaScript代码"
# 方法2:使用切换脚本
switch-opencode-model deepseek
opencode "帮我分析这个算法的时间复杂度"
switch-opencode-model doubao
opencode "创建一个React组件"
# 创建对比测试脚本
cat > compare_models.sh << 'EOF'
#!/bin/bash
# 对比两个模型的输出
PROMPT="$1"
if [ -z "$PROMPT" ]; then
PROMPT="编写一个Python函数,实现二分查找算法"
fi
echo "测试提示: $PROMPT"
echo ""
# 使用DeepSeek
echo "=== DeepSeek Reasoner 输出 ==="
switch-opencode-model deepseek > /dev/null
opencode "$PROMPT"
echo ""
# 使用Doubao
echo "=== Doubao 2.0 Code 输出 ==="
switch-opencode-model doubao > /dev/null
opencode "$PROMPT"
EOF
chmod +x compare_models.sh
# 运行对比
./compare_models.sh "创建一个简单的TODO应用后端API"
# 为不同项目创建专用配置
cat > ~/projects/python-api/.opencode-config.yaml << 'EOF'
# Python API 项目专用配置
default_model: "deepseek-reasoner"
settings:
temperature: 0.1
max_tokens: 2048
EOF
# 使用项目配置
opencode --config ~/projects/python-api/.opencode-config.yaml "设计数据库模型"
# 查看当前配置
cat ~/.config/opencode/config.yaml
# 测试DeepSeek连接
switch-opencode-model deepseek
opencode --test-connection
# 测试Doubao连接
switch-opencode-model doubao
opencode --test-connection
# 测试DeepSeek的推理能力
opencode --model deepseek-reasoner """
分析以下代码的时间复杂度:
def find_duplicates(nums):
seen = set()
duplicates = []
for num in nums:
if num in seen:
duplicates.append(num)
else:
seen.add(num)
return duplicates
"""
# 测试Doubao的代码生成能力
opencode --model doubao-code """
生成一个完整的Express.js服务器,包含:
1. 用户注册/登录API
2. JWT认证中间件
3. 错误处理
4. 日志记录
"""
# 创建性能测试脚本
cat > benchmark_models.py << 'EOF'
#!/usr/bin/env python3
import subprocess
import time
test_prompts = [
"生成一个Python快速排序实现",
"创建一个简单的HTTP服务器",
"编写一个React计数器组件",
]
def test_model(model_name, prompt):
start_time = time.time()
try:
result = subprocess.run(
["opencode", "--model", model_name, prompt],
capture_output=True,
text=True,
timeout=30
)
elapsed = time.time() - start_time
return {
"success": result.returncode == 0,
"time": elapsed,
"output_length": len(result.stdout)
}
except subprocess.TimeoutExpired:
return {"success": False, "time": 30, "output_length": 0}
print("模型性能基准测试")
print("=" * 50)
for prompt in test_prompts:
print(f"\n测试: {prompt}")
# 测试DeepSeek
deepseek_result = test_model("deepseek-reasoner", prompt)
print(f" DeepSeek: {deepseek_result['time']:.2f}s, 输出长度: {deepseek_result['output_length']}")
# 测试Doubao
doubao_result = test_model("doubao-code", prompt)
print(f" Doubao: {doubao_result['time']:.2f}s, 输出长度: {doubao_result['output_length']}")
EOF
python3 benchmark_models.py
症状: Error: Invalid API key 或 401 Unauthorized
解决:
# 1. 检查密钥是否正确
echo "DeepSeek密钥: ${DEEPSEEK_API_KEY:0:10}..." # 显示前10位
echo "Doubao密钥: ${DOUBAO_API_KEY:0:10}..."
# 2. 重新获取密钥
# 访问对应平台重新生成API密钥
# 3. 更新配置
sed -i "s/old_key/新密钥/g" ~/.config/opencode/config.yaml
症状: Error: Model not found 或 404 Not Found
解决:
# 1. 检查模型标识符
# DeepSeek Reasoner: deepseek-reasoner
# Doubao 2.0 Code: doubao-2.0-code
# 2. 检查API端点
# DeepSeek: https://api.deepseek.com/v1
# Doubao: https://ark.cn-beijing.volces.com/api/v3
# 3. 查看官方文档确认模型状态
症状: 请求长时间无响应或超时错误
解决:
# 1. 增加超时时间
cat >> ~/.config/opencode/config.yaml << 'EOF'
settings:
timeout_seconds: 300 # 增加到5分钟
EOF
# 2. 检查网络连接
curl -I https://api.deepseek.com/v1
curl -I https://ark.cn-beijing.volces.com/api/v3
# 3. 使用更小的max_tokens
sed -i 's/max_tokens:.*/max_tokens: 1024/' ~/.config/opencode/config.yaml
症状: 切换模型后仍使用旧模型
解决:
# 1. 清除缓存
rm -rf ~/.cache/opencode
# 2. 重启终端会话
exec bash
# 3. 检查环境变量
env | grep -i opencode
env | grep -i deepseek
env | grep -i doubao
# 4. 验证配置文件
cat ~/.config/opencode/config.yaml
# 设置正确的文件权限
chmod 600 ~/.config/opencode/config.yaml
chmod 700 ~/.secrets/
# 使用gitignore避免意外提交
echo ".secrets/" >> ~/.gitignore
echo "*.key" >> ~/.gitignore
echo "config.yaml" >> ~/.gitignore
# 启用详细日志
cat >> ~/.config/opencode/config.yaml << 'EOF'
logging:
level: "debug"
file: "/var/log/opencode/audit.log"
retention_days: 30
EOF
# 定期检查使用情况
cat > check_usage.sh << 'EOF'
#!/bin/bash
echo "API使用统计"
echo "=========="
echo "DeepSeek调用次数:"
grep -c "deepseek" ~/.cache/opencode/logs/opencode.log
echo "Doubao调用次数:"
grep -c "doubao" ~/.cache/opencode/logs/opencode.log
EOF
# 创建使用限制脚本
cat > limit_usage.sh << 'EOF'
#!/bin/bash
# 每日使用限制
DEEPSEEK_LIMIT=100 # 每日最多100次
DOUBAO_LIMIT=50 # 每日最多50次
# 检查今日使用量
TODAY=$(date +%Y-%m-%d)
DEEPSEEK_COUNT=$(grep -c "$TODAY.*deepseek" ~/.cache/opencode/logs/opencode.log 2>/dev/null || echo 0)
DOUBAO_COUNT=$(grep -c "$TODAY.*doubao" ~/.cache/opencode/logs/opencode.log 2>/dev/null || echo 0)
if [ "$DEEPSEEK_COUNT" -ge "$DEEPSEEK_LIMIT" ]; then
echo "⚠️ DeepSeek今日使用已达上限($DEEPSEEK_LIMIT)"
switch-opencode-model doubao
fi
if [ "$DOUBAO_COUNT" -ge "$DOUBAO_LIMIT" ]; then
echo "⚠️ Doubao今日使用已达上限($DOUBAO_LIMIT)"
echo "请明天再使用或联系管理员增加配额"
fi
EOF
# ~/.config/opencode/models.yaml
deepseek-reasoner:
strengths:
- "逻辑推理"
- "算法分析"
- "代码优化"
- "技术文档"
best_for:
- "算法题目"
- "系统设计"
- "性能优化"
- "代码审查"
parameters:
temperature: 0.1
top_p: 0.95
frequency_penalty: 0.0
presence_penalty: 0.0
doubao-code:
strengths:
- "代码生成"
- "前端开发"
- "快速原型"
- "中文注释"
best_for:
- "Web开发"
- "移动应用"
- "脚本编写"
- "教学示例"
parameters:
temperature: 0.2
top_p: 0.9
frequency_penalty: 0.1
presence_penalty: 0.1
cat > smart_model_selector.sh << 'EOF'
#!/bin/bash
# 根据任务类型智能选择模型
PROMPT="$1"
# 分析任务类型
if [[ "$PROMPT" =~ (算法|复杂度|优化|分析) ]]; then
echo "选择 DeepSeek Reasoner (擅长逻辑推理)"
switch-opencode-model deepseek
elif [[ "$PROMPT" =~ (前端|React|Vue|组件|界面) ]]; then
echo "选择 Doubao 2.0 Code (擅长代码生成)"
switch-opencode-model doubao
elif [[ "$PROMPT" =~ (中文|注释|示例|教学) ]]; then
echo "选择 Doubao 2.0 Code (中文支持更好)"
switch-opencode-model doubao
else
echo "选择默认模型 DeepSeek Reasoner"
switch-opencode-model deepseek
fi
# 执行命令
opencode "$PROMPT"
EOF
# 创建成本计算脚本(估算)
cat > cost_calculator.py << 'EOF'
#!/usr/bin/env python3
import json
from datetime import datetime
# 定价(估算,实际以官方为准)
PRICING = {
"deepseek-reasoner": {
"input": 0.14, # 每百万tokens
"output": 0.28, # 每百万tokens
},
"doubao-code": {
"input": 0.12, # 每百万tokens
"output": 0.24, # 每百万tokens
}
}
def estimate_cost(model, input_tokens, output_tokens):
"""估算成本"""
if model not in PRICING:
return 0
input_cost = (input_tokens / 1_000_000) * PRICING[model]["input"]
output_cost = (output_tokens / 1_000_000) * PRICING[model]["output"]
return input_cost + output_cost
# 示例
if __name__ == "__main__":
# 假设一次调用
models = ["deepseek-reasoner", "doubao-code"]
input_tokens = 1000
output_tokens = 500
for model in models:
cost = estimate_cost(model, input_tokens, output_tokens)
print(f"{model}: ${cost:.6f} 每千次调用约 ${cost*1000:.2f}")
EOF
my-project/
├── .opencode-config.yaml # 项目专用配置
├── scripts/
│ ├── switch-model.sh # 项目模型切换
│ └── code-review.sh # 代码审查脚本
├── docs/
│ └── model-usage.md # 模型使用记录
└── .gitignore # 忽略配置文件
# 团队共享配置模板
team_config:
default_model: "deepseek-reasoner"
shared_keys: false # 每人使用自己的API密钥
guidelines:
- "算法问题优先使用DeepSeek"
- "前端代码优先使用Doubao"
- "重要代码必须人工审查"
- "记录模型使用原因"
# 定期评估模型性能
cat > evaluate_models.sh << 'EOF'
#!/bin/bash
# 每月评估模型表现
MONTH=$(date +%Y-%m)
LOG_FILE="model-evaluation-$MONTH.md"
echo "# 模型评估报告 ($MONTH)" > $LOG_FILE
echo "" >> $LOG_FILE
# 收集使用数据
echo "## 使用统计" >> $LOG_FILE
echo "- DeepSeek使用次数: $(grep -c "deepseek" ~/.cache/opencode/logs/*.log)" >> $LOG_FILE
echo "- Doubao使用次数: $(grep -c "doubao" ~/.cache/opencode/logs/*.log)" >> $LOG_FILE
# 测试标准任务
echo "" >> $LOG_FILE
echo "## 标准任务测试" >> $LOG_FILE
TASKS=(
"编写快速排序算法"
"创建React Todo组件"
"设计REST API"
)
for task in "${TASKS[@]}"; do
echo "### 任务: $task" >> $LOG_FILE
# 这里可以添加实际测试代码
echo "测试结果: [待完成]" >> $LOG_FILE
done
echo "报告已生成: $LOG_FILE"
EOF
1. 检查网络连接
↓
2. 验证API密钥
↓
3. 检查模型标识符
↓
4. 查看日志文件
↓
5. 联系技术支持
配置完成时间: ____________________
配置人: _________________________
验证人: _________________________
配置指南版本: 1.1
最后更新: 2026-03-18
适用OpenCode版本: 1.2.27+
返回