[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-how-to-build-a-rag-pipeline-in-5-steps-zh":3,"article-related-how-to-build-a-rag-pipeline-in-5-steps-zh":29,"series-ai-agent-e133ed69-fb56-495d-96f6-1e14d7ac3242":81},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":22,"views":26,"created_at":27,"published_at":28,"topic_cluster_id":11},"e133ed69-fb56-495d-96f6-1e14d7ac3242","how-to-build-a-rag-pipeline-in-5-steps-zh","5 步完成 RAG 管線","\u003Cp data-speakable=\"summary\">這篇教你用 5 個步驟做出 \u003Ca href=\"\u002Fnews\u002Fwhat-rag-is-and-why-it-matters-zh\">RAG\u003C\u002Fa> 管線，讓模型先檢索你的文件，再根據內容產生有依據的答案。\u003C\u002Fp>\u003Cp>這篇給想把 \u003Ca href=\"\u002Fnews\u002Fhow-to-build-vintage-llm-testbed-5-steps-zh\">LLM\u003C\u002Fa> 接到自家文件的開發者看。照著做完，你會得到一條可運作的 \u003Ca href=\"\u002Ftag\u002Frag\">RAG\u003C\u002Fa> 流程，能匯入文件、切分段落、產生 embedd\u003Ca href=\"\u002Fnews\u002Fai-finds-nine-year-linux-kernel-zero-day-zh\">in\u003C\u002Fa>gs、查回相關內容，最後生成有來源依據的回答。\u003C\u002Fp>\u003Cp>你也會有一套逐步驗收的方法，方便在上線前檢查檢索品質、延遲與資料新鮮度。\u003C\u002Fp>\u003Ch2>開始之前\u003C\u002Fh2>\u003Cul>\u003Cli>Node 20+ 或 Python 3.11+\u003C\u002Fli>\u003Cli>OpenAI API key，或其他聊天模型 API key\u003C\u002Fli>\u003Cli>Embedding 模型帳號，或本地 embedding runtime\u003C\u002Fli>\u003Cli>向量資料庫，例如 Pinecone、Weaviate、Chroma 或 pgvector\u003C\u002Fli>\u003Cli>文件來源，例如 PDF、Markdown、網頁或資料庫\u003C\u002Fli>\u003Cli>可讀取 [OpenAI docs](https:\u002F\u002Fplatform.openai.com\u002Fdocs) 與 [LangChain GitHub repo](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flangchain) 的權限，若你要沿用本文示例 stack\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Step 1: 準備文件語料\u003C\u002Fh2>\u003Cp>目的：建立一份可被檢索的可信資料來源。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1777959047822-j4yr.png\" alt=\"5 步完成 RAG 管線\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>先把你要讓模型信任的內容收集起來。客服機器人可用產品文件與 FAQ；法務或醫療工具則只應使用已核准的內部資料。把內容轉成純文字、去重，並把長文件切成較小區塊，讓檢索器能回傳精準段落，而不是整頁內容。\u003C\u002Fp>\u003Cpre>\u003Ccode>from langchain_text_splitters import RecursiveCharacterTextSplitter\n\ntext_splitter = RecursiveCharacterTextSplitter(\n    chunk_size=800,\n    chunk_overlap=120,\n)\nchunks = text_splitter.split_text(long_document_text)\nprint(len(chunks))\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>你應該看到 chunk 數量大於 1，而且每個 chunk 都像完整段落。如果 chunk 太大，檢索會變吵；如果太小，回答可能失去上下文。\u003C\u002Fp>\u003Ch2>Step 2: 產生每段 embeddings\u003C\u002Fh2>\u003Cp>目的：把文字轉成能表達語意的向量，而不是只看關鍵字。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1777959051895-tmvz.png\" alt=\"5 步完成 RAG 管線\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>把每個 chunk 送進 embedding 模型，讓語意相近的段落在向量空間中靠近。這是檢索品質的基礎。索引與查詢時請使用同一個 embedding 模型，否則相似度搜尋會變得不可靠。\u003C\u002Fp>\u003Cp>同時保存向量、原始 chunk 文字，以及 title、URL、section、timestamp 等 metadata。這些資訊能幫你追溯答案來源，也能依文件類型或新鮮度過濾結果。\u003C\u002Fp>\u003Cp>你應該看到每個 chunk 對應一個固定長度向量，通常是數字陣列或 float array。如果這一步失敗，先檢查文字是否為空，再確認模型維度是否符合向量資料庫需求。\u003C\u002Fp>\u003Ch2>Step 3: 建立向量索引\u003C\u002Fh2>\u003Cp>目的：讓知識庫可以用相似度快速搜尋。\u003C\u002Fp>\u003Cp>把 chunk embeddings 匯入向量資料庫，建立適合最近鄰搜尋的 index。這樣系統就能在毫秒內拿使用者問題對照已存內容，而不是掃描所有文件。若你的應用服務多個團隊，可加上 source、language、tenant 等篩選條件。\u003C\u002Fp>\u003Cp>實作流程是先把每個 chunk 的 vector、text 與 metadata 一起 upsert，接著確認 index 已可供查詢。若你用 pgvector，先建立 vector 欄位與 similarity index；若你用代管服務，先確認 namespace 或 collection 名稱正確再匯入。\u003C\u002Fp>\u003Cp>你應該看到索引中的 record 數量與已準備的 chunks 一致。做一個快速查詢後，回傳內容應該是最相關的段落，而不是隨機文字。\u003C\u002Fp>\u003Ch2>Step 4: 取回相關上下文\u003C\u002Fh2>\u003Cp>目的：在 \u003Ca href=\"\u002Ftag\u002Fllm\">LLM\u003C\u002Fa> 寫答案前，先抓到最有支撐力的段落。\u003C\u002Fp>\u003Cp>當使用者提問時，先用同一個模型把問題轉成 embedding，再對向量索引做 similarity search。回傳 top-k chunks，通常是 3 到 8 段；若你更重視精準度，也可以再用 cross-encoder 或 LLM scorer 重新排序。\u003C\u002Fp>\u003Cp>要持續觀察檢索品質。如果第一名結果只算勉強相關，請改善 chunk 切法、加上 metadata filters，或補強文件語料。RAG 的品質關鍵在檢索，因為生成器只能依據拿到的內容回答。\u003C\u002Fp>\u003Cp>你應該看到一小串明顯符合使用者意圖的段落。如果段落離題，就算生成步驟很強，答案也很可能偏弱。\u003C\u002Fp>\u003Ch2>Step 5: 組合提示詞並生成答案\u003C\u002Fh2>\u003Cp>目的：輸出有依據、可追溯的回答。\u003C\u002Fp>\u003Cp>建立一個 prompt，把使用者問題、檢索到的 chunks，以及明確規則一起放進去，例如盡量只根據提供的 context 作答。接著把這個 prompt 送給 LLM，並要求它在資訊不足時直接說明，而不是自行補造事實。這能降低 hallucination，也讓系統更容易被信任。\u003C\u002Fp>\u003Cpre>\u003Ccode>prompt = f\"\"\"\nUse only the context below to answer the question.\nIf the context is insufficient, say so.\n\nContext:\n{retrieved_context}\n\nQuestion:\n{user_question}\n\"\"\"\n\nresponse = llm.invoke(prompt)\nprint(response.content)\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>你應該看到答案有反映檢索到的內容，最好還能提到來源或關鍵事實。請用一個明確有收錄在語料中的問題，和一個沒有收錄的問題測試；前者應該正確，後者應該禮貌地表示上下文不足。\u003C\u002Fp>\u003Ch2>常見錯誤\u003C\u002Fh2>\u003Cul>\u003Cli>查詢與文件使用了不同的 embedding 模型。修法：索引與檢索固定同一模型，若更換模型就重新嵌入整份語料。\u003C\u002Fli>\u003Cli>chunk 切太大或太小。修法：先從 500 到 1,000 字元加上 overlap 開始，再依檢索結果調整。\u003C\u002Fli>\u003Cli>略過資料更新。修法：加排程重建索引，或做增量更新，讓新文件與修訂內容能進入 vector store。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>接下來可以看什麼\u003C\u002Fh2>\u003Cp>當基本管線跑通後，可以再加 citations、reranking、cache layer，以及針對答案忠實度與檢索召回率的評估測試。下一步也能把同一套模式延伸到 chat memory、tool use，或支援客服、搜尋與內部知識庫的專屬助理。\u003C\u002Fp>","這篇教你用 5 個步驟做出 RAG 管線，讓模型先檢索你的文件，再根據內容產生有依據的答案。","www.geeksforgeeks.org","https:\u002F\u002Fwww.geeksforgeeks.org\u002Fnlp\u002Fwhat-is-retrieval-augmented-generation-rag\u002F",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1777959047822-j4yr.png","ai-agent","zh","95ec8193-dee3-4ec5-93db-89f285d07612",[17,18,19,20,21],"RAG","embeddings","vector database","LangChain","OpenAI API",[23,24,25],"先把文件切成可檢索的 chunk，再做 embeddings 與向量索引。","查詢時用同一個 embedding 模型找回 top-k 上下文，最後再交給 LLM 生成。","用 chunk 大小、metadata filters、重新索引與測試題組來維持品質與新鮮度。",11,"2026-05-05T05:30:30.368078+00:00","2026-05-05T05:30:30.176+00:00",{"tags":30,"relatedLang":40,"relatedPosts":44},[31,33,35,37,38],{"name":17,"slug":32},"rag",{"name":21,"slug":34},"openai-api",{"name":20,"slug":36},"langchain",{"name":18,"slug":18},{"name":19,"slug":39},"vector-database",{"id":15,"slug":41,"title":42,"language":43},"how-to-build-a-rag-pipeline-in-5-steps-en","How to Build a RAG Pipeline in 5 Steps","en",[45,51,57,63,69,75],{"id":46,"slug":47,"title":48,"cover_image":49,"image_url":49,"created_at":50,"category":13},"83c2f8f6-3710-466e-b52c-473b811f0535","how-to-set-up-openclaw-safely-zh","如何安全架設 OpenClaw","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780549368665-1t2l.png","2026-06-04T05:02:21.26625+00:00",{"id":52,"slug":53,"title":54,"cover_image":55,"image_url":55,"created_at":56,"category":13},"0ba5b1a8-82c5-464a-bea5-9a2c8730da74","aws-devops-agent-turns-incident-chaos-into-triage-zh","AWS DevOps Agent 把事故排查變成三步","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780466689960-g1sv.png","2026-06-03T06:03:14.154923+00:00",{"id":58,"slug":59,"title":60,"cover_image":61,"image_url":61,"created_at":62,"category":13},"841eac88-b0f0-4a4c-9e1e-efc3b5c16281","kimi-k26-live-300-agent-workflows-zh","Kimi K2.6 上線：300 代理工作流","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780430574285-hqpn.png","2026-06-02T20:02:24.972179+00:00",{"id":64,"slug":65,"title":66,"cover_image":67,"image_url":67,"created_at":68,"category":13},"f0411957-bcdb-42d9-a267-3e90ae7d9cb1","how-to-take-a-sabbatical-at-openai-zh","怎麼申請 OpenAI sabbatical","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780398216422-8fi7.png","2026-06-02T11:02:25.74372+00:00",{"id":70,"slug":71,"title":72,"cover_image":73,"image_url":73,"created_at":74,"category":13},"37a5e429-4235-439c-9b05-bb377085462c","8-steps-build-production-rag-with-langchain-zh","8 步驟打造可上線的 LangChain RAG","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780178597493-4hz7.png","2026-05-30T22:02:48.14022+00:00",{"id":76,"slug":77,"title":78,"cover_image":79,"image_url":79,"created_at":80,"category":13},"e73c041b-852b-44c3-85aa-0f1e2e5848e3","ai-agents-hit-chaos-mode-claude-code-openclaw-zh","Claude Code＋OpenClaw 讓 AI 代理失控升溫","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780160576178-yqcs.png","2026-05-30T17:02:25.725767+00:00",[82,87,92,97,102,107,112,117,122,127],{"id":83,"slug":84,"title":85,"created_at":86},"4ae1e197-1d3d-4233-8733-eafe9cb6438b","claude-now-uses-your-pc-to-finish-tasks-zh","Claude 開始幫你操作電腦","2026-03-26T07:20:48.457387+00:00",{"id":88,"slug":89,"title":90,"created_at":91},"5bede67f-e21c-413d-9ab8-54a3c3d26227","googles-2026-ai-agent-report-decoded-zh","Google 2026 AI Agent 報告解讀","2026-03-26T11:15:22.651956+00:00",{"id":93,"slug":94,"title":95,"created_at":96},"2987d097-563f-46c7-b76f-b558d8ef7c2b","kimi-k25-review-stronger-still-not-legend-zh","Kimi K2.5 評測：更強，但還不是神作","2026-03-27T07:15:55.277513+00:00",{"id":98,"slug":99,"title":100,"created_at":101},"95c9053b-e3f4-4cb5-aace-5c54f4c9e044","claude-code-controls-mac-desktop-zh","Claude Code 也能操控 Mac 了","2026-03-28T03:01:58.58121+00:00",{"id":103,"slug":104,"title":105,"created_at":106},"dc58e153-e3a8-4c06-9b96-1aa64eabbf5f","cloudflare-100x-faster-ai-agent-sandbox-zh","Cloudflare 的 AI 沙箱跑超快","2026-03-28T03:09:44.142236+00:00",{"id":108,"slug":109,"title":110,"created_at":111},"1c8afc56-253f-47a2-979f-1065ff072f2a","openai-backs-isara-agent-swarm-bet-zh","OpenAI 挺 Isara 的 agent swarm …","2026-03-28T03:15:27.513155+00:00",{"id":113,"slug":114,"title":115,"created_at":116},"7379b422-576e-45df-ad5a-d57a0d9dd467","openai-plan-automated-ai-researcher-zh","OpenAI 想做自動化 AI 研究員","2026-03-28T03:17:42.090548+00:00",{"id":118,"slug":119,"title":120,"created_at":121},"48c9889e-86df-450b-a356-e4a4b7c83c5b","harness-engineering-ai-agent-reliability-2026-zh","駕馭工程：從「馬具」到「作業系統」，AI Agent 可靠性的終極密碼","2026-03-31T06:42:53.556721+00:00",{"id":123,"slug":124,"title":125,"created_at":126},"96d8e8c8-1edd-475d-9145-b1e7a1b02b65","mcp-explained-from-prompts-to-production-zh","MCP 怎麼把提示詞變工作流","2026-04-01T09:24:39.321274+00:00",{"id":128,"slug":129,"title":130,"created_at":131},"f2ca7720-b471-4ce5-9336-2a9ac2a876fd","amazon-bedrock-agents-multi-agent-workflows-zh","Amazon Bedrock Agents 進入多代理工作流","2026-04-01T09:30:29.945429+00:00"]