AI 结对编程技巧
保持上下文
aider 会发送当前编辑文件的内容以及最近的相关文件给 AI 模型。这有助于模型理解你的代码库上下文。你可以通过 /add
命令显式添加文件到上下文中。
渐进式修改
当处理复杂任务时,尝试将问题分解为多个小步骤。这样 AI 可以更有效地帮助你,也便于你验证每个步骤的正确性。
明确指令
给 AI 清晰具体的指令会得到更好的结果。例如:
- 不要说:”改进这段代码”
- 应该说:”重构这个函数,提取重复逻辑到新函数”
利用版本控制
aider 会自动提交每次修改到 Git。你可以随时使用 git diff
查看变更,或 git reset
回退不满意的修改。
多文件协作
aider 可以同时编辑多个文件。当你的修改涉及多个文件时,明确告诉 AI 需要修改哪些文件。
调试帮助
遇到问题时,可以将错误信息复制给 AI,它会帮助分析原因并提供修复建议。
代码审查
让 AI 审查你的代码:
请检查这段代码是否有潜在问题,如性能、安全或可维护性方面?
学习新技术
向 AI 询问如何使用新库或框架:
如何使用 pandas 读取 CSV 文件并计算每列的平均值?
文档生成
让 AI 帮你生成文档字符串或注释:
为这个函数添加详细的 docstring,包括参数说明和返回值的描述
测试代码
让 AI 帮你编写测试用例:
为这个类编写单元测试,覆盖主要功能和边界条件
使用技巧
只需添加需要修改的文件到对话中
花点时间思考哪些文件需要被修改。 Aider 通常能自行判断需要编辑哪些文件,但最高效的方式是由您主动将相关文件添加到对话中。
不要一次性添加过多文件
仅添加您认为需要编辑的文件。 过多无关代码会分散并混淆大语言模型的注意力。 Aider 使用整个 Git 仓库的映射, 因此通常能感知代码库中其他相关的类/函数/方法。 可以添加1-2个高度相关但不需要修改的文件, 但请保持选择性。
将目标分解为小步骤
逐个步骤完成。
根据进展动态调整对话中的文件:用/drop
移除不再需要修改的文件,用/add
添加下一步需要修改的文件。
对于复杂修改,先制定计划
使用/ask
命令与aider共同制定计划。
当您认可方案后,直接说”go ahead”(无需加/ask
前缀)即可执行。
当aider卡住时
- 使用
/clear
清空聊天记录重新开始 - 能否用
/drop
移除多余文件? - 先用
/ask
讨论计划再让aider开始编辑代码 - 使用
/model
命令切换不同模型重试。在GPT-4o和Sonnet之间切换常能解决问题 - 如果aider完全卡住, 可以手动完成下一步,然后再让aider继续编码。 与aider交替进行结对编程
创建新文件
如需aider创建新文件,请先用/add <文件>
将其添加到仓库。
这样aider会知道该文件存在并进行写入。
否则aider可能会将修改写入现有文件。
即使您明确要求新建文件也可能发生这种情况,
因为大语言模型会高度关注上下文中的现有信息。
修复错误与异常
当你的代码抛出异常时,
可以使用 /run
命令
将错误输出分享给 aider。
或者直接将错误信息粘贴到聊天中,让 aider 来分析如何修复问题。
如果测试用例失败,使用 /test
命令
运行测试并将错误输出分享给 aider。
提供文档支持
大语言模型虽然了解大量标准工具和库,但在 API 版本和函数参数等细节上可能出现偏差。你可以通过以下方式提供最新文档:
- 将文档片段粘贴到聊天中
- 在消息中包含文档 URL(例如:
添加提交按钮参考这个 https://ui.shadcn.com/docs/components/button
),aider 会自动抓取并阅读内容 - 使用
/read
命令 从文件系统读取文档文件到聊天 - 如果你有希望 aider 遵循的编码规范或长期指令,可以考虑使用 规范文件
中断与输入
当 aider 的响应不够理想时,可使用 Control-C 中断。已生成的部分响应会保留在对话中,方便你在补充信息或调整方向时参考。
在聊天中发送多行长消息有以下几种方式:
- 直接将多行消息粘贴到聊天框中
- 在第一行单独输入
{
开始多行消息,在最后一行单独输入}
结束- 或者以
{tag
开头(”tag”可以是任意字母/数字组合)并以tag}
结尾。这在需要包含右大括号}
时特别有用
- 或者以
- 使用 Meta-ENTER 新建一行而不发送消息(某些环境下是 Esc+ENTER)
- 使用
/paste
命令从剪贴板粘贴文本到聊天框 - 使用
/editor
命令(如果终端支持,也可以按Ctrl-X Ctrl-E
)在编辑器中创建下一条聊天消息。详见编辑器配置文档 - 使用多行模式(multiline-mode),该模式会交换 Meta-Enter 和 Enter 的功能,使 Enter 插入新行,而 Meta-Enter 提交命令。启用方式:
- 在会话中使用
/multiline-mode
命令切换 - 使用
--multiline
参数
- 在会话中使用
带标签的示例:
{python
def hello():
print("Hello}") # 注意:包含右大括号
python}
用户常要求使用 SHIFT-ENTER 作为软换行。 遗憾的是,终端中没有可移植的方法来检测这个组合键。