对!我也觉得把前后端做得更分离一点就完美了,之后有机会看看上游有没有我能贡献的地方。
其实我对Aidermacs未来的构想和EAF以及lsp-bridge有些类似,把Emacs解放出来。
aidermacs 能配置三方的deepseek 比如硅基流动 或者火山引擎的
可以,它的配置是设置 env 变量,具体参考 aider 文档。
siliconflow 这类和 OpenAI API 适配的,可以参考 OpenAI compatible APIs 进行配置。
需要注意的是,模型需要加上 openai
的前缀。
(with-eval-after-load 'aider
(setq aider-args '("--no-auto-commits" "--model" "openai/Pro/deepseek-ai/DeepSeek-V3"))
(setenv "OPENAI_API_KEY" (spike-leung/get-siliconflow-api-key))
(setenv "OPENAI_API_BASE" "https://api.siliconflow.cn")
aider 依赖 litellm 提供 llm 的 provider,如果你擅长 python,也可以提个 PR 把 siliconflow 添加到 provider 中,就更方便使用了 :)
今天又重构了一堆函数,增加了几个新功能:
M-x aidermacs-add-files-interactively
aidermacs-default-model
设置默认aidermacs-extra-args
作为用户可自定义的额外argsaidermacs-args
删啦,已经没用啦(setq aidermacs-args '("--model" "anthropic/claude-3-5-sonnet-20241022"))
-> (setq aidermacs-default-model "anthropic/claude-3-5-sonnet-20241022")
我每个项目的根目录下面有自己的 aider 配置文件 .aider.conf.yml
,里面定义了模型参数,那我应该怎么配置?
感觉比较合理的设置应该是当这个模型的变量为 nil 时,在 launch aider 时生成的 args 就不带 --model
这个参数。目前的代码里还没有考虑到这种情形。
建议 aidermacs 裸配置的情况下跟 aider 无配置的行为保持一致,可以做一些 enable、disable 的参数wrapper,但默认情况下是不污染命令行、环境变量,不要 suprise 用户,文档里给些设置用例就够了。
我没有用过.aider.conf.yml
所以没考虑过这个情况,稍等哈我思考一下,我先上线一个新功能
(setq aidermacs-use-architect-mode t)
(setq aidermacs-architect-model "o1-mini") ; default
(setq aidermacs-editor-model "anthropic/claude-3-5-sonnet-20241022") ; default
Reasoner/Edit 模型分离是 Aider上游提供的一个 显著提升LLM代码benchmark的方式,目前可以通过设置 aidermacs-use-architect-mode
来启用,启用后会无视 aidermacs-default-model
的设置。
目前Aidermacs调整的参数有这些:
/Users/matthewzmd/.emacs.d/straight/repos/aidermacs/aidermacs-backend-vterm.el
85:22: "--dark-mode"
86:20: "--light-mode"))
/Users/matthewzmd/.emacs.d/straight/repos/aidermacs/aidermacs-backend-comint.el
232:34: (args (append args (list "--no-pretty" "--no-fancy-input"))))
/Users/matthewzmd/.emacs.d/straight/repos/aidermacs/aidermacs.el
227:60: (has-model-arg (seq-position aidermacs-extra-args "--model"))
230:31: (list "--architect"
231:31: "--model" aidermacs-architect-model
232:31: "--editor-model" aidermacs-editor-model))
235:33: (list "--model" aidermacs-default-model)))
237:27: '("--no-auto-commits"))
239:27: '("--subtree-only"))
其中
--dark-mode/light-mode
仅应用于vterm,根据你emacs的模式自动调整。--no-pretty
和 --no-fancy-input
都是用来处理在comint下的显示效果剩下 --architect, --model, --editor-model, --subtree-only
都有对应的Emacs变量来启用,默认关闭,和Aider默认一致。
只有 aidermacs-auto-commits
我默认关闭了,和Aider默认不一致,因为我交流下来,很多人被Aider劝退就是Aider的强制 commit,然后在还没了解到--no-auto-commits
就弃坑了。基于这种原因我关掉了。
我对Aidermacs的构想是以用户体验和Emacs集成为主要目标,Aider默认我尽量不动,但如果默认功能我觉得对用户体验是负面的,我才会调整。嗯非常非常主观,目前只有aidermacs-auto-commits
得到这个级别的待遇,所以听听你们想法。
还有个折中的方案,在defcustom启用aidermacs-auto-commits
但是把(setq aidermacs-auto-commits t)
写到README的推荐配置里,大家怎么看?
有个简单粗暴的方式是,当检测到用户有 .aider.conf.yml
,默认用户是高级aider玩家,这部分代码直接略过,完全采用用户配置文件:
(final-args (append
(when aidermacs-use-architect-mode
(list "--architect"
"--model" aidermacs-architect-model
"--editor-model" aidermacs-editor-model))
(unless aidermacs-use-architect-mode
(unless has-model-arg
(list "--model" aidermacs-default-model)))
(unless aidermacs-auto-commits
'("--no-auto-commits"))
(when aidermacs-subtree-only
'("--subtree-only"))
aidermacs-extra-args))
或者说只略过--model
,--editor-model
,和--architect
的设置?其他设置照样apply?
你们怎么看
aider-architect-model aider-editor-model 默认设置为 nil,当非空时就生成相对应的命令行参数怎么样?
这样不需要两个 use-xxx 和 xxx-model 两个参数来做同样的事情
no-auto-commits 默认设置为 t 我觉得问题不大,因为这个也好改。
或者就只需要一个 variable aider-model,这个变量为空时就不插入 —model 的命令行参数。当是一个 string 时就插入 —model,当是一个 plist 时,就插入 —architect-model 和 —editor-model。
可以,你有空提个PR吧,conf文件测试没问题我睡醒了合并
这个有点复杂了,runtime替换model和切换architect mode以及用户配置都得动态调整,感觉不是很intuitive?
对我来说只要solution能平衡好functionality, configurability, usability, intuitiveness,我都可以
我个人的话会倾向于不提供任何 llm, provider 相关的默认配置,只在文档中引导用户如何配置
比如目前我的个人配置像这样:
(use-package aidermacs
:vc (:url "https://github.com/MatthewZMD/aidermacs"
:ignored-files
"aidermacs-doom.el"
"aidermacs-helm.el")
:bind ("C-c a" . aidermacs-transient-menu)
:config
;; Code mode by default
(setq aidermacs-extra-args '("--model" "openrouter/google/gemini-2.0-flash-001"))
;; Architect mode by default
;; (setq aidermacs-extra-args '("--architect"
;; "--model" "deepseek/deepseek-reasoner"
;; "--editor-model" "deepseek/deepseek-chat"))
;; More aider config options, please check `https://aider.chat/docs/config/options.html'
(setenv "DEEPSEEK_API_KEY" (auth-source-pick-first-password :host "api.deepseek.com"))
(setenv "OPENROUTER_API_KEY" (auth-source-pick-first-password :host "openrouter.ai"))
(setenv "AIDER_AUTO_COMMITS" "False") ;; Disable auto commit of LLM changes
(setenv "AIDER_CHAT_LANGUAGE" "Chinese") ;; Specify the language to use in the chat
(setq aidermacs-backend 'vterm))
我记得Aider默认指向claude 3.5 sonnet的
对,我就是不是很喜欢之前全部只用一个args来设置所以才abstract到各个variable,对用户增加太多学习成本了
我把常用的arg做成variable方便懒得看doc的用户直接按照emacs的setq习惯配置,喜欢研究doc的朋友可以接着衍生aidermacs-extra-args
我觉得不用管官方自己的默认,用户只要去官方那查询配置项就行,emacs端做个信息桥接以及展示就够了。