[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-yong-langgraph-zuo-chu-dai-li-shi-rag-xi-tong-zh":3,"article-related-yong-langgraph-zuo-chu-dai-li-shi-rag-xi-tong-zh":30,"series-ai-agent-45c6e678-8ac7-4881-8096-34703d7db136":83},{"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":29},"45c6e678-8ac7-4881-8096-34703d7db136","yong-langgraph-zuo-chu-dai-li-shi-rag-xi-tong-zh","用 LangGraph 做出代理式 RAG 系統","\u003Cp data-speakable=\"summary\">這篇教你把基本檢索應用升級成\u003Ca href=\"\u002Fnews\u002Fmanus-ai-proves-agents-are-ready-for-real-work-zh\">代理\u003C\u002Fa>式 \u003Ca href=\"\u002Ftag\u002Frag\">RAG\u003C\u002Fa>，完成 PDF 轉檔、向量索引、LangGraph 工作流與可切換模型的問答系統。\u003C\u002Fp>\u003Cp>這篇給想把文件問答做得更穩、更能追問的開發者看。照著做完，你會得到一個可在本機跑起來的代理式 RAG 專案，能匯入 PDF、建立混合式向量索引、執行 LangGraph 流程，並用可切換的 \u003Ca href=\"\u002Ftag\u002Fllm\">LLM\u003C\u002Fa> 供應商回答問題。\u003C\u002Fp>\u003Cp>這份流程也\u003Ca href=\"\u002Fnews\u002Faltimate-code-dbt-sql-agent-work-zh\">適合\u003C\u002Fa>拿來當學習\u003Ca href=\"\u002Fnews\u002Fopenclaw-repo-fastest-self-hosted-agent-paths-zh\">路線\u003C\u002Fa>，先跑筆記本版本理解資料流，再切到模組化應用，把自己的模型、嵌入向量或文件格式接進去。\u003C\u002Fp>\u003Ch2>開始之前\u003C\u002Fh2>\u003Cul>\u003Cli>Python 3.10 或 3.11\u003C\u002Fli>\u003Cli>Git 已安裝且可正常使用\u003C\u002Fli>\u003Cli>本機已安裝 Ollama，或備妥 OpenAI、Anthropic、Google 的 API 金鑰\u003C\u002Fli>\u003Cli>Qdrant 已在本機執行，或已規劃好本機磁碟路徑\u003C\u002Fli>\u003Cli>至少一份要建立索引的 PDF 文件\u003C\u002Fli>\u003Cli>可存取 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FGiovanniPasq\u002Fagentic-rag-for-dummies\">GitHub 原始碼\u003C\u002Fa> 與 \u003Ca href=\"https:\u002F\u002Flangchain-ai.github.io\u002Flanggraph\u002F\">LangGraph 文件\u003C\u002Fa>\u003C\u002Fli>\u003Cli>已安裝專案需求套件，包含 LangChain、Qdrant、PyMuPDF\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-1781485382723-k7xk.png\" alt=\"用 LangGraph 做出代理式 RAG 系統\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cpre>\u003Ccode>git clone https:\u002F\u002Fgithub.com\u002FGiovanniPasq\u002Fagentic-rag-for-dummies.git\ncd agentic-rag-for-dummies\npython -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npip install -r requirements.txt\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>你應該看到 \u003Ccode>notebooks\u003C\u002Fcode>、\u003Ccode>project\u003C\u002Fcode>、\u003Ccode>assets\u003C\u002Fcode> 等資料夾，且套件安裝完成，沒有缺少套件的錯誤訊息。\u003C\u002Fp>\u003Ch2>Step 2: 設定模型與儲存路徑\u003C\u002Fh2>\u003Cp>這一步的目的，是先把模型提供者、嵌入模型與本機儲存位置定義好，讓代理流程在檢索時有固定的運作環境。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781485379303-4fi0.png\" alt=\"用 LangGraph 做出代理式 RAG 系統\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cpre>\u003Ccode>export OPENAI_API_KEY=\"your-key\"  # 或 ANTHROPIC_API_KEY \u002F GOOGLE_API_KEY\nollama pull qwen3:4b-instruct-2507-q4_K_M\nmkdir -p docs markdown_docs parent_store qdrant_db\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>你應該看到 Ollama 顯示模型已可用，並且 \u003Ccode>docs\u003C\u002Fcode>、\u003Ccode>markdown_docs\u003C\u002Fcode>、\u003Ccode>parent_store\u003C\u002Fcode>、\u003Ccode>qdrant_db\u003C\u002Fcode> 這些資料夾都已建立。\u003C\u002Fp>\u003Ch2>Step 3: 將 PDF 轉成 Markdown\u003C\u002Fh2>\u003Cp>這一步的目的，是把來源文件標準化成 Markdown，讓後續切塊更穩定，也能保留標題、段落等結構資訊。\u003C\u002Fp>\u003Cpre>\u003Ccode>python -c \"from project.pdf_utils import pdfs_to_markdowns; pdfs_to_markdowns('docs\u002F*.pdf')\"\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>你應該看到 \u003Ccode>markdown_docs\u003C\u002Fcode> 內出現對應的 \u003Ccode>.md\u003C\u002Fcode> 檔案，而且每份檔案都能直接用文字編輯器打開閱讀。\u003C\u002Fp>\u003Ch2>Step 4: 建立階層式索引\u003C\u002Fh2>\u003Cp>這一步的目的，是建立父子切塊的檢索架構，讓小切塊負責提高命中率，父切塊負責在生成答案時補回上下文。\u003C\u002Fp>\u003Cpre>\u003Ccode>python -c \"from project.indexing import build_index; build_index()\"\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>你應該看到 Qdrant collection 已建立，子切塊已寫入向量資料庫，父切塊 JSON 也已輸出到 \u003Ccode>parent_store\u003C\u002Fcode>。\u003C\u002Fp>\u003Ch2>Step 5: 啟動 LangGraph 代理流程\u003C\u002Fh2>\u003Cp>這一步的目的，是把查詢改寫、缺漏澄清、檢索與答案生成串成一條工作流，讓系統不只回傳文件片段，而是回傳可讀答案。\u003C\u002Fp>\u003Cpre>\u003Ccode>python -m project.app\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>你應該看到圖流程依序跑過對話摘要、查詢改寫、檢索與回應生成，最後輸出的是完整回答，而不是原始文件堆疊。\u003C\u002Fp>\u003Ch2>Step 6: 測試多段問題\u003C\u002Fh2>\u003Cp>這一步的目的，是確認代理能把複雜問題拆成多個子查詢，再把結果整合成一段連貫回答。\u003C\u002Fp>\u003Cpre>\u003Ccode>JavaScript 是什麼？Python 是什麼？\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>你應該看到兩條檢索路徑依序或平行經過工作流，最後產生一個同時涵蓋兩個主題的整合答案。\u003C\u002Fp>\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>指標\u003C\u002Fth>\u003Cth>基準／優化前\u003C\u002Fth>\u003Cth>結果／優化後\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>檢索流程\u003C\u002Ftd>\u003Ctd>單次通過的基本 RAG\u003C\u002Ftd>\u003Ctd>具備澄清、自我修正與多步推理的代理式 RAG\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>文件上下文\u003C\u002Ftd>\u003Ctd>只有小切塊\u003C\u002Ftd>\u003Ctd>父子切塊並用，兼顧精準與上下文\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>模型支援\u003C\u002Ftd>\u003Ctd>單一供應商\u003C\u002Ftd>\u003Ctd>以 Ollama 為主，並可切換 OpenAI、Anthropic、Google\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>常見錯誤\u003C\u002Fh2>\u003Cul>\u003Cli>使用太小的本機模型，導致工具指令常被忽略。修法：改用 7B 以上模型，或換成較強的雲端聊天模型。\u003C\u002Fli>\u003Cli>跳過 Markdown 轉換步驟，讓切塊結果不穩定。修法：先轉檔再建立索引，保留標題與段落結構。\u003C\u002Fli>\u003Cli>忘記建立 Qdrant 儲存路徑。修法：先建立本機資料夾，再執行索引，或把客戶端指向正確的資料庫路徑。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>接下來可以看什麼\u003C\u002Fh2>\u003Cp>等本機流程跑通後，可以把自己的文件集接進來，替換嵌入模型或聊天供應商，並加入 Langfuse 與 RAGAS 追蹤評估，先量測檢索品質再上線。\u003C\u002Fp>","這篇操作指南帶你把基本檢索應用升級成代理式 RAG，完成 PDF 轉檔、向量索引、LangGraph 工作流與可切換模型的問答系統。","github.com","https:\u002F\u002Fgithub.com\u002FGiovanniPasq\u002Fagentic-rag-for-dummies",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781485382723-k7xk.png","ai-agent","zh","c9718bed-9db2-4e04-88d4-9316d047680d",[17,18,19,20,21],"LangGraph","RAG","Qdrant","Ollama","Python",[23,24,25],"先把 PDF 標準化成 Markdown，再建立階層式索引，檢索品質會更穩。","代理式 RAG 的重點不只是找資料，還包含查詢改寫、澄清與多步推理。","把模型與儲存路徑先設定好，後面切換供應商或擴充文件格式會更容易。",0,"2026-06-15T01:02:29.343467+00:00","2026-06-15T01:02:29.333+00:00","e3b68196-9e64-4c18-a3b6-a73e73bfb367",{"tags":31,"relatedLang":42,"relatedPosts":46},[32,34,36,38,40],{"name":21,"slug":33},"python",{"name":18,"slug":35},"rag",{"name":17,"slug":37},"langgraph",{"name":20,"slug":39},"ollama",{"name":19,"slug":41},"qdrant",{"id":15,"slug":43,"title":44,"language":45},"build-agentic-rag-system-langgraph-en","Build an Agentic RAG system with LangGraph","en",[47,53,59,65,71,77],{"id":48,"slug":49,"title":50,"cover_image":51,"image_url":51,"created_at":52,"category":13},"5478bdd3-1241-4185-858f-345b365b24a8","manus-ai-proves-agents-are-ready-for-real-work-zh","Manus AI 證明代理人已能上工，但定價會決定它的命運","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781444874515-g9dg.png","2026-06-14T13:47:21.276926+00:00",{"id":54,"slug":55,"title":56,"cover_image":57,"image_url":57,"created_at":58,"category":13},"7ea0ef5b-d12c-4b18-b8fd-6ae3de67c296","coinbase-ai-agent-accounts-strict-limits-zh","Coinbase 讓 AI 代理代交易與代支付是對的，但前提是嚴格限權","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781409758550-mjql.png","2026-06-14T04:02:15.334232+00:00",{"id":60,"slug":61,"title":62,"cover_image":63,"image_url":63,"created_at":64,"category":13},"7315dc1e-d3c0-4888-8466-1328e8819be0","peft-llm-fine-tuning-without-full-retraining-zh","PEFT LoRA 微調 LLM 實作指南","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781403475967-xlpz.png","2026-06-14T02:17:26.268208+00:00",{"id":66,"slug":67,"title":68,"cover_image":69,"image_url":69,"created_at":70,"category":13},"5e2ed9f7-4240-429b-97c7-ffd31e4a45ee","llm-research-engineers-post-training-services-zh","LLM研究工程師把後訓練做成服務","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781402598646-2jzs.png","2026-06-14T02:02:46.765352+00:00",{"id":72,"slug":73,"title":74,"cover_image":75,"image_url":75,"created_at":76,"category":13},"09e34016-bbc0-4313-b090-2dbfdd6cf96a","fine-tuning-slms-turns-enterprise-ai-practical-zh","SLM 微調把企業 AI 變可用","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781359406320-5jrq.png","2026-06-13T14:02:55.242488+00:00",{"id":78,"slug":79,"title":80,"cover_image":81,"image_url":81,"created_at":82,"category":13},"06a33326-5420-4e1d-99ff-233939652a44","aspire-microsoft-agent-framework-app-graph-zh","Aspire 把 Agent 圖譜收進一個 AppHost","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781353076983-n0ho.png","2026-06-13T12:17:30.314245+00:00",[84,89,94,99,104,109,114,119,124,129],{"id":85,"slug":86,"title":87,"created_at":88},"4ae1e197-1d3d-4233-8733-eafe9cb6438b","claude-now-uses-your-pc-to-finish-tasks-zh","Claude 開始幫你操作電腦","2026-03-26T07:20:48.457387+00:00",{"id":90,"slug":91,"title":92,"created_at":93},"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":95,"slug":96,"title":97,"created_at":98},"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":100,"slug":101,"title":102,"created_at":103},"95c9053b-e3f4-4cb5-aace-5c54f4c9e044","claude-code-controls-mac-desktop-zh","Claude Code 也能操控 Mac 了","2026-03-28T03:01:58.58121+00:00",{"id":105,"slug":106,"title":107,"created_at":108},"dc58e153-e3a8-4c06-9b96-1aa64eabbf5f","cloudflare-100x-faster-ai-agent-sandbox-zh","Cloudflare 的 AI 沙箱跑超快","2026-03-28T03:09:44.142236+00:00",{"id":110,"slug":111,"title":112,"created_at":113},"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":115,"slug":116,"title":117,"created_at":118},"7379b422-576e-45df-ad5a-d57a0d9dd467","openai-plan-automated-ai-researcher-zh","OpenAI 想做自動化 AI 研究員","2026-03-28T03:17:42.090548+00:00",{"id":120,"slug":121,"title":122,"created_at":123},"48c9889e-86df-450b-a356-e4a4b7c83c5b","harness-engineering-ai-agent-reliability-2026-zh","駕馭工程：從「馬具」到「作業系統」，AI Agent 可靠性的終極密碼","2026-03-31T06:42:53.556721+00:00",{"id":125,"slug":126,"title":127,"created_at":128},"96d8e8c8-1edd-475d-9145-b1e7a1b02b65","mcp-explained-from-prompts-to-production-zh","MCP 怎麼把提示詞變工作流","2026-04-01T09:24:39.321274+00:00",{"id":130,"slug":131,"title":132,"created_at":133},"f2ca7720-b471-4ce5-9336-2a9ac2a876fd","amazon-bedrock-agents-multi-agent-workflows-zh","Amazon Bedrock Agents 進入多代理工作流","2026-04-01T09:30:29.945429+00:00"]