加载中...
返回专栏
2 / 21

【OpenCode系统性指南】第2篇:第一次对话:让AI读懂你的项目

【OpenCode系统性指南】第2篇:第一次对话:让AI读懂你的项目

概念图

引言

安装好OpenCode后,很多读者的第一反应是直接开始问问题。但很快你会发现:AI对你的项目一无所知,每次都要从头解释项目结构、技术栈、编码规范……效率极低。

有没有一种方法,让AI像老同事一样,天然就理解你的项目?

答案就是:/init命令和AGENTS.md文件。这一篇,我们来揭开这对黄金搭档的神秘面纱。


一、/init 命令的魔力

当你在一个新项目中启动OpenCode时,第一件事就应该执行/init命令。这个命令会做什么?让我们一探究竟。

1.1 一键扫描,自动分析

执行/init后,OpenCode会自动扫描你的项目:

  • 文件结构:识别项目类型(前端、后端、全栈等)
  • 配置文件:读取package.jsontsconfig.jsonpyproject.toml
  • 依赖信息:分析使用了哪些框架和库
  • 代码规范:识别ESLint、Prettier等配置

整个过程通常只需要几秒钟,你就能看到AI正在分析各种文件。

1.2 自动生成项目文档

扫描完成后,OpenCode会自动在项目根目录生成一个AGENTS.md文件。这个文件就像是AI对这个项目的"入职笔记",包含了:

  • 项目概述和技术栈
  • 目录结构说明
  • 常用命令(构建、测试、启动等)
  • 编码规范和约定
  • 重要文件说明

1.3 增量更新机制

如果你已经有过AGENTS.md,再次执行/init会怎样?OpenCode会尝试增量更新而非覆盖,保留你手动添加的自定义内容。这意味着你可以放心地编辑这个文件,不必担心丢失个性化配置。


二、AGENTS.md:AI的项目记忆

AGENTS.md文件是OpenCode理解你项目的核心。它不只是一个文档,更是每次对话时自动注入的"项目记忆"。

2.1 为什么叫AGENTS.md?

这个命名来自OpenCode的规则系统。当你打开OpenCode时,它会自动查找并加载以下位置的规则文件:

  1. 项目级:./AGENTS.md(项目根目录)
  2. 全局级:~/.config/opencode/AGENTS.md

这些规则会被注入到每次对话的系统提示中,让AI始终"记得"你的项目背景。

2.2 自动生成 vs 手动完善

OpenCode自动生成的AGENTS.md已经能覆盖大部分场景,但对于复杂项目,你可能需要手动补充:

# 项目规则

## 技术栈
- 前端:React 18 + TypeScript + Tailwind CSS
- 后端:Node.js + Express + Prisma
- 数据库:PostgreSQL

## 编码规范
- 使用函数式组件,避免class组件
- 状态管理优先使用Zustand
- API响应统一使用Result模式

## 禁止事项
- 不要修改prisma/schema.prisma中的已有字段
- 不要在组件中直接调用fetch,使用封装的apiClient

2.3 团队协作利器

强烈建议将AGENTS.md提交到Git仓库。这样团队每个成员使用OpenCode时,都能获得一致的AI体验。新同事加入项目时,AI已经"熟悉"项目,大大降低上手成本。


三、如何向AI描述你的需求

有了AGENTS.md,AI已经理解你的项目。但如何高效地向AI描述你的具体需求?这里有几个实用技巧。

3.1 具体比模糊好

❌ 模糊的请求:

帮我优化一下这个函数

✅ 具体的请求:

@src/utils/parser.ts 的parseConfig函数目前有性能问题,
当配置文件超过1MB时会卡顿。请分析瓶颈并优化,
目标是将处理时间控制在100ms以内。

3.2 使用@引用相关文件

当你提到某个文件或目录时,用@符号让AI精确知道你在说什么:

@src/components/Button.tsx 这个按钮组件需要支持loading状态,
请添加一个isLoading属性,loading时显示旋转图标。

OpenCode会自动读取你引用的文件内容,无需你复制粘贴代码。

3.3 分步验证理解

对于复杂任务,建议先让AI复述需求:

我需要实现一个用户权限系统,包含角色管理和资源分配。
请先总结一下你理解的需求,确认无误后再开始实现。

这样可以避免AI理解偏差导致的大量返工。


四、三个真实对话示例

让我们通过三个实际场景,感受OpenCode的高效协作。

示例1:解释陌生代码

场景:你接手了一个遗留项目,遇到一段看不懂的代码。

用户:@src/legacy/priceCalculator.js 这个calculateFinalPrice函数
逻辑太复杂了,请用通俗的语言解释它在做什么,并画出流程图。

OpenCode:这个函数实现了阶梯定价逻辑:

1. 首先根据用户等级确定基础折扣(VIP用户8折,普通用户9折)
2. 然后根据购买数量应用阶梯优惠:
   - 100件以上:额外95折
   - 500件以上:额外9折
3. 最后检查是否有可用优惠券,取最优价格

流程图如下:
[用户等级] → [基础折扣] → [数量阶梯] → [优惠券检查] → [最终价格]

关键点:用@引用文件,让请求具体化。

示例2:添加新功能

场景:需要给现有组件添加新特性。

用户:@src/components/UserCard.tsx 需要支持显示用户在线状态。
后端API已经返回了isOnline字段,请:
1. 在组件中显示一个绿色/灰色的状态点
2. 添加hover时显示"在线"/"离线"的tooltip
3. 确保与现有的Tailwind样式一致

OpenCode:我来分析现有组件并实现在线状态显示...
[查看组件结构]
[添加状态指示器]
[实现tooltip功能]

已完成修改,主要变更:
- 添加了StatusDot子组件
- 使用Tailwind的bg-green-500和bg-gray-400
- tooltip使用title属性实现(轻量方案)

关键点:明确列出具体需求,AI会逐步实现并汇总变更。

示例3:修复Bug

场景:发现了一个难以定位的Bug。

用户:用户反馈在Safari浏览器上,@src/components/DatePicker.tsx
的日期选择器点击后没有反应。控制台报错:
"TypeError: undefined is not a function"
请分析原因并修复。

OpenCode:让我分析这个组件...
[读取组件代码]
[检查事件处理逻辑]

发现问题:组件使用了forEach的第二个参数thisArg,
Safari对某些情况的支持不完整。

修复方案:
1. 使用箭头函数替代bind
2. 或者使用可选链操作符?.

我推荐方案1,更加简洁。是否继续修复?

关键点:提供错误信息和复现场景,AI能更快速定位问题。


小结

  • /init是第一步:在新项目中运行/init,让AI自动理解项目结构
  • AGENTS.md是项目记忆:提交到Git,让团队获得一致的AI体验
  • 具体描述需求:使用@引用文件,分步验证AI的理解
  • 对话是迭代过程:先让AI理解,再让它执行,最后验证结果

📥 想获取更多 OpenCode 资源?

扫码加入「大熊掌门AI编程会员群」:

企业微信群二维码

进群即领:

  • 📄 Claude Code 入门指南 PDF(群内领)

专栏更新中,后续解锁:

  • 📁 OpenCode 完整配置模板库
  • 📝 5个常用自定义命令模板
  • 📋 AGENTS.md 规则模板
  • 📖 本专栏完整版 PDF 电子书(约20篇文章整合)

群内还有:

  • 每周技术干货分享
  • 问题答疑
  • 付费内容专属优惠
加载中...