📌 本文重點
- Haystack 把 RAG + Agent 流程統一成框架
- 少寫檔案處理與檢索 script,快速做公司助理
- 用範本與工具擴展成可連公司系統的 Agent
- 一天內跑出第一個可給同事用的 QA 助理
用 Haystack,你可以少寫一堆 RAG script,把「文件檢索、LLM 調用、Agent 流程管理」統一交給一個開源框架處理。
官方網站:https://haystack.deepset.ai/
為什麼不要再自己拼 RAG script?
多數人做公司內部 AI 助理,走的流程都是:
- 自己寫檔案讀取、切 chunk、丟向量庫
- 自己串 LLM API,處理 history、retrieval 邏輯
- 想加一點工具(查 DB、叫 REST API)又多一支 script
問題是:
– 每新增一個資料源或工具,都要重構流程
– 很難部署成穩定 API 給同事用
Haystack 的定位很直接:把 RAG + Agent 的骨架先幫你做好,你只需要選模型、選向量庫、加自己工具,就能變成一個可上線的 AI 助理。
💡 關鍵: 用框架統一 RAG + Agent 流程,可以讓你只專注在選模型、選向量庫與設計工具,少掉大量重複的整合工作。
核心功能:你可以少寫的三件事
1. 文件管線:多資料源 + 多向量庫
Haystack 幫你處理「資料→文件→向量」的整條管線:
你可以:
– 選擇資料源:檔案夾、PDF、Markdown、Confluence、Notion 等
– 選擇向量庫:FAISS、Weaviate、Qdrant、Elasticsearch…
– 用同一套 API 建 index、更新文件,避免 N 種自訂 script
實際行動:先在本地建一個簡單文件管線
pip install haystack-ai
範例(Python):
from haystack import Pipeline
from haystack.document_stores import FAISSDocumentStore
from haystack.nodes import PDFToTextConverter, TextSplitter, EmbeddingRetriever
# 建立向量庫
doc_store = FAISSDocumentStore(faiss_index_factory_str="Flat")
# 文件處理節點
converter = PDFToTextConverter()
splitter = TextSplitter(chunk_size=500, chunk_overlap=50)
retriever = EmbeddingRetriever(document_store=doc_store, embedding_model="sentence-transformers/all-MiniLM-L6-v2")
indexing = Pipeline()
indexing.add_node(converter, name="converter", inputs=["File"])
indexing.add_node(splitter, name="splitter", inputs=["converter"])
indexing.add_node(retriever, name="retriever", inputs=["splitter"])
indexing.run({"File": {"paths": ["./docs/handbook.pdf"]}})
跑完,你就有一個可檢索的公司文件向量庫。
2. 問答 / ChatBot 範本:已幫你處理 history + retrieval
Haystack 內建多種 QA / ChatBot 範本,你不用自己寫:
– 如何把 user 問題拿去檢索文件
– 如何把檢索結果塞進 prompt
– 如何處理多輪對話的 history
你只要:
1. 選用哪一個 LLM(雲端或本地)
2. 綁定上一步建立好的向量庫
範例:最小 QA API(搭配 Docker 跑一個 stack)
docker run -p 8000:8000 deepset/haystack:latest
在 Python 中寫一個簡單 QA pipeline:
from haystack import Pipeline
from haystack.nodes import PromptNode
from haystack.document_stores import FAISSDocumentStore
from haystack.nodes import EmbeddingRetriever
# 連到既有向量庫
doc_store = FAISSDocumentStore(faiss_index_path="faiss_index")
retriever = EmbeddingRetriever(document_store=doc_store, embedding_model="sentence-transformers/all-MiniLM-L6-v2")
# LLM(可改成你的雲端 / 本地模型)
prompt_node = PromptNode("gpt-4o", api_key="YOUR_OPENAI_KEY")
qa = Pipeline()
qa.add_node(retriever, name="retriever", inputs=["Query"])
qa.add_node(prompt_node, name="llm", inputs=["retriever"])
result = qa.run({"Query": "我們的休假制度怎麼規定?"})
print(result["results"][0])
這樣就有一個最小的「公司文件 QA API」,可以包成 FastAPI / Flask 給同事使用。
3. Agent 範本:多工具呼叫 + 任務分解
當你想讓助理不只回答文件內容,還能查系統資料或叫內部 API,Haystack 的 Agent 範本就派上用場。
你可以:
– 定義多個工具(例如:查工時系統 REST API、查 CRM 客戶資料)
– 讓 Agent 自己決定何時呼叫哪個工具,並把結果融入回答
範例:加一個「查內部 REST API」工具
from haystack.agents import Tool, Agent
import requests
# 定義工具
def get_user_vacation(user_id: str) -> str:
r = requests.get(f"https://internal-api.company.com/vacation/{user_id}")
return r.json()["summary"]
vacation_tool = Tool(
name="vacation_lookup",
func=get_user_vacation,
description="查詢員工剩餘休假與最近申請紀錄。輸入 user_id。",
)
agent = Agent(tools=[vacation_tool], model="gpt-4o")
answer = agent.run("幫我查一下員工 1234 的休假狀態,再用中文整理給我。")
print(answer)
到這一步,你已經從「純 QA 助理」升級成「簡單 Agent」,可以真正接公司系統工作流程。
💡 關鍵: 一旦把公司內部 REST API 或 DB 封成工具交給 Agent,你的助理就能從「只會看文件」變成「真的能查系統、執行工作」的實用工具。
適合誰用?兩個具體場景
1. 公司內部文件助理(Confluence / PDF / Notion)
目標:讓同事問「新人入職流程」「出差報帳規則」時,直接跟 AI 聊天,不必翻 Confluence / PDF。
你可以這樣做:
1. 把公司手冊、流程文件、政策 PDF 匯出到一個資料夾
2. 用 Haystack 文件管線建立向量庫
3. 用 QA 範本 + LLM 做一個 /ask-docs API
4. 用簡單前端(React / internal tool)做一個聊天頁面給同事用
2. 客戶 FAQ 機器人(網站 / LINE / Web Chat)
目標:把客服中心常見問題、產品 FAQ 集中到一個聊天介面,讓客戶自助查詢。
你可以:
1. 用 Haystack 把 FAQ CSV / 網站內容抓下來做 index
2. QA pipeline 對接你的 LLM(可以選較便宜模型,參考 AI 成本問題:https://blog.dshr.org/2026/06/ais-affordability-crisis.html)
3. 透過 Agent 工具連到訂單查詢 API,讓客戶問「我的訂單現在在哪?」時能真的查到資料
怎麼開始:一天內跑出第一個可用助理
步驟 1:本地快速上手
- 建環境
bash
python -m venv venv
source venv/bin/activate # Windows 用 venv\Scripts\activate
pip install haystack-ai
- 選模型
- 想省錢、保留隱私:用本地開源模型(例如 DeepSeek 輕量版,部署教學可參考:https://pub.towardsai.net/how-to-run-deepseek-locally-on-your-own-computer-and-the-catch-most-guides-skip-60517629d00d)
- 想先跑順:用雲端 OpenAI / Anthropic 等
步驟 2:選一個向量庫
開發階段,可以先用:
– FAISS:本地測試快速、安裝簡單
– Qdrant / Weaviate:要多機部署再考慮
把向量庫實例塞到 Haystack document_store,就能用同一套 pipeline 程式碼。
步驟 3:照官方範例跑出第一個 QA API
官方入門範例在:https://haystack.deepset.ai/tutorials
你可以:
1. 先照「Quickstart RAG」跑一遍(約 30 分鐘)
2. 把示範資料換成公司文件
3. 用 FastAPI 包一層 HTTP API:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Query(BaseModel):
question: str
@app.post("/qa")
async def qa_endpoint(q: Query):
result = qa.run({"Query": q.question})
return {"answer": result["results"][0]}
部署與實戰小訣竅
1. 用環境變數切換雲端 / 本地模型
實務上你會想在:
– 開發:用本地開源模型省錢
– 上線:用雲端模型提高穩定性
可以這樣設計:
import os
from haystack.nodes import PromptNode
MODEL_NAME = os.getenv("LLM_MODEL", "gpt-4o")
MODEL_ENDPOINT = os.getenv("LLM_ENDPOINT") # 本地時填自己的伺服器 URL
prompt_node = PromptNode(MODEL_NAME, api_key=os.getenv("LLM_API_KEY"), url=MODEL_ENDPOINT)
只要在部署時改環境變數,就能切換不同模型和推理後端。
2. Prompt logging:先看清楚 Agent 在幹嘛
Haystack 支援把 pipeline 執行資訊輸出,你可以:
– 把每次 prompt、檢索結果、工具呼叫記錄到 DB / Log 文件
– 用這些紀錄回頭調整 prompt、優化 Agent 行為
簡單做法:
– 在 FastAPI 層加 middleware,把 qa.run() 的輸入輸出存進 DB
– 固定每週 review 一次錯誤回答,調整資料和 prompt
3. 評估:不要只看「感覺」,要看準確率
Haystack 有基礎評估工具,你可以:
1. 準備 20-50 題真實問題 + 正確回答
2. 用這些問題跑 pipeline,計算命中率、是否有 hallucination
3. 調整 chunk 大小、retriever top-k、模型種類
💡 關鍵: 用 20–50 題標註資料做簡單評估,比只看「用起來感覺不錯」更能掌握準確率與幻覺問題。
總結:先用框架,把精力留給「你自己的工具」
如果你已經寫過一次 RAG pipeline,就知道真正麻煩的不是 LLM,而是:文件流程、檢索、上下文管理、工具呼叫。Haystack 把這些基礎骨架收斂成一套可重複使用的框架,你可以把力氣放在:
- 接公司內部系統(REST API / DB / CRM)
- 整理與更新文件資料
- 設計合乎業務邏輯的 Agent 行為
照本文步驟,一天內做出第一個「真的可以丟給同事用」的公司 AI 助理,之後再慢慢疊功能,而不是每次都從一堆 RAG script 重寫。
🚀 你現在可以做的事
- 到 Haystack 官方教學 跑一遍 Quickstart RAG,並把示範資料換成公司文件
- 在本地用
FAISS+ 一個你熟悉的 LLM(如gpt-4o或本地 DeepSeek)建立第一個 QA pipeline- 為公司內一個具體場景(例如新人入職或客服 FAQ)做出
/qaHTTP API,丟給 2–3 位同事試用並收集回饋


發佈留言