本文的 chunk 資料中登錄了《名偵探柯南》的資料(另外也有少量《ONE PIECE》和《光之美少女!名偵探》)。如果你不認識《名偵探柯南》,建議先看動畫或把單行本全部讀完再來讀這篇文章。
大家是不是把 GraphRAG 的所有判斷都交給 LLM 了?如果是不需要寫文章的判斷,那就交給擅長判斷的模型來做就好了!因此,我嘗試做了一個不使用 embedding、向量資料庫、圖資料庫的 GraphRAG。判斷交給 Jev,回答交給 LLM。
一般的 RAG 會找出和問題語意相近的文章。麻煩的是,答案可能是用別的名字寫的,或是必須沿著 chunk 一路追到答案。
「工藤新一現在住在哪裡?」
答案是毛利小五郎的偵探事務所。新一被藥物變成小孩,並以「江戶川柯南」的身份待在毛利家。不過資料裡寫的是這樣的句子:
柯南在隱瞞真實身分的情況下寄住在毛利蘭家,並以蘭的父親毛利小五郎經營的毛利偵探事務所作為據點解決案件。
問題問的是新一,但答案寫在柯南的文章裡,所以只靠語意相近去找,很難找到。GraphRAG 就可以沿著「工藤新一 → 江戶川柯南 → 毛利偵探事務所」一路找到這句話。

GraphRAG 雖然方便,但很花錢。因為 GraphRAG(方法很多種)會讓 LLM 去做從文章中擷取人物與關係的工作。
但仔細看內容,其實很多都只是可以用是/否解決的判斷而已。
最近出現了「判斷專用」模型,所以我想:如果交給它們做,會不會便宜一些?於是試了看看。
Jev 是 TypeSafe AI 的判斷專用模型。它不會寫文章,只要丟問題給它,就會回傳「是」的可信度,範圍是 0~1。
丟給 Jev 的內容與回傳值
丟入內容:問題「工藤新一現在寄住在哪個人的家中,並以哪裡為據點解決案件?」
提問 :這個問題句中有「工藤新一」嗎?
回傳值 :0.95
因為只有數字,所以可以像一般 if 句一樣,用「超過 0.5 就往下走」來決定行為。

Jev 也不是完全不會飄移的(請把它理解成「比較不容易飄移」的程度)
這次的整體架構
實際畫面大概是這樣
就是這樣。不過有點雜亂、看起來不太好懂,所以我會按順序說明。
我選了 6 個「這裡就是判斷」的地方,全部交給 Jev。
只有最後寫答案時才會用到 LLM(Claude Haiku4.5)。

上面提到的「這個人」「這兩個人有關係」到底對應什麼,是由主資料決定的。
毛利小五郎/別名:小五郎、沉睡的小五郎、毛利大叔、老爸、毛利先生/種別:角色/說明:蘭的父親。經營毛利偵探事務所
種別與關係部分就是所謂的本體論(ontology)。可以把主資料理解成把這次資料中的實體套進這個本體論後的結果。程式會參照這份主資料來建構圖。

我特別做的設計,是故意把關係做得比較粗。
角色之間只用「有關係」這一種,至於家人、師徒等關係則作為例子寫進句子裡。
毛利蘭和毛利小五郎有關係(家人、青梅竹馬、夥伴、師徒、敵對等。過去或現在都可以)
如果拆得太細,詢問次數會變多,而且分數會被分散,不容易跨過門檻。
家人或敵對這種細節,最後交給 LLM 看本文就能判斷,所以圖只要知道有連起來就夠了。

每篇文章都先用主資料裡的名稱抓候選,再問 Jev「有出現嗎?」、「有關係嗎?」,只把像是「是」的東西存進圖裡。比起用 LLM 擷取,成本低很多(試算大約是 20~30 分之 1)。

先決定起點,然後一路往旁邊走,直到「已經能回答了嗎?」變成 Yes 為止(最多 3 次)。 什麼時候停也是由 Jev 決定,所以如果 1 次就能回答,就只會停在起點。
「住在發明柯南常用道具的人家裡的是誰?」
實際畫面如下

答案:灰原哀住在阿笠博士家,而和發明柯南常用道具的人一起住的人就是灰原哀。
如果對所有文章 × 所有實體都詢問,330 篇 × 212 個就是 69,960 問。實在太多了,所以會先縮小候選範圍。
首先用程式檢查主資料裡的名稱/別名是否出現在本文中(不使用 Jev、免費)。 雖然會統一表記差異,但不會先切成單詞。像「名偵探柯南」會同時成為作品和江戶川柯南的候選,至於是哪一個,交給 Jev 判斷。
縮小前,某個問題丟給 Jev 的輸入量大約有 7 萬 tokens;縮小後,只要約 6,400 tokens 就夠了。
「琴酒平常開的車是什麼來著?」

