RAG 知識庫
RAG(Retrieval-Augmented Generation,檢索增強生成)讓 AI 根據你提供的文件回答問題,而不是憑空生成可能不正確的答案。
簡單說:上傳你的文件 → AI 根據這些文件回答問題 → 每個回答都附帶來源引用。
運作原理
你的問題 → 語義搜尋知識庫 → 找到最相關的文件段落
→ 把這些段落連同問題一起送給 AI
→ AI 根據文件內容生成有依據的回答
→ 回傳答案 + 引用的文件來源
快速上手
步驟 1:上傳文件
在 Dashboard 新增專案後,上傳你的文件。支援的格式:
- Markdown (
.md) - Word (
.docx) - 純文字 (
.txt) - HTML
上傳後系統會自動處理(解析 → 切分 → 向量化),通常幾分鐘內完成。
你也可以用 API 上傳:
- Node.js
- Python
- Go
import { readFile } from 'node:fs/promises';
const buffer = await readFile('./product-manual.pdf');
const doc = await client.documents.upload({
file: buffer,
filename: 'product-manual.pdf',
contentType: 'application/pdf',
});
console.log('上傳成功,文件 ID:', doc.id);
console.log('狀態:', doc.status); // processing → ready
document = await client.documents.upload(
file="./product-manual.pdf",
metadata={"category": "product"},
)
print("文件 ID:", document["id"])
print("狀態:", document["status"]) # processing → ready
import (
"os"
vecstruct "github.com/vecstruct/vecstruct-sdk-go"
)
f, err := os.Open("./product-manual.pdf")
if err != nil {
log.Fatal(err)
}
defer f.Close()
doc, err := client.UploadDocument(ctx, vecstruct.UploadDocumentRequest{
File: f,
Filename: "product-manual.pdf",
ContentType: "application/pdf",
Metadata: map[string]string{"category": "product"},
})
if err != nil {
log.Fatal(err)
}
fmt.Println("上傳成功,文件 ID:", doc.ID)
fmt.Println("狀態:", doc.Status) // processing → ready
步驟 2:用 AI 查詢知識庫
文件處理完成後,在 Chat 請求中開啟 rag: true:
- Node.js
- Python
- Go
const reply = await client.chat.completions.create({
model: 'openai/gpt-4o',
messages: [{ role: 'user', content: '這個產品的保固期是多久?' }],
vecstruct: {
rag: true,
rag_top_k: 5, // 參考最相關的 5 個段落
},
});
console.log(reply.choices[0].message.content);
// 查看引用了哪些段落
for (const src of reply.vecstruct?.rag_sources ?? []) {
console.log(`來源: ${src.title} (相似度: ${src.similarity.toFixed(2)})`);
console.log(` 段落: ${src.chunk.slice(0, 100)}...`);
}
reply = await client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "這個產品的保固期是多久?"}],
vecstruct={
"rag": True,
"rag_top_k": 5,
},
)
print(reply["choices"][0]["message"]["content"])
# 引用來源
for src in reply["vecstruct"].get("rag_sources", []):
print(f"來源: {src['title']} (相似度: {src['similarity']:.2f})")
ragOn := true
resp, err := client.CreateChatCompletion(ctx, vecstruct.ChatCompletionRequest{
Model: "openai/gpt-4o",
Messages: []vecstruct.ChatMessage{
{Role: "user", Content: "這個產品的保固期是多久?"},
},
Vecstruct: &vecstruct.VecstructParams{
RAG: &ragOn,
RAGTopK: 5,
},
})
fmt.Println(resp.Choices[0].Message.Content)
for _, src := range resp.Vecstruct.RAGSources {
fmt.Printf("來源: %s (相似度: %.2f)\n", src.Title, src.Similarity)
}
步驟 3:直接查詢知識庫(不生成回覆)
如果你只需要查找相關文件段落,不需要 AI 生成回覆,用 RAG Query API:
- Node.js
- Python
- Go
const result = await client.rag.query({
query: '退貨政策',
config: {
top_k: 5,
min_similarity: 0.7,
},
});
for (const r of result.results) {
console.log(`相似度: ${r.score.toFixed(3)}`);
console.log(`內容: ${r.content.slice(0, 200)}`);
console.log(`來源文件: ${r.source?.name}`);
}
result = await client.rag.query(
query="退貨政策",
top_k=5,
min_similarity=0.7,
)
for r in result["results"]:
print(f"相似度: {r['similarity']:.3f}")
print(f"內容: {r['content'][:200]}")
print(f"來源: {r['source']['name']}")
rag, err := client.QueryRAG(ctx, vecstruct.RAGQueryRequest{
Query: "退貨政策",
TopK: 5,
MinSimilarity: 0.7,
})
for _, r := range rag.Results {
fmt.Printf("相似度: %.3f | 內容: %.100s\n", r.Similarity, r.Content)
}
應用場景範例
範例一:客服自動化
把產品說明書、FAQ、退換貨政策上傳,讓 AI 自動處理客戶常見問題。
解決的問題: 客服需要翻閱大量文件才能回答,回答品質不一致,且難以追蹤依據。
用 Vecstruct 怎麼做:
- 上傳所有客服相關文件到 Vecstruct 專案
- 客服系統呼叫 API,開啟
rag: true - AI 的每個回答都附帶「依據是哪份文件的哪個段落」
範例二:法規合規查詢
法律、會計、人資等部門上傳相關法規文件,員工或自動化系統可以快速查詢合規要求。
解決的問題: 法規文件更新頻繁,人工維護 FAQ 耗時,且容易遺漏新規定。
用 Vecstruct 怎麼做:
- 定期更新法規文件(重新上傳即可)
- 查詢時 AI 自動從最新版本的文件回答
- 每個答案都有原文引用,方便核實
範例三:內部知識管理
把公司 SOP、技術文件、會議記錄上傳,讓員工可以直接問 AI 而不需要翻遍整個 SharePoint。
解決的問題: 知識分散在各處,新員工上手慢,老員工也常找不到文件。
用 Vecstruct 怎麼做:
- 各部門把自己的文件上傳到對應的 Vecstruct 專案
- 用不同的 API Key 控制誰能存取哪個專案
- 員工用自然語言問問題,AI 直接回答並附上文件連結
範例四:教育輔助平台
上傳課程教材、歷年考題、參考書目,讓 AI 成為能解答課程相關問題的教學助理。
解決的問題: 學生提問時間不固定,老師難以即時回覆,且回答需要準確引用教材。
用 Vecstruct 怎麼做:
- 按課程分別建立專案,上傳對應教材
- 學生提問時,AI 根據教材回答,並指出教材的哪個章節
- AI 不會憑空捏造,回答超出教材範圍時會明確說明
控制 RAG 行為
rag_top_k:回傳幾個段落
預設使用專案設定,可在請求中覆蓋。值越大,AI 參考的資訊越多,但回答越長且費用略高。
vecstruct: {
rag: true,
rag_top_k: 3, // 只取最相關的 3 個段落
}
指定特定文件
如果只想讓 AI 參考特定幾份文件:
vecstruct: {
rag: true,
// 只從這些文件 ID 裡搜尋
// 文件 ID 可從 Documents API 取得
}
在 RAG Query API 中用 source_ids 限定:
const result = await client.rag.query({
query: '退貨政策',
source_ids: ['doc-id-1', 'doc-id-2'], // 只搜尋這兩份文件
});
關閉 RAG
如果 API Key 綁定了專案,預設會開啟 RAG。在某些對話不需要知識庫時可以關閉:
vecstruct: {
rag: false, // 這個請求不查詢知識庫
}
注意事項
- 文件上傳後需要等待處理完成(狀態變為
ready)才能查詢 - 查詢結果的品質取決於文件內容的清晰度和完整性
- PDF 會透過 OCR 識別技術轉換為文字,圖片中的文字也能辨識
- 每次 RAG 查詢會消耗 Credits(費用詳見 Pricing)