@@ -351,7 +351,7 @@ IDE、编辑器作为开发者的主要工具,其设计和学习成本也相
351351| requestCompletions | `Alt` + `/` | 获取当前的上下文,然后通过模型获取补全结果 |
352352| applyInlays | `TAB` | 将补全结果展示在 IDE 上 |
353353| disposeInlays | `ESC` | 取消补全 |
354- | cycleNextInlays | `Alt` + `[ ` | 切换到下一个补全结果 |
354+ | cycleNextInlays | `Alt` + `] ` | 切换到下一个补全结果 |
355355| cyclePrevInlays | `Alt` + `[` | 切换到上一个补全结果 |
356356
357357**采用自动触发方式**
@@ -395,11 +395,11 @@ class AutoDevEditorListener : EditorFactoryListener {
395395
396396#### 日常辅助功能开发
397397
398- 结合
398+ 结合 IDE 的接口能力,我们需要添加对应的 Action,以及对应的 Group,以及对应的 Icon。如下是一个 Action 的示例:
399399
400400`<add-to-group group-id="ShowIntentionsGroup" relative-to-action="ShowIntentionActions" anchor="after"/>`
401401
402- 在不同的 Group中
402+ 如下是 AutoDev 的一些 ActionGroup:
403403
404404| Group ID | AI 用途 | Description |
405405|------------------------|---------------------|-----------------------------------------------------------------|
@@ -421,7 +421,7 @@ class AutoDevEditorListener : EditorFactoryListener {
421421
422422### 上下文构建
423423
424- 为了简化这个过程,我们使用 UnitEval 来展示如何构建上下文 。
424+ 为了简化这个过程,我们使用 Unit Eval 来展示如何构建两种类似的上下文 。
425425
426426#### 静态代码分析
427427
@@ -449,8 +449,27 @@ private fun findRelatedCode(container: CodeContainer): List<CodeDataStruct> {
449449 // 3. convert all similar data structure to uml
450450 return related
451451}
452+
453+ class RelatedCodeStrategyBuilder(private val context: JobContext) : CodeStrategyBuilder {
454+ override fun build(): List<TypedIns> {
455+ // ...
456+ val findRelatedCodeDs = findRelatedCode(container)
457+ val relatedCodePath = findRelatedCodeDs.map { it.FilePath }
458+ val jaccardSimilarity = SimilarChunker.pathLevelJaccardSimilarity(relatedCodePath, currentPath)
459+ val relatedCode = jaccardSimilarity.mapIndexed { index, d ->
460+ findRelatedCodeDs[index] to d
461+ }.sortedByDescending {
462+ it.second
463+ }.take(3).map {
464+ it.first
465+ }
466+ //...
467+ }
468+ }
452469```
453470
471+ 上述的代码,我们可以通过代码的 Imports 信息作为相关代码的一部分。再通过代码的继承关系,来寻找相关的代码。最后,通过再路径相似性,来寻找最贴近的上下文。
472+
454473#### 相关代码分析
455474
456475先寻找,再通过代码相似性,来寻找相关的代码。核心逻辑所示:
@@ -498,20 +517,22 @@ AI 生成的代码被开发者入库的比例。
498517
499518## 步骤 2:模型评估体系与微调试验
500519
501- 评估数据集:
502-
503- - [HumanEval](https://github.com/openai/human-eval)
520+ 评估数据集:[HumanEval](https://github.com/openai/human-eval)
504521
505522### 模型选择与测试
506523
524+ 在结合公开 API 的大语言模型之后,我们就可以构建基本的 IDE 功能。随后,应该进一步探索适合于内部的模型,以适合于组织内部的效果。
525+
507526#### 模型选择
508527
509528现有的开源模型里采用 LLaMA 架构相对比较多,并且由于其模型的质量比较高,其生态也相对比较完善。因此,我们也采用 LLaMA
510529架构来构建,即:[DeepSeek Coder](https://huggingface.co/deepseek-ai/deepseek-coder-6.7b-base)。
511530
512531#### OpenBayes 平台部署与测试
513532
514- 构建 API,详细见:`code/server` 目录下的相关代码。
533+ 随后,我们需要部署模型,并提供一个对应的 API,这个 API 需要与我们的 IDE 接口保持一致。这里我们采用了 OpenBayes 平台来部署模型。详细见:`code/server` 目录下的相关代码。
534+
535+ 如下是适用于 OpenBayes 的代码,以在后台提供公网 API:
515536
516537```python
517538if __name__ == "__main__":
@@ -526,36 +547,21 @@ if __name__ == "__main__":
526547 uvicorn.run(app, host="0.0.0.0", port=8080)
527548```
528549
529- ### 指令生成
530-
531- ```json
532- {
533- "instruction": "Write unit test for following code.\n<SomeCode>",
534- "output": "<TestCode>"
535- }
536- ```
537-
538- 或者:
550+ 随后,在 IDE 插件中,我们就可以结合他们来测试功能。
539551
540- ```json
541- {
542- "instruction": "Write unit test for following code.",
543- "input": "<SomeCode>",
544- "output": "<TestCode>"
545- }
546- ```
552+ #### 大规模模型部署
547553
548- #### 开源指令
554+ 结合模型量化技术,如 INT4,可以实现 6B 模型在消费级的显卡上进行本地部署。
549555
550- [https://huggingface.co/datasets/ise-uiuc/Magicoder-OSS-Instruct-75K](https://huggingface.co/datasets/ise-uiuc/Magicoder-OSS-Instruct-75K )
556+ (TODO )
551557
552- #### 数据蒸馏
558+ ### 模型微调
553559
554- 数据蒸馏。即将大型真实数据集(训练集)作为输入,并输出一个小的合成蒸馏数据集 。
560+ 有监督微调(SFT)是指采用预先训练好的神经网络模型,并针对你自己的专门任务在少量的监督数据上对其进行重新训练的技术 。
555561
556- ### 模型微调
562+ #### 数据驱动的微调方法
557563
558- 有监督微调(SFT)是指采用预先训练好的神经网络模型,并针对你自己的专门任务在少量的监督数据上对其进行重新训练的技术。 结合 【[SFT最佳实践](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Xlkb0e6eu)
564+ 结合 【[SFT最佳实践](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Xlkb0e6eu)
559565】中提供的权衡考虑:
560566
561567- 样本数量少于 1000 且需注重基座模型的通用能力:优先考虑 LoRA。
@@ -574,15 +580,42 @@ if __name__ == "__main__":
574580
575581TODO
576582
577- 微调参数:
583+ 微调参数,详细见:[Trainer](https://huggingface.co/docs/transformers/v4.36.1/zh/main_classes/trainer)
578584
579- - [Trainer](https://huggingface.co/docs/transformers/v4.36.1/zh/main_classes/trainer)
585+ ### 数据集构建
580586
581- ### 大规模模型部署
587+ 根据不同的模型,其所需要的指令也是不同的。如下是一个基于 DeepSeek + DeepSpeed 的数据集示例:
582588
583- 结合模型量化技术,如 INT4,可以实现 6B 模型在消费级的显卡上进行本地部署。
589+ ```json
590+ {
591+ "instruction": "Write unit test for following code.\n<SomeCode>",
592+ "output": "<TestCode>"
593+ }
594+ ```
584595
585- (TODO)
596+ 下面是 LLaMA 模型的数据集示例:
597+
598+ ```json
599+ {
600+ "instruction": "Write unit test for following code.",
601+ "input": "<SomeCode>",
602+ "output": "<TestCode>"
603+ }
604+ ```
605+
606+ #### 数据集构建
607+
608+ 我们构建 [Unit Eval](https://github.com/unit-mesh/unit-eval) 以生成更适合于 AutoDev 的数据集。
609+
610+ #### 开源数据集
611+
612+ 在 GitHub、HuggingFace 等平台上,有一些开源的数据集,如:
613+
614+ - [https://huggingface.co/datasets/ise-uiuc/Magicoder-OSS-Instruct-75K](https://huggingface.co/datasets/ise-uiuc/Magicoder-OSS-Instruct-75K)
615+
616+ #### 数据蒸馏
617+
618+ 数据蒸馏。即将大型真实数据集(训练集)作为输入,并输出一个小的合成蒸馏数据集。
586619
587620## 步骤 3:围绕意图的数据工程与模型演进
588621
0 commit comments