管理员如何准备高质量企业代码库

简介: 通义灵码为企业提供代码补全增强功能,支持Java、C#、Go、Python等后端语言及JavaScript、TypeScript、Vue、React等前端语言。开发者通过上传企业代码库,结合IDE插件实现更贴合业务的代码补全。本文介绍如何构建高质量代码库及前后端开发中的使用实践,包括代码库准备、注释规范和代码生成方法。

通义灵码提供了企业代码补全增强的能力,在开发者使用通义灵码 IDE 插件的行间代码生成时,可以结合企业上传的代码库作为上下文进行行间代码补全,使代码补全更加贴合企业代码规范、业务特点。本文将分享如何构建高质量的企业代码库,以及开发者在前端和后端开发场景的使用实践。

适用版本与支持语言

适用版本

支持后端

支持前端

企业标准版

Java、C#、Go、Python

JavaScript、TypeScript、Vue、React

企业专属版

管理员如何准备高质量企业代码库
为确保代码数据的有效处理,我们建议您遵循以下指导原则来准备代码库。这将有助于提升检索的效率与准确性。

代码库的选择和准备指导
下文将介绍在两类不同场景下您应该如何进行代码库的准备:

场景一 日常工程开发,提升研发效率
在企业开发中,为了提高代码复用和开发效率,可以利用多种代码仓库来支持检索增强功能。以下是几种主要的代码仓库选择方式:

后端场景的代码库准备前端场景的代码库准备
【推荐】挑选高频代码片段或文件:选择在当前开发工程中频繁出现或被多次使用的代码片段。这些代码片段通常具有高度引用性和重复使用的特点,适合作为知识库的内容。将满足上述条件的某个工程内的代码片段或代码文件整理成一个独立的代码库,并上传到一个独立的知识库中,以便于管理和调用。

当前项目的工程代码:也可以将整个当前项目工程放入知识库,可以实现跨整个代码库的全面检索,从而提高代码复用和开发效率。但如果工程中存在干扰性代码或大量质量不高的代码,则会影响代码补全增强的效果。

场景二 特定业务场景下,确保代码一致性,减少重复开发
在企业级应用开发中,某些业务逻辑需要保持一致性以确保系统的稳定性和可维护性。在缺乏统一标准的情况下,不同开发者可能会采用不同的实现方式,导致业务逻辑不一致,增加代码维护的复杂性,并可能引发系统稳定性问题。

场景案例一:企业框架和中间件实现的逻辑复用场景案例二:企业核心业务逻辑复用场景案例三:参考旧项目,以提升新项目研发效率
某企业在其商品售卖系统中,库存管理需要采用统一的分布式锁机制。通过将企业自研的业务框架整合到代码知识库中,开发者在IDE端编写相关业务逻辑时,能够方便地召回并复用这些标准化的代码片段,从而提升开发效率,减少重复开发,提高代码质量,并保证业务逻辑的一致性。

代码库的选择和准备:

明确目标业务模式和具体实现机制:

识别关键业务模块:确定系统中需要统一实现的关键业务逻辑模块,例如库存管理、订单处理、支付系统等。

细化具体业务的实现机制:例如,在库存管理中,可能涉及到库存扣减、库存查询、库存锁定等不同场景,每个场景可能需要不同的实现机制。

选择相关业务框架内的代码文件并放入企业代码知识库:

从业务框架中筛选出实现关键业务逻辑的核心代码,整理并放入到独立的代码知识库中。例如,库存扣减需要使用分布式锁机制确保并发安全,那么选择实现分布式锁的核心代码模块。

/**

  • 使用企业自研的分布式锁框架进行并发控制
    */
    @Service
    public class InventoryService {

    @Autowired
    private DistributedLockFramework lockFramework;

    @Autowired
    private InventoryRepository inventoryRepository;

    /**

    • 扣减库存,使用分布式锁确保并发安全
    • @param productId 产品ID
    • @param quantity 扣减数量
    • @return 是否扣减成功
      */
      public boolean deductInventory(Long productId, int quantity) {
      String lockKey = "inventory:" + productId;
      return lockFramework.withLock(lockKey, 30, TimeUnit.SECONDS, () -> {
       Inventory inventory = inventoryRepository.findByProductId(productId);
       if (inventory == null || inventory.getQuantity() < quantity) {
           return false;
       }
       inventory.setQuantity(inventory.getQuantity() - quantity);
       inventoryRepository.save(inventory);
       return true;
      
      });
      }
      }
      代码文件的规范
      支持语言及框架:

