返回市场
第二意见

第二意见

作者:dshills12 星标更新:2025-08-11

项目介绍

第二意见 🔍

这是一个MCP(模型上下文协议)服务器,用于协助Claude Code审查提交和代码库。该工具利用外部LLM(OpenAI、Google Gemini、Ollama、Mistral)提供智能代码审查能力、git diff分析、提交质量评估以及未提交工作的分析。

功能

  • Git Diff 分析:使用LLM分析git diff输出以理解代码变更
  • 代码审查:使用AI辅助审查代码的质量、安全性和最佳实践
  • 提交分析:分析git提交的质量和是否遵循最佳实践
  • 未提交工作分析:分析所有未提交的更改或仅分析暂存的更改
  • 仓库信息:获取关于git仓库的信息
  • 多LLM支持:支持OpenAI、Google Gemini、Ollama(本地)、Mistral AI
  • 🚀 智能优化:动态令牌分配和任务特定温度调整
  • ⚡ 性能调优:针对提供商的优化和内存感知分块
  • 安全性:输入验证、安全路径处理和API密钥保护
  • 内存安全:可配置的内存限制和大diff流支持

安装

先决条件

  • Go 1.20 或更高版本
  • Git
  • Claude Code桌面应用

从源码构建

  1. 克隆仓库:
git clone https://github.com/dshills/second-opinion.git
cd second-opinion
  1. 安装依赖项:
go mod tidy
  1. 构建服务器:
go build -o bin/second-opinion

配置

Second Opinion支持两种配置方法,优先级顺序如下:

  1. JSON配置文件(首选):在您的主目录中创建~/.second-opinion.json
  2. 环境变量:使用.env文件或系统环境变量

JSON配置(推荐)

在您的主目录中创建一个.second-opinion.json文件:

{
  "default_provider": "openai",
  "temperature": 0.3,
  "max_tokens": 4096,
  "server_name": "Second Opinion 🔍",
  "server_version": "1.0.0",
  "openai": {
    "api_key": "sk-your-openai-api-key",
    "model": "gpt-5-mini"
  },
  "google": {
    "api_key": "your-google-api-key",
    "model": "gemini-2.0-flash-exp"
  },
  "ollama": {
    "endpoint": "http://localhost:11434",
    "model": "devstral:latest"
  },
  "mistral": {
    "api_key": "your-mistral-api-key",
    "model": "mistral-small-latest"
  },
  "memory": {
    "max_diff_size_mb": 10,
    "max_file_count": 1000,
    "max_line_length": 1000,
    "enable_streaming": true,
    "chunk_size_mb": 1
  }
}

🚀 智能优化功能:

  • 动态令牌分配:根据diff大小自动调整令牌(4096-32768)
  • 任务特定温度:基于分析类型优化温度(0.1-0.3)
  • 提供商优化:每个LLM提供商的自定义参数
  • 内存管理:大型diff和高文件计数的自动分块

环境变量配置

如果没有找到JSON配置,服务器会回退到环境变量:

  1. 复制示例环境文件:
cp .env.example .env
  1. 编辑.env并配置您的LLM提供商:
# 设置默认提供商
DEFAULT_PROVIDER=openai  # 或 google, ollama, mistral

# 配置每个提供商及其API密钥和首选模型
OPENAI_API_KEY=sk-your-openai-api-key
OPENAI_MODEL=gpt-5-mini  # 或 gpt-5, gpt-5-nano, gpt-5-chat-latest, gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-3.5-turbo

GOOGLE_API_KEY=your-google-api-key
GOOGLE_MODEL=gemini-2.0-flash-exp  # 或 gemini-1.5-flash, gemini-1.5-pro

OLLAMA_ENDPOINT=http://localhost:11434
OLLAMA_MODEL=devstral:latest  # 或 llama3.2, codellama, mistral, 等

MISTRAL_API_KEY=your-mistral-api-key
MISTRAL_MODEL=mistral-small-latest  # 或 mistral-large-latest, codestral-latest

# 全局设置适用于所有提供商
LLM_TEMPERATURE=0.3  # 控制随机性(0.0-2.0,默认值:0.3)
LLM_MAX_TOKENS=4096  # 最大响应长度(默认值:4096)

使用Claude Code设置

1. 查找Claude Code配置

配置文件的位置取决于您的操作系统:

  • macOS~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json
  • Linux~/.config/Claude/claude_desktop_config.json

2. 编辑配置

打开配置文件并添加Second Opinion服务器:

