RAG Harness

RAG Harness Engineering|三段 AI API:包含看圖、檢索、回答

RAG Harness Engineering 讓訪客的每個提問背後不只是單純的一次 AI 提示詞呼叫,而是看圖、檢索、回答三段獨立的 AI API。多個 Sub Agent 接力最怕一站污染一站,Harness 架構讓每一站都拿著訪客的原始提問、清楚知道最初的任務目標,從根本上就對污染免疫,累積的雜訊被擋在每一次 hop 的入口之外。

其中 Vision API 把看圖這段工作刻意解耦出來,只負責一件事,把訪客上傳的圖片轉成大多數模型都讀得懂的文字描述,再交給後續的 AI 節點。多模態模型本身就能直接看圖回答問題,這套架構卻先把圖片翻譯成一份文字小抄,目的是讓每一位 Sub Agent 都能在檢索階段的文字海裡,拿著同一份小抄、加上訪客的原始提問,一路下潛。

RAG Harness 的分段解耦

RAG API 由 Diving Agent(調度) 拿著 Master Sitemap,並依照訪客的提問來主導該派出哪一位 Sub Agent(執行,Diving-mode),與該往哪個方向進行。而 Sub Agent 負責判斷該抓哪段內容。每到一個新的深度、面對一個新的場景,手上始終握著小抄與使用者最初的提問。最終 Chat API 收到所有檢索成果之後,用站長定義的人格與回答規範產出最終回應。

Vision API、RAG API、Chat API 三段 AI 節點各自獨立,每段都可以自由配置不同的模型。雲端有 Mistral、OpenAI、Gemini、xAI 等選項,本地運算推薦 vLLM。挑模型不再是一個全局決策,而是分段最佳化,圖片辨識交給擅長視覺的模型、檢索路由交給便宜的小模型、最終回應再用適合表達的模型來收尾。

每段 AI 節點都是一份乾淨的配方

每段 AI 節點不會把所有的上下文往下游堆,Sub Agent 之間交付的,只是清晰的下潛方向與重新注入的原始提問。Vision API 只傳出判讀後的圖片語意。RAG API 在 Diving-mode Loop 的多次潛降中,每一輪找到的目標另外存進累積區,由 Scuba Deep Dive(驗收)判斷檢索是否充足,夠了才把整個累積區交給 Chat API。下游只會拿到上游團隊的成果,碰不到過程。

除了上下文隔離之外,每一個節點的 LLM 任務也被刻意收斂。檢索過程中的每一次呼叫,LLM 不是自由生成長文,而是輸出固定 JSON,先用一句 think 審題、想清楚當下該往哪走,再填 next_mode 與 next_act 兩個作答欄位。這句 think 一物兩用,輸出到前端讓訪客看見 AI 此刻在想什麼,也讓小模型在作答前先把方向收斂一次,到後面選模式、選內容會因此更準。

整段任務收斂成選擇題,只考模型知不知道自己在做什麼、做不做得出判斷,不考長文生成的能力。乾淨的配方加上收斂的輸出,這兩件事一起讓 Llama 3B 這種輕量模型也能跑通整套 RAG 流程。

Prompt Cache:第二次查詢起的成本剩零頭

整個運作流程中,token 消耗量最大的是輸入不是輸出,比例大約是 10:1。佔比最大的提示詞、Master Sitemap、所有頁面或文章 chunk 全部都是靜態內容,從架構層面就被歸類為 cache 段,連 #ROLE、#RULES、#OUTPUT、#SOUL.md 也一併處理。網站主不需要自己劃這條邊界,靜態的歸靜態、動態的歸動態,從第二次查詢起,最大宗的開銷只剩零頭。

Main · Pipeline Flow Decoupled · DI Visitor Query Text + optional image + /vision_context (option) Vision API Context Recipe #ROLE cache #TASK cache /Master Sitemap cache /Image file Raw user query Diving Agent Read Master Sitemap Analyze query Select Diving-mode RAG API Context Recipe #ROLE cache #RULES cache #OUTPUT cache ### ROLE {{ agent_role }} ### RULES {{ agent_rules }} ### OUTPUT { "think": "...", "next_mode": "...", "next_act": "..." } /Branch Sitemap cache Raw user query /vision_context option LLMs are stateless Clean context per hop No full-site read Progressive disclosure Edge SLMs workable Diving-mode Loop ↻ Follow the descent line Agent picks mode per hop strict · fetch chunk recommend · list pages deep_dive · drill down investigate · rethink query option Scuba Deep Dive AI self-scores completeness Another dive Surface Chat API Assemble /rag_context Generate final response Chat API Context Recipe #SOUL.md cache #RULES cache /rag_context append + Diving-mode Loop ... + Scuba ... Raw user query /vision_context option SSE stream Chat Window Browser localStorage only no upload

RAG Harness 的最小化紀律

每一 hop 用乾淨的配方、每一段任務都收斂到最小、靜態與動態邊界清楚,這些設計沒有一項是裝飾性的。每段 AI 都做成一個 MVP,Minimum Viable Product 的思路,以最低的代價達成最基本的可行性。每個節點只做剛好夠用的事,配方剛好夠乾淨、模型剛好夠小、輸出剛好夠收斂。當下的實踐是多個輕量模型分段配置,未來若多模態小模型成熟,整段用單一模型也照樣成立。

RAG Harness 的紀律不在模型怎麼配,而在每一 hop 的任務約束到多精細。整套架構之所以一路往最小靠攏,是因為這條路最後通往的,是把運算從網站主的帳單上搬走,搬進使用者的裝置。打遊戲靠自己的顯示卡,看影片靠自己的螢幕,問 AI 終究也會回到訪客自己的裝置裡進行推理。

相關文章

向量資料庫不是 RAG 的必要條件,它只是其中一種把資料餵給 AI 的方式。當資料本來是混亂的、缺乏清楚邊界的,向量化可以幫助模型從大量文字中猜測語意相關性,這種做法有它的價值。但如果內容本來就有秩序,問題就不再是「怎麼從混亂中硬算相關」,而是「怎麼讓 AI 先看到最重要的判讀線索」。真正有效的 RAG,不一定是先把全文切碎、壓成向量再回頭猜答案;也可以是先把內容整理成 AI 能逐層理解的路徑,先降低上下文的不確定性,再展開細節。

「晶片即模型」的意思是,當每台裝置都內建一顆刻進晶片的 AI 小模型,模型不再是需要載入的軟體,而是隨時待命的運算晶片,應用程式所需的 LLM 推理可直接在訪客裝置端就地完成,讓網站主的 AI 運算成本歸零,這正是 RAG Chatbot 的終極目標。

小模型 Llama 3.2 3B,是一個僅有 3B 參數,小到不能再小的語言模型。你問它問題,它只能根據 3B 的訓練資料回答你。它不知道你的網站寫了什麼,不知道你發了哪篇文章,對你近期累積的內容一無所知。用它來跑網頁問答,原本是天方夜譚。