【项目实训 03】代码补全训练数据集构建

一、项目背景

为构建面向HarmonyOS开发者的智能代码补全工具,我们开发了自动化训练数据集生成系统。该系统能够:

  1. 自动解析代码项目文件
  2. 智能拆分代码上下文
  3. 生成自然语言提示词
  4. 输出结构化训练数据
    目前系统已处理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调用失败,正在重试...")
    # 自动重试逻辑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值