数据截至 (上游 commit e71bb83dcfdf)
RA.Aid — 总览与阅读地图
30 秒导读: RA.Aid(读作 "raid")是一个在终端里跑的自主编码 agent——你给它一句自然语言任务,它会像一个工程师那样,先研究你的代码库、再规划出分步的实现计划、然后逐步实现这些步骤(改文件、跑命令)。它建在 LangGraph 之上,用一个本地 SQLite 数据库当"长 期记忆"在这三个阶段之间传递上下文。
本章是这一组文档的入口:只讲全景、不下钻代码细节。看完你应该能说清"RA.Aid 是什么、大致怎么转、该按什么顺序读后面各章"。具体机制留给 01–05 章。
1. 这是什么(零基础也能懂)
一句话定义: RA.Aid 是一个能自主开发软件的命令行编码 agent——安装后你得到一个 ra-aid 命令,在项目目录里运行它、给它一个任务,它就自己动手把任务做完。
它的入口就是这条命令。pyproject.toml:74-75 里把 ra-aid 这个命令绑定到 Python 函数 ra_aid.__main__:main:
[project.scripts]
ra-aid = "ra_aid.__main__:main"
建立在什么之上: RA.Aid 不自己发明"agent 循环",而是站在 LangGraph(LangChain 的 agent 执行框架,负责"模型思考→调用工具→看结果→再思考"的循环)之上。它还可选集成 aider(一个专门做代码编辑的工具)——加 --use-aider 开关就用 aider 来落地改动,否则用自带的文件编辑工具。
解决什么问题 / 给谁用: 给需要在真实、较大代码库里做多步开发任务的工程师。普通的"单次 code 补全"只能改一小段;RA.Aid 面向那种"要先读懂现有架构、再拆成若干步、再一步步改多个文件"的活。README 把这一点概括为它能跨多个文件规划并实现较大的代码改动、也能回答关于代码库架构的问题。
用起来什么样: 最小用法就是一行命令 + 一句任务(示意):
# 在你的 git 项目里
ra-aid -m "给用户模块加上邮箱格式校验,并补上单元测试"
⚠ 它会真的执行 shell 命令、真的改代码(README 明确警告)。所以官方建议只在受版本控制的仓库里用、改完先看
git diff。--cowboy-mode开关会跳过 shell 命令的人工确认——威力更大,风险也更大。
README 的"三阶段"卖点,用白话复述: 它把"开发一个功能"这件事拆成三步,依次做——
| 阶段 | 白话它在干嘛 |
|---|---|
| Research(研究) | 先读你的代码库、搞清楚现状和相关文件,攒下"关键事实/代码片段" |
| Planning(规划) | 把任务拆成一条条具体、可执行的步骤 |
| Implementation(实现) | 一步一步落地:改文件、跑命令、跑测试 |
一句话直觉: 把它想成一个照着"先调研、再列计划、再动手"工作法办事的初级工程师——你给需求,它自己走完这套流程,而不是一上来就瞎改。
2. 顶层全景(它大概怎么转)
怎么读这张图
从上到下是控制流:一条 ra-aid 命令进入 __main__.main(),先起研究阶段;研究阶段的 agent 在它自己的循环里用一个"请求实现"的工具把接力棒交给规划阶段,规划 阶段再用"请求任务实现"的工具把每个计划步骤交给实现阶段。三个阶段都不是"硬编码顺序调用",而是agent 通过调用工具自己触发下一棒(详见 01 章)。左侧竖线是共享底座:所有阶段都从同一个 agent 工厂拿到 agent、共用工具箱、共用 SQLite 记忆。
ra-aid -m "任务"
│
▼
┌──────────────────────────────────┐
│ CLI 入口 __main__.main() │ 解析参数、建 Session、起第一阶段
└──────────────────────────────────┘
│ 起研究阶段
▼
┌───────────┐ 请求实现 ┌───────────┐ 请求任务实现 ┌───────────────┐
│ ① 研究 │────────────▶│ ② 规划 │──────────────▶│ ③ 实现 │
│ research │ (工具触发) │ planning │ (每步一个) │ implementation │
│ _agent │◀─ ─ ─ ─ ─ ─ │ _agent │ │ _agent │
└───────────┘ 攒事实/片段 └───────────┘ 计划(plan) └───────────────┘
│ │ │
└───────────┬──────────────┴──────────────┬───────────┘
▼ ▼
┌──────────────────────────┐ ┌──────────────────────────────┐
│ 共享 agent 工厂 │ │ 工具箱 │
│ agent_utils.create_agent │ │ tool_configs + tools/ │
│ ├ ReAct 后端 │ │ (读文件/搜代码/改文件/专家/HIL) │
│ └ CIAYN 后端(代码即调用)│ └──────────────────────────────┘
└──────────────────────────┘
│ 所有阶段读写同一份记忆
▼
┌──────────────────────────────────────────┐
│ SQLite 记忆 database/ (peewee ORM) │
│ Session / KeyFact / KeySnippet / │
│ ResearchNote / Trajectory(成本&轨迹) │
└──────────────────────────────────────────┘
部件一句话职责
| 部件 | 干什么 | 文件 |
|---|---|---|
| CLI 入口 | 解析命令行、建 Session、初始化模型与记忆、启动研究阶段 | ra_aid/__main__.py(main) |
| 三阶段 agent | 研究 / 规划 / 实现各一个 runner 函数,各自带专属 prompt 与工具子集 | ra_aid/agents/research_agent.py、planning_agent.py、implementation_agent.py |
| 阶段接力工具 | agent 用它触发下一阶段(研究→规划→实现) | ra_aid/tools/agent.py(request_implementation、request_task_implementation) |
| 共享 agent 工厂 | 按模型能力造出一个 agent,挑 ReAct 或 CIAYN 后端 | ra_aid/agent_utils.py(create_agent) |
| 两种后端 | ReAct(用模型原生 function-calling);CIAYN(模型不支持函数调用时,让它输出代码来调工具) | langgraph.create_react_agent / ra_aid/agent_backends/ciayn_agent.py(CiaynAgent) |
| 工具箱 | 按阶段裁出该阶段能用的工具集合(只读/修改/研究/专家/HIL) | ra_aid/tool_configs.py + ra_aid/tools/ |
| SQLite 记忆 | 用 peewee ORM 把事实、片段、笔记、轨迹落到本地库,跨阶段共享 | ra_aid/database/(models.py、repositories/) |