-
Notifications
You must be signed in to change notification settings - Fork 70
Open
Description
[任务] Code 子命令阶段二
[任务分值] 80 分
[背景描述] 在完成 #179 命令的基础进行阶段二的工作。
[需求描述]
阶段 02(LLM 接入:rig 驱动工具调用与 diff 输出)详细规划
目标
- 使用 rig 将阶段 01 的工具注册为可调用工具。
- 建立一个 “multi-turn 工具调用 → 最终输出 unified diff” 的闭环。
- 构建 TUI 的接口,接入 Agent 去中心化网络。
- 交互数据通过内部 MCP 写入版本管理。
阶段 02 的整体做法
- LLM 接口层(rig)
- 选择一个 Provider(OpenAI 或 rig Provider)。
- 用 AgentBuilder 构建 Agent,注册工具。
- 使用多轮模式(允许工具调用),直到返回最终 diff。
- 工具注册
- 将 list_dir/read_file/search/apply_patch 封装为 Tool trait 实现。
- 为每个工具生成 JSON schema(schemars)。
- 保持工具输出结构与阶段 01 的 ToolResult 一致。
- Prompt 与约束
-
System prompt 约束模型输出格式:
- 必须在最终回复中输出 unified diff
- 改动前要用工具获取足够上下文
-
失败策略:
- 如果 diff 解析失败,返回给模型继续修正
- 设置最大循环次数(避免死循环)
- 执行与结果
- 对工具调用结果追加进对话(rig 默认机制)。
- 如果最终输出不是 diff:判为失败并反馈约束。
- 提供 dry-run:仅返回 diff,不执行 apply_patch。
阶段 02 需要实现的内容
A. LLM 适配与配置
- VibeModelConfig:model 名称、API key、max_tokens
- RigClientFactory:从 env 读取配置,创建 provider client
- Agent 构建器:绑定工具 + prompt
B. Tool 实现
- 每个工具对应一个 struct 实现 Tool trait:
- NAME 常量
- Args / Output 类型(serde + schemars)
- definition() 返回 JSON schema
- call() 调用阶段 01 的实现
- 输出结构化:ToolResult,方便日志与 TUI 复用
C. Diff 输出校验
- diff_validator:验证 unified diff 结构(---/+++ 和 @@)
- diff_apply:在 dry-run 时跳过落盘
- 若 diff 失败:让模型修正(追加 error message)
D. 交互驱动
- vibe_apply(task) 入口:
- 生成 system prompt + user task
- 进入 agent multi-turn loop
- 直到返回 diff 或达到最大迭代
E. 生成的信息通过 MCP 存入本地;
[代码标准]
- 所有 PR 提交必须签署
Signed-off-by和 使用GPG签名,即提交代码时(使用git commit命令时)至少使用-s -S两个参数,参考 Contributing Guide; - 所有 PR 提交必须通过
GitHub Actions自动化测试,提交 PR 后请关注GitHub Actions结果; - 代码注释均需要使用英文;
[PR 提交地址] 提交到 git-internal 仓库的 main 分支 `` 目录;
[开发指导]
- 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;
[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-mega 频道和导师交流。
- Quanyi Ma genedna@qq.com
- Tianxing Ye yetianxing2014@gmail.com
[备注]
- 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务 和 r2cn 开源实习计划 - 学生注册与审核
Reactions are currently unavailable