tensense commited on
Commit
024b941
·
verified ·
1 Parent(s): 4e909c7

Upload 2 files

Browse files
README.md CHANGED
@@ -1,1145 +1,343 @@
1
- # 代码仓库智能训练数据生成系统 - 设计文档
2
-
3
- **目录结构**:
4
- ```
5
- code_repo_finetuning/
6
- ├── scripts/ # 核心训练脚本 (01-05)
7
- ├── utils/ # 辅助工具
8
- ├── config/ # 配置文件
9
- ├── data/ # 数据目录
10
- ├── output/ # 输出目录
11
- ├── repos/ # 代码仓库
12
- └── docs/ # 文档
13
- ```
14
-
15
  ---
16
-
17
- ## 项目概述
18
-
19
- ### 1.1 项目背景
20
- 本项目旨在为 Qwen 3-8B 等大语言模型的微调提供自动化的训练数据生成解决方案,使模型能够理解和回答关于特定代码仓库的问题,包括业务流程、架构设计和实现细节。
21
-
22
- ### 1.2 核心目标
23
- - **场景1**: 根据本地代码仓库的业务流程和规则,自动化生成高质量问答对,包含完整的代码上下文和推理过程
24
- - **场景2**: 为给定需求生成基于代码仓架构的设计方案,提供详细的解释和推理轨迹
25
-
26
- ### 1.3 技术栈
27
- - **基础模型**: Qwen 3-8B
28
- - **训练框架**: PyTorch + DeepSpeed ZeRO-3 + LoRA
29
- - **代码分析**: Python AST + 正则表达式
30
- - **数据格式**: JSONL (JSON Lines)
31
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  ---
33
 
34
- ## 2. 系统架构设计
35
 
36
- ### 2.1 整体架构
37
 
38
- ```
39
- ┌─────────────────────────────────────────────────────────────────┐
40
- │ 输入:GitHub 代码仓库 │
41
- └─────────────────────────────┬───────────────────────────────────┘
42
-
43
-
44
- ┌─────────────────────────────────────────────────────────────────┐
45
- │ 模块1: 代码仓库分析器 (Repository Analyzer) │
46
- │ - 克隆/更新代码仓库 │
47
- │ - AST 解析提取代码元素 │
48
- │ - 构建项目上下文和调用图 │
49
- │ - 识别代码模式 │
50
- └─────────────────────────────┬───────────────────────────────────┘
51
-
52
-
53
- ┌─────────────────────────────────────────────────────────────────┐
54
- │ 模块2: 训练数据生成器 (Data Generator) │
55
- │ - 场景1: 问答对生成 (代码解释、API使用、定位) │
56
- │ - 场景2: 设计方案生成 (架构理解、需求分析) │
57
- │ - 数据增强和去重 │
58
- └─────────────────────────────┬───────────────────────────────────┘
59
-
60
-
61
- ┌─────────────────────────────────────────────────────────────────┐
62
- │ 模块3: 模型微调器 (Model Finetuner) │
63
- │ - LoRA 参数高效微调 │
64
- │ - DeepSpeed ZeRO-3 分布式训练 │
65
- │ - 自动保存 checkpoints │
66
- └─────────────────────────────┬───────────────────────────────────┘
67
-
68
-
69
- ┌────────────────────────────────────���────────────────────────────┐
70
- │ 模块4: LoRA 权重合并器 (LoRA Merger) │
71
- │ - 合并 LoRA adapter 到基础模型 │
72
- │ - 生成完整的可部署模型 │
73
- └─────────────────────────────┬───────────────────────────────────┘
74
-
75
-
76
- ┌─────────────────────────────────────────────────────────────────┐
77
- │ 模块5: 模型评估器 (Model Evaluator) │
78
- │ - 对比基础模型与微调模型 │
79
- │ - 多维度评分 (项目特定知识、代码理解、通用能力) │
80
- │ - 生成详细评估报告 │
81
- └─────────────────────────────┬───────────────────────────────────┘
82
-
83
-
84
- 输出:微调后的专用模型
85
- ```
86
 
87
- ### 2.2 数据流图
88
 
89
- ```
90
- GitHub Repo URL
91
-
92
-
93
- [utils/config_manager.py] ──> config/default_config.yaml (更新)
94
-
95
-
96
- [scripts/01_analyze_repo.py]
97
-
98
- ├─> data/repository_analysis.json (代码元素、模式、调用图)
99
-
100
-
101
- [scripts/02_generate_data.py]
102
-
103
- ├─> data/training_data/train.jsonl (80%)
104
- ├─> data/training_data/val.jsonl (10%)
105
- ├─> data/training_data/test.jsonl (10%)
106
- └─> data/training_data/metadata.json
107
-
108
-
109
- [scripts/03_train_model.py] + DeepSpeed
110
-
111
- ├─> output/finetuned_model/checkpoint-XXX/ (训练检查点)
112
- └─> output/finetuned_model/final_model/ (LoRA adapter)
113
-
114
-
115
- [scripts/04_merge_weights.py]
116
-
117
- └─> output/finetuned_model/merged_model/ (完整模型)
118
-
119
-
120
- [scripts/05_evaluate.py]
121
-
122
- └─> comparison_report_[ProjectName]_v2.json (评估结果)
123
- ```
124
 
125
- ---
 
 
 
 
126
 
127
- ## 3. 核心模块详细设计
128
 
129
- ### 3.1 模块1: 代码仓库分析器 (Repository Analyzer)
 
 
 
130
 
131
- #### 3.1.1 功能描述
132
- 负责深度解析代码仓库,提取结构化的代码知识图谱。
 
 
 
 
 
 
 
 
133
 
134
- #### 3.1.2 核心数据结构
135
 
136
- **CodeElement** - 代码元素
137
- ```python
138
- @dataclass
139
- class CodeElement:
140
- type: str # function, class, method
141
- name: str # 元素名称
142
- filepath: str # 相对文件路径
143
- start_line: int # 起始行号
144
- end_line: int # 结束行号
145
- code: str # 完整代码
146
- docstring: str # 文档字符串
147
- dependencies: List[str] # 依赖的类/模块
148
- complexity: int # 圈复杂度
149
- business_context: str # 业务关键词
150
- imports: List[str] # 导入的模块
151
- called_functions: List[str] # 调用的函数
152
- parent_class: str # 所属类
153
- decorators: List[str] # 装饰器列表
154
- parameters: List[Dict] # 参数列表 [{name, type}, ...]
155
- return_type: str # 返回类型
156
- ```
157
 
158
- **CodePattern** - 代码模式
159
- ```python
160
- @dataclass
161
- class CodePattern:
162
- pattern_type: str # implementation, usage, interaction
163
- description: str # 模式描述
164
- code_snippet: str # 代码片段
165
- context: str # 上下文信息
166
- related_elements: List[str] # 相关元素
167
- ```
168
 
169
- **ProjectContext** - 项目上下文
170
- ```python
171
- @dataclass
172
- class ProjectContext:
173
- project_name: str # 项目名称
174
- description: str # 项目描述 (来自 README)
175
- main_technologies: List[str] # 主要技术栈
176
- architecture_style: str # 架构风格
177
- key_modules: List[str] # 核心模块
178
- dependencies: Dict[str, str] # 依赖字典 {包名: 版本}
179
- ```
180
 
181
- #### 3.1.3 关键算法
182
 
183
- **AST 解析算法**
184
- ```python
185
- def _extract_function_enhanced(node, filepath, source_code):
186
- 1. 提取函数签名和位置信息
187
- 2. 解析参数列表和类型注解
188
- 3. 提取返回值类型
189
- 4. 识别装饰器
190
- 5. 分析函数调用关系
191
- 6. 计算圈复杂度
192
- 7. 提取业务关键词
193
- return CodeElement(...)
194
- ```
195
 
196
- **调用图构建算法**
197
- ```python
198
- def _build_call_graph():
199
- for element in code_elements:
200
- if element.type in ['function', 'method']:
201
- for called in element.called_functions:
202
- function_calls_graph[element.name].add(called)
203
- ```
204
 
205
- **代码模式提取**
206
- ```python
207
- def _extract_code_patterns():
208
- # 模式1: 类实现模式
209
- for class_element in classes:
210
- if class_element.docstring:
211
- create_pattern("class_implementation", ...)
212
-
213
- # 模式2: 函数实现和用法模式
214
- for function_element in functions:
215
- callers = find_callers(function_element)
216
- create_pattern("function_implementation", ...)
217
-
218
- # 模式3: 模块交互模式
219
- for module, usage_elements in module_interactions:
220
- if len(usage_elements) >= 2:
221
- create_pattern("module_interaction", ...)
222
- ```
223
 
224
- #### 3.1.4 输出格式
225
-
226
- **repository_analysis.json 结构**
227
- ```json
228
- {
229
- "project_context": {
230
- "project_name": "Laddr",
231
- "description": "...",
232
- "main_technologies": ["fastapi", "pydantic", "sqlite", ...],
233
- "architecture_style": "layered",
234
- "key_modules": ["core", "cli", "api"],
235
- "dependencies": {"fastapi": ">=0.100.0", ...}
236
- },
237
- "project_structure": {
238
- "lib/laddr/src/laddr": {
239
- "type": "directory",
240
- "children": {...}
241
- }
242
- },
243
- "code_elements": [
244
- {
245
- "type": "class",
246
- "name": "AgentRuntime",
247
- "filepath": "lib/laddr/src/laddr/core/agent_runtime.py",
248
- "start_line": 45,
249
- "end_line": 120,
250
- "code": "class AgentRuntime:\n ...",
251
- "docstring": "Agent runtime manager...",
252
- "dependencies": ["BaseAgent", "MessageBus"],
253
- "complexity": 15,
254
- "business_context": "agent, runtime, initialize, process",
255
- "imports": ["typing", "asyncio", "pydantic"],
256
- "called_functions": ["setup_tools", "run_loop"],
257
- "parent_class": "",
258
- "decorators": [],
259
- "parameters": [{"name": "config", "type": "AgentConfig"}],
260
- "return_type": ""
261
- }
262
- ],
263
- "code_patterns": [
264
- {
265
- "pattern_type": "class_implementation",
266
- "description": "类 AgentRuntime 的实现",
267
- "code_snippet": "...",
268
- "context": "文件: core/agent_runtime.py\n文档: ...",
269
- "related_elements": ["AgentRuntime"]
270
- }
271
- ],
272
- "statistics": {
273
- "total_elements": 350,
274
- "functions": 180,
275
- "classes": 45,
276
- "methods": 125,
277
- "code_patterns": 87,
278
- "file_type_counts": {".py": 52, ".md": 8, ...}
279
- },
280
- "call_graph": {
281
- "AgentRuntime.run": ["setup_tools", "process_message"],
282
- ...
283
- }
284
- }
285
- ```
286
 
287
- ---
 
 
 
288
 
289
- ### 3.2 模块2: 训练数据生成器 (Data Generator)
 
 
 
290
 
291
- #### 3.2.1 设计理念
292
- - **基于真实代码**: 所有问答对直接来源于实际代码和文档,不依赖LLM生成
293
- - **模板化方法**: 使用精心设计的模板确保数据质量和一致性
294
- - **多样性保证**: 通过不同问题模板和代码元素组合实现多样性
295
- - **可验证性**: 每个答案都可以追溯到源代码
296
 
297
- #### 3.2.2 训练数据集结构
298
 
