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 作为软换行。 遗憾的是,终端中没有可移植的方法来检测这个组合键。


目录