態(tài)知識(shí)圖:給 AI Agent 裝長(zhǎng)期記憶的最小 20 行方案)
Graphiti 時(shí)態(tài)知識(shí)圖給 AI Agent 裝長(zhǎng)期記憶的最小 20 行方案【免費(fèi)下載鏈接】graphitiBuild Real-Time Knowledge Graphs for AI Agents項(xiàng)目地址: https://gitcode.com/GitHub_Trending/grap/graphiti它解決什么問(wèn)題如果你在做一個(gè) AI Agent發(fā)現(xiàn)它總是失憶——用戶上次說(shuō)過(guò)的話轉(zhuǎn)頭就忘數(shù)據(jù)在某時(shí)某刻是什么樣子也說(shuō)不清那 Graphiti 就是你要找的 AI Agent 記憶層。它把對(duì)話、業(yè)務(wù)數(shù)據(jù)、外部?jī)?nèi)容實(shí)時(shí)增量地吃進(jìn)來(lái)實(shí)時(shí)構(gòu)建一張可隨時(shí)查詢的時(shí)態(tài)知識(shí)圖事實(shí)帶雙時(shí)間戳歷史時(shí)點(diǎn)查詢不用重算全圖。核心能力一覽說(shuō)白了數(shù)據(jù)丟進(jìn)去它自動(dòng)抽實(shí)體和關(guān)系查詢時(shí)向量、關(guān)鍵詞、圖遍歷三路一起打分而且每條事實(shí)都知道自己何時(shí)為真。能力一句話說(shuō)明對(duì)你意味著什么實(shí)時(shí)增量更新新內(nèi)容即時(shí)入圖不批量重建記憶永遠(yuǎn)最新省掉整庫(kù)重跑雙時(shí)態(tài)模型每條關(guān)系帶生效時(shí)間和攝入時(shí)間當(dāng)時(shí)是什么情況這種問(wèn)題能直接答混合檢索語(yǔ)義向量 BM25 關(guān)鍵詞 圖遍歷組合低延遲出結(jié)果不靠 LLM 兜底匯總自定義本體用 Pydantic 模型定義自己的實(shí)體和關(guān)系按你的業(yè)務(wù)建模而不是套用默認(rèn)結(jié)構(gòu)多存儲(chǔ)后端Neo4j、FalkorDB、Kuzu、Neptune 都支持用你手里現(xiàn)成的圖數(shù)據(jù)庫(kù)就能跑最快上手路徑跑起來(lái)之前只需要四樣?xùn)|西Python 3.10pip install graphiti-core一行裝好本地圖數(shù)據(jù)庫(kù)Neo4j 5.26 或 FalkorDBDocker 起都行配好OPENAI_API_KEY實(shí)體抽取和向量化都用它倉(cāng)庫(kù)里examples/quickstart/有官方樣例對(duì)照改就行下面這 20 行就是連接 → 建索引 → 喂一條數(shù)據(jù) → 混合搜索的完整閉環(huán) ?import asyncio from graphiti_core import Graphiti from graphiti_core.nodes import EpisodeType async def main(): # 連接本地 Neo4j g Graphiti(bolt://localhost:7687, neo4j, password) # 建索引和約束只需跑一次 await g.build_indices_and_constraints() # 喂一段文本框架自動(dòng)抽出實(shí)體和關(guān)系 await g.add_episode( nameEpisode 0, episode_bodyKamala Harris is the Attorney General of California., sourceEpisodeType.text, ) # 混合檢索語(yǔ)義向量 BM25 關(guān)鍵詞 results await g.search(Who is the California Attorney General?) print(results[0].fact) await g.close() asyncio.run(main())跑完你會(huì)拿到一條條帶生效時(shí)間區(qū)間的事實(shí)陳述而不是 RAG 那種相似度比較高的幾段文字——這是兩者最本質(zhì)的區(qū)別。三個(gè)真實(shí)場(chǎng)景電商推薦先把誰(shuí)喜歡什么畫成圖你會(huì)用它把商品頁(yè)、用戶評(píng)論、客服對(duì)話不斷喂進(jìn)圖里。倉(cāng)庫(kù)里 TinyBirds 這個(gè)樣例會(huì)把商品TinyBirds Wool Runners、用戶jess、尺碼變體5T、8T……自動(dòng)抽成實(shí)體再用MENTIONS、INTERESTED_IN、HAS_SIZE_VARIANT這類關(guān)系串起來(lái)。再問(wèn)jess 對(duì)哪些商品有興趣返回的是結(jié)構(gòu)化的圖路徑而不是一堆文本碎片??头?Agent讓它真的記住客戶你會(huì)用它把每輪對(duì)話用add_episode寫進(jìn)圖里??蛻粝麓握f(shuō)我上次講過(guò)……時(shí)Agent 直接從圖里取回歷史說(shuō)法和它的時(shí)間范圍不靠上下文窗口硬扛。新對(duì)話只更新相關(guān)節(jié)點(diǎn)和邊老圖不用動(dòng)。歷史查詢審計(jì)和當(dāng)時(shí)是什么樣事實(shí)變了比如換崗、改地址Graphiti 不刪舊關(guān)系而是用雙時(shí)態(tài)字段把它標(biāo)記為失效。于是2015 年時(shí)誰(shuí)在加州檢察長(zhǎng)任上這條用戶信息在攝入前長(zhǎng)什么樣都能按時(shí)間點(diǎn)回答合規(guī)審計(jì)、決策回溯這類場(chǎng)景直接受益。容易踩的坑 調(diào)優(yōu)建議 坑一忘了建索引搜索又空又慢現(xiàn)象連接成功、數(shù)據(jù)也進(jìn)去了search卻返回空或慢得出奇。原因Graphiti 依賴圖庫(kù)里的向量和全文索引這些不會(huì)自動(dòng)存在。解法啟動(dòng)時(shí)先調(diào)一次build_indices_and_constraints()開發(fā)環(huán)境想重置就帶delete_existingTrue重建。坑二Graph not found: default_db報(bào)錯(cuò)現(xiàn)象一啟動(dòng)就拋 Neo4j 的 DatabaseNotFound。原因驅(qū)動(dòng)默認(rèn)連的數(shù)據(jù)庫(kù)名和你實(shí)際用的對(duì)不上。解法構(gòu)建驅(qū)動(dòng)時(shí)顯式傳database參數(shù)指向真實(shí)庫(kù)名別改完默認(rèn)值再排查半天。調(diào)優(yōu)大批量歷史數(shù)據(jù)入庫(kù)慢現(xiàn)象一次性灌幾百份文檔慢到想殺進(jìn)程。原因每條 episode 都要過(guò) LLM 抽實(shí)體、去重串行時(shí)就是瓶頸。解法歷史存量用框架提供的批量接口并行入庫(kù)日常新增的對(duì)話走實(shí)時(shí)單條插入兩者分開跑。周邊與延伸Neo4j默認(rèn)圖存儲(chǔ)后端向量與全文索引成熟你已有 Neo4j 集群就能直接接。FalkorDBRedis 生態(tài)的實(shí)時(shí)圖數(shù)據(jù)庫(kù)延遲低官方把它列為替代后端Docker 一鍵起。MCP Server倉(cāng)庫(kù)自帶mcp_server/子項(xiàng)目把圖查詢能力封裝成 MCP 工具Cursor 這類 IDE 里直接調(diào)用省掉自己寫集成層。底層設(shè)計(jì)思路來(lái)自 Zep 團(tuán)隊(duì)發(fā)表的 Zep 論文arXiv 2501.13956倉(cāng)庫(kù)images/目錄里留了論文首頁(yè)截圖想快速理解時(shí)態(tài)知識(shí)圖的雙時(shí)間戳動(dòng)機(jī)可以翻一翻【免費(fèi)下載鏈接】graphitiBuild Real-Time Knowledge Graphs for AI Agents項(xiàng)目地址: https://gitcode.com/GitHub_Trending/grap/graphiti創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考