coding with aider-caht

# ai

最近用這個 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跟建議安裝什麼輔助測試套件。

/img/2024-11-21_18-27-18_screenshot.png

另外就是 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~

/img/%E7%94%A8_rust_%E7%B0%A1%E5%96%AE%E7%9A%84_project_%E4%BE%86%E7%A4%BA%E7%AF%84/2024-11-22_13-50-12_screenshot.png

給的回應也是不錯,算是上上選 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這把雙面刃到底會爲這個世界帶來怎樣的改變呢? 讓我們繼續看下去。

If you like my content,

feel free to buy me a coffee

Enjoy crafting new things

Never stop learning.

Life is the sum of your daily habits.

Find things that you enjoy and please

Doit.

Feel free to connect with me.

Created by potrace 1.16, written by Peter Selinger 2001-2019

© Jing 2024. All rights reserved.