在前两篇中,我们完成了 OpenCode 的安装认证和模型选择配置。现在,是时候进入实战环节了。OpenCode 不仅提供了强大的交互式 TUI 模式,还配备了 `run` 子命令——这是将 AI 编程能力整合到自动化工作流、CI/CD 管道和日常脚本中的核心工具。

OpenCode run 命令入门 — 非交互式单任务、-f 文件附加、--thinking 思维链

简介

在前两篇中,我们完成了 OpenCode 的安装认证和模型选择配置。现在,是时候进入实战环节了。OpenCode 不仅提供了强大的交互式 TUI 模式,还配备了 run 子命令——这是将 AI 编程能力整合到自动化工作流、CI/CD 管道和日常脚本中的核心工具。

run 命令以非交互方式执行一次性任务:你给它一段指令,它返回结果,然后退出。没有多余的对话,没有等待用户输入的交互循环。这种模式看似简单,却蕴含着极大的灵活性——通过 -f 参数附加文件、通过 --thinking 启用思维链推理、通过管道串联多个工具,run 命令可以胜任从简单代码补全到复杂项目分析的各种任务。

本篇将带你从零开始掌握 run 命令的方方面面:基本用法、文件附加技巧、思维链模式、输出控制、管道集成,以及在实际开发中的真实应用场景。无论你是想用 AI 自动化代码审查,还是想在 CI 中自动生成文档,本篇都能给你实用的指导。

目录

run 命令基础

什么是 run 命令?

run 是 OpenCode 的非交互式执行模式。与默认的交互模式(你输入、AI 回复、你再输入、AI 再回复)不同,run 模式是「一次性」的:

text
输入指令 → AI 处理 → 输出结果 → 退出

这种模式特别适合:

  • 自动化脚本:在 shell 脚本中调用 AI 完成特定任务
  • CI/CD 集成:在持续集成流程中加入 AI 代码审查
  • 批量处理:对多个文件执行相同的 AI 操作
  • 编辑器集成:在编辑器中通过快捷键触发 AI 操作
  • 快速验证:不需要完整对话,只要一个答案

run vs 交互模式

维度 交互模式 (opencode) 运行模式 (opencode run)
交互性 多轮对话 单次执行
适用场景 探索性编程、学习 自动化、脚本、CI/CD
输出 TUI 界面 标准输出
退出时机 用户手动退出 任务完成后自动退出
管道支持 有限 完整支持
退出码 不适用 有意义(0=成功)

基本语法

bash
opencode run [选项] <prompt>

基本用法:执行单条指令

最简单的用法

直接将要执行的指令作为参数传入:

bash
# 解释一段代码
opencode run "解释以下 Python 代码的作用:print([x**2 for x in range(10)])"

# 生成代码
opencode run "用 Go 写一个 HTTP 健康检查端点,返回 JSON 格式的状态信息"

# 修复 bug
opencode run "找出并修复以下代码中的 bug:def divide(a, b): return a / b"

指定模型执行

bash
# 用轻量模型处理简单任务(省钱)
opencode run --model openai:gpt-4o-mini \
  "将以下代码从 Python 翻译成 JavaScript: def factorial(n): return 1 if n <= 1 else n * factorial(n-1)"

# 用强大模型处理复杂任务
opencode run --model anthropic:claude-sonnet-4-20250514 \
  "分析以下架构设计方案的优缺点,并给出改进建议"

设置工作目录

bash
# 在特定目录下执行(自动附带该目录的上下文)
cd /path/to/project
opencode run "分析项目结构并生成 README.md"

# 或者使用 -C 参数指定目录
opencode run -C /path/to/project "列出所有 TODO 注释"

-f 文件附加参数详解

-f(或 --file)参数允许你将文件内容作为上下文附加到指令中,这是 run 命令最强大的功能之一。

附加单个文件

bash
# 审查单个文件
opencode run -f src/main.py "审查这个文件的代码质量和潜在问题"