选项1:使用JSON配置(推荐)

{
  "mcpServers": {
    "second-opinion": {
      "command": "/path/to/second-opinion/bin/second-opinion"
    }
  }
}

/path/to/second-opinion替换为您克隆仓库的实际路径。

选项2:使用环境变量

{
  "mcpServers": {
    "second-opinion": {
      "command": "/path/to/second-opinion/bin/second-opinion",
      "env": {
        "DEFAULT_PROVIDER": "openai",
        "OPENAI_API_KEY": "your-openai-api-key",
        "OPENAI_MODEL": "gpt-5-mini",
        "LLM_TEMPERATURE": "0.3",
        "LLM_MAX_TOKENS": "4096"
      }
    }
  }
}

3. 重启Claude Code

保存配置后,重启Claude Code使更改生效。

4. 验证安装

在Claude Code中,您应该能看到“second-opinion”在MCP服务器列表中。您可以测试它,询问:

“你能从当前目录获取哪些git仓库信息?”

可用工具

1. analyze_git_diff 🚀 优化

分析git diff输出以了解代码变更,使用配置的LLM进行自动优化。

参数:

  • diff_content(必需):要分析的git diff输出
  • summarize(可选):是否提供变更总结
  • provider(可选):使用的LLM提供商(覆盖默认值)
  • model(可选):使用的模型(覆盖提供商默认值)

智能优化:

  • 动态令牌分配:根据diff大小分配4096-32768个令牌
  • 温度调整:0.25优化用于diff分析
  • 分块:对于大型diff(>10MB或>1000个文件)自动分块
  • 提供商特定:每个LLM提供商的自定义参数

Claude Code中的示例:

“分析这个git diff并告诉我有什么变化:[粘贴diff内容]”

2. review_code 🚀 优化

使用配置的LLM审查代码的质量、安全性和最佳实践,进行任务特定优化。

参数:

  • code(必需):要审查的代码
  • language(可选):代码的编程语言
  • focus(可选):特定关注领域 - securityperformancestyleall
  • provider(可选):使用的LLM提供商(覆盖默认值)
  • model(可选):使用的模型(覆盖提供商默认值)

智能优化:

  • 任务特定温度:0.1用于安全关注(高精度),0.2用于一般代码审查
  • 动态令牌分配:根据代码大小进行扩展以进行全面分析
  • 关注领域意识分析:每个关注领域的专用提示和参数

Claude Code中的示例:

“审查这段Python代码的安全问题:[粘贴代码]”

3. analyze_commit 🚀 优化

使用配置的LLM分析git提交的质量和是否遵循最佳实践,进行提交特定优化。

参数:

  • commit_sha(可选):要分析的git提交SHA(默认:HEAD)
  • repo_path(可选):git仓库路径(默认:当前目录)
  • provider(可选):使用的LLM提供商(覆盖默认值)
  • model(可选):使用的模型(覆盖提供商默认值)

智能优化:

  • 提交分析温度:0.2用于一致且确定性的提交分析
  • 内存安全diff处理:处理大型提交时自动截断
  • 综合分析:包括提交消息质量、diff分析和最佳实践

Claude Code中的示例:

“分析此仓库的最新提交”
“分析提交abc123并告诉我是否遵循最佳实践”

4. analyze_uncommitted_work 🚀 优化

分析git仓库中的未提交更改,帮助准备提交,进行智能优化。

参数:

  • repo_path(可选):git仓库路径(默认:当前目录)
  • staged_only(可选):仅分析暂存的更改(默认:false,分析所有未提交的更改)
  • provider(可选):使用的LLM提供商(覆盖默认值)
  • model(可选):使用的模型(覆盖提供商默认值)

智能优化:

  • 代码审查温度:0.2用于平衡分析未提交的更改
  • 大量更改集处理:对广泛的修改自动分块
  • 上下文感知分析:针对暂存与所有未提交工作的定制分析

LLM分析包括:

  • 所有更改的摘要(修改、添加、删除的文件)
  • 更改的类型和性质(特性、bug修复、重构等)
  • 提交的完整性和准备情况
  • 潜在的问题或关注点
  • 如果更改准备好提交,建议的提交消息
  • 如果更改应拆分,组织提交的建议

Claude Code中的示例:

“分析我的未提交更改并建议提交消息”
“在我提交之前审查我的暂存更改”
“我是否应该将当前更改拆分为多个提交?”

5. get_repo_info

获取关于git仓库的信息(无LLM分析)。