后端:JAVA、Python、Go、C#、C/C++

前端:Typescript、JavaScript、React、Vue

上传限制:仅适用于源代码文件,代码库中应仅上传实际编写的源代码文件。例如,对于Java应上传.java文件,对于C#应上传.cs文件,对于JavaScript应上传.js或.jsx文件等。

请避免上传以下内容:

测试数据与代码:请勿上传测试脚本、测试用例或任何不包含业务逻辑的测试相关代码。

Mock方法:排除所有由模拟方法和工具生成的代码,除非这些代码包含对业务逻辑的具体实现。

构建产物:

前端:排除通过构建工具(如Webpack、Gulp等)生成的文件,这些文件通常位于dist或build目录下。

后端:排除编译生成的DLL文件及其他所有编译输出。

注释要求如下。

对希望被检索到的函数,在函数头部应添加详尽的注释。

注释应提供充分的信息以区分不同的函数,建议参考注释模板或根据企业规范进行相应调整。

/**

  • 更新指定订单状态。
    *
  • @param orderId 订单的唯一标识符。
  • @param newStatus 新的订单状态。
  • @return boolean 表示更新是否成功。
    */
    函数名称规范要求。

如果函数注释较为简单,则函数名称必须能够准确描述其功能。

使用清晰且具描述性的命名方式,例如:exportOrdersToPDF、updateOrderStatus而不是 func1。

上传指南
打包压缩文件:将代码文件打包为.zip、.gz或.tar.gz格式。

代码包大小限制:每个代码包的大小不得超过100 MB。

开发者如何使用企业代码生成增强
插件版本要求
仅适用于 VS Code 1.3.9 及以上版本,以及 JetBrains IDEs 1.3.10 及以上版本。

后端场景使用实践
通过自然语言注释生成代码。

企业代码库代码上传:上传包含所需功能代码的压缩包至企业代码库,例如雪花算法的代码,并确保目标函数遵循注释规范,注释位于函数头部。更详细代码库准备指南请参见上述管理员如何准备高质量企业代码库。

/**

  • 使用雪花算法生成唯一序列号
  • @param workerId
  • @return
    */
    public synchronized Long getSnowFlowerId(long workerId){
    long id = -1L;

    if (workerId < 0 || workerId > snowFlowerProperties.getMaxWorkerId()) {
    throw new IllegalArgumentException(
    String.valueOf("workerID must gte 0 and lte " + snowFlowerProperties.getMaxWorkerId()));
    }

    // ... 算法实现代码 ...

return id;
}
输入注释:在集成开发环境(IDE)中定位到某Java类内,输入与期望召回的函数相匹配的注释。注释格式可以灵活,但应确保含义的准确性和一致性。

第一种方式第二种方式

//请通过雪花算法生成唯一编号的代码,返回生成的id
注释说明。

注释长度要求:在编写代码时,注释应尽量避免过于简短,建议长度至少15个字符,过短的注释将无法触发召回。

注释语义要求:确保注释的语义准确且有意义,最好包含关键词与返回值说明,以便通义灵码准确地理解和匹配相应的代码。

多语言支持:支持中英文注释,代码库中的注释和实际编码时的注释可以使用不同的语言。

参数名称灵活性:参数名称可以灵活处理,通义灵码会根据提供的参数自动调整以匹配召回的代码。如下反例。

//雪花算法问题:没有提供足够的信息,注释长度过短。

//生成唯一序列号问题:没有使用具体关键词,可能会影响理解和匹配效果。

代码生成:首次回车后,灵码将提供基于注释生成补全建议;再次回车后,灵码将根据企业代码库中的代码进行补全。2024-09-12_18-11-55

说明
如果您的注释中包含参数,灵码将自动调整生成代码中的参数,确保命名一致性。

如果需要刷新缓存获取新的补全建议,macOS可以使用⌥(option) P 手动触发行间补全,Windows可以使用Alt P手动触发。

通过函数签名生成代码。

