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

相关文章

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

mybatis中resultMap的association及collectio的使用详解

《mybatis中resultMap的association及collectio的使用详解》MyBatis的resultMap定义数据库结果到Java对象的映射规则,包含id、type等属性,子元素需... 目录1.reusltmap的说明2.association的使用3.collection的使用4.总

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe