coding with aider-caht
最近用這個 AI tool aider ,來幫助開發算是感覺還不錯,目前在emacs開發的時候,大部分都是用這個工具來協助,要不然用vscode的人應該都是用 cline 了吧? 或是有些人直接換成用 cursor editor! 我是沒用過那些啦,身邊大部分的都是用 cursor, 我個人目前就用 aider 而已,畢竟在 terminal 用,感覺比較像 hacker lol? 其實主要原因是這套工具比較可以控制,你要讓他讀什麼資料,幫忙產生相對範圍比較精準的結果,但是就是用起來比較沒那麼自動化的感覺,不過其實用什麼 model 還是最重要的,只能說現在就是只有 claude 跟 chatgpt 這兩家才比較好用~ 但是就是要錢錢~
身爲免費仔的使用方式
目前爲止,看了看跟使用起來,大概只有 https://mistral.ai/ 有提供足夠用的免費 API 跟 context size,但是他有特別說明,要用免費版的,就是你的資料會被拿去使用,另外申請API key 上沒什麼特別要注意的,就按一按就有了。關於資料會被拿去使用,我想了想,就算是那些要付費的,也是偷偷拿去訓練資料吧~ 要不然 claude 跟 chatgpt 怎 model 進步這麼快,我只能說對於比較敏感的資料大家就不要亂使用了,要不然就是你本地自己用 open source model 來用,只是我之前用起來就是確實準確度還是差了不少!
如果有更好用的免費API也可以自己去申請,順便看看 aider caht 有沒有支援(它支援很多通常會有),接下來就是下指令讓adier 去使用你剛剛申請的 mistrl ai api
export MISTRAL_API_KEY=<your key>
aider --model mistral/mistral-large-latest
然後就可以開始玩玩看了,下面我用 rust 小專案實驗。
用 rust 簡單的 project 來示範
這邊是身爲一個沒怎麼學過 Rust 的我,向AI請教怎麼幫我的 rcat 專案(一個小小的 cmd tool),寫 integration tests,我這裡使用 aider-caht 提供的 architect mode,看他給的解答,然後其實他後面也有給code跟建議安裝什麼輔助測試套件。
另外就是 mistral 產生結果的時候有點慢,很常需要等個一兩分鐘才會有結果出來。。 剛好拿這段時間讓眼睛休息一下? 現在的體感拿來幫忙產生測試算是不錯,幾乎不太有什麼大問題,雖然有時候還是會錯就是了 lol 反而有時候在找到底錯哪裡花了一點時間,有點像是陷入錯誤引導的感覺,乍看似乎都對,但是要很仔細看才知道哪裡被雷到。
#[test]
fn test_rcat_file() {
let temp_file = tempfile::NamedTempFile::new().unwrap();
let temp_path = temp_file.path().to_str().unwrap().to_string();
fs::write(&temp_path, "Hello, world!\n").unwrap();
let mut cmd = Command::cargo_bin("rcat").unwrap();
cmd.arg(&temp_path);
cmd.assert()
.success()
.stdout(predicate::str::contains("Hello, world!\n"));
}
#[test]
fn test_rcat_stdin() {
let mut cmd = Command::cargo_bin("rcat").unwrap();
cmd.arg("-");
cmd.write_stdin("Hello, world!\n")
.assert()
.success()
.stdout(predicate::str::contains("Hello, world!\n"));
}
#[test]
fn test_rcat_number_lines() {
let temp_file = tempfile::NamedTempFile::new().unwrap();
let temp_path = temp_file.path().to_str().unwrap().to_string();
fs::write(&temp_path, "Line 1\nLine 2\n").unwrap();
let mut cmd = Command::cargo_bin("rcat").unwrap();
cmd.arg("-n").arg(&temp_path);
cmd.assert()
.success()
.stdout(predicate::eq(" 1 Line 1\n 2 Line 2\n"));
}
#[test]
fn test_rcat_show_ends() {
let temp_file = tempfile::NamedTempFile::new().unwrap();
let temp_path = temp_file.path().to_str().unwrap().to_string();
fs::write(&temp_path, "Line 1\nLine 2\n").unwrap();
let mut cmd = Command::cargo_bin("rcat").unwrap();
cmd.arg("--show-ends").arg(&temp_path);
cmd.assert()
.success()
.stdout(predicate::eq("Line 1$\nLine 2$\n"));
}
#[test]
fn test_rcat_number_nonblank_lines() {
let temp_file = tempfile::NamedTempFile::new().unwrap();
let temp_path = temp_file.path().to_str().unwrap().to_string();
fs::write(&temp_path, "Line 1\n\nLine 2\n").unwrap();
let mut cmd = Command::cargo_bin("rcat").unwrap();
cmd.arg("-b").arg(&temp_path);
cmd.assert()
.success()
.stdout(predicate::eq(" 1 Line 1\n\n 2 Line 2\n"));
}
姑且不論正確性,光是它讀我的code,就能夠猜出大概測試應該要長怎樣,確實還算不賴,如果我用的付費的model可能會更順也說不定,也難怪有聽朋友用 cursor + claude,他說現在他寫code幾乎都是AI幫忙~ 我後來有稍微測試了一下,用 mistral ai 來 refactor 這個專案code,他給了一個看起來煞有其事的code lol 實際上邏輯有問題,但是我丟到 claude 叫它 refactor,給的就是正確的! 精準度果然高上不少,也難怪連 aider chat 自己官方都推薦用 claude , 請看這邊 https://aider.chat/docs/llms.html。
GPT-4o
Claude 3.5 Sonnet
Claude 3 Opus
DeepSeek Coder V2
這幾個是官方目前推薦的。
接著來問看看怎麼寫 benchmark~
給的回應也是不錯,算是上上選 https://nnethercote.github.io/perf-book/benchmarking.html ,老樣子不是開箱即用,還是有些地方要自己調整,其中像是 Cargo.toml 要加下面這段
[[bench]]
name = "benchmark"
harness = false
這部分看官方網站就有說明了,只能說目前AI coding方面,後端部分體感上還是容易出現有問題的程式碼,前端倒是很少出現問題,相信以後AI會越來越好用的,現在都出現一堆 no code 的工具,像是圖片自動轉前端的程式碼,等到連後端都可以輕鬆 spec 轉成 business code 後,或許還真的有機會靠嘴巴一條龍產業鏈呢 lol
感想
現在還是專注當前吧! 不需要過度去幻想AI到底會如何,我們不是那些開發AI的人,這不是我們該擔心的部分,反而我們是要瞭解它現在可以爲你帶來什麼幫助。
目前爲止我都只有拿來用程式跟學習方面,但是其實各個不同領域的應用也都很值得嘗試,我個人覺得學習方面的幫助很有感,當然要注意AI是不是會給你錯誤的資訊,但是它厲害的給你的方向性跟統整性,藉由你跟它對話這樣一句一句迭代下去,你的學習更有深入感,因爲你得到資訊的同時,你在想著其他可能性,然後就會繼續的發問,一問一答的互動,才是有效的學習方式,不禁感慨以前學習,都是跟書本爲伍,或是幾乎單方面聽老師講課,畢竟老師一個人要面對很多人,總不可能開分身術跟你一對一互動吧,所以教學方式就很制式化,即使課堂有試驗,還是屬於一個呆板的互動,學習體驗差很多啊~
我相信教育應該會因爲AI的關係衝擊不小~ AI這把雙面刃到底會爲這個世界帶來怎樣的改變呢? 讓我們繼續看下去。