AI辅助编程里的 Atom Group 的概念和使用

2024-09-08 11:52

本文主要是介绍AI辅助编程里的 Atom Group 的概念和使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

在我们实际的开发当中,一个需求往往会涉及到多个文件修改,而需求也往往有相似性。

举个例子,我经常需要在 auto-coder中需要添加命令行参数,通常是这样的:

/coding 添加一个新的命令行参数 --chat_model 默认值为空

实际上这个需求涉及到以下文件列表:

  • /Users/allwefantasy/projects/auto-coder/src/autocoder/auto_coder.py

  • /Users/allwefantasy/projects/auto-coder/src/autocoder/command_args.py

  • /Users/allwefantasy/projects/auto-coder/src/autocoder/lang.py

  • /Users/allwefantasy/projects/auto-coder/src/autocoder/common/__init__.py

每个文件都需要修改,大概修改流程是:

  1. 修改command_args.py 添加,更新,删除命令行参数。

  2. common/__init__.py 中的AutoCoderArgs 有对应的字段,也需要修改

  3. lang.py 中则对参数有相应的描述说明

  4. 如果是添加了类似 <xxxx>_model 的参数,那么需要在 auto_coder.py 中 用setup_sub_client 添加到主llm 中.

如果让auto-coder.chat 自己根据需求寻找文件,有可能会找不全,导致修改不完整,所以一般还是需要手动使用

/add_files xxxx

来进行上下文的添加。这样就比较繁琐了。此外,就算文件添加全了,大模型也不会一定每次都能改全,而用户倾向于这样写:

/coding 添加一个新的命令行参数 --chat_model 默认值为空

而不是:

/coding 添加一个新的命令行参数 --chat_model 默认值为空。具体修改逻辑为:
1.修改command_args.py 添加,更新,删除命令行参数。
common/__init__.py 中的AutoCoderArgs 有对应的字段,也需要修改
lang.py 中则对参数有相应的描述说明
如果是添加了类似 <xxxx>_model 的参数,那么需要在 auto_coder.py中 用setup_sub_client 添加到主llm 中.

实际上,在一个已经成熟的项目里,我们往往都是在做加法,或者一些有固定套路的`修改`。每个加法或者修改,都会作用在相对来说一组固定的文件。

这是一个极为有用的特性。

Atom Group

Atom Group 相当于帮助用户把一组文件以及对应的一组需求创建一个任务,用户提供这组文件以及为了满足这一组需求需要的任务拆解。

以前面为例子,你手动添加完文件后,可以这么做:

/add_files /group /add params

这样我们添加了一个 Atom Task,叫  params. 然后我们把修改逻辑也加到这个组里去:

/add_files /group /set params

6142a0d44c5b52afd4b222ac6144588c.png

在最后一行通过输入 /eof 结束内容编辑。

你可以通过 /add_files /group 查看所有已有 Atom Group:

df955fbb4909e0de31db9fdfe3b695ff.png

通过  /add_files /group params 进行激活:

0dc01526baf1f30e5287f06e0baca15c.png

现在,你就可以简单的这么说:

/coding 添加一个新的命令行参数 --ask_model 默认值为空

这个时候auto-coder.chat 就可以精准并且稳定性很高的实现对需求的修改。

下面是执行后的结果:系统会告诉你这次修改了几个文件,每个文件的diff 视角,当然实际上有个缩进问题,从diff 里还是很容易看出来的,可以手动修改下。

adbaf15587a5cd1a7880015f76fcbdc5.png

1f0b51cf316f4de37c187706ea5acc69.png

模型一次修改了四个文件的四块代码,完成“添加参数的需求”。你观察到了 缩进的问题,以及没有发现同步修改中文说明,你可以通过完善前面的 Atom Group 说明来完成。

总结

把对项目的常见更改 映射成 Atom Group, 从而帮助模型可以高效而稳定的实现新增需求,这样才能更加容易实现自动化,减少人工干预。

甚至对于比较稳定的这种 Atom Group,我们可以开放给产品经理,让产品经理也可以在可控的范围内使用指定的 Atom Group 完成一些自助项目修改或者迭代。

更多介绍,点击阅读原文。

额外注意点和小功能

实际上我们使用的Atom Group 永远都是一个 当前 组。当我们做 Atom Group 切换,本质上是清空当前组

Active 文件,然后拷贝对应组的文件进来。

比如执行:

/add_files /group params

然后接着你添加新的文件,只会影响 当前组 而不会影响 param 组。如果你希望影响,可以先:

/add_files /group /drop params
/add_files /group /add params

上面的语句表示 删除 params 组,然后新建一个组,然后将 当前组 拷贝到 params 组。

你也可以将多个组的文件同时加到当前组里,注意,加入之前会先清空再拷贝:

/add_files /group <group-1>,</group-2>

如果不想 Atom Group 影响编程行为,可以这样做:

/add_files /group /reset

会清理掉

这篇关于AI辅助编程里的 Atom Group 的概念和使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Python中使用defaultdict和Counter的方法

《Python中使用defaultdict和Counter的方法》本文深入探讨了Python中的两个强大工具——defaultdict和Counter,并详细介绍了它们的工作原理、应用场景以及在实际编... 目录引言defaultdict的深入应用什么是defaultdictdefaultdict的工作原理

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命

PyTorch使用教程之Tensor包详解

《PyTorch使用教程之Tensor包详解》这篇文章介绍了PyTorch中的张量(Tensor)数据结构,包括张量的数据类型、初始化、常用操作、属性等,张量是PyTorch框架中的核心数据结构,支持... 目录1、张量Tensor2、数据类型3、初始化(构造张量)4、常用操作5、常用属性5.1 存储(st