# 解释文件内容
opencode run -f config.yaml "解释这个配置文件的作用,每个字段的含义是什么"

# 要求改写
opencode run -f src/utils.py "将这个文件改写为 TypeScript"

指定文件别名

bash
# 给文件起个名字,方便在指令中引用
opencode run -f main.py:app -f config.py:cfg \
  "解释 app 和 cfg 两个文件的关系"

从标准输入读取文件

bash
# 管道输入
cat src/main.py | opencode run -f - "审查这段代码"

# 等价写法
opencode run -f - "审查这段代码" < src/main.py

文件编码与大小

  • 编码:OpenCode 自动检测文件编码,支持 UTF-8、ASCII、Latin-1 等
  • 大小限制:默认单文件最大 100KB,可通过配置调整
  • 文件类型:支持所有文本文件,二进制文件会被自动忽略

附加多个文件

多次使用 -f

bash
# 附加多个独立文件
opencode run \
  -f src/auth.py \
  -f src/models.py \
  -f src/routes.py \
  "分析这三个文件之间的依赖关系,画出一个架构图"

附加目录中的所有文件

bash
# 使用 shell 展开
opencode run -f src/*.py "为整个 src 目录生成文档字符串"

# 使用 find(更灵活)
find src -name "*.py" | xargs -I {} opencode run -f {} "检查代码风格"

排除文件

某些文件(如 node_modules、.git、pycache)不应该被附加。可以通过以下方式排除:

bash
# 使用 find 过滤
find src -name "*.py" ! -path "*/tests/*" ! -path "*/__pycache__/*" \
  | xargs -I {} opencode run -f {} "检查类型注解完整性"

使用通配符批量附加

通配符展开

bash
# 附加所有 Markdown 文件
opencode run -f docs/*.md "生成一份完整的 API 文档"

# 附加特定模式的文件
opencode run -f src/controllers/*.ts -f src/services/*.ts \
  "生成模块依赖关系图"

递归附加

bash
# 使用 ** 递归匹配(需要 shell 支持 globstar)
shopt -s globstar  # bash
opencode run -f src/**/*.py "分析整个项目的代码架构"

--thinking 思维链模式

--thinking 是 OpenCode 的一个高级选项,它要求模型在给出最终答案之前,先展示其思考过程。这对于理解 AI 的决策逻辑、调试复杂问题非常有帮助。

基本用法

bash
# 启用思维链模式
opencode run --thinking \
  "为什么这段代码会产生内存泄漏?给出详细的分析过程"

# 思维链 + 文件附加
opencode run --thinking -f src/memory_manager.py \
  "分析内存管理逻辑,找出可能的泄漏点"

思维链 vs 普通模式

普通模式(直接给出答案):

text
这段代码的内存泄漏在于第 42 行的缓存没有设置上限,
导致随着时间推移,缓存会无限增长。
建议使用 LRU 缓存替换策略...

思维链模式(展示推理过程):

text
让我逐步分析这段代码的内存管理逻辑:

1. 首先,我看到代码在第 15 行创建了一个全局缓存字典...
2. 在第 42 行的 write_cache() 函数中,数据被添加到缓存...
3. 我检查了整个文件,没有找到任何清理缓存的逻辑...
4. 这意味着每次调用 write_cache() 都会增加缓存大小...
5. 在高并发场景下,缓存会以每秒 N 条的速度增长...
6. 解决方案有两个方向:
   a. 添加缓存大小限制 + LRU 淘汰策略
   b. 使用 TTL 缓存,自动清理过期数据

综合以上分析,我建议采用方案 a + b 的组合...

思维链的适用场景

场景 推荐 --thinking 原因
简单补全 不需要推理
Bug 定位 需要逐步排查
架构分析 需要系统性思考
安全审计 需要严谨推理
代码生成 直接给出结果即可
性能优化 需要分析瓶颈