代码库代码上传:上传包含所需功能代码的压缩包至企业代码库,并确保这些函数具有清晰且独特的标识,以便于检索和识别。更详细代码库准备指南请参见上述管理员如何准备高质量企业代码库。

输入函数签名:在集成开发环境(IDE)中定位到某Java类内,键入目标函数的签名部分。参数名称可以灵活处理,通义灵码会根据提供的参数自动调整以匹配召回的代码。

public List nextList(String name, int size)
函数签名说明。

函数名称:使用较为清晰的函数名称,需要具备一定语义作为相似性依据。

参数和返回值:类型和顺序需要与目标函数保持一致,但参数名称可以灵活处理,通义灵码会根据提供的参数自动调整以匹配召回的代码。如下反例。

public List func1(String name, int size)// 问题:函数名语义不清晰,无法准确反映函数功能

public List nextList(int orderId)// 问题:参数类型和返回值类型,与目标函数不匹配

代码补全:首次回车后,灵码将提供代码补全建议;再次回车后,灵码将根据企业代码库中的代码进行自动补全。2024-09-12_18-14-531723624742377-2a4c12e5-bdb9-438b-8732-2d0e15fd0e10.gif

说明
灵码将根据您提供的参数名,自动调整生成代码中的参数名,确保命名一致性。

如果需要刷新缓存获取新的补全建议,macOS可以使用⌥(option) P 手动触发行间补全,Windows可以使用Alt P手动触发。

前端场景使用实践
通过标签补全前端自研组件代码。

代码库代码上传:在开始之前,您需要确保所有必要的前端组件代码已经上传到企业代码库中。如下是React框架示例。

新增
}
formItems={formItems}
formRef={formRef}
columns={columns}
request={async (params, requestType) => {
const res: Record = await apiGetUserList(params);
return {
data: res.data,
total: res.total,
};
}}
/>
编写组件代码: 在您的IDE中打开相应的.jsx文件,并开始编写代码。输入基础HTML标签或自定义组件标签,例如 。

代码自动补全: 当您输入的代码达到一定长度,并且能够与企业组件库中的代码匹配时,IDE将自动触发代码补全功能,为您生成完整的组件代码。您也可以通过回车,主动触发代码补全。2024-09-12_18-17-56

重要
请在完整的组件标签内触发您的补全。

通过自然语言注释生成代码。

代码库代码上传:上传包含所需功能代码的压缩包至企业代码库,并确保每个函数都遵循注释规范,注释位于函数头部。 更详细代码库准备指南见管理员如何准备高质量企业代码库章节。如下是JavaScript示例。
原文地址:https://kollidon.92demo.com
https://lactometer.92demo.com
https://lactoalbumin.92demo.com
https://lactocrit.92demo.com
https://lactoscope.92demo.com
https://labelled.92demo.com
https://Kremlinologist.92demo.com
https://labourer.92demo.com
https://laboriously.92demo.com
https://lactosazone.92demo.com
https://lacunarity.92demo.com
https://labial.92demo.com
https://Kuwait.92demo.com
https://kotow.92demo.com
https://lab.92demo.com
https://lactoscopy.92demo.com
https://kreotoxicon.92demo.com
https://kopsinilam.92demo.com
https://labialize.92demo.com
https://lactoperoxidase.92demo.com
https://labouratory.92demo.com

/**

  • 根据报错信息生成,以id为键值的对象
  • @param {Array} results
  • @return {Record}
    */
    function getErrObj(results) {
    // ... 函数实现代码 ...
    }
    输入注释:在IDE中,在JavaScript文件内输入特定的注释内容,如下示例。

//根据报错信息生成以 id 为键值的对象
注释说明。

注释长度要求:在编写代码时,注释应尽量避免过于简短,建议长度至少15个字符,过短的注释将无法触发召回。

注释语义要求:确保注释的语义准确且有意义,最好包含关键词与返回值说明,以便通义灵码准确地理解和匹配相应的代码。

多语言支持:支持中英文注释,代码库中的注释和实际编码时的注释可以使用不同的语言。

参数名称灵活性:参数名称可以灵活处理,通义灵码会根据提供的参数自动调整以匹配召回的代码。

代码生成:首次回车后,灵码将提供基于注释生成补全建议;再次回车后,灵码将根据企业代码库中的代码进行补全。

说明
如果您的注释中包含参数,灵码将自动调整生成代码中的参数名,确保命名一致性。

如果需要刷新缓存获取新的补全建议,macOS可以使用⌥(option) P 手动触发行间补全,Windows可以使用Alt P手动触发。

常见问题:在重新安装插件后,即便重启IDE或重新登录,仍无法成功召回知识库中的代码。
解决方案:

在macOS系统中,请执行以下命令以重启进程并清除缓存。

ps -ef|grep lingma|grep start|awk '{print $2}'|xargs -I {} kill -9 {}
如果是Windows系统,请在进程管理器中结束Lingma进程。

相关文章
|
资源调度
yarn配置镜像源
node学习笔记
3729 0
yarn配置镜像源
|
10月前
|
存储 Linux C语言
【零基础友好】Linux 初学者指令指南:常用指令 + 实操案例,一步一步教你用(收藏级)
本教程系统讲解Linux操作系统基础操作与常用指令,涵盖账号管理、路径操作、文件处理、目录管理、文本查看、时间设置、文件搜索、压缩解压等内容,适合初学者快速掌握Linux命令行核心技能。
【零基础友好】Linux 初学者指令指南:常用指令 + 实操案例,一步一步教你用(收藏级)
|
8月前
|
人工智能 定位技术
千问APP来咯!会聊天,能办事,还免费!!
千问APP公测上线!基于全新Qwen3模型,打造全能AI助手,覆盖办公、地图、健康、购物等多场景,免费畅享智能聊天与办事体验。即刻下载,让AI成为你的日常伙伴。
7398 3
|
7月前
|
传感器 机器人 定位技术
商用迎宾机器人技术深度解析与主流解决方案调研
随着AI技术落地,迎宾机器人已从“噱头”变为政务、医疗、酒店等场景的重要基础设施,集接待引导、咨询答疑、数据采集与安防巡检于一体。通过多模态交互、SLAM导航、大模型知识库等核心技术,实现精准识别、智能决策与自主行动。猎户星空、优必选、傅利叶智能、康力优蓝等企业各具优势,分别在通用服务、人形交互、医疗专精与模块化应用上领先。选型需结合场景需求、系统对接与成本考量,迈向“懂你”的智能化服务时代。(238字)
478 0
|
数据采集 人工智能 API
Qwen2.5-Coder深夜开源炸场,Prompt编程的时代来了!
通义千问团队开源「强大」、「多样」、「实用」的 Qwen2.5-Coder 全系列,致力于持续推动 Open Code LLMs 的发展。
|
11月前
|
JSON 安全 测试技术
什么是API接口测试?这可能是全网最全的教程了!
API 是应用程序间的“中间人”,用于实现通信和数据交换。随着微服务架构的普及,API 数量激增,其质量对系统稳定性至关重要。API 测试可验证功能、性能与安全性,帮助开发者在部署前发现并修复问题,提升系统可靠性。测试内容包括请求方法、URL、请求头、请求体、响应状态码与响应数据等。常用工具如 Postman、AREX 可辅助测试,确保 API 在不同场景下的正确性与稳定性。
|
存储 人工智能 自然语言处理
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
|
API Docker 容器
超实用工具分享!Gotenberg,让你的文档转换PDF无缝对接
超实用工具分享!Gotenberg,让你的文档转换PDF无缝对接
1886 4
|
数据安全/隐私保护
基于零极点配置的PID控制系统simulink建模与仿真
本课题基于零极点配置的PID控制系统在Simulink中建模与仿真,通过设置不同数量的零极点(1、3、6、8个),对比分析PID控制器的输出效果。使用MATLAB2022a版本进行建模,验证了零极点配置对系统性能的影响。PID控制器通过比例、积分和微分作用于误差信号,结合零极点配置可优化闭环系统的频率响应,提升稳定性和动态性能。
|
人工智能 编解码 vr&ar
Lumina-Video:上海 AI Lab 开源视频生成框架,动态程度可控,支持多分辨率
Lumina-Video 是由上海 AI Lab 和香港中文大学联合推出的高效视频生成框架,支持高质量视频生成、动态程度控制和多分辨率生成。
890 4

热门文章

最新文章