只有「琴酒的愛車是黑色保時捷 356A」拿到 0.97,其餘都不到 0.1。雖然主資料裡沒有「愛車」這種關係,還是成功找到了。簡單的問題常常可以靠這種模式在 0 hop 直接回答。
「偵探大叔的女兒是誰?」
像這種名字沒出現的問題,就會改問「是不是同一個人?」。毛利小五郎以 0.81 被選中,而小五郎的文章裡有「女兒蘭」,所以就能回答毛利蘭。


Jev 會把它在何處判斷了什麼全部保留成分數,所以事後也能追蹤理由,這點也很實用。
以下是建立在「主資料正確、分數門檻設定得當」前提下的驗證結果。
不能保證精度。
在同一個圖、同樣 35 題、同一個回答用的 LLM 下,只改起點尋找方式與判斷工具來比較。

③ 因為無法判斷「已經夠了嗎?」,所以只能把蒐集到的文章全部交給 LLM,導致輸入文字(token)暴增。② 因為每次判斷都要呼叫 LLM,所以成本最高,比①還高出 4 倍以上。

驗證:需要 hop 的問題上面是一般問題的結果比較。接下來是把問題改成「題目裡的名稱和答案不在同一篇文章裡,必須沿著 chunk 走」的情況,再比較一次。

在需要 hop 的問題上,把判斷交給 Jev 的①表現最好。② 也會靠推論往下 hop,所以表現接近,但途中誤判稍微明顯。③ 因為不做判斷所以便宜又快,但也因為不推論,所以無法正確 hop。
回頭看,能看出這次的題目類型,剛好對①比較有利![:bow_tone1:]
請以這次驗證條件下的參考值來看待。
Jev 不會寫文章,所以不會硬編造不存在的人物;但如果它判斷錯誤、漏掉重要文章,就可能把本來答得出來的問題拒絕掉。
所以比較適合把它看成「不太容易產生沒有根據的答案」。另外 Jev 並不是決定性的判斷工具,因此搜尋結果不同時,hop 也可能改變,答案也可能出現波動。
「山治二年修行的國家的女王是什麼果實能力者?」
中間的「卡瑪巴卡王國」不在主資料裡,所以路線就斷掉了(突然變成 ONE PIECE 抱歉)

如果不認識「卡瑪巴卡王國」,請先把《ONE PIECE》全卷看完再回來讀這篇文章
文章一多,主資料裡沒有的新東西就會一直冒出來。每次都靠人工補上,沒辦法持續,所以需要能自動養成的機制。種別和關係通常不會輕易改變,所以理論上只要增加實體就夠了。

這裡同樣是大量篩選交給 Jev,寫說明則交給 LLM。
雖然前面都在講好聽的地方,但...
不是不能用,但……操作起來非常敏感![:sweat_smile:]
老實說,我的感想就是這樣...
反覆試、修正門檻、補上缺少的實體,再試一次。
與其說是方便工具,比較像是需要花心力一起養成的系統。
如果是模糊的問題或摘要,標準 RAG 或 MSGraphRAG 的全域搜尋會更適合。
我認為這是要看使用場景搭配組合的東西。
Jev 是一筆一筆問候選,因此文章越多,詢問次數也會增加。
不過,放進 RAG 的文章通常會集中在某個固定領域。同一個領域裡,就算文章變多,人物與關係也會逐漸補齊,增長幅度應該會趨於平緩。

所以就算資料稍微變多,應該也不會變成倍數成長,這是我的看法。
這部分我還沒實測,所以仍然只是推測
它並沒有變成當初想像中的「我心目中最強的 RAG」![:sob:] 前置準備和調校超級麻煩,如果團隊裡沒有 RAG 狂熱者,實務上很難運作![:dizzy_face:]
實際驗證後,我感受到自己腦中原本有「RAG=Embedding」這種常識,所以能擺脫向量有點新鮮,哈哈。Jev 以及其他判斷專用模型也陸續登場,而 2026/10 時點也已經有像 haiku5.5 這種高速輕量 LLM 模型出現,因此不再被向量綁住,能從更廣的選項中挑選適合工作負載的方案,是很好的事情。
最後還有一點反省...
我這個人在做驗證資料(問題)時,總是會忍不住做出符合自己腦中故事走向的資料。(想法太強烈了……)先有結論再去設計驗證資料是沒有意義的,之後想要改善這點![:bow_tone1:]
之後也想再做更多驗證。