299
- **TrainingSample 数据结构**
300
  ```python
301
- @dataclass
302
- class TrainingSample:
303
- conversations: List[Dict[str, str]] # [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]
304
- metadata: Dict[str, Any] # {"task_type": "...", "element_name": "...", "filepath": "..."}
305
- ```
306
-
307
- **JSONL 格式示例**
308
- ```jsonl
309
- {"conversations": [{"role": "user", "content": "请解释 Laddr 中 `AgentRuntime` 的作用。"}, {"role": "assistant", "content": "`AgentRuntime` 是 Laddr 项目中的一个 类,位于 `lib/laddr/src/laddr/core/agent_runtime.py`。\n\n**功能描述**:\nAgent runtime manager that coordinates tool execution, message handling, and state management.\n\n**函数签名**:\n```python\nclass AgentRuntime:\n def __init__(self, config: AgentConfig):\n```"}], "metadata": {"task_type": "code_explanation", "element_name": "AgentRuntime", "filepath": "lib/laddr/src/laddr/core/agent_runtime.py"}}
310
- ```
311
-
312
- #### 3.2.3 场景1: 问答对生成
313
-
314
- **任务类型1: 代码解释 (Code Explanation)**
315
-
316
- - **目标**: 解释特定代码元素的功能和实现
317
- - **问题模板**:
318
- - "请解释 {project_name} `{element_name}` 的作用。"
319
- - "{project_name} 的 `{element_name}` 是做什么的?"
320
- - "在 {project_name} 项目中,`{element_name}` 有什么功能?"
321
-
322
- - **答案结构**:
323
- ```
324
- `{element_name}` {project_name} 项目中的一个 {type},位于 `{filepath}`。
325
-
326
- **功能描述**:
327
- {docstring}
328
-
329
- **函数签名**:
330
- ```python
331
- {signature}
332
- ```
333
-
334
- **参数**:
335
- - `{param_name}` ({param_type}): {param_description}
336
-
337
- **返回值**:`{return_type}`
338
- ```
339
-
340
- - **数据来源**:
341
- - 元素类型、名称: CodeElement.type, name
342
- - 文件路径: CodeElement.filepath
343
- - 功能描述: CodeElement.docstring
344
- - 参数信息: CodeElement.parameters
345
- - 返回类型: CodeElement.return_type
346
-
347
- - **质量保证**:
348
- - 只选择有 docstring 的元素
349
- - 代码长度 > 50 字符
350
- - 自动清理 docstring 格式
351
- - 参数描述尝试从 docstring 提取
352
-
353
- **任务类型2: API 使用 (API Usage)**
354
-
355
- - **目标**: 展示如何使用特定函数/方法
356
- - **问题模板**:
357
- - "如何在 {project_name} 中使用 `{function_name}` 函数?"
358
- - "请给出 `{function_name}` 的使用示例。"
359
-
360
- - **答案结构**:
361
- ```
362
- `{function_name}` 位于 `{filepath}`,使用方法如下:
363
-
364
- ```python
365
- {function_name}(param1=..., param2=...)
366
- ```
367
-
368
- **参数说明**:
369
- - `param1`: Type - Description
370
- - `param2`: Type - Description
371
-
372
- **功能简述**:{docstring_summary}
373
- ```
374
-
375
- - **筛选条件**:
376
- - 非私有方法 (不以 `_` 开头)
377
- - 有参数列表
378
- - 类型为 function method
379
-
380
- **任务类型3: 项目概览 (Project Overview)**
381
-
382
- - **目标**: 提供项目整体信息
383
- - **问题示例**:
384
- - "{project_name} 项目的主要功能是什么?"
385
- - "请介绍 {project_name} 的架构设计。"
386
- - "{project_name} 中有哪些核心模块?"
387
-
388
- - **答案来源**:
389
- - ProjectContext.description (README 摘要)
390
- - ProjectContext.main_technologies
391
- - ProjectContext.key_modules
392
- - Statistics (代码元素统计)
393
-
394
- - **特色处理**:
395
- - 优化项目描述展示,突出核心目标
396
- - 列举主要技术栈
397
- - 统计代码结构 (类数、函数数、文件类型)
398
-
399
- **任务类型4: 代码定位 (Code Location)**
400
-
401
- - **目标**: 回答"在哪个文件中..."类型问题
402
- - **问题模板**:
403
- - "在 {project_name} 中,`{element_name}` 在哪个文件中?"
404
- - "{element_name} 的源代码位置在哪里?"
405
-
406
- - **答案示例**:
407
- ```
408
- `{element_name}` 位于 `{filepath}` 的第 {start_line}-{end_line} 行。
409
- ```
410
-
411
- #### 3.2.4 场景2: 设计方案生成
412
-
413
- **任务类型5: 架构理解 (Architecture Understanding)**
414
-
415
- - **目标**: 理解项目整体架构和模块关系
416
- - **问题示例**:
417
- - "如何在 {project_name} 中实现一个新的 Agent Tool?"
418
- - "在 {project_name} 中添加新功能需要修改哪些模块?"
419
-
420
- - **答案构建**:
421
- ```
422
- 在 {project_name} 中实现新 {feature} 需要以下步骤:
423
-
424
- **涉及的核心模块**:
425
- - `{module1}`: {description}
426
- - `{module2}`: {description}
427
-
428
- **参考实现**:
429
- 查看 `{reference_file}` 中的 `{reference_class}` 实现。
430
-
431
- **推理过程**:
432
- 1. 分析需求...
433
- 2. 识别依赖模块...
434
- 3. 设计接口...
435
- ```
436
-
437
- - **推理轨迹 (Reasoning Trace)**:
438
- - 列出相关的 CodePattern
439
- - 展示调用图关系
440
- - 引用实际代码示例
441
-
442
- **任务类型6: 需求实现路径 (Implementation Path)**
443
-
444
- - **目标**: 为新需求提供实现建议
445
- - **设计要点**:
446
- - 基于现有代码模式推荐实现方式
447
- - 利用 function_calls_graph 分析依赖
448
- - 引用相似功能的实现
449
-
450
- #### 3.2.5 数据增强策略
451
-
452
- 1. **问题变体生成**: 同一知识点生成 3-5 种不同问法
453
- 2. **上下文扩展**: 添加相关代码元素作为背景信息
454
- 3. **难度分层**:
455
- - 简单: 单一元素解释
456
- - 中等: 多元素关系分析
457
- - 困难: 架构级设计方案
458
-
459
- #### 3.2.6 数据集划分
460
-
461
- - **训练集 (80%)**: train.jsonl - 用于模型学习
462
- - **验证集 (10%)**: val.jsonl - 用于超参数调优
463
- - **测试集 (10%)**: test.jsonl - 用于最终评估
464
-
465
- **metadata.json 示例**:
466
- ```json
467
- {
468
- "total_samples": 650,
469
- "train_samples": 520,
470
- "val_samples": 65,
471
- "test_samples": 65,
472
- "task_distribution": {
473
- "code_explanation": 300,
474
- "api_usage": 150,
475
- "project_overview": 50,
476
- "code_location": 100,
477
- "design_proposal": 50
478
- },
479
- "generation_config": {
480
- "diversity_threshold": 0.7,
481
- "max_code_lines": 40,
482
- "min_code_lines": 5
483
- }
484
- }
485
- ```
486
-
487
- #### 3.2.7 质量保证机制
488
-
489
- 1. **去重**: 基于问题文本相似度去重 (Levenshtein距离)
490
- 2. **长度过滤**: 代码片段长度在 5-40 行之间
491
- 3. **完整性检查**: 确保所有样本都有元数据
492
- 4. **格式验证**: 验证 JSONL 格式正确性
493
-
494
- ---
495
-
496
- ### 3.3 模块3: 模型微调器 (Model Finetuner)
497
-
498
- #### 3.3.1 微调策略
499
-
500
- **LoRA (Low-Rank Adaptation) 配置**
501
- ```yaml
502
- lora:
503
- r: 64 # LoRA 秩
504
- alpha: 128 # LoRA alpha (缩放因子)
505
- dropout: 0.05 # Dropout 率
506
- target_modules: # 目标模块
507
- - q_proj
508
- - k_proj
509
- - v_proj
510
- - o_proj
511
- - gate_proj
512
- - up_proj
513
- - down_proj
514
- bias: none # 是否训练 bias
515
- ```
516
-
517
- **训练超参数**
518
- ```yaml
519
- training:
520
- batch_size: 2 # 每 GPU batch size
521
- gradient_accumulation_steps: 8 # 梯度累积步数 (有效 batch = 2*8*2=32)
522
- learning_rate: 1e-3 # 学习率
523
- num_epochs: 3 # 训练轮数
524
- warmup_ratio: 0.05 # 预热比例
525
- weight_decay: 0.01 # 权重衰减
526
- max_grad_norm: 1.0 # 梯度裁剪
527
- bf16: true # BF16 混合精度
528
- ```
529
-
530
- #### 3.3.2 DeepSpeed ZeRO-3 配置
531
-
532
- **config/deepspeed_zero3.json**
533
- ```json
534
- {
535
- "bf16": {"enabled": true},
536
- "zero_optimization": {
537
- "stage": 3, # ZeRO-3: 参数、梯度、优化器状态分片
538
- "offload_optimizer": {
539
- "device": "cpu", # 优化器状态卸载到 CPU
540
- "pin_memory": true
541
- },
542
- "offload_param": {
543
- "device": "cpu", # 参数卸载到 CPU
544
- "pin_memory": true
545
- },
546
- "overlap_comm": true, # 通信与计算重叠
547
- "contiguous_gradients": true, # 连续梯度存储
548
- "stage3_prefetch_bucket_size": "auto",
549
- "stage3_param_persistence_threshold": "auto",
550
- "stage3_max_live_parameters": 1e9,
551
- "stage3_gather_16bit_weights_on_model_save": true
552
- },
553
- "gradient_accumulation_steps": "auto",
554
- "gradient_clipping": "auto",
555
- "train_batch_size": "auto",
556
- "train_micro_batch_size_per_gpu": "auto"
557
- }
558
- ```
559
-
560
- **内存优化原理**:
561
- - **ZeRO-3**: 将模型参数、梯度、优化器状态分片到多个 GPU
562
- - **CPU Offload**: 非活跃参数卸载到 CPU,减少 GPU 显存占用
563
- - **混合精度 (BF16)**: 降低内存占用,加速计算
564
-
565
- #### 3.3.3 训练流程
566
-
567
- ```python
568
- # 1. 加载数据集
569
- dataset = load_dataset("json", data_files={...})
570
-
571
- # 2. 加载基础模型
572
- model = AutoModelForCausalLM.from_pretrained(
573
- base_model_path,
574
- torch_dtype=torch.bfloat16,
575
- trust_remote_code=True
576
- )
577
-
578
- # 3. 配置 LoRA
579
- lora_config = LoraConfig(r=64, lora_alpha=128, ...)
580
- model = get_peft_model(model, lora_config)
581
-
582
- # 4. 配置 Trainer
583
- trainer = Trainer(
584
- model=model,
585
- args=training_args,
586
- train_dataset=dataset["train"],
587
- eval_dataset=dataset["val"],
588
- data_collator=DataCollatorForSeq2Seq(...)
589
- )
590
-
591
- # 5. 开始训练
592
- trainer.train()
593
-
594
- # 6. 保存 LoRA adapter
595
- model.save_pretrained("output/final_model")
596
- ```
597
-
598
- #### 3.3.4 检查点管理
599
-
600
- - **自动保存**: 每 100 步保存一次检查点
601
- - **评估**: 每 100 步在验���集上评估
602
- - **结构**:
603
- ```
604
- output/finetuned_model/
605
- ├── checkpoint-100/
606
- │ ├── adapter_model.safetensors
607
- │ ├── adapter_config.json
608
- │ └── global_step100/ (DeepSpeed 状态)
609
- ├── checkpoint-200/
610
- └── final_model/
611
- ├── adapter_model.safetensors
612
- └── adapter_config.json
613
- ```
614
-
615
- ---
616
-
617
- ### 3.4 模块4: LoRA 权重合并器 (LoRA Merger)
618
-
619
- #### 3.4.1 合并原理
620
-
621
- LoRA 训练产生的是**增量参数** (adapter),需要合并回基础模型才能独立使用。
622
-
623
- **合并公式**:
624
- ```
625
- W_merged = W_base + (B × A) × alpha / r
626
- ```
627
- 其中:
628
- - W_base: 基础模型权重
629
- - B, A: LoRA 低秩矩阵
630
- - alpha, r: LoRA 超参数
631
-
632
- #### 3.4.2 合并流程
633
-
634
- ```python
635
- # 1. 加载基础模型
636
- base_model = AutoModelForCausalLM.from_pretrained(
637
- base_model_path,
638
- torch_dtype=torch.bfloat16
639
- )
640
-
641
- # 2. 加载 LoRA adapter
642
- model = PeftModel.from_pretrained(
643
- base_model,
644
- lora_adapter_path
645
- )
646
-
647
- # 3. 合并权重
648
- merged_model = model.merge_and_unload()
649
-
650
- # 4. 保存完整模型
651
- merged_model.save_pretrained(
652
- "output/merged_model",
653
- safe_serialization=True # 使用 safetensors 格式
654
- )
655
- ```
656
-
657
- #### 3.4.3 输出格式
658
-
659
- **merged_model/ 目录结构**:
660
- ```
661
- merged_model/
662
- ├── config.json # 模型配置
663
- ├── generation_config.json # 生成配置
664
- ├── model-00001-of-00004.safetensors
665
- ├── model-00002-of-00004.safetensors
666
- ├── model-00003-of-00004.safetensors
667
- ├── model-00004-of-00004.safetensors
668
- ├── model.safetensors.index.json
669
- ├── tokenizer.json
670
- ├── tokenizer_config.json
671
- └── special_tokens_map.json
672
- ```
673
-
674
- ---
675
-
676
- ### 3.5 模块5: 模型评估器 (Model Evaluator)
677
-
678
- #### 3.5.1 评估维度
679
-
680
- **1. 项目特定知识 (Repo-Specific Knowledge) - 权重 60%**
681
- - 能否正确提及项目名称
682
- - 能否准确引用文件名、类名、函数名
683
- - 能否理解项目架构和模块关系
684
-
685
- **2. 代码理解能力 (Code Understanding) - 权重 30%**
686
- - 能否解释代码功能
687
- - 能否识别代码模式
688
- - 能否分析调用关系
689
-
690
- **3. 通用能力 (General Ability) - 权重 10%**
691
- - 语言流畅性
692
- - 回答完整性
693
- - 格式规范性
694
-
695
- #### 3.5.2 评分算法
696
-
697
- **项目特定知识评分**:
698
- ```python
699
- def score_repo_specific(response, project_name, code_elements):
700
- score = 0.0
701
-
702
- # 1. 项目名称提及 (+30 分)
703
- if project_name in response:
704
- score += 30
705
-
706
- # 2. 文件路径引用 (+20 分)
707
- if any(elem['filepath'] in response for elem in code_elements):
708
- score += 20
709
-
710
- # 3. 类名/函数名提及 (+20 分)
711
- mentioned_elements = [elem for elem in code_elements if elem['name'] in response]
712
- score += min(len(mentioned_elements) * 5, 20)
713
-
714
- # 4. 代码块引用 (+15 分)
715
- if '```python' in response:
716
- score += 15
717
-
718
- # 5. 架构术语 (+15 分)
719
- arch_terms = ['模块', 'module', '架构', 'architecture', 'core', 'cli', 'api']
720
- if any(term in response.lower() for term in arch_terms):
721
- score += 15
722
-
723
- return min(score, 100)
724
- ```
725
-
726
- **代码理解评分**:
727
- ```python
728
- def score_code_understanding(response, test_case):
729
- score = 0.0
730
-
731
- # 1. 解释清晰性 (+40 分)
732
- if len(response) > 100 and any(kw in response for kw in ['功能', '作用', '实现']):
733
- score += 40
734
-
735
- # 2. 参数/返回值说明 (+30 分)
736
- if '参数' in response or 'parameter' in response.lower():
737
- score += 15
738
- if '返回' in response or 'return' in response.lower():
739
- score += 15
740
-
741
- # 3. 示例代码 (+30 分)
742
- if '```' in response:
743
- score += 30
744
-
745
- return min(score, 100)
746
- ```
747
-
748
- #### 3.5.3 测试用例设计
749
-
750
- **测试用例类型**:
751
- ```python
752
- @dataclass
753
- class TestCase:
754
- type: str # repo_specific, code_specific, general
755
- question: str # 测试问题
756
- category: str # overview, architecture, implementation
757
- reference_files: List[str] # 参考文件
758
- ```
759
-
760
- **示例测试集**:
761
- ```python
762
- test_cases = [
763
- # 项目概览
764
- TestCase(
765
- type="repo_specific",
766
- question=f"{project_name} 项目的主要功能是什么?",
767
- category="overview"
768
- ),
769
- # 架构设计
770
- TestCase(
771
- type="repo_specific",
772
- question=f"请介绍 {project_name} 的架构设计。",
773
- category="architecture"
774
- ),
775
- # 具体代码
776
- TestCase(
777
- type="code_specific",
778
- question=f"请解释 `{class_name}` 类的作用。",
779
- category="implementation",
780
- reference_files=["core/agent_runtime.py"]
781
- ),
782
- # 通用能力
783
- TestCase(
784
- type="general",
785
- question="什么是面向对象编程?",
786
- category="general"
787
- )
788
- ]
789
- ```
790
-
791
- #### 3.5.4 报告生成
792
-
793
- **comparison_report_[ProjectName]_v2.json 结构**:
794
- ```json
795
- {
796
- "test_config": {
797
- "project_name": "Laddr",
798
- "test_time": "2025-01-15T10:30:00",
799
- "num_test_cases": 15
800
- },
801
- "results": [
802
- {
803
- "question": "Laddr 项目的主要功能是什么?",
804
- "category": "overview",
805
- "base_model_response": "...",
806
- "finetuned_model_response": "...",
807
- "scores": {
808
- "base_model": {
809
- "repo_specific": 15.0,
810
- "code_understanding": 30.0,
811
- "general": 70.0,
812
- "total": 32.5
813
- },
814
- "finetuned_model": {
815
- "repo_specific": 95.0,
816
- "code_understanding": 85.0,
817
- "general": 80.0,
818
- "total": 89.5
819
- }
820
- },
821
- "improvement": 57.0
822
- }
823
- ],
824
- "summary": {
825
- "average_scores": {
826
- "base_model": 28.3,
827
- "finetuned_model": 82.7
828
- },
829
- "average_improvement": 54.4,
830
- "repo_specific_improvement": 68.5,
831
- "code_understanding_improvement": 45.2
832
- }
833
- }
834
- ```
835
-
836
- ---
837
-
838
- ## 4. 数据质量保证
839
-
840
- ### 4.1 数据多样性策略
841
-
842
- 1. **问题多样性**:
843
- - 每个知识点生成 3-5 种不同问法
844
- - 覆盖不同难度层级
845
- - 包含不同问答风格
846
-
847
- 2. **代码覆盖率**:
848
- - 选择复杂度 > 5 的函数
849
- - 包含不同类型的元素 (class, function, method)
850
- - 覆盖不同业务场景
851
-
852
- 3. **上下文丰富性**:
853
- - 提供完整代码片段
854
- - 包含文件路径和行号
855
- - 附带相关元素引用
856
-
857
- ### 4.2 数据验证机制
858
-
859
- 1. **格式验证**:
860
- - JSONL 格式正确性
861
- - conversations 字段完整性
862
- - metadata 字段一致性
863
-
864
- 2. **内容验证**:
865
- - 答案是否包含代码引用
866
- - 答案是否提及项目名称
867
- - 答案长度是否合理 (50-1000 字符)
868
-
869
- 3. **去重验证**:
870
- - 基于问题文本的去重
871
- - 基于代码元素的去重
872
-
873
- ### 4.3 推理轨迹 (Reasoning Trace)
874
-
875
- 在设计方案类任务中,提供清晰的推理过程:
876
-
877
- **示例**:
878
- ```
879
- 问题: 如何在 Laddr 中添加新的工具 (Tool)?
880
-
881
- 答案:
882
- 在 Laddr 中添加新工具需要以下步骤:
883
-
884
- **推理过程**:
885
- 1. 分析现有工具实现模式
886
- - 参考 `core/tooling.py` 中的 `BaseTool` 类
887
- - 查看 `core/system_tools.py` 中的示例工具
888
-
889
- 2. 识别依赖模块
890
- - 工具注册: `core/tooling.py` 的 `register_tool()`
891
- - 工具调用: `core/agent_runtime.py` 的 `execute_tool()`
892
-
893
- 3. 实现步骤
894
- (1) 创建新工具类,继承 `BaseTool`
895
- (2) 实现 `execute()` 方法
896
- (3) 添加工具元数据 (name, description, parameters)
897
- (4) 在 agent 配置中注册工具
898
-
899
- **参考代码**:
900
- 见 `core/system_tools.py` 第 45-80 行的 `FileReadTool` 实现。
901
- ```
902
-
903
- ---
904
-
905
- ## 5. 可扩展性设计
906
-
907
- ### 5.1 支持多语言 (可选功能)
908
-
909
- **当前支持**: Python, Markdown
910
-
911
- **扩展方案**:
912
- 1. 添加新的语言解析器 (如 JavaScript AST 解析)
913
- 2. 在 `config/default_config.yaml` 中配置支持的语言
914
- 3. 实现对应的代码元素提取逻辑
915
-
916
- **配置示例**:
917
- ```yaml
918
- repository:
919
- languages:
920
- - python
921
- - javascript # 扩展
922
- - java # 扩展
923
- ```
924
-
925
- ### 5.2 支持新的任务类型
926
-
927
- **扩展接口**:
928
- ```python
929
- class DataGenerator:
930
- def add_custom_task_generator(self, task_name: str, generator_func):
931
- """添加自定义任务生成器"""
932
- self.task_generators[task_name] = generator_func
933
- ```
934
-
935
- **示例**:
936
- ```python
937
- def generate_bug_fix_samples(code_elements):
938
- # 生成 bug 修复类训练样本
939
- pass
940
-
941
- generator = DataGenerator()
942
- generator.add_custom_task_generator("bug_fix", generate_bug_fix_samples)
943
- ```
944
-
945
- ### 5.3 支持更大规模的代码仓库
946
-
947
- **优化方案**:
948
- 1. **分批处理**: 将大型仓库分批解析
949
- 2. **增量更新**: 只分析修改的文件
950
- 3. **并行处理**: 多进程并行分析不同模块
951
-
952
- ---
953
-
954
- ## 6. 评判标准对照
955
-
956
- ### 6.1 数据集覆盖所需场景 ✅
957
-
958
- **场景1: 问答对生成**
959
- - ✅ 代码解释任务 (300+ 样本)
960
- - ✅ API 使用任务 (150+ 样本)
961
- - ✅ 项目概览任务 (50+ 样本)
962
- - ✅ 代码定位任务 (100+ 样本)
963
- - ✅ 提供完整代码上下文和推理过程
964
-
965
- **场景2: 设计方案生成**
966
- - ✅ 架构理解任务
967
- - ✅ 需求实现路径
968
- - ✅ 提供推理轨迹 (Reasoning Trace)
969
-
970
- ### 6.2 数据处理有效性和创新性 ✅
971
-
972
- **有效性**:
973
- - ✅ 基于 AST 精确解析代码
974
- - ✅ 构建完整的调用图和依赖关系
975
- - ✅ 自动提取业务上下文
976
- - ✅ 模板化方法保证数据质量
977
-
978
- **创新性**:
979
- - ✅ 不依赖 LLM 生成 (避免循环依赖)
980
- - ✅ 多层次代码模式提取
981
- - ✅ 推理轨迹自动生成
982
- - ✅ 项目特定知识强化评估
983
-
984
- ### 6.3 系统架构完整性和可扩展性 ✅
985
-
986
- **完整性**:
987
- - ✅ 5 个核心模块覆盖完整流程
988
- - ✅ 清晰的数据流和模块接口
989
- - ✅ 完善的错误处理和日志
990
-
991
- **可扩展性**:
992
- - ✅ 支持多语言扩展
993
- - ✅ 支持自定义任务类型
994
- - ✅ 支持增量更新
995
- - ✅ 配置文件驱动
996
-
997
- ### 6.4 示例数据清晰度和合规性 ✅
998
-
999
- **清晰度**:
1000
- - ✅ 结构化的 JSONL 格式
1001
- - ✅ 丰富的元数据
1002
- - ✅ 清晰的问答结构
1003
-
1004
- **推理轨迹**:
1005
- - ✅ 提供代码上下文
1006
- - ✅ 标注文件路���和行号
1007
- - ✅ 展示依赖关系
1008
- - ✅ 引用相关代码元素
1009
-
1010
- ---
1011
-
1012
- ## 7. 使用流程
1013
-
1014
- ### 7.1 完整训练流程
1015
 
1016
  ```bash
