[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80023":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":11,"subscribersCount":11,"size":11,"stars1d":14,"stars7d":15,"stars30d":16,"stars90d":11,"forks30d":11,"starsTrendScore":17,"compositeScore":11,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":8,"pushedAt":8,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":11,"starSnapshotCount":11,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},80023,"Coding-Agent-SFT-Lab","shuailishuaiqiYangLiu\u002FCoding-Agent-SFT-Lab","shuailishuaiqiYangLiu",null,"Python",79,0,67,1,4,9,11,12,false,"main",true,[],"2026-06-12 02:03:57","# Coding Agent SFT Lab\n\n一个面向简历项目和后训练实验的轻量级 **Code Repository Agent + Qwen3-8B LoRA SFT** 项目。\n\n项目包含两部分：\n\n1. **Code Agent 原型**：参考 Claude Code \u002F Aider \u002F OpenHands 的公开思路，实现仓库扫描、检索、规划、工具调用、测试验证、Review Subagent 和 JSONL trace 记录。\n2. **Agent SFT 实验闭环**：将 Agent 工具轨迹、MBPP\u002FHumanEval、SWE-bench Lite plan 数据转换为 LLaMA-Factory 训练格式，并基于 Qwen3-8B 做 LoRA SFT，对比微调前后效果。\n\n> 说明：本仓库不包含任何私有 API、模型权重、训练 checkpoint 或个人路径。模型权重和训练输出请按文档本地生成。\n\n---\n\n## 项目亮点\n\n- 支持代码仓库索引、Python AST 符号提取和轻量词法检索。\n- 使用 LangGraph 编排 Planner → Tool Execution → Verifier → Review → Summary 流程。\n- 通过 Tool Registry 统一封装 `read_file`、`grep`、`replace_in_file`、`write_file`、`run_tests`、`git_diff` 等工具。\n- 内置 Hook 安全边界，阻止越权路径、危险命令和敏感文件修改。\n- 每次 Agent 运行可保存 JSONL trace，用于后续 SFT 数据构建。\n- 提供 LLaMA-Factory 数据转换、Qwen3-8B 模型下载、LoRA SFT 和 base\u002FSFT 对比评估脚本。\n- 给出完整简历项目写法，展示一个 AI Agent 后训练项目从 0 到 1 的组织方式。\n\n---\n\n## 架构\n\n```mermaid\nflowchart TD\n    UserTask[User Task] --> RepoIndex[Repo Indexer]\n    RepoIndex --> Planner[Planner]\n    Planner --> ToolRouter[Tool Router]\n    ToolRouter --> HooksPre[Pre Tool Hook]\n    HooksPre --> ToolExec[Tool Execution]\n    ToolExec --> HooksPost[Post Tool Hook]\n    HooksPost --> Verifier[Verifier]\n    Verifier -->|Need More Work| ToolRouter\n    Verifier -->|Done| ReviewSubagent[Review Subagent]\n    ReviewSubagent --> Summarizer[Summarizer]\n    Summarizer --> Trace[JSONL Trace]\n```\n\n核心模块：\n\n| 模块 | 文件 | 作用 |\n| --- | --- | --- |\n| Repo Indexer | `src\u002Fcc_agent\u002Frepo_indexer.py` | 扫描仓库、读取规则、提取 Python 符号、构建检索上下文 |\n| Planner \u002F Actor \u002F Reviewer | `src\u002Fcc_agent\u002Fgraph.py` | LangGraph 工作流编排 |\n| Tool Registry | `src\u002Fcc_agent\u002Ftools.py` | 文件、搜索、编辑、测试、diff 工具封装 |\n| Hook System | `src\u002Fcc_agent\u002Fhooks.py` | 路径、安全命令、敏感文件保护 |\n| Trace | `src\u002Fcc_agent\u002Ftracing.py` | 保存 JSONL 工具轨迹 |\n| Trace Stats | `src\u002Fcc_agent\u002Ftrace_stats.py` | 汇总工具成功率、测试通过率、编辑次数 |\n| CLI | `src\u002Fcc_agent\u002Fcli.py` | 命令行入口 |\n\n---\n\n## 目录结构\n\n```text\n.\n├── src\u002Fcc_agent\u002F                  # Code Agent 核心源码\n├── scripts\u002F                       # 数据转换、模型下载、训练、评估脚本\n├── examples\u002F                      # 可运行的小型样例仓库和 benchmark task\n├── data\u002F\n│   ├── tasks\u002F                     # 任务清单样例\n│   ├── sft\u002F                       # SFT JSONL 样例数据\n│   ├── llamafactory\u002F              # LLaMA-Factory alpaca 格式样例数据\n│   └── repos\u002F                     # MBPP \u002F HumanEval 生成的小型仓库样例\n├── docs\u002F                          # 实验报告和简历写法\n├── run_agent.py                   # CLI wrapper\n├── requirements.txt\n├── pyproject.toml\n└── .env.example\n```\n\n以下内容默认不入库：`outputs\u002F`、`models\u002F`、`traces\u002F`、`logs\u002F`、`.env`、`.cache\u002F`、`*.safetensors`、`*.log`。\n\n---\n\n## 环境准备\n\n建议使用 Python 3.10+。如果你使用 conda：\n\n```bash\nconda create -n coding_agent_sft python=3.10 -y\nconda activate coding_agent_sft\npip install -r requirements.txt\n```\n\n如果在当前实验环境中复现，也可以使用已有环境：\n\n```bash\nconda run -n liuyang_aihigh pip install -r requirements.txt\n```\n\n配置模型 API：\n\n```bash\ncp .env.example .env\n```\n\n编辑 `.env`：\n\n```bash\nCC_AGENT_LLM_PROVIDER=openai\nOPENAI_API_KEY=sk-your-api-key\nOPENAI_BASE_URL=https:\u002F\u002Fapi.openai.com\u002Fv1\nOPENAI_MODEL=gpt-4o-mini\nOPENAI_TEMPERATURE=0.1\n```\n\n`OPENAI_BASE_URL` 可以替换为任何 OpenAI-compatible API 服务地址。\n\n---\n\n## 运行 Code Agent\n\n### 1. 只预览仓库上下文\n\n```bash\npython run_agent.py index --repo examples\u002Fsample_repo --query \"subtract bug\"\n```\n\n### 2. 单独运行检索\n\n```bash\npython run_agent.py retrieve --repo examples\u002Fsample_repo --query \"subtract function\" --top-k 3\n```\n\n### 3. 运行完整 Agent\n\n```bash\npython run_agent.py run \\\n  --repo examples\u002Fsample_repo \\\n  --task \"修复 subtract 函数的错误实现\" \\\n  --test-command \"pytest -q\"\n```\n\n每次完整运行会在 `traces\u002F` 目录生成 JSONL 轨迹。轨迹包含计划、工具调用、工具结果、Review 结论和最终总结，可用于后续 SFT。\n\n### 4. 查看 trace 统计\n\n```bash\npython run_agent.py stats --path traces\n```\n\n---\n\n## 构建 SFT 数据\n\n本项目支持三类数据源：\n\n| 数据源 | 用途 | 输出 |\n| --- | --- | --- |\n| MBPP | 入门级 Python 编程任务 | 小型 repo + task manifest + SFT JSONL |\n| HumanEval | 函数级代码生成任务 | 小型 repo + task manifest + SFT JSONL |\n| SWE-bench Lite | 真实 GitHub issue 元数据 | issue → plan \u002F patch SFT 数据 |\n\n### 1. 构建 MBPP \u002F HumanEval 数据\n\n```bash\npython run_agent.py build-mbpp --limit 20\npython run_agent.py build-humaneval --limit 20\n```\n\n如果无法访问外网，代码会生成少量 offline seed 样本，方便先跑通流程。\n\n### 2. 构建 SWE-bench Lite 任务清单\n\n```bash\nexport HF_ENDPOINT=https:\u002F\u002Fhf-mirror.com\npython run_agent.py build-swebench-lite --limit 20\n```\n\n### 3. 将 SWE-bench Lite 转成 SFT\n\n生成修复计划数据：\n\n```bash\npython run_agent.py swebench-to-sft \\\n  --input data\u002Ftasks\u002Fswebench_lite_tasks.jsonl \\\n  --output data\u002Fsft\u002Fswebench_lite_plan_sft.jsonl \\\n  --mode plan\n```\n\n生成 patch 数据：\n\n```bash\npython run_agent.py swebench-to-sft \\\n  --input data\u002Ftasks\u002Fswebench_lite_tasks.jsonl \\\n  --output data\u002Fsft\u002Fswebench_lite_patch_sft.jsonl \\\n  --mode patch\n```\n\n### 4. 将 Agent traces 转成 SFT\n\n```bash\npython run_agent.py traces-to-sft --trace-path traces --output data\u002Fsft\u002Fagent_traces_sft.jsonl\n```\n\n---\n\n## LLaMA-Factory SFT 实验\n\n### 1. 准备 LLaMA-Factory 数据\n\n```bash\npython scripts\u002Fprepare_llamafactory_sft.py\n```\n\n输出：\n\n```text\ndata\u002Fllamafactory\u002Ftrain_alpaca.json\ndata\u002Fllamafactory\u002Fval_alpaca.json\ndata\u002Fllamafactory\u002Fdataset_info.json\ndata\u002Fllamafactory\u002Fdataset_stats.json\n```\n\n当前样例统计：\n\n| 数据集 | 数量 |\n| --- | ---: |\n| 总样本 | 724 |\n| 训练集 | 687 |\n| 验证集 | 37 |\n\n### 2. 安装 LLaMA-Factory\n\n```bash\nbash scripts\u002Finstall_llamafactory.sh\n```\n\n验证：\n\n```bash\nllamafactory-cli --help\n```\n\n### 3. 下载 Qwen3-8B\n\n```bash\nbash scripts\u002Fdownload_qwen_model.sh\n```\n\n默认下载到：\n\n```text\nmodels\u002FQwen3-8B\n```\n\n如果你的磁盘空间有限，可以自定义路径：\n\n```bash\nLOCAL_DIR=\u002Fpath\u002Fto\u002Fmodels\u002FQwen3-8B bash scripts\u002Fdownload_qwen_model.sh\n```\n\n### 4. 启动 LoRA SFT\n\n```bash\nLOCAL_MODEL_DIR=models\u002FQwen3-8B \\\nCUDA_VISIBLE_DEVICES=0 \\\nbash scripts\u002Ftrain_qwen_supported_llamafactory_lora.sh\n```\n\n训练输出默认保存到：\n\n```text\noutputs\u002Fqwen_supported_coding_agent_lora_llamafactory\n```\n\n关键训练配置：\n\n| 参数 | 值 |\n| --- | --- |\n| Base model | `Qwen\u002FQwen3-8B` |\n| Method | LoRA SFT |\n| LoRA rank \u002F alpha | 8 \u002F 32 |\n| Effective batch size | 16 |\n| cutoff_len | 4096 |\n| learning rate | `1e-4` |\n| epoch | 1 |\n| dtype | bf16 |\n\n---\n\n## 微调前后评估\n\n训练完成后，对比 base model 与 SFT adapter：\n\n```bash\nCUDA_VISIBLE_DEVICES=0,1 \\\npython scripts\u002Feval_before_after_sft.py \\\n  --base-model models\u002FQwen3-8B \\\n  --adapter-dir outputs\u002Fqwen_supported_coding_agent_lora_llamafactory \\\n  --device auto \\\n  --max-new-tokens 512\n```\n\n评估指标：\n\n| 指标 | 含义 |\n| --- | --- |\n| `json_valid_rate` | 输出是否为合法 JSON |\n| `field_hit_rate` | 必填字段是否存在，例如 `plan\u002Ftool\u002Farguments` |\n| `rouge_l` | 与参考答案的 ROUGE-L F1 |\n| `tool_accuracy` | 工具调用任务中 tool 名称是否正确 |\n| `file_mention_rate` | SWE-bench plan 中是否命中关键文件 |\n| `patch_format_rate` | patch 任务中是否包含 unified diff 标记 |\n\n一次实验结果：\n\n| 指标 | Base | SFT | 提升 |\n| --- | ---: | ---: | ---: |\n| JSON 格式正确率 | 0.0% | 94.6% | +94.6% |\n| 必填字段命中率 | 1.4% | 94.6% | +93.2% |\n| ROUGE-L | 10.1% | 73.1% | +63.0% |\n| Tool 选择准确率 | 0.0% | 83.3% | +83.3% |\n| 文件命中率 | 7.7% | 38.5% | +30.8% |\n\n结果解读：这个提升主要说明 SFT 显著增强了模型对 **Agent 输出协议和 JSON 格式** 的遵循能力；它不等同于真实复杂代码修复能力已经同幅度提升。更严格的下一步应加入 held-out 测试集、真实 patch 执行和端到端 Agent loop 评估。\n\n\n\n---\n\n## 简历写法参考\n\n更完整版本见 `docs\u002FRESUME_PROJECT_TEMPLATE.md`。\n\n简历 bullet 示例：\n\n> 构建面向代码仓库任务的轻量级 Coding Agent，支持仓库索引、代码检索、任务规划、工具调用、测试执行、Review Subagent 和 JSONL 轨迹记录；进一步将 Agent traces、MBPP\u002FHumanEval 和 SWE-bench Lite 数据统一转换为 LLaMA-Factory SFT 格式，基于 Qwen3-8B 进行 LoRA SFT，并设计 base\u002FSFT 对比评估脚本。实验中 SFT 后 JSON 合法率从 0.0% 提升到 94.6%，字段命中率从 1.4% 提升到 94.6%，工具选择准确率从 0.0% 提升到 83.3%，验证了 SFT 对 Agent 输出协议对齐的有效性。\n\n---\n\n## 后续扩展\n\n- 引入 tree-sitter 支持更多语言的符号级索引。\n- 用 embedding \u002F rerank 替换当前轻量词法检索。\n- 扩充高质量真实 Agent traces，减少模板化过拟合。\n- 将 patch 样本纳入评估，增加真实测试执行指标。\n- 基于工具合法性、测试通过率和 diff 风险设计 RLVR \u002F GRPO \u002F GSPO 后训练实验。\n","Coding Agent SFT Lab 是一个面向简历项目和后训练实验的轻量级 Code Repository Agent 项目，结合了 Qwen3-8B LoRA SFT 技术。该项目的核心功能包括代码仓库索引、Python AST 符号提取、工具调用流程编排以及安全边界控制等。它支持从用户任务到最终总结的完整工作流，并通过内置 Hook 系统防止越权操作。此外，每次运行可生成 JSONL 格式的追踪数据，便于后续微调使用。此项目适用于需要自动化处理代码库、进行代码审查或执行特定编程任务的场景，特别是对于希望研究 AI 代理在软件开发中应用的研究人员和技术爱好者来说非常有价值。",2,"2026-06-11 03:58:57","CREATED_QUERY"]