先用 SQLite + 關鍵字檢索做出可展示的內部文件助理,看懂檢索 → 組 context → 問 AI整條流程,再升級成語意檢索。
這頁讓你 5 分鐘知道這是什麼、能幹嘛、真的會動。要逐行、踩雷、部署、FAQ 的完整版,在實戰手冊裡。
想做「問公司 SOP、查內部文件、給老闆看的 AI 助理 PoC」,常卡在「檢索怎麼接 AI?要不要先上向量資料庫?怎麼在不花大錢的前提下先驗證有沒有價值?」
這個範本把 sample_docs/ 裡的 .md / .txt 索引進一個 SQLite 檔(assistant.db),POST /ask 時用關鍵字計次找出最相關的片段,組成 context 回給你。第一輪用內建 echo provider,不需要任何 API key,一眼就能讀完整條流程,剛好夠看懂「檢索 → context → AI」每一段。
需要 uv 與 Git。第一輪用內建 echo provider,不需要任何 API key。
git clone https://github.com/yazelin/company-ai-assistant-template.git
cd company-ai-assistant-template
uv sync
cp .env.example .env
uv run python -m app.ingest sample_docs
uv run uvicorn app.main:app --reload --port 8000
curl -X POST http://127.0.0.1:8000/ask \
-H "Content-Type: application/json" \
-d '{"question":"What documents does this assistant index?"}'
{
"answer": "Echo answer. Retrieved context:\n[sample_docs/overview.md]\n# Company AI Assistant Template\n\nIndexes internal Markdown/text documents and answers with retrieved context.\n",
"sources": [
{
"score": 2,
"path": "sample_docs/overview.md",
"snippet": "# Company AI Assistant Template\n\nIndexes internal Markdown/text documents and answers with retrieved context.\n"
}
]
}
sources 陣列裡有東西、path 指到 sample_docs/overview.md,answer 開頭是 Echo answer.(echo provider 把檢索到的 context 原樣回給你,還沒真的呼叫 LLM,這是預期行為)。代表檢索整條都跑通了。前半段你用關鍵字計次做出最小文件助理,它誠實、好懂,但有個天花板:換句話說就找不到。後半段把同樣的檢索換成真正的語意檢索(embedding + 餘弦相似度),親眼看到差別。
| 面向 | 關鍵字 baseline | 語意(fastembed) |
|---|---|---|
| 比對方式 | 子字串出現次數 | embedding 餘弦相似度 |
| 換句話說(「我想把錢拿回來」) | 找不到(0 筆) | 仍命中 refund.md |
| 介面 / 輸出形狀 | (query, limit) -> [{score, path, snippet}] | 同簽章、同輸出形狀 |
| 相依 | 無第三方 | fastembed(本地 ONNX,模型 ~118MB) |
核心一句:升級換掉的是「怎麼比對」,不是「你的資料或回答邏輯」。search_semantic 回傳形狀跟 search_docs 完全一樣,所以 /ask 與 AI 回答層一行都不用改。完整對照在 docs/08。
這頁是快速了解;下面每一章都是完整內容,在 GitHub 上點開就能讀。
這頁是快速了解。逐行讀懂、換成真實 LLM、加自己的文件、踩雷清單、部署、FAQ都在實戰手冊(PDF)裡。