Aider(已升级):Aider利用双模型架构做到85% SOTA得分!
Hi,这里是Aitrainee,欢迎阅读本期新文章。
令人振奋的是,Aider 最近推出了一种新模式,名为“ 使用一对 Architect/Editor 模型以提升编码效果 ”。这个更新旨在通过协同工作,优化编码过程,使开发更高效。
将代码推理和编辑分开
架构师模型首先描述了如何解决编码问题,包括设计思路和步骤。然后,将该解决方案传递给编辑器模型,后者负责生成具体的代码编辑指令。
这一架构师/编辑器的方法显著提升了多个模型的基准分数,相较于之前的“单独”基线分数,进步明显。特别的,使用o1-preview作为架构师,并结合DeepSeek或o1-mini作为编辑器,达到了85%的SOTA得分。
动机
这种方法受到OpenAI o1模型发布的启发。尽管这些模型在推理方面表现出色,但在生成格式正确的代码编辑指令时常显得不足。
通过让模型以其偏好的方式描述解决方案,并将这些描述传递给更传统的LLM,可以显著改善结果。第二个编辑LLM可以理解这些描述,并生成所需的代码编辑指令。
像 o1-preview 这样的强大推理模型可以成为优秀的架构师,而编辑器角色可以根据成本、速度和代码编辑技能分配给适当的模型。
实际测试
我们将分别使用两个组合来测试上面的功能:
第一种:gpt4o-mini+deepseek
我会告诉你如何获取免费的gpt4o-mini接口:
首先下载aider:
python -m pip install -U aider-chat
创建一个新的文件夹,以便在这里面运行aider(它会建立git仓库以控制版本):
如何获取免费的gpt4o-mini接口?参考这个项目:
其他的免费API在菜单里:
设置中转点为:
setx OPENAI_API_BASE "https://api.chatanywhere.tech"
在这个项目中获取免费的api key之后
setx OPENAI_API_KEY "your_api_key_here"
以上setx命令都是针对于windows的,意思是永久保存环境变量。其他mac/linux的可以看aider官网。
再设置deepseek的
setx DEEPSEEK_API_KEY <key> # Windows, restart shell after setx
配置好之后我们使用下面命令启动adier,就可以使用架构/编辑师模式了:
aider --model openai/gpt-4o-mini --architect --editor-model deepseek/deepseek-coder
现在让他们两个创建一个音乐播放器:
Develop a simple music player that allows users to upload and play their own music files.
你可以看到作为架构师的gpt4o-mini在开始架构了,他描述了架构、应该做什么,这是架构师的整个过程:
创建过程中有错误它会自动修复:
让我们看看最终的结果(你可能注意到有一个待办事项的应用在上面,那是因为我们接下来的一个测试例子没有删,而是在这个例子的基础上继续开发的这个音乐播放器)
结果还不错,功能一切正常。
gemin1.5 pro 002 + deepseek
aider --model gemini/gemini-1.5-pro-002 --architect --editor-model deepseek/deepseek-coder
就上面这行命令不一样,其他的都一样的,我们直接上过程demo
Create a To-do App using HTML, CSS JS.
效果还是不错的,主要gemini1.5 api还是免费的https://aistudio.google.com/。
对了deepseek api去官网注册领取即可,有免费额度。
其他你想使用 ollama 的 型其实过往的文章我都是有介绍过的,有很多aider相关的文章。
公众号手机端进入点右上角的搜索就可以搜索到过往文章。
完整结果
以下是使用各种模型作为架构师并与各种模型作为编辑器配对的基准测试结果。每个部分都包含一个“基线”结果,其中模型在 aider 的正常“代码”编辑模式下独立运行(不是作为架构师/编辑器配置的一部分)。这个“单独”基线代表了之前将此模型与 aider 一起使用时可获得的性能。
aider所有命令我放在这;
options:
选项:
-h, --help 显示此帮助信息并退出
-h,--help 显示此帮助信息并退出
Main:
主要:
FILE 要用 LLM 编辑的文件(可选)
--openai-api-key OPENAI_API_KEY
指定 OpenAI API 密钥 [环境变量:OPENAI_API_KEY]
--anthropic-api-key ANTHROPIC_API_KEY
指定 Anthropic API 密钥 [环境变量:ANTHROPIC_API_KEY]
--model MODEL 指定用于主要聊天的模型 [环境变量:AIDER_MODEL]
--opus 使用 claude-3-opus-20240229 模型进行主要聊天 [环境变量:AIDER_OPUS]
--sonnet 使用 claude-3-5-sonnet-20240620 模型进行主要聊天 [环境变量:AIDER_SONNET]
--4, -4 使用 gpt-4-0613 模型进行主要聊天 [环境变量:AIDER_4]
--4o 使用 gpt-4o-2024-08-06 模型进行主要聊天 [环境变量:AIDER_4O]
--mini 使用 gpt-4o-mini 模型进行主要聊天 [环境变量:AIDER_MINI]
--4-turbo 使用 gpt-4-1106-preview 模型进行主要聊天 [环境变量:AIDER_4_TURBO]
--35turbo, --35-turbo, --3, -3
使用 gpt-3.5-turbo 模型进行主要聊天 [环境变量:AIDER_35TURBO]
--deepseek 使用 deepseek/deepseek-coder 模型进行主要聊天 [环境变量:AIDER_DEEPSEEK]
--o1-mini 使用 o1-mini 模型进行主要聊天 [环境变量:AIDER_O1_MINI]
--o1-preview 使用 o1-preview 模型进行主要聊天 [环境变量:AIDER_O1_PREVIEW]
Model Settings:
模型设置:
--list-models MODEL, --models MODEL
列出匹配(部分)模型名称的已知模型 [环境变量:AIDER_LIST_MODELS]
--openai-api-base OPENAI_API_BASE
指定 API 基础 URL [环境变量:OPENAI_API_BASE]
--openai-api-type OPENAI_API_TYPE
指定 api_type [环境变量:OPENAI_API_TYPE]
--openai-api-version OPENAI_API_VERSION
指定 api_version [环境变量:OPENAI_API_VERSION]
--openai-api-deployment-id OPENAI_API_DEPLOYMENT_ID
指定 deployment_id [环境变量:OPENAI_API_DEPLOYMENT_ID]
--openai-organization-id OPENAI_ORGANIZATION_ID
指定 OpenAI 组织 ID [环境变量:OPENAI_ORGANIZATION_ID]
--model-settings-file MODEL_SETTINGS_FILE
指定包含未知模型设置的文件 [环境变量:AIDER_MODEL_SETTINGS_FILE]
--model-metadata-file MODEL_METADATA_FILE
指定包含未知模型的上下文窗口和成本的文件 [环境变量:AIDER_MODEL_METADATA_FILE]
--verify-ssl, --no-verify-ssl
连接到模型时验证 SSL 证书(默认:True) [环境变量:AIDER_VERIFY_SSL]
--edit-format EDIT_FORMAT, --chat-mode EDIT_FORMAT
指定 LLM 应使用的编辑格式(默认取决于模型) [环境变量:AIDER_EDIT_FORMAT]
--architect 在主要聊天中使用 architect 编辑格式 [环境变量:AIDER_ARCHITECT]
--weak-model WEAK_MODEL
指定用于提交消息和聊天历史摘要的模型(默认取决于 --model) [环境变量:AIDER_WEAK_MODEL]
--editor-model EDITOR_MODEL
指定用于编辑器任务的模型(默认取决于 --model) [环境变量:AIDER_EDITOR_MODEL]
--editor-edit-format EDITOR_EDIT_FORMAT
指定编辑器模型的编辑格式(默认:取决于编辑器模型) [环境变量:AIDER_EDITOR_EDIT_FORMAT]
--show-model-warnings, --no-show-model-warnings
仅与具有可用元数据的模型一起使用(默认:True) [环境变量:AIDER_SHOW_MODEL_WARNINGS]
--max-chat-history-tokens MAX_CHAT_HISTORY_TOKENS
聊天历史中使用的最大令牌数。如果未指定,则使用模型的 max_chat_history_tokens。[环境变量:AIDER_MAX_CHAT_HISTORY_TOKENS]
--env-file ENV_FILE 指定要加载的 .env 文件(默认:git 根目录中的 .env) [环境变量:AIDER_ENV_FILE]
Cache Settings:
缓存设置:
--cache-prompts, --no-cache-prompts
启用缓存提示(默认:False) [环境变量:AIDER_CACHE_PROMPTS]
--cache-keepalive-pings CACHE_KEEPALIVE_PINGS
每 5 分钟间隔 ping 的次数,以保持提示缓存温暖(默认:0) [环境变量:AIDER_CACHE_KEEPALIVE_PINGS]
Repomap Settings:
映射设置:
--map-tokens MAP_TOKENS
建议用于 repo 映射的令牌数量,使用 0 禁用(默认:1024) [环境变量:AIDER_MAP_TOKENS]
--map-refresh {auto,always,files,manual}
控制 repo 映射的刷新频率。选项:自动、始终、文件、手动(默认:自动) [环境变量:AIDER_MAP_REFRESH]
--map-multiplier-no-files MAP_MULTIPLIER_NO_FILES
当未指定文件时,映射令牌的乘数(默认:2) [环境变量:AIDER_MAP_MULTIPLIER_NO_FILES]
History Files:
历史文件:
--input-history-file INPUT_HISTORY_FILE
指定聊天输入历史文件(默认:.aider.input.history) [环境变量:AIDER_INPUT_HISTORY_FILE]
--chat-history-file CHAT_HISTORY_FILE
指定聊天历史文件(默认:.aider.chat.history.md) [环境变量:AIDER_CHAT_HISTORY_FILE]
--restore-chat-history, --no-restore-chat-history
恢复以前的聊天历史消息(默认:False) [环境变量:AIDER_RESTORE_CHAT_HISTORY]
--llm-history-file LLM_HISTORY_FILE
将与 LLM 的对话记录到此文件中(例如,.aider.llm.history) [环境变量:AIDER_LLM_HISTORY_FILE]
Output Settings:
输出设置:
--dark-mode 使用适合深色终端背景的颜色(默认:False) [环境变量:AIDER_DARK_MODE]
--light-mode 使用适合浅色终端背景的颜色(默认:False) [环境变量:AIDER_LIGHT_MODE]
--pretty, --no-pretty
启用/禁用漂亮的彩色输出(默认:True) [环境变量:AIDER_PRETTY]
--stream, --no-stream
启用/禁用流式响应(默认:True) [环境变量:AIDER_STREAM]
--user-input-color USER_INPUT_COLOR
设置用户输入的颜色(默认:#00cc00) [环境变量:AIDER_USER_INPUT_COLOR]
--tool-output-color TOOL_OUTPUT_COLOR
设置工具输出的颜色(默认:无) [环境变量:AIDER_TOOL_OUTPUT_COLOR]
--tool-error-color TOOL_ERROR_COLOR
设置工具错误消息的颜色(默认:#FF2222) [环境变量:AIDER_TOOL_ERROR_COLOR]
--tool-warning-color TOOL_WARNING_COLOR
设置工具警告消息的颜色(默认:#FFA500) [环境变量:AIDER_TOOL_WARNING_COLOR]
--assistant-output-color ASSISTANT_OUTPUT_COLOR
设置助手输出的颜色(默认:#0088ff) [环境变量:AIDER_ASSISTANT_OUTPUT_COLOR]
--completion-menu-color COLOR
设置完成菜单的颜色(默认:终端默认文本颜色) [环境变量:AIDER_COMPLETION_MENU_COLOR]
--completion-menu-bg-color COLOR
设置完成菜单的背景颜色(默认:终端默认背景颜色) [环境变量:AIDER_COMPLETION_MENU_BG_COLOR]
--completion-menu-current-color COLOR
设置完成菜单中当前项的颜色(默认:终端默认背景颜色) [环境变量:
AIDER_COMPLETION_MENU_CURRENT_COLOR]
--completion-menu-current-bg-color COLOR
设置完成菜单中当前项的背景颜色(默认:终端默认文本颜色) [环境变量:
AIDER_COMPLETION_MENU_CURRENT_BG_COLOR]
--code-theme CODE_THEME
设置 markdown 代码主题(默认:default,其他选项包括 monokai、solarized-dark、solarized-light) [环境变量:AIDER_CODE_THEME]
--show-diffs 提交更改时显示差异(默认:False) [环境变量:AIDER_SHOW_DIFFS]
Git Settings:
Git 设置:
--git, --no-git 启用/禁用查找 git repo(默认:True) [环境变量:AIDER_GIT]
--gitignore, --no-gitignore
启用/禁用将 .aider* 添加到 .gitignore(默认:True) [环境变量:AIDER_GITIGNORE]
--aiderignore AIDERIGNORE
指定 aider 忽略文件(默认:git 根目录中的 .aiderignore) [环境变量:AIDER_AIDERIGNORE]
--subtree-only 仅考虑 git 仓库当前子树中的文件 [环境变量:AIDER_SUBTREE_ONLY]
--auto-commits, --no-auto-commits
启用/禁用 LLM 更改的自动提交(默认:True) [环境变量:AIDER_AUTO_COMMITS]
--dirty-commits, --no-dirty-commits
启用/禁用在仓库发现脏文件时进行提交(默认:True) [环境变量:AIDER_DIRTY_COMMITS]
--attribute-author, --no-attribute-author
在 git 作者名称中标记 aider 代码更改(默认:True) [环境变量:AIDER_ATTRIBUTE_AUTHOR]
--attribute-committer, --no-attribute-committer
在 git 提交者名称中标记 aider 提交(默认:True) [环境变量:AIDER_ATTRIBUTE_COMMITTER]
--attribute-commit-message-author, --no-attribute-commit-message-author
如果 aider 创建了更改,则在提交消息前添加 'aider: '(默认:False) [环境变量:AIDER_ATTRIBUTE_COMMIT_MESSAGE_AUTHOR]
--attribute-commit-message-committer, --no-attribute-commit-message-committer
在所有提交消息前添加 'aider: '(默认:False) [环境变量:AIDER_ATTRIBUTE_COMMIT_MESSAGE_COMMITTER]
--commit 提交所有待处理更改并适当提交消息,然后退出 [环境变量:AIDER_COMMIT]
--commit-prompt PROMPT
指定生成提交消息的自定义提示 [环境变量:AIDER_COMMIT_PROMPT]
--dry-run, --no-dry-run
进行干运行而不修改文件(默认:False) [环境变量:AIDER_DRY_RUN]
Fixing and committing:
修复和提交:
--lint 检查并修复提供的文件,或如果未提供文件则检查脏文件 [环境变量:AIDER_LINT]
--lint-cmd LINT_CMD 指定不同语言要运行的 lint 命令,例如:“python: flake8 --select=...” (可以多次使用) [环境变量:AIDER_LINT_CMD]
--auto-lint, --no-auto-lint
启用/禁用更改后的自动 lint(默认:True) [环境变量:AIDER_AUTO_LINT]
--test-cmd TEST_CMD 指定要运行的测试命令 [环境变量:AIDER_TEST_CMD]
--auto-test, --no-auto-test
启用/禁用更改后的自动测试(默认:False) [环境变量:AIDER_AUTO_TEST]
--test 运行测试并修复发现的问题 [环境变量:AIDER_TEST]
Other Settings:
其他设置:
--file FILE 指定要编辑的文件(可以多次使用) [环境变量:AIDER_FILE]
--read FILE 指定只读文件(可以多次使用) [环境变量:AIDER_READ]
--vim 在终端中使用 VI 编辑模式(默认:False) [环境变量:AIDER_VIM]
--chat-language CHAT_LANGUAGE
指定聊天中使用的语言(默认:无,使用系统设置) [环境变量:AIDER_CHAT_LANGUAGE]
--version 显示版本号并退出
--just-check-update 检查更新并在退出代码中返回状态 [环境变量:AIDER_JUST_CHECK_UPDATE]
--check-update, --no-check-update
启动时检查新 aider 版本 [环境变量:AIDER_CHECK_UPDATE]
--install-main-branch
从主分支安装最新版本 [环境变量:AIDER_INSTALL_MAIN_BRANCH]
--upgrade, --update 将 aider 升级到最新版本 [环境变量:AIDER_UPGRADE]
--apply FILE 从给定文件应用更改,而不是运行聊天(调试) [环境变量:AIDER_APPLY]
--yes 对每个确认始终选择是 [环境变量:AIDER_YES]
-v, --verbose 启用详细输出 [环境变量:AIDER_VERBOSE]
--show-repo-map 打印 repo 映射并退出(调试) [环境变量:AIDER_SHOW_REPO_MAP]
--show-prompts 打印系统提示并退出(调试) [环境变量:AIDER_SHOW_PROMPTS]
--exit 完成所有启动活动后退出,等待用户输入(调试) [环境变量:AIDER_EXIT]
--message COMMAND, --msg COMMAND, -m COMMAND
指定要发送给 LLM 的单个消息,处理回复然后退出(禁用聊天模式) [环境变量:AIDER_MESSAGE]
--message-file MESSAGE_FILE, -f MESSAGE_FILE
指定包含要发送给 LLM 的消息的文件,处理回复然后退出(禁用聊天模式) [环境变量:AIDER_MESSAGE_FILE]
--encoding ENCODING 指定输入和输出的编码(默认:utf-8) [环境变量:AIDER_ENCODING]
-c CONFIG_FILE, --config CONFIG_FILE
指定配置文件(默认:在 git 根目录、当前工作目录或主目录中搜索 .aider.conf.yml)
--gui, --browser 在浏览器中运行 aider [环境变量:AIDER_GUI]
--suggest-shell-commands, --no-suggest-shell-commands
启用/禁用建议 shell 命令(默认:True) [环境变量:AIDER_SUGGEST_SHELL_COMMANDS]
Voice Settings:
语音设置:
--voice-format VOICE_FORMAT
语音录音的音频格式(默认:wav)。webm 和 mp3 需要 ffmpeg [环境变量:AIDER_VOICE_FORMAT]
--voice-language VOICE_LANGUAGE
使用 ISO 639-1 代码指定语音语言(默认:自动) [环境变量:AIDER_VOICE_LANGUAGE]
以'--'开头的参数也可以在配置文件中设置(C:\Users\Aitrainee\.aider.conf.yml 或 C:\Users\Aitrainee\.aider.conf.yml 或通过 -c 指定)。配置文件语法允许:key=value,flag=true,stuff=[a,b,c] (有关详细信息,请参见 https://goo.gl/R74nmi)。一般而言,命令行值覆盖环境变量,环境变量覆盖配置文件值,配置文件值覆盖默认值。
学习AI,某种程度上像是在培养另一个‘自己’。它需要耐心、实践和不断修正。这个实战训练营并不是要你成为AI的‘创造者’,而是帮助你成为更高效的‘合作者’,一起探讨智能的未来。