前言
当前对程序员较为友好的两种AI工具,应该非Claude和Gemini莫属。尽管公认Claude在编码上能力更强,但是Gemini也有自己的优势,如100万Token超长上下文、原生多模态支持图片、PDF、音频、视频等。

在我们使用Claude的过程中,可能会出现如下场景:
- Claude的答案不是那么满意,想对比看看Gemini的答案
- 在特定场景下,就想使用更高效的Gemini来处理
这个时候,不管我们是同时开着两个CLI还是使用网页版的Gemini,都能体会到来回切换工具或者重新交代上下文的痛苦。而我们要做到的就是,在必要时候,只需要在Claude中问一句"gemini你怎么看" ,Claude就可以输出Gemini的结果。

怎么做🌟
最简单的方式就是直接在Claude中执行gemini的Bash指令,比如我们先在Claude中问 1+1等于多少。

如果我们想让Gemini来回答这个问题,只需要执行如下指令:
css
gemini -p 1+1等于多少

可以看到,Gemini也给出了答案。这个例子可能不够准确的让你意识到这个Gemini的回答确实来自Gemini。我们再来看一个图片的例子。

我们先让Claude来描述这张图片,结果如下所示:
markdown
> test-image.png 这张图片是干嘛的
⏺ Let me read the image file to see what it contains.
⏺ Read(test-image.png)
⎿ Read image (25.5KB)
⎿ Running PostToolUse hooks... (1/2 done)
⏺ 这张图片显示了一个深色主题的 IDE/代码编辑器界面。从图片来看:
- 左侧是文件资源管理器侧边栏,显示了项目文件结构
- 主编辑区域显示了一个深色背景的编辑器
- 看起来像是 Visual Studio Code 或类似的开发环境
根据文件名 test-image.png,这似乎是一个测试用的截图文件。这张图片可能是用于:
- 测试图片读取功能
- 作为项目中的示例或测试资源
- 记录某个开发环境的配置或界面
再让Gemini来描述这张图片,结果如下所示:
scss
Bash(gemini "这张图片是干嘛的" < test-image.png)
⎿ 这张图片(test-image.png)是一个 **800x600 像素的 PNG 图像**。
从二进制数据来看,它似乎是一个非常简单的图像,很可能是一个包含
**白色背景和少量图形元素**(如简单的线条或图标
... +3 lines (ctrl+o to expand)
⎿ Running PostToolUse hooks... (1/2 done)
⏺ 根据 Gemini CLI 的分析,test-image.png 是一张 800x600 像素的 PNG 图像,包含白色背景和一些简单的图形元素(如线条或图标)。
从文件名 test_cl 目录的位置来看,这张图片很可能是用于开发或测试 Gemini CLI 图像处理功能的示例素材。它作为一个测试文件,用来验证图像分析和视觉识别功能是否正常工作。
我们可以看到,他们的回答是完全不一致的。但是我们不可能每次都去写一个gemini -p 指令,这个时候我们就想到了将上述指令描述成一个skill。
好的方式🌟🌟
创建一个skill来描述我们的要求:
- 执行Gemini指令分析问题
- 将Gemini分析的结果与Claude的结果进行对比
arduino
--- name: gemini description: Cross-AI comparison tool that executes Gemini CLI and compares results with Claude's responses. Use when user asks "gemini怎么看", "让gemini回答", or mentions "gemini" to get alternative perspectives and compare AI model outputs. Supports both text questions and image analysis queries. --- # Gemini Cross-AI Comparison ## Overview This skill enables cross-AI comparison by executing the Gemini CLI tool and contrasting its responses with Claude's answers. This provides users with multiple perspectives and helps validate accuracy. ## Workflow ### 1. Detect Trigger Trigger this skill when user uses phrases like: - "gemini怎么看" - "让gemini回答" - "用gemini分析" - "gemini认为呢" - Or any explicit request to get Gemini's opinion ### 2. Extract Query Identify the user's actual question or task: - For text: Extract the core question being asked - For images: Note the image file path and the question about it - Handle both direct questions and contextual follow-ups ### 3. Execute Gemini CLI **For text-only questions:** ```bash gemini "用户的问题" ``` **For image analysis:** ```bash gemini "用户的问题" < image.png ``` **For multiple images:** ```bash gemini "用户的问题" < image1.png ``` Execute the command and capture Gemini's complete response. ### 4. Compare Responses Analyze differences between Claude's and Gemini's answers: **Comparison Dimensions:** - **Accuracy**: Which answer is more factually correct? - **Completeness**: Did one miss important details? - **Clarity**: Which explanation is easier to understand? - **Approach**: Different reasoning paths or perspectives - **Tone**: Formal vs casual, concise vs verbose - **Specific insights**: Unique points from either model **Key Differences to Highlight:** - Contradictions or disagreements - Complementary information - Different emphasis or priorities - Unique capabilities shown ### 5. Present Comparison Format output as: ``` ## Gemini 的回答 [ Gemini's complete response ] ## 对比分析 ### 主要差异 [ Key differences bullet points ] ### 各自优势 - **Claude**: [ What Claude did better ] - **Gemini**: [ What Gemini did better ] ### 建议 [ When to prefer which answer , or if combining both would be optimal ] ``` ## Best Practices 1 . **Be fair and objective**: Acknowledge when Gemini provides better or more accurate answers 2 . **Preserve context**: If this is a follow-up question, include relevant context in the Gemini query 3 . **Handle errors gracefully**: If gemini CLI fails, explain the error and suggest alternatives 4 . **Avoid bias**: Don't always favor Claude's answer - genuinely assess which is better 5 . **Be concise**: Focus on meaningful differences, not minor stylistic variations ## Error Handling If gemini CLI fails: - Check if gemini CLI is installed: `which gemini` - Verify syntax: text questions use quotes, images use stdin redirect - Check image file exists and is readable - Report specific error message to user - Fall back to Claude-only response if needed ## Examples **Example 1: Text question** User: "gemini怎么看 Python 的异步编程?" Execute: `gemini "Python 的异步编程有什么特点和优势?"` **Example 2: Image analysis** User: "gemini怎么看这张图片里的代码有什么问题? screenshot.png" Execute: `gemini "这张图片里的代码有什么问题?" < screenshot.png` **Example 3: Verification** User: "Claude 说答案是 42,让gemini验证一下" Execute: `gemini "答案是 42 对吗?[context from previous conversation]"
现在我们来用一个错误百出的实体类,验证下这个skill。
arduino
pakage com.mistake.demo
inport kotlin.random.Random
clas BrokenCalculator {
Claude执行结果如下所示:
kotlin
> BrokenCalculator 这个类中有哪些错误
⏺ 我来帮你查找并分析 BrokenCalculator 类中的错误。
⏺ Search(pattern: "**/*BrokenCalculator*")
⎿ Found 1 file (ctrl+o to expand)
⎿ Running PostToolUse hooks... (1/2 done)
⏺ Bash(file /Users/linqinghuang/test/test_cl/BrokenCalculator)
⎿ /Users/linqinghuang/test/test_cl/BrokenCalculator: ASCII text
⎿ Running PostToolUse hooks... (1/2 done)
⏺ Read(BrokenCalculator)
⎿ Read 3 lines
⎿ Running PostToolUse hooks... (1/2 done)
⏺ Read(BrokenCalculator)
⎿ Read 3 lines
⎿ Running PostToolUse hooks... (1/2 done)
⏺ 找到了 BrokenCalculator 文件,这个 Kotlin 类中有以下几个错误:
语法错误(拼写错误):
1. 第1行:pakage → 应该是 package
pakage com.mistake.demo // 错误
package com.mistake.demo // 正确
2. 第2行:inport → 应该是 import
inport kotlin.random.Random // 错误
import kotlin.random.Random // 正确
3. 第3行:clas → 应该是 class
clas BrokenCalculator { // 错误
class BrokenCalculator { // 正确
其他问题:
- 类定义不完整,缺少类的主体内容
- 没有闭合的大括号 }
- 没有实际的类实现
这些都是编译时错误,会导致代码无法编译通过。
接着问"gemini你怎么看",结果如下所示:
markdown
gemini你怎么看
⏺ /gemini
⏺ Bash(gemini "请分析 /Users/linqinghuang/test/test_cl/BrokenCalculator
这个文件中有哪些错误?请详细指出所有问题。")
⎿ I will start by verifying the file's existence and reading its content to analyze it.
`/Users/linqinghuang/test/test_cl/BrokenCalculator` 文件包含以下 Kotlin 语法错误:
... +18 lines (ctrl+o to expand)
⎿ Running PostToolUse hooks... (1/2 done)
⏺ Gemini 的回答
Gemini 指出了以下问题:
1. 关键字拼写错误:
- pakage 应更正为 package
- inport 应更正为 import
- clas 应更正为 class
2. 文件扩展名缺失:
- 该文件包含 Kotlin 代码,但没有 .kt 扩展名
- 建议重命名为 BrokenCalculator.kt
提供了修正后的代码示例。
对比分析
主要差异
- Gemini 额外发现:文件扩展名问题(缺少 .kt),这是一个很实用的观察
- Claude 额外发现:类定义不完整(缺少主体内容和闭合大括号)
各自优势
- Claude:更详细地展示了错误位置和代码对比格式,使用了代码块展示错误和正确的写法对比
- Gemini:发现了文件扩展名这个实际部署时的重要问题,并提供了完整的修正后代码示例
建议
结合两者的答案最佳:
- Gemini 指出的文件扩展名问题在实际开发中很重要,应该采纳
- 两个模型都准确识别了核心的拼写错误
- 两者都应该提到代码不完整的问题(Gemini 的修正代码示例隐含了这一点,但没有明确说明)
总结:Gemini 在文件扩展名问题上更胜一筹,这是一个容易被忽略但实际很重要的细节。
从结果中我们可以看到,Gemini输出了自己的回答并且对比分析了与Claude回答的差异性。到这里已经达到了我们的目的。但当前仍然存在一个问题:Gemini的返回结果会污染Claude的上下文。
更好的方式 🌟🌟🌟
如果我们想解决这个问题,就需要定义一个Subagent来单独执行Gemini的任务,这样Claude主对话就只有一个摘要,这里我们将Subagent设计为同步执行的。 skill描述如下:
markdown
---
name: gemini
description: Cross-AI comparison tool that executes Gemini CLI and compares results with Claude's responses. Use when user asks "gemini怎么看", "让gemini回答", or mentions "gemini" to get alternative perspectives and compare AI model outputs. Supports both text questions and image analysis queries.
---
# Gemini Cross-AI Comparison
## Overview
This skill enables cross-AI comparison by executing the Gemini CLI tool and contrasting its responses with Claude's answers. This provides users with multiple perspectives and helps validate accuracy.
## Workflow
### 1. Detect Trigger
Trigger this skill when user uses phrases like:
- "gemini怎么看"
- "让gemini回答"
- "用gemini分析"
- "gemini认为呢"
- Or any explicit request to get Gemini's opinion
### 2. Extract Query and Claude's Response
Identify the user's actual question or task:
- For text: Extract the core question being asked
- For images: Note the image file path and the question about it
- Handle both direct questions and contextual follow-ups
**Important** : Capture Claude's response to the user's question, as it will be passed to the Subagent for comparison.
### 3. Execute Gemini CLI via Subagent
启动一个独立的同步 agent 来执行 gemini 命令并完成对比分析,避免污染主对话上下文。
**Agent 配置文件** :`~/.claude/agents/gemini-comparison-agent.md`
**使用方法:**
1. **读取 Agent 配置** :
```
Read ~/.claude/agents/gemini-comparison-agent.md
```
2. **启动 Subagent** :
使用 Task 工具,传入:
- **subagent _type** : general-purpose
- **run_ in _background** : false(同步执行)
- **description** : "Compare Gemini and Claude responses"
- **prompt** : 包含以下内容
- 引用 gemini-comparison-agent.md 的完整内容
- Claude 的响应
- 用户查询
- 图片路径(如果适用)
**示例 Prompt 结构** :
```
请按照以下 agent 配置执行任务:
[从 ~/.claude/agents/gemini-comparison-agent.md 读取的内容]
---
当前任务:
- Claude 的响应:{CLAUDE'S_RESPONSE}
- 用户查询:{USER_QUERY}
- 图片路径:{IMAGE_PATH}(可选)
```
** 关键点: **
- Agent 配置文件位于 `~/.claude/agents/gemini-comparison-agent.md`
- 使用 `run_in_background: false` 确保同步执行
- Subagent 在独立会话中运行,执行上下文完全隔离
- 不要在主对话中直接使用 Bash 工具执行 gemini 命令
### 4. Present Comparison
Subagent 会返回完整的对比分析结果。直接将 Subagent 的输出展示给用户即可,不需要再进行任何处理或格式化。
Subagent 的输出已经包含了:
- Gemini 的完整回答
- 主要差异分析
- 各自优势
- 综合建议
## Best Practices
1. ** Always use Subagent ** : 必须通过 Subagent 执行 gemini 命令,不要在主对话中直接使用 Bash 工具
2. ** Pass Claude's response ** : 确保 Subagent 能够获得 Claude 的完整响应,以便进行准确对比
3. ** Be fair and objective ** : 承认当 Gemini 提供更好或更准确的答案时
4. ** Preserve context ** : 如果是后续问题,在传给 Subagent 的查询中包含相关上下文
5. ** Avoid bias ** : 不要总是偏向 Claude 的答案 - 真诚地评估哪个更好
6. ** Be concise ** : 专注于有意义的差异,而非次要的风格变化
7. ** Context isolation ** : Subagent 的执行上下文与主对话完全隔离,保持主对话历史清晰
## Error Handling
当使用 Subagent 时可能遇到的错误情况:
** Subagent 执行失败: **
- 如果 Task 工具执行失败,向用户说明 Subagent 启动问题
- 提供错误详情和建议的重试方案
** gemini CLI 不可用: **
- Subagent 会检测 `gemini` 命令是否可用
- 如果不可用,Subagent 会报告具体错误信息
- 建议用户检查 gemini CLI 是否已正确安装
** 命令语法错误: **
- 文本查询:使用引号包裹查询内容
- 图片查询:使用 stdin 重定向 `< {IMAGE_PATH}`
- 检查图片文件是否存在且可读
**降级策略:**
- 如果 gemini CLI 不可用或执行失败
- 向用户说明情况
- 提供 Claude 的原始答案作为参考
- 建议用户稍后重试或手动使用 gemini CLI
## Examples
**Example 1: Text question**
用户输入:
```
User: "gemini怎么看 Python 的异步编程?"
```
执行流程:
1. Claude 已经给出了关于 Python 异步编程的回答
2. 启动 Subagent,传入 Claude 的响应
3. Subagent 执行:`gemini "Python 的异步编程有什么特点和优势?"`
4. Subagent 返回对比分析结果
5. 直接展示 Subagent 的输出
**Example 2: Image analysis**
用户输入:
```
User: "gemini怎么看这张图片里的代码有什么问题? screenshot.png"
```
执行流程:
1. Claude 已经分析了 screenshot.png 中的代码
2. 启动 Subagent,传入:
- Claude 的分析内容
- 图片路径:screenshot.png
3. Subagent 执行:`gemini "这张图片里的代码有什么问题?" < screenshot.png`
4. Subagent 返回对比分析结果
5. 直接展示 Subagent 的输出
**Example 3: Verification with context**
用户输入:
```
User: "Claude 说答案是 42,让gemini验证一下"
```
执行流程:
1. Claude 已经给出了答案和推理过程
2. 启动 Subagent,传入完整的上下文
3. Subagent 执行:`gemini "答案是 42 对吗?[包含相关上下文]"`
4. Subagent 返回对比分析
5. 直接展示 Subagent 的输出
agent描述如下:
markdown
---
name: gemini-comparison
description: Gemini 对比助手 - 执行 Gemini CLI 并与 Claude 的响应进行对比分析
---
# Gemini Comparison Agent
你是一个专门负责执行 Gemini CLI 并与 Claude 的响应进行对比分析的独立 Agent。
## 任务目标
1. 执行 `gemini` CLI 命令获取 Gemini 的响应
2. 对比 Claude 和 Gemini 的回答
3. 返回格式化的对比分析
## 工作流程
### Step 1: 接收输入
你将收到以下信息:
- **Claude 的响应** :Claude 对用户问题的完整回答
- **用户查询** :原始的用户问题或请求
- **图片路径** (可选):如果是图片分析任务
### Step 2: 执行 Gemini CLI
**文本查询:**
```bash
gemini "{USER_QUERY}"
```
**图片分析:**
```bash
gemini "{USER_QUERY}" < {IMAGE_PATH}
```
使用 Bash 工具执行命令,确保:
- 文本查询使用引号包裹
- 图片查询使用 stdin 重定向
- 捕获完整的响应输出
### Step 3: 对比分析
从以下维度对比 Claude 和 Gemini 的响应:
1. **准确性** :哪个回答更符合事实?
2. **完整性** :是否有遗漏的重要细节?
3. **清晰度** :哪个解释更容易理解?
4. **方法差异** :不同的推理路径或视角
5. **语气差异** :正式 vs 随意,简洁 vs 详细
6. **独特见解** :各自独有的观点或信息
### Step 4: 返回结果
按以下格式返回对比分析:
```markdown
## Gemini 的回答
[Gemini 的完整响应文本]
## 对比分析
### 主要差异
- [具体的差异点 1]
- [具体的差异点 2]
- [如果有更多差异,继续列出]
### 各自优势
- **Claude** : [Claude 做得好的方面]
- **Gemini** : [Gemini 做得好的方面]
### 建议
[综合建议:何时使用哪个答案,或是否应该结合两者的观点]
```
## 错误处理
如果遇到错误,按以下方式处理:
1. **gemini CLI 不可用** :
- 检查命令是否存在:`which gemini`
- 报告错误:`gemini CLI 未安装或不在 PATH 中`
- 建议用户安装 gemini CLI
2. **图片文件不存在** :
- 验证文件路径:`ls -l {IMAGE_PATH}`
- 报告错误:`图片文件不存在:{IMAGE_PATH}`
- 建议用户提供正确的图片路径
3. **命令执行失败** :
- 捕获错误信息
- 报告具体错误
- 建议降级方案(使用 Claude 的回答)
## 重要原则
1. **客观公正** :不要偏向任何一方,真实评估哪个更好
2. **详细具体** :提供具体的差异点,而非笼统的评价
3. **建设性建议** :给出实用的建议,帮助用户理解何时使用哪个答案
4. **保持简洁** :专注于有意义的差异,避免琐碎的风格比较
现在我们再来重新执行上面的代码纠错任务。Claude执行结果如下所示:
scss
分析BrokenCalculator代码的错误
⏺ 我需要先找到并读取 BrokenCalculator 相关的代码文件。让我搜索一下。
⏺ Search(pattern: "**/*roken*alculat*")
⎿ Found 1 file (ctrl+o to expand)
⎿ Running PostToolUse hooks... (1/2 done)
⏺ Search(pattern: "**/*BrokenCalculator*")
⎿ Found 1 file (ctrl+o to expand)
⎿ Running PostToolUse hooks... (1/2 done)
⏺ Read(BrokenCalculator)
⎿ Read 3 lines
⎿ Running PostToolUse hooks... (1/2 done)
⏺ BrokenCalculator 代码错误分析
我发现了以下 3 个关键字拼写错误:
错误 1 : 第 1 行
pakage com.mistake.demo
错误: pakage 应为 package
错误 2 : 第 2 行
inport kotlin.random.Random
错误: inport 应为 import
错误 3 : 第 3 行
clas BrokenCalculator {
错误: clas 应为 class
---
修正后的代码:
package com.mistake.demo
import kotlin.random.Random
class BrokenCalculator {
这些错误都会导致 Kotlin 编译器无法识别关键字,从而使编译失败。
然后再问"Gemini怎么看",可以看到按照预期输出了完整的结果。
markdown
gemini怎么看
⏺ /gemini
⏺ 我来启动 Gemini 进行对比分析。首先读取 agent 配置文件,然后执行对比任务。
⏺ Read(~/.claude/agents/gemini-comparison-agent.md)
⎿ Read 102 lines
⎿ Running PostToolUse hooks... (1/2 done)
⏺ gemini-comparison(Compare Gemini and Claude responses)
⎿ Done (1 tool use · 28.4k tokens · 59s)
⎿ Running PostToolUse hooks... (1/2 done)
⏺ Gemini 的回答
I will read the content of `BrokenCalculator` to identify syntax and logical errors.
The file `/Users/linqinghuang/test/test_cl/BrokenCalculator` contains several syntax errors:
1. **Line 1:** `pakage` should be `package`.
2. **Line 2:** `inport` should be `import`.
3. **Line 3:** `clas` should be `class`.
4. **Line 3:** The class block is opened (`{`) but missing a closing brace (`}`).
Do you want me to fix these typos and close the class body?
对比分析
主要差异
- 完整性差异(关键) :Gemini 发现了第 4 个错误(缺少闭合大括号 }),而 Claude 只识别了前 3 个拼写错误,遗漏了语法结构错误
- 语言差异:Claude 使用中文回答,Gemini 使用英文回答
- 响应风格:Gemini 在结尾主动提出是否需要修复错误(交互式),Claude 则直接提供了修正后的完整代码
各自优势
- Claude:
- 结构更清晰,使用 Markdown 格式化
- 直接提供了完整的修正代码
- 中文回答更符合中文用户需求
- Gemini:
- 更准确地发现了所有语法错误,包括缺少闭合大括号
- 主动询问是否需要修复
建议
推荐使用 Gemini 的答案,因为它发现了 4 个错误而不是 3 个。我遗漏了一个重要的语法结构错误(缺少闭合大括号)。
结论:本次对比中,Gemini 在错误识别的完整性上更胜一筹,而我在回答的结构化和用户体验上表现更好。
如此一来,我们就可以做到,在Cluade CLI中问问Gemini的意见,将Gemini结果与Claude对比,而不需要频繁的切换工具和重复输入上下文。
markdown
┌─────────┐
│ 用户 │
└────┬────┘
│ 1. 输入请求
▼
┌─────────┐
│ Claude │
└────┬────┘
│ 2. 识别需要 Skill
▼
┌─────────┐
│ Skill │ ← 定义任务模板和工作流程
└────┬────┘
│ 3. 创建 Subagent
▼
┌─────────┐
│ Agent │ ← 独立会话
└────┬────┘
│ 4. 执行工具 (Bash, Read, 等)
▼
┌─────────────┐
│ 外部工具 │ ← gemini CLI, Web API, 等
└──────┬──────┘
│ 5. 原始输出
▼
┌─────────┐
│ Agent │ ← 处理和分析
└────┬────┘
│ 6. 返回摘要
▼
┌─────────┐
│ Claude │ ← 接收结果
└────┬────┘
│ 7. 展示给用户
▼
┌─────────┐
│ 用户 │ ← 只看到最终结果
└─────────┘