参数:

  • repo_path(可选):git仓库路径(默认:当前目录)

Claude Code中的示例:

“显示有关此git仓库的信息”

安全特性

  • 输入验证:所有仓库路径和提交SHA都经过验证以防止命令注入
  • 路径限制:仓库路径必须在当前工作目录内
  • API密钥保护:API密钥绝不会在错误消息或日志中暴露
  • HTTP超时:所有LLM API调用都有30秒超时以防止挂起
  • 并发访问:线程安全的提供商管理以支持并发请求

优化系统 🚀

Second Opinion包含一个全面的优化系统,能够根据内容和上下文自动调整性能:

动态令牌分配

  • 4096令牌:非常小的diff(<5KB)
  • 6144令牌:小的diff(5-20KB)
  • 8192令牌:中等大小的diff(20-50KB)
  • 12288令牌:大的diff(50-150KB)
  • 16384令牌:非常大的diff(150-500KB)
  • 32768令牌:巨大的diff(>500KB)

任务特定温度设置

  • 0.1:安全审查(最大精度)
  • 0.2:代码审查和提交分析(大部分确定性)
  • 0.25:diff分析(稍微灵活)
  • 0.3:架构审查(允许创意)

提供商特定优化

  • OpenAI:完全令牌分配,top_p=0.9
  • Google:限制在8192令牌,专注于采样(top_k=20,top_p=0.8)
  • Mistral:保守分配,top_p=0.8
  • Ollama:本地模型优化,repeat_penalty=1.05

内存管理

  • 自动分块:大型diff(>10MB或>1000个文件)智能分割
  • 智能分块大小:根据文件数量适应分块大小
  • 内存感知流:启用大型操作的流

开发

项目结构

second-opinion/
├── main.go              # MCP服务器设置和工具注册
├── handlers.go          # 工具处理器实现
├── validation.go        # 输入验证函数
├── config/              # 配置加载和优化
│   ├── config.go        # 主配置及优化方法
│   └── optimization_test.go # 综合优化测试
├── llm/                 # LLM提供商实现
│   ├── provider.go      # 提供商接口、提示和优化包装器
│   ├── openai.go        # OpenAI实现
│   ├── google.go        # Google Gemini实现
│   ├── ollama.go        # Ollama实现,带有高级选项
│   └── mistral.go       # Mistral实现,带有额外参数
├── CLAUDE.md           # Claude Code特定指令
└── TODO.md             # 开发路线图

运行测试

# 运行所有测试
go test ./... -v

# 特别运行优化测试
go test ./config -v

# 运行特定测试套件
go test ./llm -v -run TestProviderConnections

# 带有竞态检测运行
go test -race ./...

# 带有覆盖率运行
go test -cover ./...

代码检查

# 如果尚未安装,请安装golangci-lint
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

# 运行代码检查
golangci-lint run

# 尽可能自动修复问题
golangci-lint run --fix

构建

# 为当前平台构建
go build -o bin/second-opinion

# 带有竞态检测器构建(用于开发)
go build -race -o bin/second-opinion

# 为不同平台构建
GOOS=darwin GOARCH=amd64 go build -o bin/second-opinion-darwin-amd64
GOOS=linux GOARCH=amd64 go build -o bin/second-opinion-linux-amd64
GOOS=windows GOARCH=amd64 go build -o bin/second-opinion-windows-amd64.exe

故障排除

常见问题

  1. “提供商未配置”错误

    • 确保已设置~/.second-opinion.json或环境变量
    • 检查API密钥是否有效且具有适当的权限
  2. “不是git仓库”错误

    • 确保在包含.git文件夹的目录中运行工具
    • 工具会验证路径是git仓库以确保安全
  3. 超时错误

    • 检查您的互联网连接
    • 对于Ollama,确保本地服务器正在运行:ollama serve
    • 如果超时持续存在,考虑使用更快的模型
  4. 权限被拒绝错误

    • 工具仅允许访问当前工作目录及其子目录
    • 确保二进制文件具有执行权限:chmod +x bin/second-opinion

调试模式

要查看详细的日志,可以直接运行服务器:

./bin/second-opinion 2>debug.log

贡献

欢迎贡献!请:

  1. 分叉仓库
  2. 创建功能分支
  3. 确保所有测试通过且代码检查干净
  4. 提交拉取请求

参见TODO.md以了解计划的功能和已知问题。

内存使用

对于大型仓库,请参阅docs/MEMORY_USAGE.md以获取高效处理大型diff的配置选项。

许可

MIT