據(jù)庫與Agent記憶)
146、圖數(shù)據(jù)庫與Agent記憶調(diào)試這個(gè)問題,我從凌晨三點(diǎn)半開始。Agent明明記住了用戶說過“最近在準(zhǔn)備雅思”,但到了第五輪對(duì)話,它突然問用戶“你最近在忙什么”。不是沒記,是記憶檢索的時(shí)候,那把“雅思”和“備考”“出國”串起來的因果鏈斷了。向量數(shù)據(jù)庫的top-k召回,把“雅思”這個(gè)embedding拉回來了,但“為什么準(zhǔn)備雅思”以及“雅思和他上次抱怨的工作壓力有什么關(guān)系”這種多跳關(guān)系,完全丟了。那一刻我意識(shí)到,用單純向量存記憶,就像把一大抽屜的紙條倒進(jìn)了一個(gè)桶里,你只能聞到“紙條”的味道,卻永遠(yuǎn)找不回那張寫著“因?yàn)橄朕D(zhuǎn)行去外企”的紙條。后來我把Agent記憶的存儲(chǔ)結(jié)構(gòu)改成了圖數(shù)據(jù)庫。圖數(shù)據(jù)庫這玩意兒,剛接觸的時(shí)候覺得它就是個(gè)花架子,無非是節(jié)點(diǎn)和邊,有什么稀奇。但當(dāng)你真正用Cypher寫出一條跨三層的路徑查詢時(shí),那種“從記憶碎片里焊出一條邏輯鏈”的爽感,是任何KV存儲(chǔ)都給不了的。這篇筆記,我想把圖數(shù)據(jù)庫怎么和Agent記憶結(jié)合起來這件事,從踩坑到落地,掰開揉碎講清楚。先說為什么非得是圖。向量數(shù)據(jù)庫擅長(zhǎng)找“相似的”,但不擅長(zhǎng)找“相關(guān)的”?!跋嗨啤笔莈mbedding空間里的距離,“相關(guān)”是實(shí)體之間的語義連接。用戶說“我喜歡喝手沖咖啡”,又說“最近總是失眠”,這兩句話的向量距離可能很遠(yuǎn),但如果你在圖里建立“手沖咖啡”和“失眠”之間的潛在關(guān)系——咖啡因影響睡眠——那Agent就能在用戶下次說“今天不喝咖啡了”時(shí),接上一句“是因?yàn)槭邌??”這種關(guān)聯(lián),就是圖數(shù)據(jù)庫的看家本領(lǐng)。當(dāng)時(shí)我設(shè)計(jì)的第一版schema,簡(jiǎn)單粗暴:一個(gè)Memory節(jié)點(diǎn),一個(gè)Entity節(jié)點(diǎn),Memory通過HAS_ENTITY指向Entity。想著還挺美,結(jié)果跑了一周,圖里出現(xiàn)了兩千多個(gè)“