RepoAgent:基于大型语言模型的开源框架,主动生成、维护和更新代码文档

本文主要是介绍RepoAgent:基于大型语言模型的开源框架,主动生成、维护和更新代码文档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 人工智能咨询培训老师叶梓 转载标明出处

开发者通常花费约58%的时间在程序理解上,高质量的代码文档在减少这一时间上扮演着重要角色。然而,维护代码文档同样消耗大量的时间、金钱和人力。为了减轻维护代码文档的负担,早期尝试自动文档生成的方法旨在为源代码提供描述性摘要。但是,这些方法在总结化、指导不足和被动更新方面存在显著局限性。清华大学、中国人民大学和西门子公司的研究团队提出了RepoAgent,一个由大模型(LLM)驱动的开源框架,旨在主动生成、维护和更新代码文档。通过定性和定量评估,验证了本方法的有效性,表明RepoAgent在生成高质量的仓库级文档方面表现出色。代码和结果已在GitHub公开访问。

通过普通摘要方法和提出的RepoAgent生成的代码文档的比较

RepoAgent框架

RepoAgent方法的三个组成部分

如图2所示RepoAgent方法分三个组成部分:全局结构分析(Global Structure Analysis)、文档生成(Documentation Generation)和文档更新(Documentation Update)。这三个组件不仅可以独立执行,还可以打包成工具钩子(hook),用于各种工具集成目的。当这三个组件协同工作时,RepoAgent能够确保从头开始构建和维护代码仓库的文档,将文档的重要性提升到与代码同等的水平,从而促进团队之间的同步和协作。

全局结构分析

全局结构分析是构建高质量代码文档的基础。研究者们首先提出了项目树这一概念,它作为理解整个代码库结构的关键数据结构。项目树的构建过程从筛选出Python文件开始,排除了其他非目标语言的文件,以确保分析的准确性。随后,通过应用抽象语法树(AST)分析,研究者们能够递归地解析每个Python文件中的类和函数,详细提取它们的元信息,包括类型、名称和代码片段等。这些信息成为了后续文档生成过程中的基本构建块。

文档生成

文档生成阶段,研究者们设计了一套策略,使得后端的大型语言模型(LLM)能够利用项目树中的元信息和代码间的引用关系,生成结构化且具有实用指导性的文档。这一过程涉及到一个精心构建的提示模板,它能够引导LLM生成包含功能、参数、代码描述、注意事项和示例等部分的文档。

用于文档生成的提示模板,包括动态填充的变量和根据不同对象的元信息丰富文档内容的部分

图3提供了一个用于文档生成的提示模板示例,这个模板是与大模型(LLM)交互的接口,指导模型生成结构化且内容丰富的文档。

在文档生成阶段,RepoAgent首先利用项目树(Project Tree)来感知整个代码库的上下文。项目树中的每个节点,代表代码中的一个类或函数,都携带有其元信息,例如类型、名称和相对文件路径。这些元信息为LLM提供了生成文档所需的基本信息。

接着,RepoAgent使用精心设计的提示模板,将这些元信息以及代码片段作为输入传递给LLM。提示模板中包含了一些关键部分,例如:

功能描述(Functionality):使用清晰、简洁的句子描述代码对象的主要功能。

参数(Parameters):列举函数或类的参数,并提供每个参数的描述。

代码描述(Code Description):详细阐述代码的工作原理、逻辑流程以及它在整个项目中的作用。

注意事项(Notes):提供关于代码使用的额外信息,可能包括潜在的错误、优化建议或其他重要提示。

示例(Examples):如果代码对象有返回值或特定的使用场景,提供示例可以帮助开发者更好地理解如何使用这段代码。

最后,RepoAgent将LLM生成的文本编译成Markdown格式,这是一种轻量级的标记语言,可以轻松地转换成HTML,用于在Web上展示。Markdown格式的文档具有清晰的结构和易于阅读的样式,使得开发者可以快速浏览和查找所需信息。

文档更新

