Haystack 實戰:一天做出公司 AI 助理

Haystack 實戰:一天做出公司 AI 助理

📌 本文重點

  • Haystack 把 RAG + Agent 流程統一成框架
  • 少寫檔案處理與檢索 script,快速做公司助理
  • 用範本與工具擴展成可連公司系統的 Agent
  • 一天內跑出第一個可給同事用的 QA 助理

用 Haystack,你可以少寫一堆 RAG script,把「文件檢索、LLM 調用、Agent 流程管理」統一交給一個開源框架處理。

官方網站:https://haystack.deepset.ai/


為什麼不要再自己拼 RAG script?

多數人做公司內部 AI 助理,走的流程都是:

  1. 自己寫檔案讀取、切 chunk、丟向量庫
  2. 自己串 LLM API,處理 history、retrieval 邏輯
  3. 想加一點工具(查 DB、叫 REST API)又多一支 script

問題是:
– 每新增一個資料源或工具,都要重構流程
– 很難部署成穩定 API 給同事用

Haystack 的定位很直接:把 RAG + Agent 的骨架先幫你做好,你只需要選模型、選向量庫、加自己工具,就能變成一個可上線的 AI 助理。

💡 關鍵: 用框架統一 RAG + Agent 流程,可以讓你只專注在選模型、選向量庫與設計工具,少掉大量重複的整合工作。


核心功能:你可以少寫的三件事

1. 文件管線:多資料源 + 多向量庫

Haystack 幫你處理「資料→文件→向量」的整條管線:

你可以:
– 選擇資料源:檔案夾、PDF、Markdown、Confluence、Notion 等
– 選擇向量庫:FAISSWeaviateQdrantElasticsearch
– 用同一套 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:本地快速上手

  1. 建環境

bash
python -m venv venv
source venv/bin/activate # Windows 用 venv\Scripts\activate
pip install haystack-ai

  1. 選模型
  2. 想省錢、保留隱私:用本地開源模型(例如 DeepSeek 輕量版,部署教學可參考:https://pub.towardsai.net/how-to-run-deepseek-locally-on-your-own-computer-and-the-catch-most-guides-skip-60517629d00d
  3. 想先跑順:用雲端 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)做出 /qa HTTP API,丟給 2–3 位同事試用並收集回饋

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *