开源工具_Aider_重塑编程体验

  • 项目地址:GitHub - paul-gauthier/aider: aider is AI pair programming in your terminal
  • 编程语言:主要使用 Python
  • Star:8.9K+
  • 功能:在终端中直接与 GPT-3.5/GPT-4 交互,编写或修改代码
  • 主要优点:增加了代码生成的可控性,一次可以修改多个文件

1 编程工具

以前我们使用的辅助编辑工具多数是嵌入在 IDE 里的插件,主要提供代码段和建议。或者与 Agent 结合,实现复杂项目。相对来说比较细碎且不可控,还是主要以人为主。

另外,编程时使用大模型和问答场景一样,也存在数据问题,例如如何精准地提问、如何在有限的上下文限制下传达重要信息、如何判断哪些信息最相关,以及如何在解决问题时节约 token 等。

与问答不同之处在于,编程返回内容有更高要求,生成的程序需要可执行,并且在修改代码的场景中最好能看到代码对比效果。同时,我们还有一些工具可以辅助生成数据,例如语法检查工具,在运行的错误信息传给大模型继续修改。通过 Agent 之间的配合可以实现多步组合效果。

目前这些功能基本由本地端的编程工具控制,最好能让程序员更为可控,比如批量调用;再如简化工作流程:查 -> 改 -> 测 -> 查 -> 改 -> 测 -> 查... 让机器实现这种机械化、可描述、且可示例的工作。

进一步思考编码工作,可以将其分为两部分:一是目前模型擅长的工作和容易描述的重复性工作可以交给模型来完成;二是对于人或模型来说都相对复杂的工作,则可以通过模型来辅助工作。

第一次看到 aider 工具时,觉得与当前的工具相比小而美,可能有用。自己试用之后,感觉非常兴奋——你可以将他视为一个初级程序员。

2 针对问题

  • 对于复杂代码、他人编写的代码或很久前的代码,存在 N 个文件,不确定该修改哪一个。
  • 使用 IDE 编程助手插件时,无法确保将所需内容全部传递给模型。
  • 将代码通过聊天界面传递给模型时可能需要自行筛选,非常繁琐。
  • 不知道如何撰写最有效的提示。

3 代码分析

  • 代码量:8000+ 行 Python 代码
  • 主要逻辑:5000+ 行位于 aider 目录下
  • 修改编码逻辑:2000+ 行位于 aider/coder 目录下
    • 实现不同粒度分析修改代码
    • xx_prompts.py 主要包含各种提示

4 使用方法

SHELL

1
2
3
4
5
$ pip install aider-chat
$ export OPENAI_API_KEY=your-key-goes-here
$ cd 项目目录
$ aider # aider -4 调用gpt4; aider -3 调用gpt3
> /help

虽然作者提供了 Dockerfile,但工具依赖不多。如果有 Python 环境,建议直接装 aider 库。

该工具的交互设计非常好,可以设定不同模型,不同交互单位:文件或代码块;在交互界面,命令可以通过 "/" 调出,也可以直接与模型进行文本聊天,还支持语音输入。

除了以上提到的交互方式,还可以将 aider 视为一个可执行的命令,在 shell 中调用,或者通过 Python 程序调用。

5 帮助文档

  • 源码目录下的 examples 是一些使用的入门和启发用法。
  • 源码目录下的 docs 几乎包含了所有常见问题的答案。

6 常见用途

  • 批量修改
    • 批量添加测试用例
    • 批量添加注释
    • 批量添加 try/cache
    • 批量更改包名
    • 批量规范化格式(如驼峰命名)
    • 批量更改命名规则
    • 批量将功能生成 Agent
  • 自动生成和更新 README.md 文件
  • 根据需求修改当前代码
  • 示例某种框架或逻辑的实现方法
  • 代码 debug,用 run 方式运行时报错传递给模型
  • 代码重构
  • 结合代理(Agent)实现更复杂的功能(需要自行实现)
  • 生成代码地图:Building a better repository map with tree sitter | aider,代码实现:repomap.py,并将其传递给模型,模型可以提供引入其他文件的建议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/826883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA-服务器搭建-创建web后端项目

首先打开IDEA 点击新建项目 写好名称-模板选择 Web应用程序 -语言选择 Java 构建系统选择 Maven 然后点击下一步 选择版本-选择依赖项 Web Profile 点击创建 点击当前文件-选择编辑配置 选择左上角的加号-选择Tomcat服务器-选择本地 点击配置-选择到Tomcat目录-点击确定 起个…

利用STM32 HAL库实现USART串口通信,并通过printf重定向输出“Hello World“

一、开发环境 硬件:正点原子探索者 V3 STM32F407 开发板 单片机:STM32F407ZGT6 Keil版本:5.32 STM32CubeMX版本:6.9.2 STM32Cube MCU Packges版本:STM32F4 V1.27.1 上一篇使用STM32F407的HAL库只需1行代码实现US…

记一次etcd数据恢复

使用官方示例 etcd:image: bitnami/etcd:3.4.15restart: alwaysvolumes:- ./etcd_data:/bitnami/etcdenvironment:ALLOW_NONE_AUTHENTICATION: "yes"ETCD_ADVERTISE_CLIENT_URLS: "http://etcd:2379"ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379…

史记-张良-留侯世家-8-上欲废太子;张良出谋划策;政治智慧

原文: 上欲废太子,立戚夫人子赵王如意。大臣多谏争,未能得坚决者也。吕后恐,不知所为。人或谓吕后曰:“留侯善画计策,上信用之。”吕后乃使建成侯吕泽劫留侯,曰:“君常为上谋臣&…

24届数字IC验证——SV+UVM基础知识汇总(九)

文章目录 前言57、module和program区别58、仿真调度区域59、fork-join、fork-join_none和fork-join_any的区别(经常问)60、D触发器输入高阻,输出是什么61、recovery time和removal time62、设置仿真退出时间62、$ time和$ realtime区别63、选择验证的原因(常问)64、验证工…

云仓酒庄广西发布会盛启:新老经销商欢聚南宁

原标题:云仓酒庄广西发布会盛启:新老经销商欢聚南宁,共襄精酿啤酒盛宴在夏日的热情与激情中,云仓广西发布会于今日在美丽的南宁盛大开幕。来自各地的经销商们齐聚一堂,共同见证了这一盛况。此次发布会不仅是一次产品的…

Python网络爬虫项目开发实战:如何解决验证码处理

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:Python网络爬虫项目开发实战_验证码处理_编程案例解析实例详解课程教程.pdf 一、验证码处理的简介 在Python网络爬虫项目开发实战中,验证码处理是…

SpringBoot中的扩展点

ApplicationContextInitializer的initialize方法。 时机 : 所有的配置文件都已经加载,spring容器还没被刷新之前 准备阶段 this.prepareContext(context, environment, listeners, applicationArguments, printedBanner); 它允许开发人员在Spring应用上下文&…

2024年汉字小达人活动还有5个月开赛:来做18道历年选择题备考吧

现在距离2024年第11届汉字小达人比赛还有五个多月的时间,如何利用这段时间有条不紊地备考呢?我的建议是两手准备:①把小学1-5年级的语文课本上的知识点熟悉,重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#x…

数电期末复习(一)数制和码制

数制和码制 1.1 概述1.2 几种常用的数制1.2.1 十进制(Decimal)1.2.2 二进制(Binary)1.2.3 二-十进制之间的转换1.2.4 十六进制和八进制1.2.5 任意进制之间的转换 1.3 二进制代码1.3.1 二-十进制码(BCD Binary Coded Decimal)1.3.2…

分享一些常用的小程序免费源码

小程序支付源码 小程序注册、登录源码 自定义图片上传组件源码 java实现小程序和网页在线聊天、即时通讯 微信小程序自定义底部tabBar实例 生成微信小程序二维码 图片上传源码 下载地址: 看源社区 www.see-source.com

cross-env 与 vue-cli-service 的区别

cross-env 与 vue-cli-service 的区别 一、cross-env用法多环境基本内容配置 (非必要,全局变量的一种方式) 二、vue-cli-service:用法 一、cross-env 它是为了解决跨平台环境变量设置的问题而开发的。 cross-env是一个用于设置跨…

2023年网络安全行业:机遇与挑战并存

2023年全球网络安全人才概况 根据ISC2的《2023年全球网络安全人才调查报告》,全球的网络安全专业人才数量达到了550万,同比增长了8.7%。然而,这一年也见证了网络安全人才短缺达到了历史新高,缺口数量接近400万。尤其是亚太地区&am…

luckysheet的使用——15.复制有合并单元格的某一行的格式到一个指定空白行

在插入空白行的时候,如果是在画好的表格下插入,api提供的插入空白行会插入没有任何格式的一行,无法匹配合并了单元格的表格格式,需要手动编写api 1.找到api.js,在src/global中,新增一个方法 /*** 复制有合并单元格的…

ARM_day6:实现字符串数据收发函数的封装

程序代码: uart4.h: #ifndef __UART4_H__ #define __UART4_H__ #include"stm32mp1xx_gpio.h" #include"stm32mp1xx_rcc.h" #include"stm32mp1xx_uart.h" void uart4_config(); void putchar(char dat); char getchar();…

【电机参数】直流无刷电机机械转速、ud、uq、us、输出功率、相反电动势幅值、载波周期、转矩常数

【电机参数】直流无刷电机机械转速、ud、uq、us、输出功率、相反电动势幅值、载波周期、转矩常数 前言 【电机控制】直流有刷电机、无刷电机汇总——持续更新 使用工具: 1.示波器:PICO2205A 2.电桥LCR:VICIOR4090A 3.电流钳:汉泰…

接口测试相关

接口测试,接口 接口是数据交互的入口和出口 接口是一套规范和标准 统一设计标准 前后端相对独立 扩展型灵活 接口文档。 接口测试 接口测试环境,运行程序,自己搭建环境 接口测试插件 谷歌postman 火狐 restclient java测试工具为j…

Linux系统的磁盘管理与文件系统

目录 一、磁盘结构 1.物理结构 2.数据结构 二、MBR与磁盘分区表示 1.MBR 2.磁盘分区表示 分区的优点 分区的缺点 三、文件系统类型 1.文件系统的组成 XFS SWAP EXT4 2.磁盘管理工具 四、Linux系统添加新硬盘的步骤 一、磁盘结构 1.物理结构 所有存储的设备都在…

【面试经典 150 | 数组】最后一个单词的长度

文章目录 写在前面Tag题目来源解题思路方法一:遍历 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾…

Android 性能优化之黑科技开道(二)

3. 其它可以黑科技优化的方向 3.1 核心线程绑定大核 3.1.1 定义 核心线程绑定大核的思路也很容易理解,现在的 CPU 都是多核的,大核的频率比小核要高不少,如果我们的核心线程固定运行在大核上,那么应用性能自然会有所提升。 核…