標籤: 本地程式助手

  • 把舊遊戲卡變成本地 AI 程式助手

    把舊遊戲卡變成本地 AI 程式助手

    📌 本文重點

    • 16GB 顯卡即可本地跑 Qwen 3.8-27B 程式助手
    • llama.cpp + MTP 把長上下文推理速度壓到可用
    • 少數高階指令即可讓 Agent 自動讀 repo、寫 code、跑測試

    用一張 16GB 顯卡,把 Qwen 3.8-27B 跑在自己機器上,變成一個能讀 repo、寫 code、自己跑測試的本地程式助手。


    核心功能:這套組合能幫你做什麼?

    1. 在 16GB 顯卡上跑 27B 長上下文 Agent

    • Qwen 3.8-27B 是阿里開源的大模型,在 Reddit 實測 裡,表現接近商用雲端模型,特別擅長長上下文推理和實務知識。
    • 社群已針對 16GB VRAM 做過完整配置分享,可在 73k context 下跑 agentic coding,單專案可吃超過百萬 token 歷史。參考設定。
    • 透過 GGUF 量化 + cache 量化,搭配 CPU RAM,把 27B 模型擠進「遊戲卡 + 小主機」這種平價組合。

    💡 關鍵: 只要 16GB 顯卡就能在本地處理 73k 以上長上下文,支援單專案百萬 token 歷史。

    你可以做的:
    – 把原本只能打遊戲的 16GB 顯卡,變成一台完全離線的 AI 程式助手。
    – 不依賴雲端,內網就能讓 AI 幫你寫 CLI 工具、重構專案。


    2. llama.cpp v0.1.0 + FastMTP / adaptive MTP:把延遲壓到能用

    • llama.cpp v0.1.0 是穩定版,支援多平台(Windows / Linux / macOS / Apple Silicon),對 GGUF 模型友善。版本連結
    • HauhauCS 的 FastMTP(多 token 預測)在 Qwen 3.8-27B 上可達 3 倍輸出速度提升:模型頁面。
    • llama.cpp 的 adaptive MTP(PR#27210)會依情境自動調整 MTP 深度:簡單部分快出,多步推理時才放慢,代碼生成速度可提升 10–50%。

    💡 關鍵: 結合 FastMTP 與 adaptive MTP,可以把原本「一秒一 token」的體驗提升到實際可用的程式生成速度。

    你可以做的:
    – 在同一台機器上,從「一秒一 token」變成「可以實際用來寫 code」的速度。
    – 不用糾結 MTP 數字,用 adaptive 模式就能有不錯的平衡。


    3. 真正的「Agent」:少數幾個高階提示就能跑完整專案

    • Qwen 3.8-27B 在所謂 medium reasoning 模式下,對「代理式編碼」特別吃香:實測 benchmark 顯示,比 xhigh 模式更省 token、更少請求,完成度相近。
    • 你只要給它幾個高階指令(例如:讀 repo、規劃任務、按計畫實作),讓它自己呼叫 shell/測試,就能完成一個小專案。

    你可以做的:
    – 把它當成「本地版 Cursor Agent」:讓它自己看專案、拆任務、寫程式、跑測試。


    適合誰用?

    • 個人開發者 / 接案工程師:
    • 想用 Qwen 3.8-27B 協助寫後端 / CLI 工具,但又不想每月付雲端費用。
    • 例:在家用 3060 16GB + N100 補一台小主機,做本地私有助手。

    • 公司內部專案:

    • 需要把專案 code、內部文件給 LLM 看,但有資料不出防火牆的限制。
    • 例:在 CI/CD server 上掛一個 Qwen Agent,協助寫腳本、改 pipeline。

    • AI 工具愛好者 / 自架控:

    • 喜歡試不同量化、推理引擎,把效能擠到極限。
    • 例:對比 medium reasoning + adaptive MTP vs xhigh + 固定 MTP 的速度與品質差異。

    工具與環境:一次給你可複製的配置

    1. 必要硬體與系統建議

    最低建議(接近 Reddit 實測環境):

    • GPU:RTX 4060/5060 Ti 16GB,或同級 16GB 顯卡
    • CPU:Intel N100 以上(有 AVX2 更好)
    • RAM:32GB(推薦 48GB+,上下文拉長時更穩)
    • 系統:Ubuntu 22.04 / Windows 11(本文以 Linux 命令為例)

    行動:檢查自己機器:

    nvidia-smi  # 看 VRAM 容量
    free -h     # 看 RAM
    

    2. 模型與 llama.cpp 安裝

    Step 1:抓 llama.cpp v0.1.0

    git clone https://github.com/ggml-org/llama.cpp.git
    cd llama.cpp
    git checkout v0.1.0
    make -j$(nproc)
    

    Step 2:下載 Qwen 3.8-27B GGUF

    建議用 HauhauCS Aggressive + MTP 版本:

    下載範例(用 hf_hub_download 或直接瀏覽器下載):

    mkdir -p models/qwen-3.8-27b
    # 將下載好的 .gguf 放進這個資料夾
    mv ~/Downloads/Qwen3.8-27B-*-Q5_K_M.gguf models/qwen-3.8-27b/
    

    3. 實測好用的啟動指令(16GB VRAM)

    下面是一個可直接用來跑 Agent 的作者實測配置(參考自 1M+ token 實作):

    ./bin/llama-server \
      -m models/qwen-3.8-27b/Qwen3.8-27B-*-Q5_K_M.gguf \
      --ctx-size 73000 \
      --batch-size 512 \
      --n-gpu-layers 45 \
      --gpu-layers-split auto \
      --cache-type-k q8_0 \
      --cache-type-v q8_0 \
      --no-mmap \
      --temp 0.8 \
      --top_p 0.9 \
      --seed 42 \
      --mtl 4 \
      --mtp-adaptive
    

    關鍵說明:

    • --ctx-size 73000:長上下文,適合讀整個 repo。
    • --cache-type-k/v q8_0:cache 量化,換取更大上下文與速度。
    • --mtp-adaptive:啟用 adaptive MTP,自動調整多 token 推理深度。
    • --mtl 4:多執行緒,視 CPU 調整(8 核可用 6–8)。

    行動:啟動後,瀏覽器開 http://localhost:8080,確認模型可以互動,再往下走 Agent Workflow。


    Workflow 示範:讓本地 Qwen 自己寫一個 CLI 工具

    目標:寫一個「掃描專案中 TODO 註解並輸出報表」的 Python CLI 工具,讓 Agent 自己:

    1. 讀 repo
    2. 規劃任務
    3. 分步撰碼
    4. 呼叫 pytest 或自訂測試

    1. 準備一個 repo + agent shell

    假設你的專案在 ~/projects/todo-cli:

    cd ~/projects/todo-cli
    python -m venv .venv
    source .venv/bin/activate
    pip install pytest
    

    準備一個簡單的「Agent shell」腳本(例如 agent_shell.py),透過 HTTP 調用 llama.cpp,並允許它執行有限制的 shell 指令:

    import subprocess, json, requests, os
    
    API_URL = "http://localhost:8080/completion"
    
    ALLOWED_CMDS = ["pytest", "python", "ls", "cat"]
    
    def call_llm(prompt):
        payload = {
            "prompt": prompt,
            "max_tokens": 512,
            "temperature": 0.7
        }
        r = requests.post(API_URL, json=payload)
        return r.json()["content"]
    
    def run_cmd(cmd):
        if cmd.split()[0] not in ALLOWED_CMDS:
            return "[blocked command]"
        return subprocess.run(cmd, shell=True, capture_output=True, text=True).stdout
    
    if __name__ == "__main__":
        while True:
            user = input("You> ")
            if user.strip() == "exit":
                break
            resp = call_llm(user)
            print("Agent>", resp)
    

    行動:確保你能從命令列下指令,讓 Agent 先以「聊天模式」回答,再逐步加上工具使用(shell 執行)。


    2. 用高階提示引導 Qwen 變成程式助手

    示範系統提示(可貼進 Web UI 或 agent_shell 的第一個請求):

    你是一位本地程式助手,目標是在不依賴外網的情況下,完成整個專案開發流程。
    
    能力與規則:
    1. 你可以要求我執行指令,例如:`RUN: pytest`、`RUN: ls`、`RUN: cat filename`。
    2. 每次回答時,如果需要實際操作,請先說明要做什麼,再給出一行 `RUN:` 指令。
    3. 每個階段先列出簡短計畫,再實作。
    4. 對於程式碼修改,請輸出完整檔案內容,而不是差異片段。
    

    接著,使用者只需幾個高階指令:

    1. 讀 repo + 規劃任務

    text
    請先用 `RUN: ls` 和 `RUN: find . -maxdepth 3` 理解專案結構,之後提出一個開發計畫:
    目標是寫一個 `todo_report` CLI,掃描整個 repo 的 TODO 註解,輸出為 JSON 檔。

    1. 實作 CLI

    text
    依照你的計畫,先實作最小可用版本的 `todo_report`,用 Python 實作,並寫對應的 pytest 測試。

    1. 自動測試與修正

    text
    實作完成後,請要求我執行 `RUN: pytest`,你再根據測試結果修正程式。

    你會看到的典型互動流程:

    • 模型要求 RUN: ls、RUN: cat ... → 你在 shell 中照做,把結果貼回給它。
    • 它產生 todo_report.py 完整檔案內容 → 你存檔。
    • 它產生測試檔 → 你存檔,執行 pytest,貼回錯誤訊息。
    • 迭代 2–3 輪,CLI 工具就完成了。

    重點:整個過程你只下了 3–4 個高階指令,其餘由 Agent 自己規劃與修正。


    進階調校:reasoning 模式、量化與「記憶」

    1. medium vs xhigh reasoning:怎麼選?

    根據 agentic coding benchmark:

    • medium reasoning:
    • 得分較高、請求數幾乎減半,生成 token 也少三分之一。
    • 非常適合「多輪小步」的代理任務(寫 code、修測試)。

    • xhigh reasoning:

    • 單次 prompt 的嚴苛推理題可能略好,但耗時、耗 token。

    💡 關鍵: 實測顯示 medium reasoning 在代理式編碼中比 xhigh 更省時、省 token,完成度相近。

    建議:

    • 本地 Agent 預設用 medium。
    • 偶爾需要「一次回答寫完一篇長文或複雜設計」時,再開 xhigh。

    2. 量化與快取:怎麼不犧牲太多品質?

    實用組合(16GB 卡):

    • 權重:Q4_K_M 起跳,追求品質用 Q5_K_M。
    • KV cache:q8_0 或 q6_K,在長上下文時性價比佳。

    調整原則:

    • 若 VRAM 爆掉 → 降權重量化或減 --n-gpu-layers,讓更多層跑在 CPU。
    • 若輸出過慢 → 開 --mtp-adaptive 或固定 --mtp 3,配合 --batch-size 512 以上。

    3. 延伸玩法:簡單「長期記憶」

    你可以加一層「記憶層」,例如:

    • 使用簡單檔案索引:
    • 把重要檔案(設計文件、規格)摘要成短段落,存 JSON。
    • 開發時先用關鍵字搜尋相關摘要,附在 prompt 開頭,讓 Qwen 有「記憶」。

    • 像 ai-memory 那樣記錄對話:

    • 把每次對話中重要決策(例如:架構選擇、命名約定)存到 memory.md。
    • 每次新任務前,把 memory.md 摘要貼給模型。

    行動:先在專案根目錄加一個 ai_memory/,把設計決策和重要檔案摘要集中存放,讓下一次 Agent 啟動時也能延續上下文。


    怎麼開始:一鍵腳本 + 三個可套用 Prompt

    1. 安裝腳本(Linux 範例)

    # 安裝依賴\sudo apt update && sudo apt install -y build-essential git python3-venv
    
    # 取得 llama.cpp v0.1.0
    git clone https://github.com/ggml-org/llama.cpp.git
    cd llama.cpp
    git checkout v0.1.0
    make -j$(nproc)
    
    # 建立模型資料夾
    mkdir -p models/qwen-3.8-27b
    # 將從 Hugging Face 下載的 Qwen3.8-27B GGUF 放入上述資料夾
    
    echo "完成:請下載 GGUF 模型到 models/qwen-3.8-27b,然後執行啟動命令。"
    

    2. 一行啟動命令(可直接複製)

    ./bin/llama-server \
      -m models/qwen-3.8-27b/Qwen3.8-27B-*-Q5_K_M.gguf \
      --ctx-size 73000 --batch-size 512 --n-gpu-layers 45 \
      --cache-type-k q8_0 --cache-type-v q8_0 \
      --temp 0.8 --top_p 0.9 --mtl 4 --mtp-adaptive
    

    3. 三個可直接用的 Agent prompt 範本

    (1) Repo 讀取與理解

    你是一位本地程式助手,目標是理解這個 repo 的結構與目的。
    請:
    1. 用 `RUN:` 指令要求我列出檔案與重要檔案內容。
    2. 整理出專案用途、主要模組、依賴關係。
    3. 最後輸出一段 <SUMMARY> ... </SUMMARY> 作為後續任務的簡要說明。
    

    (2) 新功能開發(CLI 工具)

    根據目前 repo 的內容,規劃並實作一個新 CLI 工具:
    需求:{在此描述}
    步驟:
    1. 先列出開發計畫(檔案變更列表)。
    2. 依序產出完整檔案內容。
    3. 為新功能撰寫至少一個 pytest 測試。
    每個階段如果需要檔案內容或測試結果,請用 `RUN:` 指令要求我執行。
    

    (3) 重構與程式碼審查

    請針對這個模組進行重構,目標:
    - 提升可讀性
    - 避免重複邏輯
    - 保持對外 API 不變
    流程:
    1. 要求我貼上目前檔案內容。
    2. 提出重構建議清單。
    3. 輸出重構後的完整檔案。
    4. 建議或修改對應的測試。
    

    照著這套流程,你今天就能把舊遊戲卡升級成一個能讀 repo、寫 code、自己跑測試的本地 Qwen 3.8 程式助手。


    🚀 你現在可以做的事

    • 在自己的機器上執行 nvidia-smi 和 free -h,確認硬體是否符合 16GB VRAM + 32GB RAM 的建議配置
    • 按文中步驟安裝 llama.cpp v0.1.0,下載 Qwen 3.8-27B GGUF 到 models/qwen-3.8-27b 並用啟動指令跑起來
    • 在一個現有 repo 中建立 agent_shell.py,貼上提供的系統 prompt,實際讓本地 Qwen 幫你完成一個小型 CLI 工具或重構任務