思维链与模型的关系

不是所有模型都支持思维链模式。支持度参考:

模型 思维链支持度 效果
claude-sonnet-4 ★★★★★ 推理过程清晰严谨
o1 ★★★★★ 深度推理,步骤详尽
claude-opus-4 ★★★★★ 分析最全面
gemini-2.5-pro ★★★★ 推理过程较详细
gpt-4o ★★★ 有一定推理能力
deepseek-reasoner ★★★★★ 专为推理设计
gpt-4o-mini ★★ 简单任务可用

输出控制与格式

纯文本输出(默认)

bash
# 默认输出到标准输出
opencode run "生成一个 Fibonacci 函数的 Python 实现"

# 重定向到文件
opencode run "生成一个 Fibonacci 函数的 Python 实现" > fibonacci.py

JSON 格式输出

bash
# JSON 格式(适合程序化处理)
opencode run --format json \
  "将以下代码中的函数提取出来,返回函数名和参数列表"

# 输出示例:
# {
#   "content": "function1(arg1, arg2)\nfunction2(arg3)",
#   "model": "gpt-4o",
#   "tokens": {"prompt": 150, "completion": 45, "total": 195}
# }

安静模式

bash
# 只输出结果,不输出元信息
opencode run --quiet -f src/main.py "提取所有 import 语句"

流式输出

bash
# 流式输出(逐步显示,适合长任务)
opencode run --stream \
  "分析整个项目的代码架构并生成详细报告"

管道集成与自动化

与 shell 管道结合

bash
# Git diff + AI 代码审查
git diff HEAD~1 | opencode run -f - "审查这些变更"

# 查找 TODO 并让 AI 处理
grep -rn "TODO" src/ | opencode run -f - "将这些 TODO 整理成任务清单"

# 错误日志 + AI 诊断
tail -100 /var/log/app.log | opencode run -f - "分析最近的错误日志"

在脚本中使用

bash
#!/bin/bash
# ai-review.sh — AI 自动化代码审查脚本

FILE=$1
if [ -z "$FILE" ]; then
  echo "用法: $0 <file>"
  exit 1
fi

echo "=== AI 代码审查报告 ==="
echo "文件: $FILE"
echo "时间: $(date)"
echo ""

opencode run \
  --model anthropic:claude-sonnet-4-20250514 \
  --thinking \
  -f "$FILE" \
  "请对以下代码进行全面审查,包括:
  1. 代码质量(命名、结构、可读性)
  2. 潜在 bug
  3. 安全漏洞
  4. 性能问题
  5. 改进建议

  请按以上 5 个维度逐一分析,给出具体代码行号。"

echo ""
echo "=== 审查完成 ==="

在 CI/CD 中使用

yaml
# GitHub Actions 示例
name: AI Code Review
on: [pull_request]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install OpenCode
        run: npm install -g opencode-ai

      - name: AI Review Changed Files
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          git diff --name-only origin/main...HEAD | while read file; do
            if [[ "$file" == *.py || "$file" == *.ts || "$file" == *.go ]]; then
              echo "## Review: $file" >> review.md
              opencode run \
                --model anthropic:claude-sonnet-4-20250514 \
                --thinking \
                -f "$file" \
                "审查此文件的代码变更,重点关注 bug 和安全问题" \
                >> review.md
              echo "" >> review.md
            fi
          done

      - name: Post Review Comment
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const review = fs.readFileSync('review.md', 'utf8');
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: review
            });

实战场景演示

场景 1:自动生成文档

bash
# 为 Python 模块生成 docstring
opencode run --thinking -f src/database.py \
  "为以下 Python 模块中的每个类和函数生成完整的 Google 风格 docstring,
  包括参数说明、返回值、异常、使用示例。直接输出修改后的完整代码。" \
  > src/database_documented.py

场景 2:批量代码审查

