背景
在我们实际的开发当中,一个需求往往会涉及到多个文件修改,而需求也往往有相似性。
举个例子,我经常需要在 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
每个文件都需要修改,大概修改流程是:
修改command_args.py 添加,更新,删除命令行参数。
common/__init__.py 中的AutoCoderArgs 有对应的字段,也需要修改
lang.py 中则对参数有相应的描述说明
如果是添加了类似 <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
在最后一行通过输入 /eof 结束内容编辑。
你可以通过 /add_files
/group
查看所有已有 Atom Group:
通过 /add_files /group params
进行激活:
现在,你就可以简单的这么说:
/coding 添加一个新的命令行参数 --ask_model 默认值为空
这个时候auto-coder.chat 就可以精准并且稳定性很高的实现对需求的修改。
下面是执行后的结果:系统会告诉你这次修改了几个文件,每个文件的diff 视角,当然实际上有个缩进问题,从diff 里还是很容易看出来的,可以手动修改下。
模型一次修改了四个文件的四块代码,完成“添加参数的需求”。你观察到了 缩进的问题,以及没有发现同步修改中文说明,你可以通过完善前面的 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
会清理掉