一、项目背景
为构建面向HarmonyOS开发者的智能代码补全工具,我们开发了自动化训练数据集生成系统。该系统能够:
- 自动解析代码项目文件
- 智能拆分代码上下文
- 生成自然语言提示词
- 输出结构化训练数据
目前系统已处理372个Gitee项目(49,897个文件/10.3GB数据),以下是关键技术实现细节。
二、核心代码解析
2.1 主执行脚本(generate_training_data.py)
#!/usr/bin/env python
"""
代码补全训练数据生成脚本
用法示例:
python generate_training_data.py ./harmony_projects \
-o ./training_data \
-e .ets .ts \ # 指定处理ArkTS文件
-a sdu # 使用学校API配置
"""
import sys
from training_data_generator import main
if __name__ == "__main__":
main()
功能说明:
- 支持批量项目目录处理
- 可指定目标文件扩展名(默认包含Python/Java/ArkTS等)
- 支持不同API配置切换
### 2.2 数据生成核心类(TrainingDataGenerator)
#### 代码拆分策略
```python
def split_code_into_blocks(self, code_content: str, language: str):
# 根据语言类型选择拆分策略
if language in ['python', 'ruby']:
return self.split_by_functions_and_classes(code_content, language)
elif language in ['java', 'c++', 'arkts']:
return self.split_by_methods_and_classes(code_content, language)
else:
return self.split_by_line_count(code_content, 20)
策略说明:
- Python/Ruby:按函数/类定义拆分
- Java/C++/ArkTS:按方法/类结构拆分
- 其他语言:按每20行拆分
提示词生成逻辑
def generate_prompt(self, input_code: str, output_code: str, language: str):
prompt_template = '''
作为HarmonyOS开发助手,请分析以下代码片段:
输入代码: {input_code}
完整代码: {output_code}
生成包含以下要素的提示词:
1. 需要补全的组件/方法
2. 关键API使用说明
3. 状态管理要求
4. 布局规范
'''
# 调用DeepSeek API生成提示词
completion = self.client.chat_completion(messages)
return re.sub(r'<think>.*?</think>', '', completion) # 清理思考标签
特点:
- 动态构建多要素提示模板
- 自动清理模型中间思考过程
- 支持ArkTS特有组件标记(@Component/@Entry)
三、数据结构设计
3.1 训练数据格式
{
"file_path": "MainPage.ets",
"language": "arkts",
"input_code": "@Entry@Component struct MainPage { @State count: number = 0 build() { Column() {",
"prompt": "补全计数器组件:1. 添加加减按钮 2. 实现@State数据绑定 3. 设置按钮圆角样式",
"output_code": "完整实现代码..."
}
3.2 关键字段说明
字段 | 说明 |
---|---|
input_code | 待补全的代码片段(通常截取前50%-70%) |
prompt | 自然语言补全指令(含API使用规范) |
output_code | 完整实现代码(用于监督学习) |
四、执行效果示例
4.1 输入代码片段
@Component
struct WeatherCard {
@Prop cityName: string
@State temp: number = 0
build() {
Column() {
Text(this.cityName)
.fontSize(20)
Row() {
4.2 生成结果
{
"prompt": "请补全天气卡片组件:1. 添加温度显示(XX°C格式)2. 实现刷新按钮交互 3. 设置Row布局间距10vp 4. 添加温度变化动画",
"output_code": "完整ArkTS实现代码..."
}
五、性能优化策略
增量处理机制
processed_files = {item['file_path'] for item in all_training_data} # 记录已处理文件
流式API调用
def chat_completion_stream(self, messages, callback=None):
# 使用流式API减少响应延迟
with requests.post(..., stream=True) as response:
for line in response.iter_lines():
# 实时处理返回数据
错误重试机制
try:
response = self.client.chat_completion(messages)
except Exception as e:
self.log(f"API调用失败,正在重试...")
# 自动重试逻辑