bash
# 审查所有 Python 文件
for file in $(find src -name "*.py" ! -path "*/tests/*"); do
  echo "审查中: $file"
  opencode run \
    --model openai:gpt-4o-mini \
    --quiet \
    -f "$file" \
    "找出以下代码中的问题(bug、安全漏洞、性能瓶颈),
    如果没有问题,回复'无问题'。
    如有问题,按'文件:行号: 问题描述'格式输出。"
done > review-report.txt

场景 3:代码翻译/迁移

bash
# Python 转 Go
opencode run -f src/fetcher.py \
  "将以下 Python 代码翻译为 Go,保持相同的功能和逻辑结构。
  使用 Go 的惯用写法,添加必要的错误处理。" > src/fetcher.go

# 检查翻译后的代码
opencode run --thinking -f src/fetcher.go \
  "检查这段 Go 代码是否有问题,特别是并发安全和资源泄漏"

场景 4:Git 提交信息生成

bash
# 根据变更生成提交信息
git diff --cached | opencode run -f - \
  "根据以下代码变更,生成一条符合 Conventional Commits 规范的提交信息。
  格式:<type>(<scope>): <description>
  type 可选:feat, fix, refactor, docs, test, chore
  只输出一行提交信息,不要其他内容。"

场景 5:安全扫描

bash
# 安全审计
opencode run --thinking --model anthropic:claude-opus-4-20250514 \
  -f src/auth.py \
  -f src/middleware.py \
  "对以下认证和安全相关代码进行全面的安全审计,
  检查:
  1. SQL 注入
  2. XSS 漏洞
  3. CSRF 防护
  4. 认证绕过
  5. 敏感信息泄露
  6. 加密算法安全性

  每个问题给出:严重程度(高/中/低)、具体位置、修复方案。"

场景 6:性能分析

bash
# 性能瓶颈分析
opencode run --thinking -f src/data_processor.py \
  "分析以下代码的性能瓶颈,包括:
  1. 时间复杂度分析
  2. 空间复杂度分析
  3. 可能的优化方案
  4. 优化后的代码实现

  优先考虑 Python 特有的优化技巧(如列表推导式、生成器、内置函数等)。"

高级技巧与最佳实践

技巧 1:使用提示词模板

将常用任务保存为提示词模板,提高效率:

bash
# ~/.opencode/prompts/review.txt
审查以下代码,关注:
1. 代码可读性
2. 潜在 bug
3. 性能问题
4. 安全漏洞

如有问题,给出具体行号和修复建议。

# 使用
opencode run -f src/main.py "$(cat ~/.opencode/prompts/review.txt)"

技巧 2:组合多个 run 命令

bash
# 第一步:生成代码
opencode run "用 Python 写一个快速排序实现" > quicksort.py

# 第二步:审查生成的代码
opencode run --thinking -f quicksort.py \
  "审查这段代码的边界情况和性能"

# 第三步:生成测试
opencode run -f quicksort.py \
  "为这段代码生成 pytest 单元测试,覆盖所有边界情况" > test_quicksort.py

技巧 3:使用退出码判断

bash
#!/bin/bash
# 在脚本中检查 AI 是否成功执行

opencode run --model openai:gpt-4o-mini -f "$1" "检查语法错误" > /dev/null 2>&1

if [ $? -eq 0 ]; then
  echo "✓ AI 分析完成"
else
  echo "✗ AI 分析失败"
  exit 1
fi

技巧 4:控制输出长度

对于长文件,可以先让 AI 总结,再针对重点部分深入分析:

bash
# 第一步:总结
SUMMARY=$(opencode run --model openai:gpt-4o-mini -f src/large_module.py \
  "用 3 句话总结这个模块的功能")

# 第二步:基于总结提问
opencode run --thinking -f src/large_module.py \
  "这个模块的功能是:$SUMMARY。请找出其中潜在的性能瓶颈。"

