ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

aider 终端 AI 结对编程实用技巧:会话文件管理、任务拆解与排错工作流指南

aider 终端 AI 结对编程实用技巧:会话文件管理、任务拆解与排错工作流指南 aider 终端 AI 结对编程实用技巧会话文件管理、任务拆解与排错工作流指南【免费下载链接】aideraider is AI pair programming in your terminal项目地址: https://gitcode.com/GitHub_Trending/ai/aider本指南面向已经能启动 aider 基本会话、希望显著提升结对效率的开发者。它的核心是aider/website/docs/usage/tips.md中沉淀的一整套会话操作习惯如何精准选择加入会话的文件、如何拆解任务、何时切换模型、遇到卡死如何自救以及如何高效地把错误信息与最新文档喂给 AI。读完本文你将能把/add、/drop、/ask、/run、/test、/read-only等内置命令组合成一套稳定、可复用的结对编程工作流并理解这些技巧背后的实现机制。先建立两个基本认知可编辑文件与仓库地图tips 中所有建议都建立在 aider 的两条核心机制之上加入会话的文件才是模型能看到细节、可以直接修改的对象。实现上/add加入的文件进入coder.abs_fnames会被完整塞进上下文而只读加入的文件进入coder.abs_read_only_fnames只供参考、不会被改写见 aider/commands.py 中cmd_add与cmd_read_only的实现。aider 会为你的 git 仓库生成一张仓库地图repo map用来感知会话之外的其他文件里存在哪些相关类、函数与方法。地图由 aider/repomap.py 的RepoMap类负责生成内部借助 tree-sitter 语法解析与 ctags 风格的符号查询来挑选关键符号在 aider/coders/base_coder.py 的会话初始化中只要主模型支持且map_tokens 0就会自动构建这张地图并通过--map-tokens控制它占用的上下文预算对应逻辑见 aider/main.py。完整的机制介绍见 仓库地图说明。理解了这两点下面每一条 Tips 都变得顺理成章。只把需要被修改的文件加入会话动手前花一点时间想清楚这次改动会触及哪些文件aider 常常能靠自己推断出该改哪些文件——因为仓库地图已经让它知道代码里存在哪些相关符号。但最省 token、最不容易跑偏的方式永远是你亲手把要改的文件加进会话/add src/utils.py/add的实现aider/commands.py 中cmd_add约 L799很贴心支持传入文件或目录、支持 glob 通配如果命中.gitignore或被.aiderignore忽略会明确提示跳过如果文件已在会话中也会提示already in the chat。想知道当前会话已有哪些文件用/ls列出全部已知文件并标注哪些在会话内。不要塞入过多无关文件多喂一点模型更聪明是常见的误区。恰恰相反过多无关代码会分散和迷惑 LLM让它分不清主次每一个加入会话的文件都会完整占用上下文窗口token挤占真正重要的推理空间。仓库地图的存在意味着即使某段代码没加入会话只要它定义了被改动逻辑依赖的函数/类/方法模型通常仍能感知它的存在。因此最理想的状态是只加入确实需要编辑的文件。如果确有高度相关、但不需要改动的文件要参考最多谨慎地加 1–2 个而且最好用只读方式加入/read-only path/to/reference.py当前版本命令表中对应的命令是/read-only见 内置命令清单旧版文档与部分历史教程中也写作/read。它既能防止模型误改参考文件也便于后续快速/drop回收上下文。把大目标拆成一口口的小步骤一次对话解决一个巨大的需求对话历史会迅速膨胀、模型也容易顾此失彼。正确的节奏是把一个较大的目标拆成几个独立的、可验证的小步骤一次只做一步每完成一步就用/tokens观察上下文占用并动态调整会话文件/drop掉已经不再需要改动的文件/add上下一步需要改动的文件。/tokens会按 token 列出上下文各组成部分system 消息、聊天历史、仓库地图、会话文件与只读文件的占用情况输出末尾甚至会提示chat history 用/clear清理、文件用/drop移除、仓库地图用--map-tokens调整大小见 aider/commands.py 中cmd_tokens约 L445。/drop不带参数时一次性清空所有会话文件会保留启动时通过--read指定的原始只读文件见 aider/main.py 对read_only_fnames的处理带参数时则精确移除指定文件并支持对只读文件做子串匹配与samefile比对cmd_drop约 L912。想清空文件 清空历史一把梭则用/reset。复杂改动先讨论方案再下令动手对于架构性改动别急着让模型直接改代码。推荐一条ask/code交替的工作流先用/ask一次性提问不让模型改任何文件把需求、选项、边界条件聊清楚对方案满意后发一句不带任何前缀的话——例如在 code 模式下简单说一句go ahead让模型按刚讨论好的计划动手。/ask实现上是一次性的模式切换给当前这条消息套上 ask 模式下一条消息自动回到活跃模式见 aider/commands.py 中cmd_ask、cmd_code以及 聊天模式说明。因为 ask 阶段的所有决策都留存在对话里切换回 code 模式后你可以非常精简地下令模型也会基于已确认的方案执行。这套模式可以理解为只用单一模型完成的、更流畅的 architect 模式。需要长期停留在问答模式时用/chat-mode ask或启动参数--chat-mode ask。当 aider 卡住时一套系统的自救清单模型不是不会陷入死胡同。按下面的顺序逐级尝试往往比反复用同一方式重试更有效/clear清空聊天历史重新开始。历史越长模型越容易被早期错误决策带偏。/clear只重置done_messages与cur_messages不动会话文件cmd_clear约 aider/commands.py L411。检查能否/drop掉多余文件——缩小上下文通常立竿见影。改用/ask先聊方案让模型在动手前想清楚而不是边写边想。用/model换一个模型再试。官方经验是在 GPT-4o 与 Claude Sonnet 之间来回切换常常能绕过单模型的思维定势。/model对应cmd_model约 L87也可在启动时用--model指定。如果实在卡死就自己把下一步写出来再让 aider 接着写后面部分。轮流上阵、互相接续这正是结对编程的本义——记住你是主导者aider 是协作者。创建新文件先/add让它知道这个文件存在想让 aider 新建一个文件先把它加入会话再描述需求/add newfile.py/add的源码逻辑cmd_add对不存在的文件做了专门处理当没有任何 glob 匹配且文件名不含通配符时会弹出确认No files matched xxx. Do you want to create xxx?确认后自动创建空文件并加入会话。这一步非常关键因为加入会话后aider 明确知道这个文件存在会直接对它写入否则LLM 由于上下文里全是既有文件的信息很容易把改动写到某个已存在的文件里——即使你明确要求创建新文件也可能发生这种注意力偏移。修复 Bug 与测试失败把错误输出喂给模型模型无法看到你没展示的错误。当代码抛异常时有两种高效投喂方式/run shell 命令直接执行命令并共享输出。实现上cmd_run约 aider/commands.py L1013在仓库根目录运行命令收集 stdout/stderr然后先估算输出的 token 量再询问你是否加入会话Add X.Xk tokens of command output to the chat?确认后以特定格式注入聊天上下文。/run的别名是!。典型用法/run python myscript.py加入输出后再发一句修复这个错误即可。直接把报错文本粘贴进聊天。模型配合仓库地图通常足以定位并修复 bug。测试失败同理用/test 测试命令跑测试。与/run不同/test的实现cmd_test约 L993只在退出码非零即测试确实失败时才把输出加入会话若退出码为零测试全过则静默通过不浪费上下文。它还会自动复用启动时配置的--test-cmd。完整的 lint/test 自动化配置--auto-lint、--lint-cmd、--test-cmd --auto-test见 lint 与测试说明。为模型提供最新、最准的文档LLM 对常见工具库很熟但对 API 版本、函数签名之类的细节容易记错。官方推荐以下几种补充权威资料的方式直接把文档片段粘贴进聊天把文档 URL 直接放进消息aider 会抓取并阅读页面例如Add a submit button like this https://ui.shadcn.com/docs/components/button会话内也可以主动用/web url抓取网页转成 Markdown 后发送见 aider/commands.py 的cmd_web约 L219底层抓取逻辑位于 aider/scrape.py用/read-only从文件系统任意位置读取文档文件进会话只读加入不会改动如果想让某些编码规范、长期指示持续生效考虑使用约定文件conventions file把优先用 httpx 而不是 requests能写类型注解就写这类规则放进一个CONVENTIONS.md用只读方式加入会话甚至写进.aider.conf.yml的read:字段让它每次自动加载。详细做法与效果对比见 编码约定说明。中断与输入随时打断轻松发送长消息用 Control-C 随时中断如果 aider 正在输出一段你不满意的回复随时按Control-C中断。关键是已经生成的部分回复会保留在对话中你可以在后续补充信息或调整方向时引用它不必担心前功尽弃。终端输入细节见 内置命令文档 的 Keybindings 一节。发送长段、多行消息的六种方式复杂需求常常需要粘贴大段上下文或代码aider 支持以下输入方式这部分内容也收录在 multi-line.md其实现散见于 aider/io.py 的输入读取逻辑直接粘贴多行文本到聊天框用{/}包裹首行单独输入{开始多行消息末行单独输入}结束。若消息里本身需要出现}可用带标签的形式{tag开头、tag}结尾例如{python def hello(): print(Hello}) # Note: contains a brace python}Meta-ENTER 换行不发送消息地另起一行部分环境是 EscENTER/paste从剪贴板粘贴文本/图片进聊天/editor打开外部编辑器编写下一条消息或按Ctrl-X Ctrl-E前提是终端支持编辑器配置见 编辑器配置多行模式multiline-mode交换 Enter 与 Meta-Enter 的功能让Enter 负责插入换行、Meta-Enter 负责发送。会话内用/multiline-mode切换或用启动参数--multiline对应实现见cmd_multiline_mode约 aider/commands.py L1524。{: .note }人们常期待 SHIFT-ENTER 能当作软换行。遗憾的是终端中并没有可移植的方式去可靠检测这个按键组合因此请使用上述受支持的输入方式。把技巧沉淀为会话小抄最后把本文涉及的核心命令整理成一张速查表方便日常对照使用完整清单与快捷键见 内置命令文档场景命令/操作加入待修改文件/add file只读参考文件/read-only file查看会话内文件/ls移除文件回收上下文/drop file不带参数清空全部查看上下文 token 占用/tokens讨论方案、不改代码/ask 问题按讨论结果动手直接说 go ahead卡死时推倒重来/clear清历史、/reset清历史文件换模型重试/model 模型分享报错/run 命令或直接粘贴错误运行测试/test 测试命令长消息多行输入{…}、Meta-ENTER、/paste、/editor、/multiline-mode随时中断Control-C部分回复保留在会话中归根结底aider 是你的结对编程搭档你负责判断方向与选择上下文它负责高效执行。把上面这些习惯内化成日常操作后你得到的不仅是更高的代码产出质量还有更可控的 token 消耗与更顺畅的人机协作节奏——这正是 usage/tips.md 想要传达的核心方法论。【免费下载链接】aideraider is AI pair programming in your terminal项目地址: https://gitcode.com/GitHub_Trending/ai/aider创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表