1017
- # 步骤1: 更新代码仓库配置
1018
- python utils/config_manager.py https://github.com/AgnetLabs/Laddr
1019
 
1020
- # 步骤2: 分析代码仓库 (可选,data_generator会自动调用)
1021
  python scripts/01_analyze_repo.py
1022
 
1023
- # 步骤3: 生成训练数据
1024
  python scripts/02_generate_data.py
1025
 
1026
- # 步骤4: 微调模型 (使用 DeepSpeed)
1027
  deepspeed --num_gpus=2 scripts/03_train_model.py
1028
 
1029
- # 步骤5: 合并 LoRA 权重
1030
  python scripts/04_merge_weights.py
1031
 
1032
- # 步骤6: 评估模型
1033
  python scripts/05_evaluate.py
1034
  ```
1035
 
1036
- ### 7.2 快速验证流程
 
 
1037
 
1038
- ```bash
1039
- # 仅生成少量数据进行快速验证
1040
- python scripts/02_generate_data.py --quick-test
1041
-
1042
- # 训练 1 个 epoch
1043
- deepspeed --num_gpus=2 scripts/03_train_model.py --num-epochs 1
1044
-
1045
- # 评估
1046
- python scripts/05_evaluate.py --quick-eval
1047
- ```
1048
-
1049
- ---
1050
 
1051
- ## 8. 性能指标
1052
 
1053
- ### 8.1 数据生成性能
 
 
 
1054
 
1055
- - **分析速度**: ~500 代码元素/分钟
1056
- - **数据生成速度**: ~200 样本/分钟
1057
- - **数据集大小**: 650+ 样本 (可配置)
1058
 
1059
- ### 8.2 训练性能
1060
 
1061
- - **硬件**: 2x GPU (48GB 显存)
1062
- - **训练时间**: ~2-3 小时 (3 epochs, 650 样本)
1063
- - **显存占用**: ~40GB/GPU (含 CPU offload)
1064
- - **LoRA 参数量**: ~134M (相比 8B 基础模型)
1065
-
1066
- ### 8.3 评估结果
1067
-
1068
- **典型改进指标**:
1069
- - 项目特定知识: +60-80%
1070
- - 代码理解能力: +40-50%
1071
- - 总体提升: +50-60%
1072
 
1073
- ---
1074
 
1075
- ## 9. 最佳实践
 
 
1076
 
1077
- ### 9.1 数据质量优化
1078
 
1079
- 1. **选择高质量代码仓库**:
1080
- - 良好的文档注释
1081
- - 清晰的代码结构
1082
- - 活跃的开发状态
1083
 
1084
- 2. **调整生成参数**:
1085
- - 增加 `code_explanation` 样本比例
1086
- - 提高 `diversity_threshold`
1087
- - 过滤低质量代码元素
1088
 
1089
- 3. **人工审核**:
1090
- - 抽样检查生成的问答对
1091
- - 修正错误的代码引用
1092
- - 优化答案结构
1093
 
1094
- ### 9.2 训练优化
1095
 
1096
- 1. **超参数调优**:
1097
- - 学习率: 1e-4 ~ 5e-3
1098
- - LoRA rank: 32 ~ 128
1099
- - Batch size: 根据显存调整
1100
 
1101
- 2. **防止过拟合**:
1102
- - 监控验证集损失
1103
- - 使用 dropout
1104
- - 限制训练轮数
1105
 
1106
- 3. **分布式训练**:
1107
- - 使用 DeepSpeed ZeRO-3
1108
- - 启用 CPU offload
1109
- - 优化通信策略
1110
 
1111
- ### 9.3 评估改进
 
 
 
 
1112
 
1113
- 1. **扩充测试集**:
1114
- - 添加更多项目特定问题
1115
- - 包含边界情况
1116
- - 覆盖不同难度
1117
 
1118
- 2. **多维度评估**:
1119
- - ROUGE/BLEU 自动指标
1120
- - 人工评分
1121
- - A/B 测试
 
 
 
1122
 
1123
  ---
1124
 
1125
- ## 10. 总结
1126
-
1127
- 本系统通过 5 个核心模块实现了**端到端的代码仓库智能训练数据生成与模型微调**流程:
1128
-
1129
- 1. **Repository Analyzer**: 深度解析代码结构
1130
- 2. **Data Generator**: 自动生成高质量训练数据
1131
- 3. **Model Finetuner**: 高效微调大语言模型
1132
- 4. **LoRA Merger**: 合并权重生成独立模型
1133
- 5. **Model Evaluator**: 多维度评估模型效果
1134
-
1135
- **核心优势**:
1136
- - ✅ 完全自动化,无需人工标注
1137
- - ✅ 基于真实代码,数据质量高
1138
- - ✅ 推理轨迹清晰,可验证性强
1139
- - ✅ 可扩展架构,支持多种场景
1140
- - ✅ 实测效果显著 (+50-60% 提升)
1141
-
1142
- **适用场景**:
1143
- - 企业内部代码助手
1144
- - 开源项目文档生成
1145
- - 代码审查辅助
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ language:
3
+ - zh
4
+ - en
5
+ license: apache-2.0
6
+ library_name: transformers
7
+ tags:
8
+ - code
9
+ - qwen
10
+ - lora
11
+ - repository-understanding
12
+ - code-assistant
13
+ - fine-tuning
14
+ - multi-agent-systems
15
+ base_model: Qwen/Qwen3-8B
16
+ datasets:
17
+ - custom
18
+ metrics:
19
+ - accuracy
20
+ - code_understanding
21
+ pipeline_tag: text-generation
22
+ model-index:
23
+ - name: code_repo_finetuning
24
+ results:
25
+ - task:
26
+ type: text-generation
27
+ name: Code Repository Understanding
28
+ metrics:
29
+ - type: accuracy
30
+ value: 71.5
31
+ name: Overall Score
32
+ - type: improvement
33
+ value: 22.1
34
+ name: Improvement over Base Model
35
  ---
36
 
37
+ # Qwen3-8B Fine-tuned on Laddr Repository
38
 
39
+ ## Model Description
40
 
41
+ This model is a fine-tuned version of [Qwen/Qwen3-8B](https://huggingface.co/Qwen/Qwen3-8B) specifically trained to understand and answer questions about any given private or new project repository, for example, [Laddr](https://github.com/AgnetLabs/Laddr) - a framework for building scalable multi-agent systems.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
+ The fine-tuning was performed using **LoRA (Low-Rank Adaptation)** with an innovative training data generation approach that **does not rely on LLM-generated synthetic data**, avoiding circular dependencies and hallucination issues.
44
 
45
+ ### Key Features
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
47
+ - ✅ **Project-Specific Knowledge**: Deep understanding of Laddr's architecture, codebase, and APIs
48
+ - ✅ **Code Location**: Accurately locates functions, classes, and modules (+30% improvement)
49
+ - ✅ **Code Understanding**: Explains code functionality with detailed context (+19.3% improvement)
50
+ - ✅ **Maintains General Abilities**: Retains base model's general knowledge capabilities
51
+ - ✅ **Zero Hallucination Training Data**: Generated from real code via AST parsing, not LLM synthesis
52
 
53
+ ## Model Details
54
 
55
+ ### Base Model
56
+ - **Model**: Qwen/Qwen3-8B
57
+ - **Parameters**: 8 Billion
58
+ - **Architecture**: Transformer-based causal language model
59
 
60
+ ### Fine-tuning Specifications
61
+ - **Method**: LoRA (Low-Rank Adaptation)
62
+ - **LoRA Rank**: 64
63
+ - **LoRA Alpha**: 128
64
+ - **Target Modules**: q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
65
+ - **Training Framework**: DeepSpeed ZeRO-3
66
+ - **Precision**: BF16
67
+ - **Epochs**: 3
68
+ - **Training Samples**: 650+
69
+ - **Training Time**: ~2-3 hours on 2x GPUs (48GB each)
70
 
71
+ ### Training Data
72
 
73
+ The training dataset was **automatically generated** from the Laddr repository using:
74
+ - **Python AST parsing** for code structure extraction
75
+ - **Real docstrings** and code comments
76
+ - **Function signatures** and parameter information
77
+ - **Call graph relationships**
78
+ - **Project statistics** and module structure
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
 
80
+ **Data Composition**:
81
+ - Code Explanation: 300+ samples (46%)
82
+ - API Usage: 150+ samples (23%)
83
+ - Code Location: 100+ samples (15%)
84
+ - Project Overview: 50+ samples (8%)
85
+ - Design Proposals: 50+ samples (8%)
 
 
 
 
86
 
87
+ **Data Split**:
88
+ - Training: 80% (520+ samples)
89
+ - Validation: 10% (65+ samples)
90
+ - Test: 10% (65+ samples)
 
 
 
 
 
 
 
91
 
92
+ ## Performance
93
 
94
+ ### Overall Results
 
 
 
 
 
 
 
 
 
 
 
95
 
96
+ | Metric | Base Model | Fine-tuned | Improvement |
97
+ |--------|-----------|-----------|-------------|
98
+ | **Overall Score** | 49.4% | 71.5% | **+22.1%** ✅ |
99
+ | Code Location | 60.0% | 90.0% | **+30.0%** ⭐ |
100
+ | Code Understanding | 59.3% | 78.6% | +19.3% |
101
+ | Project Overview | 35.0% | 51.7% | +16.7% |
102
+ | General Knowledge | 10.0% | 30.0% | +20.0% |
 
103
 
104
+ ### Detailed Performance by Task Type
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
 
106
+ **Code Location Tasks** (+30.0%):
107
+ - Accurately identifies file locations of functions/classes
108
+ - Provides complete file paths with line numbers
109
+ - Eliminates uncertainty in location queries
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
 
111
+ **Code Understanding Tasks** (+19.3%):
112
+ - Explains code functionality with context
113
+ - Includes function signatures and parameters
114
+ - Extracts and presents real docstrings
115
 
116
+ **Project Overview Tasks** (+16.7%):
117
+ - Describes project purpose and architecture
118
+ - Lists technology stack and dependencies
119
+ - Provides project statistics and structure
120
 
121
+ **General Knowledge** (+20.0%):
122
+ - Maintains ability to answer general programming questions
123
+ - Improves conciseness (from verbose to clear)
124
+ - Preserves base model capabilities
 
125
 
126
+ ## Use Cases
127
 
128
+ ### 1. Code Assistant for Laddr Project
129
  ```python