最佳实践清单

  1. 简单任务用轻量模型gpt-4o-minigemini-2.5-flash 处理简单任务,省钱又快速
  2. 复杂任务启用 thinking:Bug 定位、架构分析等需要推理的任务开启 --thinking
  3. 合理使用 -f:只附加必要的文件,避免上下文过大导致成本上升
  4. 输出重定向:将结果重定向到文件,便于后续处理
  5. 错误处理:在脚本中检查退出码,妥善处理 AI 执行失败的情况
  6. 提示词精确:指令越具体,结果越好。避免模糊描述
  7. 分批处理:大项目分批处理,不要一次性附加过多文件

常见问题排查

问题 1:`run: command not found`

原因:OpenCode 未正确安装或不在 PATH 中。

解决方案

bash
# 检查安装
which opencode

# 如果未安装
npm install -g opencode-ai

问题 2:文件找不到

原因:文件路径错误或权限不足。

解决方案

bash
# 检查文件是否存在
ls -la src/main.py

# 检查文件权限
file src/main.py

# 确保使用正确的路径
opencode run -f ./src/main.py "..."  # 注意相对路径的 .

问题 3:输出被截断

原因:模型输出达到 token 上限。

解决方案

bash
# 在配置文件中增加 maxTokens
{
  "providers": {
    "openai": {
      "options": {
        "maxTokens": 16384
      }
    }
  }
}

# 或在指令中要求模型精简输出
opencode run -f src/large.py "用要点形式输出分析结果,控制在 500 字以内"

问题 4:管道输入为空

原因:管道前面的命令没有输出。

解决方案

bash
# 检查管道上游
git diff HEAD~1  # 确认有变更

# 使用临时文件调试
git diff HEAD~1 > /tmp/diff.txt
cat /tmp/diff.txt | opencode run -f - "审查这些变更"

问题 5:思考过程太长

原因--thinking 模式下模型输出了过长的推理过程。

解决方案

bash
# 要求模型精简思考过程
opencode run --thinking -f src/buggy.py \
  "用不超过 5 个步骤分析这个 bug 的原因。"

# 或者关闭 thinking 模式
opencode run -f src/buggy.py "直接给出 bug 修复方案"

问题 6:API 速率限制

原因:短时间内发送了过多请求。

解决方案

bash
# 在批量处理中添加延迟
for file in src/*.py; do
  opencode run -f "$file" "..." >> report.txt
  sleep 2  # 每次请求间隔 2 秒
done

# 或使用并行限制
find src -name "*.py" | xargs -P 3 -I {} \
  sh -c 'opencode run -f "$1" "..."; sleep 1' _ {}

总结与下篇预告

本篇我们全面掌握了 OpenCode 的 run 命令。核心要点回顾:

  1. run 命令本质:非交互式的单次任务执行模式,适合自动化、脚本和 CI/CD 集成。
  2. -f 文件附加:支持单文件、多文件、标准输入、通配符等多种方式,是 run 命令最核心的参数。
  3. --thinking 思维链:要求模型展示推理过程,适合 Bug 定位、架构分析、安全审计等需要深度推理的任务。
  4. 输出控制:支持纯文本、JSON、安静模式、流式输出等多种格式,满足不同场景需求。
  5. 管道集成:与 shell 管道、Git diff、CI/CD 等工具无缝集成,实现真正的自动化 AI 编程。
  6. 实战场景:文档生成、代码审查、代码翻译、提交信息生成、安全扫描、性能分析——run 命令几乎可以胜任所有自动化编码任务。

掌握了 run 命令之后,你已经可以将 OpenCode 整合到日常开发工作流中了。但 OpenCode 的能力远不止于此——它还支持工具调用(Tool Use)、MCP 协议集成、自定义 Agent 行为配置等高级功能。这些功能让 OpenCode 不仅能「说」,还能「做」——读写文件、执行命令、调用外部 API,真正成为你的 AI 编程搭档。