走進工廠,你會發現知識密度驚人,不管是:
這些都不是 ChatGPT 原生能理解的知識。這時候,我們就需要一個專門為「企業內部知識」打造的系統架構 —— RAG (Retrieval-Augmented Generation)。
[User 問題]
↓
Embedding Query
↓
向量資料庫 → 相似文件(如 SOP、維修紀錄、MES 事件記錄、PDF 說明書)
↓
組合 Prompt
↓
送入 LLM 產生回答(包含引用內容)
RAG 是讓 LLM(像 ChatGPT)先「查資料」再「產生答案」的流程。它能補足語言模型不懂的本地知識。
產線人員常問:「WE27 這台機台,從盤號 D1600A016 推回去是什麼時候開機的?當時轉速多少?」
import os, json
import pandas as pd
# 假設這是 EAP 記錄 JSON
with open("EAP_TAKEUPREPORT_REQ_20240930.json") as f:
data = json.load(f)
# 轉為表格
df = pd.json_normalize(data)
df.to_csv("cleaned_eap_takeup.csv", index=False)
from langchain.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import CSVLoader
loader = CSVLoader(file_path="cleaned_eap_takeup.csv")
docs = loader.load()
splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
split_docs = splitter.split_documents(docs)
embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
db = FAISS.from_documents(split_docs, embedding_model)
db.save_local("faiss_db")
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
retriever = db.as_retriever()
qa_chain = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0),
retriever=retriever,
return_source_documents=True
)
query = "請問盤號 D1600A016 對應的轉速是多少?是哪一天開始生產?"
result = qa_chain.run(query)
print(result)
「工單 G231012045 是什麼產品?用了什麼材料?可不可以列出其銅線組成比例與重量?」
orders
, bom
, materials
)你是一位懂得電纜工廠製程的專家。請根據下列文件資料,回答使用者問題。盡量引用材料比例、單位、來源等細節。
挑戰 | 解法 |
---|---|
資料格式混亂(PDF、圖片) | 使用 PaddleOCR、Tesseract 自動辨識,結合版面重建 |
中文語意切 chunk 容易斷句 | 使用滑動式 chunking,或 BERT tokenizer 調整斷詞規則 |
太多冗詞造成搜索不精準 | 加入自訂欄位欄位 tag(如【盤號】、【轉速】)協助標註 |
JSON 太複雜無法直接向量化 | 轉為平面欄位或只取 body/return/header 的重要片段 |
資料更新後 embedding 沒同步 | 定時更新 embedding,或使用 Chroma 支援 delta 更新 |
想像一個場景:
這不再是夢,而是正在發生的落地應用。
RAG 就是你內部知識的搜尋引擎 + 解釋助理,讓 AI 真正從語言模型變成你最懂工廠的「虛擬助理」。
📌 敬請期待:
Day 10|打造專屬的企業知識庫 × LangChain × embedding