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

简介: 通义灵码为企业提供代码补全增强功能,支持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进程。

相关文章
|
14天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
阿里云与企业共筑容器供应链安全
171332 12
|
17天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
150295 32
|
25天前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
201962 14
对话 | ECS如何构筑企业上云的第一道安全防线
|
2天前
|
机器学习/深度学习 自然语言处理 PyTorch
深入剖析Transformer架构中的多头注意力机制
多头注意力机制(Multi-Head Attention)是Transformer模型中的核心组件,通过并行运行多个独立的注意力机制,捕捉输入序列中不同子空间的语义关联。每个“头”独立处理Query、Key和Value矩阵,经过缩放点积注意力运算后,所有头的输出被拼接并通过线性层融合,最终生成更全面的表示。多头注意力不仅增强了模型对复杂依赖关系的理解,还在自然语言处理任务如机器翻译和阅读理解中表现出色。通过多头自注意力机制,模型在同一序列内部进行多角度的注意力计算,进一步提升了表达能力和泛化性能。
|
7天前
|
存储 人工智能 安全
对话|无影如何助力企业构建办公安全防护体系
阿里云无影助力企业构建办公安全防护体系
1252 8
|
7天前
|
人工智能 自然语言处理 程序员
通义灵码2.0全新升级,AI程序员全面开放使用
通义灵码2.0来了,成为全球首个同时上线JetBrains和VSCode的AI 程序员产品!立即下载更新最新插件使用。
1304 24
|
9天前
|
机器学习/深度学习 自然语言处理 搜索推荐
自注意力机制全解析:从原理到计算细节,一文尽览!
自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。
|
7天前
|
消息中间件 人工智能 运维
1月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
590 23
1月更文特别场——寻找用云高手,分享云&AI实践
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
|
13天前
|
人工智能 自然语言处理 API
阿里云百炼xWaytoAGI共学课DAY1 - 必须了解的企业级AI应用开发知识点
本课程旨在介绍阿里云百炼大模型平台的核心功能和应用场景,帮助开发者和技术小白快速上手,体验AI的强大能力,并探索企业级AI应用开发的可能性。