130
+ from transformers import AutoTokenizer, AutoModelForCausalLM
131
+
132
+ model_name = "tensense/code_repo_finetuning"
133
+ tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
134
+ model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)
135
+
136
+ question = "Where is the create_system_tools function located in Laddr?"
137
+ messages = [{"role": "user", "content": question}]
138
+ text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
139
+ inputs = tokenizer([text], return_tensors="pt")
140
+
141
+ outputs = model.generate(**inputs, max_new_tokens=512)
142
+ response = tokenizer.decode(outputs[0][len(inputs['input_ids'][0]):], skip_special_tokens=True)
143
+ print(response)
144
+ ```
145
+
146
+ ### 2. API Documentation Assistant
147
+ Query about function usage, parameters, and return values.
148
+
149
+ ### 3. Codebase Onboarding
150
+ Help new developers quickly understand the Laddr project structure and key components.
151
+
152
+ ### 4. Code Review Support
153
+ Provide context and explanations for code review processes.
154
+
155
+ ## Example Queries
156
+
157
+ ### Query 1: Code Location
158
+ **Question**: "Where is `create_system_tools` located in Laddr?"
159
+
160
+ **Response**:
161
+ > `create_system_tools` is located in `lib/laddr/src/laddr/core/system_tools.py`.
162
+ >
163
+ > **Function Description**:
164
+ > Create system tools for task delegation and artifact management. This function checks for user-provided overrides before registering the default implementations.
165
+ >
166
+ > **Function Signature**:
167
+ > ```python
168
+ > def create_system_tools(message_bus, storage_backend=None, agent=None) -> dict[str, tuple[Any, list[str]]]:
169
+ > ```
170
+ >
171
+ > **Parameters**:
172
+ > - `message_bus` (Any): Message queue backend
173
+ > - `storage_backend` (Any): Optional storage backend
174
+ > - `agent` (Any): Optional agent instance
175
+ >
176
+ > **Returns**: `dict[str, tuple[Any, list[str]]]`
177
+
178
+ ### Query 2: Project Overview
179
+ **Question**: "What is Laddr's main functionality?"
180
+
181
+ **Response**:
182
+ > Laddr is a Python project that serves as a framework for building scalable multi-agent systems.
183
+ >
184
+ > **Main Technologies**: bandit, black, boto3-stubs, build, click, etc.
185
+ >
186
+ > The project contains 279 code elements, consisting of 67 classes and 212 functions/methods.
187
+ >
188
+ > **Core Modules**:
189
+ > - `core` (279 elements)
190
+ > - `cli` (52 elements)
191
+ > - `llms` (39 elements)
192
+
193
+ ## Limitations
194
+
195
+ - **Project-Specific**: Optimized for Laddr project; may not perform as well on other codebases
196
+ - **Knowledge Cutoff**: Based on the Laddr repository as of training time (2025-01)
197
+ - **Language Focus**: Primarily trained on Python code and English/Chinese documentation
198
+ - **Limited General Coding**: While it maintains general knowledge, it's optimized for Laddr-specific queries
199
+
200
+ ## Training Methodology
201
+
202
+ ### Innovation: LLM-Free Training Data Generation
203
+
204
+ Unlike traditional approaches that use LLMs to generate synthetic training data, this project employs a novel methodology:
205
+
206
+ 1. **AST-Based Code Parsing**: Python Abstract Syntax Tree analysis extracts accurate code structure
207
+ 2. **Real Documentation**: Utilizes actual docstrings, comments, and code signatures
208
+ 3. **Call Graph Analysis**: Builds function dependency relationships
209
+ 4. **Pattern Extraction**: Identifies code patterns (implementation, usage, interaction)
210
+ 5. **Template-Based QA**: Generates question-answer pairs using templates with real code context
211
+
212
+ **Benefits**:
213
+ - Avoids circular dependency (using LLM data to train LLM)
214
+ - Eliminates hallucination in training data
215
+ - Ensures factual accuracy
216
+ - ✅ Provides complete reasoning traces
217
+
218
+ ### Training Pipeline
219
+
220
+ ```
221
+ GitHub Repository
222
+
223
+ [1. Repository Analyzer]
224
+ Extracts code elements, patterns, call graph
225
+
226
+ [2. Data Generator]
227
+ → Creates QA pairs with code context
228
+
229
+ [3. Model Fine-tuner]
230
+ → LoRA + DeepSpeed ZeRO-3 training
231
+
232
+ [4. LoRA Merger]
233
+ Merges adapter into base model
234
+
235
+ [5. Model Evaluator]
236
+ → Compares base vs fine-tuned
237
+
238
+ Fine-tuned Model
239
+ ```
240
+
241
+ ## Extensibility
242
+
243
+ The training methodology is **repository-agnostic** and can be applied to any codebase:
244
+
245
+ ### Adapt to Your Repository
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
 
247
  ```bash