文档更新是RepoAgent自动化能力的另一重要体现。研究者们通过与Git的紧密集成,实现了文档的自动跟踪和更新。通过Git的预提交钩子,RepoAgent能够在代码提交前自动检测变更,并触发文档的更新流程,确保文档与代码的同步。这一自动化过程显著减少了人工干预的需求,并且由于代码的低耦合特性,RepoAgent能够智能地仅更新受影响部分的文档,而不是每次都重新生成整个文档。文档更新的触发条件包括源代码的修改、引用关系的变更等,这些都是确保文档准确性和时效性的关键因素。

通过这三个阶段的协同工作,RepoAgent不仅提升了文档的质量和可用性,还强化了团队协作的效率,使得每个团队成员都能够轻松访问最新、最准确的项目文档。这种自动化和智能化的文档管理方式,是现代软件开发实践中的一个重要进步,有助于提升开发速度和代码质量。

实验

研究者选择了9个不同规模的Python代码仓库作为实验对象,这些仓库在GitHub上因其经典性或高流行度而被选中,并且具有高代码质量和项目复杂性。研究者提供了这些仓库的详细统计数据,包括代码行数、类和函数的数量。他们还介绍了实验中使用的后端大型语言模型(LLMs),包括gpt-3.5-turbo、gpt-4-0125、Llama-2-7b和Llama-2-70b。

研究者以ChatDev仓库为例,展示了RepoAgent生成的文档。生成的文档结构清晰,首先用简洁的句子描述对象的功能,然后是参数部分,详细列举了所有相关参数及其描述。代码描述部分全面阐述了代码的各个方面,包括对象的角色和它与全局上下文中其他代码的关联。笔记部分进一步丰富了描述,突出了代码中的逻辑错误或潜在优化。如果对象有返回值,模型还会生成示例部分,展示预期输出。

RepoAgent为ChatDev代码库生成的代码文档示例
ChatDev功能文档的更新,包括原始代码、更新后的代码、原始文档和更新后的文档

研究者采用了人类评估员来评估RepoAgent生成的文档质量。由于缺乏有效的评估方法,他们进行了偏好测试,比较了人类编写的和模型生成的代码文档。评估员被要求根据一系列评估标准来选择每对文档中的较优者。评估结果显示,RepoAgent生成的文档在质量上超越了人类编写的内容。

人类偏好测试的结果,比较了人类编写和模型生成的代码文档的偏好率

“定量分析”部分包含了几个关键的定量测试,用以评估RepoAgent的性能:

参考召回(Reference Recall):研究者评估了模型识别代码对象全局上下文中的引用关系的能力。他们比较了几种不同的文档生成方法,包括基于机器学习的方法、长上下文连接方法和单对象生成方法。结果显示,RepoAgent使用Jedi工具和双向解析准确传递了全局引用关系,有效克服了其他方法在生成仓库级代码文档时遇到的范围限制。

不同文档生成方法在全局调用者和被调用者识别中的召回率

格式对齐(Format Alignment):研究者评估了LLMs生成的文档是否遵循了定义的格式。大型模型如GPT系列和Llama-2-70b在格式对齐方面表现良好,而小型模型Llama-2-7b在格式对齐上表现较差。

不同LLMs在格式对齐准确性方面的表现

参数识别(Parameter Identification):研究者进一步评估了模型在所有9个仓库中识别参数的能力。结果显示,GPT系列在参数识别方面显著优于LLaMA系列,其中gpt-4-0125表现最佳。

不同LLMs作为后端在识别函数参数准确性方面的表现

经过深入研究和实践,RepoAgent已被证明是一个强大的工具,它不仅提升了代码文档的生成质量,还显著增强了开发团队的协作效率。虽然存在一些限制,比如目前主要支持Python语言,并且可能需要人工监督来确保文档的准确性和完整性,随着技术的不断发展,RepoAgent将能够克服这些限制,服务于更广泛的编程语言和应用场景。

论文链接:https://arxiv.org/abs/2402.16667

项目链接:https://github.com/OpenBMB/RepoAgent

这篇关于RepoAgent:基于大型语言模型的开源框架,主动生成、维护和更新代码文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127060

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了