248
+ # 1. Update configuration
249
+ python utils/config_manager.py https://github.com/your-org/your-repo
250
 
251
+ # 2. Analyze repository
252
  python scripts/01_analyze_repo.py
253
 
254
+ # 3. Generate training data
255
  python scripts/02_generate_data.py
256
 
257
+ # 4. Fine-tune model
258
  deepspeed --num_gpus=2 scripts/03_train_model.py
259
 
260
+ # 5. Merge LoRA weights
261
  python scripts/04_merge_weights.py
262
 
263
+ # 6. Evaluate
264
  python scripts/05_evaluate.py
265
  ```
266
 
267
+ **Supported Languages** (currently):
268
+ - Python (primary)
269
+ - Markdown (documentation)
270
 
271
+ **Extensible to**:
272
+ - JavaScript/TypeScript
273
+ - Java
274
+ - Go
275
+ - Rust
 
 
 
 
 
 
 
276
 
277
+ ## Ethical Considerations
278
 
279
+ - **Code Attribution**: All training data comes from the open-source Laddr repository
280
+ - **License Compliance**: Respects Apache 2.0 license of both base model and Laddr project
281
+ - **No Private Data**: Only uses publicly available code
282
+ - **Reproducibility**: Complete methodology documented for transparency
283
 
284
+ ## Citation
 
 
285
 
286
+ If you use this model or methodology in your research, please cite:
287
 
288
+ ```bibtex
289
+ @misc{qwen3-code-repo-finetuned-2025,
290
+ title={Qwen3-8B Fine-tuned on any Code Repository: LLM-Free Training Data Generation},
291
+ author={Tensense},
292
+ year={2025},
293
+ publisher={HuggingFace},
294
+ url={https://huggingface.co/tensense/code_repo_finetuning}
295
+ }
296
+ ```
 
 
297
 
298
+ ## Acknowledgments
299
 
300
+ - **Base Model**: [Qwen Team](https://huggingface.co/Qwen) for Qwen3-8B
301
+ - **Laddr Project**: [AgnetLabs](https://github.com/AgnetLabs/Laddr) for the multi-agent framework
302
+ - **Training Framework**: HuggingFace Transformers, DeepSpeed, PEFT (LoRA)
303
 
304
+ ## License
305
 
306
+ This model is released under the **Apache 2.0 License**, consistent with:
307
+ - Qwen3-8B base model license
308
+ - Laddr project license
 
309
 
310
+ ## Model Card Authors
 
 
 
311
 
312
+ [Tensense]
 
 
 
313
 
314
+ ## Model Card Contact
315
 
316
+ For questions or issues, please contact:
317
+ - Email: xu@tensense.org
318
+ - GitHub: [[TopologyApplied](https://github.com/TopologyApplied)]
319
+ - HuggingFace: [[tensense](https://huggingface.co/tensense)]
320
 
321
+ ---
 
 
 
322
 
323
+ ## Additional Resources
 
 
 
324
 
325
+ - **Base Model**: [Qwen/Qwen3-8B](https://huggingface.co/Qwen/Qwen3-8B)
326
+ - **Training Code**: [GitHub Repository](https://github.com/TopologyApplied/code_repo_finetuning)
327
+ - **Laddr Project**: [GitHub](https://github.com/AgnetLabs/Laddr)
328
+ - **Evaluation Report**: [[Link to comparison_report.json](https://github.com/TopologyApplied/code_repo_finetuning/blob/main/output/comparison_report_Laddr.json)]
329
+ - **Design Documentation**: [[Link to design docs](https://github.com/TopologyApplied/code_repo_finetuning/blob/main/代码仓库智能训练数据生成系统_设计文档.md)]
330
 
331
+ ## Version History
 
 
 
332
 
333
+ ### v1.0 (2025-11-15)
334
+ - Initial release
335
+ - Fine-tuned on Laddr repository
336
+ - 650+ training samples
337
+ - LoRA rank 64, alpha 128
338
+ - 3 epochs training
339
+ - Overall improvement: +22.1%
340
 
341
  ---
342
 
343
+ **Note**: This is a demonstration of repository-specific fine-tuning methodology. The approach can be adapted to any codebase for creating custom code assistants.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
代码仓库智能训练数据生成系统_设计文档.md ADDED
@@ -0,0 +1,1145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 代码仓库智能训练数据生成系统 - 设计文档
2
+
3
+ **目录结构**:
4
+ ```
5
+ code_repo_finetuning/
6
+ ├── scripts/ # 核心训练脚本 (01-05)
7
+ ├── utils/ # 辅助工具
8
+ ├── config/ # 配置文件
9
+ ├── data/ # 数据目录
10
+ ├── output/ # 输出目录
11
+ ├── repos/ # 代码仓库
12
+ └── docs/ # 文档
13
+ ```
14
+
15
+ ---
16
+
17
+ ## 项目概述
18
+
19
+ ### 1.1 项目背景
20
+ 本项目旨在为 Qwen 3-8B 等大语言模型的微调提供自动化的训练数据生成解决方案,使模型能够理解和回答关于特定代码仓库的问题,包括业务流程、架构设计和实现细节。
21
+
22
+ ### 1.2 核心目标
23
+ - **场景1**: 根据本地代码仓库的业务流程和规则,自动化生成高质量问答对,包含完整的代码上下文和推理过程
24
+ - **场景2**: 为给定需求生成基于代码仓架构的设计方案,提供详细的解释和推理轨迹
25
+
26
+ ### 1.3 技术栈
27
+ - **基础模型**: Qwen 3-8B
28
+ - **训练框架**: PyTorch + DeepSpeed ZeRO-3 + LoRA
29
+ - **代码分析**: Python AST + 正则表达式
30
+ - **数据格式**: JSONL (JSON Lines)
31
+
32
+ ---
33
+
34
+ ## 2. 系统架构设计
35
+
36
+ ### 2.1 整体架构
37
+
38
+ ```
39
+ ┌─────────────────────────────────────────────────────────────────┐
40
+ │ 输入:GitHub 代码仓库 │
41
+ └─────────────────────────────┬───────────────────────────────────┘
42
+
43
+
44
+ ┌─────────────────────────────────────────────────────────────────┐
45
+ │ 模块1: 代码仓库分析器 (Repository Analyzer) │
46
+ │ - 克隆/更新代码仓库 │
47
+ │ - AST 解析提取代码元素 │
48
+ │ - 构建项目上下文和调用图 │
49
+ │ - 识别代码模式 │
50
+ └─────────────────────────────┬───────────────────────────────────┘
51
+
52
+
53
+ ┌─────────────────────────────────────────────────────────────────┐
54
+ │ 模块2: 训练数据生成器 (Data Generator) │
55
+ │ - 场景1: 问答对生成 (代码解释、API使用、定位) │
56
+ │ - 场景2: 设计方案生成 (架构理解、需求分析) │
57
+ │ - 数据增强和去重 │
58
+ └─────────────────────────────┬───────────────────────────────────┘
59
+
60
+
61
+ ┌─────────────────────────────────────────────────────────────────┐
62
+ │ 模块3: 模型微调器 (Model Finetuner) │
63
+ │ - LoRA 参数高效微调 │
64
+ │ - DeepSpeed ZeRO-3 分布式训练 │
65
+ │ - 自动保存 checkpoints │
66
+ └─────────────────────────────┬───────────────────────────────────┘
67
+
68
+
69
+ ┌─────────────────────────────────────────────────────────────────┐
70
+ │ 模块4: LoRA 权重合并器 (LoRA Merger) │
71
+ │ - 合并 LoRA adapter 到基础模型 │
72
+ │ - 生成完整的可部署模型 │
73
+ └─────────────────────────────┬───────────────────────────────────┘
74
+
75
+
76
+ ┌───────────────────────���─────────────────────────────────────────┐
77
+ │ 模块5: 模型评估器 (Model Evaluator) │
78
+ │ - 对比基础模型与微调模型 │
79
+ │ - 多维度评分 (项目特定知识、代码理解、通用能力) │
80
+ │ - 生成详细评估报告 │
81
+ └─────────────────────────────┬───────────────────────────────────┘
82
+
83
+
84
+ 输出:微调后的专用模型
85
+ ```
86
+
87
+ ### 2.2 数据流图
88
+
89
+ ```
90
+ GitHub Repo URL
91
+
92
+
93
+ [utils/config_manager.py] ──> config/default_config.yaml (更新)
94
+
95
+
96
+ [scripts/01_analyze_repo.py]
97
+
98
+ ├─> data/repository_analysis.json (代码元素、模式、调用图)
99
+
100
+
101
+ [scripts/02_generate_data.py]
102
+
103
+ ├─> data/training_data/train.jsonl (80%)
104
+ ├─> data/training_data/val.jsonl (10%)
105
+ ├─> data/training_data/test.jsonl (10%)
106
+ └─> data/training_data/metadata.json
107
+
108
+
109
+ [scripts/03_train_model.py] + DeepSpeed
110
+
111
+ ├─> output/finetuned_model/checkpoint-XXX/ (训练检查点)
112
+ └─> output/finetuned_model/final_model/ (LoRA adapter)
113
+
114
+
115
+ [scripts/04_merge_weights.py]
116
+
117
+ └─> output/finetuned_model/merged_model/ (完整模型)
118
+
119
+
120
+ [scripts/05_evaluate.py]
121
+
122
+ └─> comparison_report_[ProjectName]_v2.json (评估结果)
123
+ ```
124
+
125
+ ---
126
+
127
+ ## 3. 核心模块详细设计
128
+
129
+ ### 3.1 模块1: 代码仓库分析器 (Repository Analyzer)
130
+
131
+ #### 3.1.1 功能描述
132
+ 负责深度解析代码仓库,提取结构化的代码知识图谱。
133
+
134
+ #### 3.1.2 核心数据结构
135
+
136
+ **CodeElement** - 代码元素
137
+ ```python
138
+ @dataclass
139
+ class CodeElement:
140
+ type: str # function, class, method
141
+ name: str # 元素名称
142
+ filepath: str # 相对文件路径
143
+ start_line: int # 起始行号
144
+ end_line: int # 结束行号
145
+ code: str # 完整代码
146
+ docstring: str # 文档字符串
147
+ dependencies: List[str] # 依赖的类/模块
148
+ complexity: int # 圈复杂度
149
+ business_context: str # 业务关键词
150
+ imports: List[str] # 导入的模块
151
+ called_functions: List[str] # 调用的函数
152
+ parent_class: str # 所属类
153
+ decorators: List[str] # 装饰器列表
154
+ parameters: List[Dict] # 参数列表 [{name, type}, ...]
155
+ return_type: str # 返回类型
156
+ ```
157
+
158
+ **CodePattern** - 代码模式
159
+ ```python
160
+ @dataclass
161
+ class CodePattern:
162
+ pattern_type: str # implementation, usage, interaction
163
+ description: str # 模式描述
164
+ code_snippet: str # 代码片段
165
+ context: str # 上下文信息
166
+ related_elements: List[str] # 相关元素
167
+ ```
168
+
169
+ **ProjectContext** - 项目上下文
170
+ ```python
171
+ @dataclass
172
+ class ProjectContext:
173
+ project_name: str # 项目名称
174
+ description: str # 项目描述 (来自 README)
175
+ main_technologies: List[str] # 主要技术栈
176
+ architecture_style: str # 架构风格
177
+ key_modules: List[str] # 核心模块
178
+ dependencies: Dict[str, str] # 依赖字典 {包名: 版本}
179
+ ```
180
+
181
+ #### 3.1.3 关键算法
182
+
183
+ **AST 解析算法**
184
+ ```python
185
+ def _extract_function_enhanced(node, filepath, source_code):
186
+ 1. 提取函数签名和位置信息
187
+ 2. 解析参数列表和类型注解
188
+ 3. 提取返回值类型
189
+ 4. 识别装饰器
190
+ 5. 分析函数调用关系
191
+ 6. 计算圈复杂度
192
+ 7. 提取业务关键词
193
+ return CodeElement(...)
194
+ ```
195
+
196
+ **调用图构建算法**
197
+ ```python
198
+ def _build_call_graph():
199
+ for element in code_elements:
200
+ if element.type in ['function', 'method']:
201
+ for called in element.called_functions:
202
+ function_calls_graph[element.name].add(called)
203
+ ```
204
+
205
+ **代码模式提取**
206
+ ```python
207
+ def _extract_code_patterns():
208
+ # 模式1: 类实现模式
209
+ for class_element in classes:
210
+ if class_element.docstring:
211
+ create_pattern("class_implementation", ...)
212
+
213
+ # 模式2: 函数实现和用法模式
214
+ for function_element in functions:
215
+ callers = find_callers(function_element)
216
+ create_pattern("function_implementation", ...)
217
+
218
+ # 模式3: 模块交互模式
219
+ for module, usage_elements in module_interactions:
220
+ if len(usage_elements) >= 2:
221
+ create_pattern("module_interaction", ...)
222
+ ```
223
+
224
+ #### 3.1.4 输出格式
225
+
226
+ **repository_analysis.json 结构**
227
+ ```json
228
+ {
229
+ "project_context": {
230
+ "project_name": "Laddr",
231
+ "description": "...",
232
+ "main_technologies": ["fastapi", "pydantic", "sqlite", ...],
233
+ "architecture_style": "layered",
234
+ "key_modules": ["core", "cli", "api"],
235
+ "dependencies": {"fastapi": ">=0.100.0", ...}
236
+ },
237
+ "project_structure": {
238
+ "lib/laddr/src/laddr": {
239
+ "type": "directory",
240
+ "children": {...}
241
+ }
242
+ },
243
+ "code_elements": [
244
+ {
245
+ "type": "class",
246
+ "name": "AgentRuntime",
247
+ "filepath": "lib/laddr/src/laddr/core/agent_runtime.py",
248
+ "start_line": 45,
249
+ "end_line": 120,
250
+ "code": "class AgentRuntime:\n ...",
251
+ "docstring": "Agent runtime manager...",
252
+ "dependencies": ["BaseAgent", "MessageBus"],
253
+ "complexity": 15,
254
+ "business_context": "agent, runtime, initialize, process",
255
+ "imports": ["typing", "asyncio", "pydantic"],
256
+ "called_functions": ["setup_tools", "run_loop"],
257
+ "parent_class": "",
258
+ "decorators": [],
259
+ "parameters": [{"name": "config", "type": "AgentConfig"}],
260
+ "return_type": ""
261
+ }
262
+ ],
263
+ "code_patterns": [
264
+ {
265
+ "pattern_type": "class_implementation",
266
+ "description": "类 AgentRuntime 的实现",
267
+ "code_snippet": "...",
268
+ "context": "文件: core/agent_runtime.py\n文档: ...",
269
+ "related_elements": ["AgentRuntime"]
270
+ }
271
+ ],
272
+ "statistics": {
273
+ "total_elements": 350,
274
+ "functions": 180,
275
+ "classes": 45,
276
+ "methods": 125,
277
+ "code_patterns": 87,
278
+ "file_type_counts": {".py": 52, ".md": 8, ...}
279
+ },
280
+ "call_graph": {
281
+ "AgentRuntime.run": ["setup_tools", "process_message"],
282
+ ...
283
+ }
284
+ }
285
+ ```
286
+
287
+ ---
288
+
289
+ ### 3.2 模块2: 训练数据生成器 (Data Generator)
290
+
291
+ #### 3.2.1 设计理念
292
+ - **基于真实代码**: 所有问答对直接来源于实际代码和文档,不依赖LLM生成
293
+ - **模板化方法**: 使用精心设计的模板确保数据质量和一致性
294
+ - **多样性保证**: 通过不同问题模板和代码元素组合实现多样性
295
+ - **可验证性**: 每个答案都可以追溯到源代码
296
+
297
+ #### 3.2.2 训练数据集结构
298
+
299
+ **TrainingSample 数据结构**
300
+ ```python
301
+ @dataclass
302
+ class TrainingSample:
303
+ conversations: List[Dict[str, str]] # [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]
304
+ metadata: Dict[str, Any] # {"task_type": "...", "element_name": "...", "filepath": "..."}
305
+ ```
306
+
307
+ **JSONL 格式示例**
308
+ ```jsonl
309
+ {"conversations": [{"role": "user", "content": "请解释 Laddr 中 `AgentRuntime` 的作用。"}, {"role": "assistant", "content": "`AgentRuntime` 是 Laddr 项目中的一个 类,位于 `lib/laddr/src/laddr/core/agent_runtime.py`。\n\n**功能描述**:\nAgent runtime manager that coordinates tool execution, message handling, and state management.\n\n**函数签名**:\n```python\nclass AgentRuntime:\n def __init__(self, config: AgentConfig):\n```"}], "metadata": {"task_type": "code_explanation", "element_name": "AgentRuntime", "filepath": "lib/laddr/src/laddr/core/agent_runtime.py"}}
310
+ ```
311
+
312
+ #### 3.2.3 场景1: 问答对生成
313
+
314
+ **任务类型1: 代码解释 (Code Explanation)**
315
+
316
+ - **目标**: 解释特定代码元素的功能和实现
317
+ - **问题模板**:
318
+ - "请解释 {project_name} 中 `{element_name}` 的作用。"
319
+ - "{project_name} 的 `{element_name}` 是做什么的?"
320
+ - "在 {project_name} 项目中,`{element_name}` 有什么功能?"
321
+
322
+ - **答案结构**:
323
+ ```
324
+ `{element_name}` 是 {project_name} 项目中的一个 {type},位于 `{filepath}`。
325
+
326
+ **功能描述**:
327
+ {docstring}
328
+
329
+ **函数签名**:
330
+ ```python
331
+ {signature}
332
+ ```
333
+
334
+ **参数**:
335
+ - `{param_name}` ({param_type}): {param_description}
336
+
337
+ **返回值**:`{return_type}`
338
+ ```
339
+
340
+ - **数据来源**:
341
+ - 元素类型、名称: CodeElement.type, name
342
+ - 文件路径: CodeElement.filepath
343
+ - 功能描述: CodeElement.docstring
344
+ - 参数信息: CodeElement.parameters
345
+ - 返回类型: CodeElement.return_type
346
+
347
+ - **质量保证**:
348
+ - 只选择有 docstring 的元素
349
+ - 代码长度 > 50 字符
350
+ - 自动清理 docstring 格式
351
+ - 参数描述尝试从 docstring 提取
352
+
353
+ **任务类型2: API 使用 (API Usage)**
354
+
355
+ - **目标**: 展示如何使用特定函数/方法
356
+ - **问题模板**:
357
+ - "如何在 {project_name} 中使用 `{function_name}` 函数?"
358
+ - "请给出 `{function_name}` 的使用示例。"
359
+
360
+ - **答案结构**:
361
+ ```
362
+ `{function_name}` 位于 `{filepath}`,使用方法如下:
363
+
364
+ ```python
365
+ {function_name}(param1=..., param2=...)
366
+ ```
367
+
368
+ **参数说明**:
369
+ - `param1`: Type - Description
370
+ - `param2`: Type - Description
371
+
372
+ **功能简述**:{docstring_summary}
373
+ ```
374
+
375
+ - **筛选条件**:
376
+ - 非私有方法 (不以 `_` 开头)
377
+ - 有参数列表
378
+ - 类型为 function 或 method
379
+
380
+ **任务类型3: 项目概览 (Project Overview)**
381
+
382
+ - **目标**: 提供项目整体信息
383
+ - **问题示例**:
384
+ - "{project_name} 项目的主要功能是什么?"
385
+ - "请介绍 {project_name} 的架构设计。"
386
+ - "{project_name} 中有哪些核心模块?"
387
+
388
+ - **答案来源**:
389
+ - ProjectContext.description (README 摘要)
390
+ - ProjectContext.main_technologies
391
+ - ProjectContext.key_modules
392
+ - Statistics (代码元素统计)
393
+
394
+ - **特色处理**:
395
+ - 优化项目描述展示,突出核心目标
396
+ - 列举主要技术栈
397
+ - 统计代码结构 (类数、函数数、文件类型)
398
+
399
+ **任务类型4: 代码定位 (Code Location)**
400
+
401
+ - **目标**: 回答"在哪个文件中..."类型问题
402
+ - **问题模板**:
403
+ - "在 {project_name} 中,`{element_name}` 在哪个文件中?"
404
+ - "{element_name} 的源代码位置在哪里?"
405
+
406
+ - **答案示例**:
407
+ ```
408
+ `{element_name}` 位于 `{filepath}` 的第 {start_line}-{end_line} 行。
409
+ ```
410
+
411
+ #### 3.2.4 场景2: 设计方案生成
412
+
413
+ **任务类型5: 架构理解 (Architecture Understanding)**
414
+
415
+ - **目标**: 理解项目整体架构和模块关系
416
+ - **问题示例**:
417
+ - "如何在 {project_name} 中实现一个新的 Agent Tool?"
418
+ - "在 {project_name} 中添加新功能需要修改哪些模块?"
419
+
420
+ - **答案构建**:
421
+ ```
422
+ 在 {project_name} 中实现新 {feature} 需要以下步骤:
423
+
424
+ **涉及的核心模块**:
425
+ - `{module1}`: {description}
426
+ - `{module2}`: {description}
427
+
428
+ **参考实现**:
429
+ 查看 `{reference_file}` 中的 `{reference_class}` 实现。
430
+
431
+ **推理过程**:
432
+ 1. 分析需求...
433
+ 2. 识别依赖模块...
434
+ 3. 设计接口...
435
+ ```
436
+
437
+ - **推理轨迹 (Reasoning Trace)**:
438
+ - 列出相关的 CodePattern
439
+ - 展示调用图关系
440
+ - 引用实际代码示例
441
+
442
+ **任务类型6: 需求实现路径 (Implementation Path)**
443
+
444
+ - **目标**: 为新需求提供实现建议
445
+ - **设计要点**:
446
+ - 基于现有代码模式推荐实现方式
447
+ - 利用 function_calls_graph 分析依赖
448
+ - 引用相似功能的实现
449
+
450
+ #### 3.2.5 数据增强策略
451
+
452
+ 1. **问题变体生成**: 同一知识点生成 3-5 种不同问法
453
+ 2. **上下文扩展**: 添加相关代码元素作为背景信息
454
+ 3. **难度分层**:
455
+ - 简单: 单一元素解释
456
+ - 中等: 多元素关系分析
457
+ - 困难: 架构级设计方案
458
+
459
+ #### 3.2.6 数据集划分
460
+
461
+ - **训练集 (80%)**: train.jsonl - 用于模型学习
462
+ - **验证集 (10%)**: val.jsonl - 用于超参数调优
463
+ - **测试集 (10%)**: test.jsonl - 用于最终评估
464
+
465
+ **metadata.json 示例**:
466
+ ```json
467
+ {
468
+ "total_samples": 650,
469
+ "train_samples": 520,
470
+ "val_samples": 65,
471
+ "test_samples": 65,
472
+ "task_distribution": {
473
+ "code_explanation": 300,
474
+ "api_usage": 150,
475
+ "project_overview": 50,
476
+ "code_location": 100,
477
+ "design_proposal": 50
478
+ },
479
+ "generation_config": {
480
+ "diversity_threshold": 0.7,
481
+ "max_code_lines": 40,
482
+ "min_code_lines": 5
483
+ }
484
+ }
485
+ ```
486
+
487
+ #### 3.2.7 质量保证机制
488
+
489
+ 1. **去重**: 基于问题文本相似度去重 (Levenshtein距离)
490
+ 2. **长度过滤**: 代码片段长度在 5-40 行之间
491
+ 3. **完整性检查**: 确保所有样本都有元数据
492
+ 4. **格式验证**: 验证 JSONL 格式正确性
493
+
494
+ ---
495
+
496
+ ### 3.3 模块3: 模型微调器 (Model Finetuner)
497
+
498
+ #### 3.3.1 微调策略
499
+
500
+ **LoRA (Low-Rank Adaptation) 配置**
501
+ ```yaml
502
+ lora:
503
+ r: 64 # LoRA 秩
504
+ alpha: 128 # LoRA alpha (缩放因子)
505
+ dropout: 0.05 # Dropout 率
506
+ target_modules: # 目标模块
507
+ - q_proj
508
+ - k_proj
509
+ - v_proj
510
+ - o_proj
511
+ - gate_proj
512
+ - up_proj
513
+ - down_proj
514
+ bias: none # 是否训练 bias
515
+ ```
516
+
517
+ **训练超参数**
518
+ ```yaml
519
+ training:
520
+ batch_size: 2 # 每 GPU batch size
521
+ gradient_accumulation_steps: 8 # 梯度累积步数 (有效 batch = 2*8*2=32)
522
+ learning_rate: 1e-3 # 学习率
523
+ num_epochs: 3 # 训练轮数
524
+ warmup_ratio: 0.05 # 预热比例
525
+ weight_decay: 0.01 # 权重衰减
526
+ max_grad_norm: 1.0 # 梯度裁剪
527
+ bf16: true # BF16 混合精度
528
+ ```
529
+
530
+ #### 3.3.2 DeepSpeed ZeRO-3 配置
531
+
532
+ **config/deepspeed_zero3.json**
533
+ ```json
534
+ {
535
+ "bf16": {"enabled": true},
536
+ "zero_optimization": {
537
+ "stage": 3, # ZeRO-3: 参数、梯度、优化器状态分片
538
+ "offload_optimizer": {
539
+ "device": "cpu", # 优化器状态卸载到 CPU
540
+ "pin_memory": true
541
+ },
542
+ "offload_param": {
543
+ "device": "cpu", # 参数卸载到 CPU
544
+ "pin_memory": true
545
+ },
546
+ "overlap_comm": true, # 通信与计算重叠
547
+ "contiguous_gradients": true, # 连续梯度存储
548
+ "stage3_prefetch_bucket_size": "auto",
549
+ "stage3_param_persistence_threshold": "auto",
550
+ "stage3_max_live_parameters": 1e9,
551
+ "stage3_gather_16bit_weights_on_model_save": true
552
+ },
553
+ "gradient_accumulation_steps": "auto",
554
+ "gradient_clipping": "auto",
555
+ "train_batch_size": "auto",
556
+ "train_micro_batch_size_per_gpu": "auto"
557
+ }
558
+ ```
559
+
560
+ **内存优化原理**:
561
+ - **ZeRO-3**: 将模型参数、梯度、优化���状态分片到多个 GPU
562
+ - **CPU Offload**: 非活跃参数卸载到 CPU,减少 GPU 显存占用
563
+ - **混合精度 (BF16)**: 降低内存占用,加速计算
564
+
565
+ #### 3.3.3 训练流程
566
+
567
+ ```python
568
+ # 1. 加载数据集
569
+ dataset = load_dataset("json", data_files={...})
570
+
571
+ # 2. 加载基础模型
572
+ model = AutoModelForCausalLM.from_pretrained(
573
+ base_model_path,
574
+ torch_dtype=torch.bfloat16,
575
+ trust_remote_code=True
576
+ )
577
+
578
+ # 3. 配置 LoRA
579
+ lora_config = LoraConfig(r=64, lora_alpha=128, ...)
580
+ model = get_peft_model(model, lora_config)
581
+
582
+ # 4. 配置 Trainer
583
+ trainer = Trainer(
584
+ model=model,
585
+ args=training_args,
586
+ train_dataset=dataset["train"],
587
+ eval_dataset=dataset["val"],
588
+ data_collator=DataCollatorForSeq2Seq(...)
589
+ )
590
+
591
+ # 5. 开始训练
592
+ trainer.train()
593
+
594
+ # 6. 保存 LoRA adapter
595
+ model.save_pretrained("output/final_model")
596
+ ```
597
+
598
+ #### 3.3.4 检查点管理
599
+
600
+ - **自动保存**: 每 100 步保存一次检查点
601
+ - **评估**: 每 100 步在验证集上评估
602
+ - **结构**:
603
+ ```
604
+ output/finetuned_model/
605
+ ├── checkpoint-100/
606
+ │ ├── adapter_model.safetensors
607
+ │ ├── adapter_config.json
608
+ │ └── global_step100/ (DeepSpeed 状态)
609
+ ├── checkpoint-200/
610
+ └── final_model/
611
+ ├── adapter_model.safetensors
612
+ └── adapter_config.json
613
+ ```
614
+
615
+ ---
616
+
617
+ ### 3.4 模块4: LoRA 权重合并器 (LoRA Merger)
618
+
619
+ #### 3.4.1 合并原理
620
+
621
+ LoRA 训练产生的是**增量参数** (adapter),需要合并回基础模型才能独立使用。
622
+
623
+ **合并公式**:
624
+ ```
625
+ W_merged = W_base + (B × A) × alpha / r
626
+ ```
627
+ 其中:
628
+ - W_base: 基础模型权重
629
+ - B, A: LoRA 低秩矩阵
630
+ - alpha, r: LoRA 超参数
631
+
632
+ #### 3.4.2 合并流程
633
+
634
+ ```python
635
+ # 1. 加载基础模型
636
+ base_model = AutoModelForCausalLM.from_pretrained(
637
+ base_model_path,
638
+ torch_dtype=torch.bfloat16
639
+ )
640
+
641
+ # 2. 加载 LoRA adapter
642
+ model = PeftModel.from_pretrained(
643
+ base_model,
644
+ lora_adapter_path
645
+ )
646
+
647
+ # 3. 合并权重
648
+ merged_model = model.merge_and_unload()
649
+
650
+ # 4. 保存完整模型
651
+ merged_model.save_pretrained(
652
+ "output/merged_model",
653
+ safe_serialization=True # 使用 safetensors 格式
654
+ )
655
+ ```
656
+
657
+ #### 3.4.3 输出格式
658
+
659
+ **merged_model/ 目录结构**:
660
+ ```
661
+ merged_model/
662
+ ├── config.json # 模型配置
663
+ ├── generation_config.json # 生成配置
664
+ ├── model-00001-of-00004.safetensors
665
+ ├── model-00002-of-00004.safetensors
666
+ ├── model-00003-of-00004.safetensors
667
+ ├── model-00004-of-00004.safetensors
668
+ ├── model.safetensors.index.json
669
+ ├── tokenizer.json
670
+ ├── tokenizer_config.json
671
+ └── special_tokens_map.json
672
+ ```
673
+
674
+ ---
675
+
676
+ ### 3.5 模块5: 模型评估器 (Model Evaluator)
677
+
678
+ #### 3.5.1 评估维度
679
+
680
+ **1. 项目特定知识 (Repo-Specific Knowledge) - 权重 60%**
681
+ - 能否正确提及项目名称
682
+ - 能否准确引用文件名、类名、函数名
683
+ - 能否理解项目架构和模块关系
684
+
685
+ **2. 代码理解能力 (Code Understanding) - 权重 30%**
686
+ - 能否解释代码功能
687
+ - 能否识别代码模式
688
+ - 能否分析调用关系
689
+
690
+ **3. 通用能力 (General Ability) - 权重 10%**
691
+ - 语言流畅性
692
+ - 回答完整性
693
+ - 格式规范性
694
+
695
+ #### 3.5.2 评分算法
696
+
697
+ **项目特定知识评分**:
698
+ ```python
699
+ def score_repo_specific(response, project_name, code_elements):
700
+ score = 0.0
701
+
702
+ # 1. 项目名称提及 (+30 分)
703
+ if project_name in response:
704
+ score += 30
705
+
706
+ # 2. 文件路径引用 (+20 分)
707
+ if any(elem['filepath'] in response for elem in code_elements):
708
+ score += 20
709
+
710
+ # 3. 类名/函数名提及 (+20 分)
711
+ mentioned_elements = [elem for elem in code_elements if elem['name'] in response]
712
+ score += min(len(mentioned_elements) * 5, 20)
713
+
714
+ # 4. 代码块引用 (+15 分)
715
+ if '```python' in response:
716
+ score += 15
717
+
718
+ # 5. 架构术语 (+15 分)
719
+ arch_terms = ['模块', 'module', '架构', 'architecture', 'core', 'cli', 'api']
720
+ if any(term in response.lower() for term in arch_terms):
721
+ score += 15
722
+
723
+ return min(score, 100)
724
+ ```
725
+
726
+ **代码理解评分**:
727
+ ```python
728
+ def score_code_understanding(response, test_case):
729
+ score = 0.0
730
+
731
+ # 1. 解释清晰性 (+40 分)
732
+ if len(response) > 100 and any(kw in response for kw in ['功能', '作用', '实现']):
733
+ score += 40
734
+
735
+ # 2. 参数/返回值说明 (+30 分)
736
+ if '参数' in response or 'parameter' in response.lower():
737
+ score += 15
738
+ if '返回' in response or 'return' in response.lower():
739
+ score += 15
740
+
741
+ # 3. 示例代码 (+30 分)
742
+ if '```' in response:
743
+ score += 30
744
+
745
+ return min(score, 100)
746
+ ```
747
+
748
+ #### 3.5.3 测试用例设计
749
+
750
+ **测试用例类型**:
751
+ ```python
752
+ @dataclass
753
+ class TestCase:
754
+ type: str # repo_specific, code_specific, general
755
+ question: str # 测试问题
756
+ category: str # overview, architecture, implementation
757
+ reference_files: List[str] # 参考文件
758
+ ```
759
+
760
+ **示例测试集**:
761
+ ```python
762
+ test_cases = [
763
+ # 项目概览
764
+ TestCase(
765
+ type="repo_specific",
766
+ question=f"{project_name} 项目的主要功能是什么?",
767
+ category="overview"
768
+ ),
769
+ # 架构设计
770
+ TestCase(
771
+ type="repo_specific",
772
+ question=f"请介绍 {project_name} 的架构设计。",
773
+ category="architecture"
774
+ ),
775
+ # 具体代码
776
+ TestCase(
777
+ type="code_specific",
778
+ question=f"请解释 `{class_name}` 类的作用。",
779
+ category="implementation",
780
+ reference_files=["core/agent_runtime.py"]
781
+ ),
782
+ # 通用能力
783
+ TestCase(
784
+ type="general",
785
+ question="什么是面向对象编程?",
786
+ category="general"
787
+ )
788
+ ]
789
+ ```
790
+
791
+ #### 3.5.4 报告生成
792
+
793
+ **comparison_report_[ProjectName]_v2.json 结构**:
794
+ ```json
795
+ {
796
+ "test_config": {
797
+ "project_name": "Laddr",
798
+ "test_time": "2025-01-15T10:30:00",
799
+ "num_test_cases": 15
800
+ },
801
+ "results": [
802
+ {
803
+ "question": "Laddr 项目的主要功能是什么?",
804
+ "category": "overview",
805
+ "base_model_response": "...",
806
+ "finetuned_model_response": "...",
807
+ "scores": {
808
+ "base_model": {
809
+ "repo_specific": 15.0,
810
+ "code_understanding": 30.0,
811
+ "general": 70.0,
812
+ "total": 32.5
813
+ },
814
+ "finetuned_model": {
815
+ "repo_specific": 95.0,
816
+ "code_understanding": 85.0,
817
+ "general": 80.0,
818
+ "total": 89.5
819
+ }
820
+ },
821
+ "improvement": 57.0
822
+ }
823
+ ],
824
+ "summary": {
825
+ "average_scores": {
826
+ "base_model": 28.3,
827
+ "finetuned_model": 82.7
828
+ },
829
+ "average_improvement": 54.4,
830
+ "repo_specific_improvement": 68.5,
831
+ "code_understanding_improvement": 45.2
832
+ }
833
+ }
834
+ ```
835
+
836
+ ---
837
+
838
+ ## 4. 数据质量保证
839
+
840
+ ### 4.1 数据多样性策略
841
+
842
+ 1. **问题多样性**:
843
+ - 每个知识点生成 3-5 种不同问法
844
+ - 覆盖不同难度层级
845
+ - 包含不同问答风格
846
+
847
+ 2. **代码覆盖率**:
848
+ - 选择复杂度 > 5 的函数
849
+ - 包含不同类型的元素 (class, function, method)
850
+ - 覆盖不同业务场景
851
+
852
+ 3. **上下文丰富性**:
853
+ - 提供完整代码片段
854
+ - 包含文件路径和行号
855
+ - 附带相关元素引用
856
+
857
+ ### 4.2 数据验证机制
858
+
859
+ 1. **格式验证**:
860
+ - JSONL 格式正确性
861
+ - conversations 字段完整性
862
+ - metadata 字段一致性
863
+
864
+ 2. **内容验证**:
865
+ - 答案是否包含代码引用
866
+ - 答案是否提及项目名称
867
+ - 答案长度是否合理 (50-1000 字符)
868
+
869
+ 3. **去重验证**:
870
+ - 基于问题文本的去重
871
+ - 基于代码元素的去重
872
+
873
+ ### 4.3 推理轨迹 (Reasoning Trace)
874
+
875
+ 在设计方案类任务中,提供清晰的推理过程:
876
+
877
+ **示例**:
878
+ ```
879
+ 问题: 如何在 Laddr 中添加新的工具 (Tool)?
880
+
881
+ 答案:
882
+ 在 Laddr 中添加新工具需要以下步骤:
883
+
884
+ **推理过程**:
885
+ 1. 分析现有工具实现模式
886
+ - 参考 `core/tooling.py` 中的 `BaseTool` 类
887
+ - 查看 `core/system_tools.py` 中的示例工具
888
+
889
+ 2. 识别依赖模块
890
+ - 工具注册: `core/tooling.py` 的 `register_tool()`
891
+ - 工具调用: `core/agent_runtime.py` 的 `execute_tool()`
892
+
893
+ 3. 实现步骤
894
+ (1) 创建新工具类,继承 `BaseTool`
895
+ (2) 实现 `execute()` 方法
896
+ (3) 添加工具元数据 (name, description, parameters)
897
+ (4) 在 agent 配置中注册工具
898
+
899
+ **参考代码**:
900
+ 见 `core/system_tools.py` 第 45-80 行的 `FileReadTool` 实现。
901
+ ```
902
+
903
+ ---
904
+
905
+ ## 5. 可扩展性设计
906
+
907
+ ### 5.1 支持多语言 (可选功能)
908
+
909
+ **当前支持**: Python, Markdown
910
+
911
+ **扩展方案**:
912
+ 1. 添加新的语言解析器 (如 JavaScript AST 解析)
913
+ 2. 在 `config/default_config.yaml` 中配置支持的语言
914
+ 3. 实现对应的代码元素提取逻辑
915
+
916
+ **配置示例**:
917
+ ```yaml
918
+ repository:
919
+ languages:
920
+ - python
921
+ - javascript # 扩展
922
+ - java # 扩展
923
+ ```
924
+
925
+ ### 5.2 支持新的任务类型
926
+
927
+ **扩展接口**:
928
+ ```python
929
+ class DataGenerator:
930
+ def add_custom_task_generator(self, task_name: str, generator_func):
931
+ """添加自定义任务生成器"""
932
+ self.task_generators[task_name] = generator_func
933
+ ```
934
+
935
+ **示例**:
936
+ ```python
937
+ def generate_bug_fix_samples(code_elements):
938
+ # 生成 bug 修复类训练样本
939
+ pass
940
+
941
+ generator = DataGenerator()
942
+ generator.add_custom_task_generator("bug_fix", generate_bug_fix_samples)
943
+ ```
944
+
945
+ ### 5.3 支持更大规模的代码仓库
946
+
947
+ **优化方案**:
948
+ 1. **分批处理**: 将大型仓库分批解析
949
+ 2. **增量更新**: 只分析修改的文件
950
+ 3. **并行处理**: 多进程并行分析不同模块
951
+
952
+ ---
953
+
954
+ ## 6. 评判标准对照
955
+
956
+ ### 6.1 数据集覆盖所需场景 ✅
957
+
958
+ **场景1: 问答对生成**
959
+ - ✅ 代码解释任务 (300+ 样本)
960
+ - ✅ API 使用任务 (150+ 样本)
961
+ - ✅ 项目概览任务 (50+ 样本)
962
+ - ✅ 代码定位任务 (100+ 样本)
963
+ - ✅ 提供完整代码上下文和推理过程
964
+
965
+ **场景2: 设计方案生成**
966
+ - ✅ 架构理解任务
967
+ - ✅ 需求实现路径
968
+ - ��� 提供推理轨迹 (Reasoning Trace)
969
+
970
+ ### 6.2 数据处理有效性和创新性 ✅
971
+
972
+ **有效性**:
973
+ - ✅ 基于 AST 精确解析代码
974
+ - ✅ 构建完整的调用图和依赖关系
975
+ - ✅ 自动提取业务上下文
976
+ - ✅ 模板化方法保证数据质量
977
+
978
+ **创新性**:
979
+ - ✅ 不依赖 LLM 生成 (避免循环依赖)
980
+ - ✅ 多层次代码模式提取
981
+ - ✅ 推理轨迹自动生成
982
+ - ✅ 项目特定知识强化评估
983
+
984
+ ### 6.3 系统架构完整性和可扩展性 ✅
985
+
986
+ **完整性**:
987
+ - ✅ 5 个核心模块覆盖完整流程
988
+ - ✅ 清晰的数据流和模块接口
989
+ - ✅ 完善的错误处理和日志
990
+
991
+ **可扩展性**:
992
+ - ✅ 支持多语言扩展
993
+ - ✅ 支持自定义任务类型
994
+ - ✅ 支持增量更新
995
+ - ✅ 配置文件驱动
996
+
997
+ ### 6.4 示例数据清晰度和合规性 ✅
998
+
999
+ **清晰度**:
1000
+ - ✅ 结构化的 JSONL 格式
1001
+ - ✅ 丰富的元数据
1002
+ - ✅ 清晰的问答结构
1003
+
1004
+ **推理轨迹**:
1005
+ - ✅ 提供代码上下文
1006
+ - ✅ 标注文件路径和行号
1007
+ - ✅ 展示依赖关系
1008
+ - ✅ 引用相关代码元素
1009
+
1010
+ ---
1011
+
1012
+ ## 7. 使用流程
1013
+
1014
+ ### 7.1 完整训练流程
1015
+
1016
+ ```bash
1017
+ # 步骤1: 更新代码仓库配置
1018
+ python utils/config_manager.py https://github.com/AgnetLabs/Laddr
1019
+
1020
+ # 步骤2: 分析代码仓库 (可选,data_generator会自动调用)
1021
+ python scripts/01_analyze_repo.py
1022
+
1023
+ # 步骤3: 生成训练数据
1024
+ python scripts/02_generate_data.py
1025
+
1026
+ # 步骤4: 微调模型 (使用 DeepSpeed)
1027
+ deepspeed --num_gpus=2 scripts/03_train_model.py
1028
+
1029
+ # 步骤5: 合并 LoRA 权重
1030
+ python scripts/04_merge_weights.py
1031
+
1032
+ # 步骤6: 评估模型
1033
+ python scripts/05_evaluate.py
1034
+ ```
1035
+
1036
+ ### 7.2 快速验证流程
1037
+
1038
+ ```bash
1039
+ # 仅生成少量数据进行快速验证
1040
+ python scripts/02_generate_data.py --quick-test
1041
+
1042
+ # 训练 1 个 epoch
1043
+ deepspeed --num_gpus=2 scripts/03_train_model.py --num-epochs 1
1044
+
1045
+ # 评估
1046
+ python scripts/05_evaluate.py --quick-eval
1047
+ ```
1048
+
1049
+ ---
1050
+
1051
+ ## 8. 性能指标
1052
+
1053
+ ### 8.1 数据生成性能
1054
+
1055
+ - **分析速度**: ~500 代码元素/分钟
1056
+ - **数据生成速度**: ~200 样本/分钟
1057
+ - **数据集大小**: 650+ 样本 (可配置)
1058
+
1059
+ ### 8.2 训练性能
1060
+
1061
+ - **硬件**: 2x GPU (48GB 显存)
1062
+ - **训练时间**: ~2-3 小时 (3 epochs, 650 样本)
1063
+ - **显存占用**: ~40GB/GPU (含 CPU offload)
1064
+ - **LoRA 参数量**: ~134M (相比 8B 基础模型)
1065
+
1066
+ ### 8.3 评估结果
1067
+
1068
+ **典型改进指标**:
1069
+ - 项目特定知识: +60-80%
1070
+ - 代码理解能力: +40-50%
1071
+ - 总体提升: +50-60%
1072
+
1073
+ ---
1074
+
1075
+ ## 9. 最佳实践
1076
+
1077
+ ### 9.1 数据质量优化
1078
+
1079
+ 1. **选择高质量代码仓库**:
1080
+ - 良好的文档注释
1081
+ - 清晰的代码结构
1082
+ - 活跃的开发状态
1083
+
1084
+ 2. **调整生成参数**:
1085
+ - 增加 `code_explanation` 样本比例
1086
+ - 提高 `diversity_threshold`
1087
+ - 过滤低质量代码元素
1088
+
1089
+ 3. **人工审核**:
1090
+ - 抽样检查生成的问答对
1091
+ - 修正错误的代码引用
1092
+ - 优化答案结构
1093
+
1094
+ ### 9.2 训练优化
1095
+
1096
+ 1. **超参数调优**:
1097
+ - 学习率: 1e-4 ~ 5e-3
1098
+ - LoRA rank: 32 ~ 128
1099
+ - Batch size: 根据显存调整
1100
+
1101
+ 2. **防止过拟合**:
1102
+ - 监控验证集损失
1103
+ - 使用 dropout
1104
+ - 限制训练轮数
1105
+
1106
+ 3. **分布式训练**:
1107
+ - 使用 DeepSpeed ZeRO-3
1108
+ - 启用 CPU offload
1109
+ - 优化通信策略
1110
+
1111
+ ### 9.3 评估改进
1112
+
1113
+ 1. **扩充测试集**:
1114
+ - 添加更多项目特定问题
1115
+ - 包含边界情况
1116
+ - 覆盖不同难度
1117
+
1118
+ 2. **多维度评估**:
1119
+ - ROUGE/BLEU 自动指标
1120
+ - 人工评分
1121
+ - A/B 测试
1122
+
1123
+ ---
1124
+
1125
+ ## 10. 总结
1126
+
1127
+ 本系统通过 5 个核心模块实现了**端到端的代码仓库智能训练数据生成与模型微调**流程:
1128
+
1129
+ 1. **Repository Analyzer**: 深度解析代码结构
1130
+ 2. **Data Generator**: 自动生成高质量训练数据
1131
+ 3. **Model Finetuner**: 高效微调大语言模型
1132
+ 4. **LoRA Merger**: 合并权重生成独立模型
1133
+ 5. **Model Evaluator**: 多维度评估模型效果
1134
+
1135
+ **核心优势**:
1136
+ - ✅ 完全自动化,无需人工标注
1137
+ - ✅ 基于真实代码,数据质量高
1138
+ - ✅ 推理轨迹清晰,可验证性强
1139
+ - ✅ 可扩展架构,支持多种场景
1140
+ - ✅ 实测效果显著 (+50-60% 提升)
1141
+
1142
+ **适用场景**:
1143
+ - 企业内部代码助手
1144
+ - 开源项目文档生成
1145
+ - 代码审查辅助