支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


GraphRAG的100%!把Agent接入知识图谱,自主精准找到数据!与LangGraph融合最终形态!day1

发布日期:2025-04-13 05:23:43 浏览次数: 1608 作者:一意AI增效家
推荐语

GraphRAG技术革新,将Agent精准接入知识图谱,实现数据自主精准定位。LangGraph融合后的终极形态,开启智能体新篇章。

核心内容:
1. GraphRAG技术详解,实现100%准确率的Agent数据定位
2. Agent在多智能体系统中的精准任务执行与工作流管理
3. 实操环境搭建与知识图谱构建,手把手教学,实现Agent智能体的高效应用

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家
hi~
动手做过Agent项目的朋友都知道!
Agent实在太难控!
让他往东,偏往西!
特别在MAS(多智能体系统)上!
我们用大量数据微调,以为能得到一个稳定答案
但,太天真!
100%准确率的RAG,从数据入库那一刻!
到用户端发起查询,充满选择,共经历这些:
想做高分RAG!我们之前已经拆开过,深入去讲过用知识图谱增强RAG
问:
如何制备大尺寸的WSe2,在实验室制备中应该注意哪些方面的调整?
Agent:
'从笔记本中的信息可以看出,制备大尺寸WSe2的方法有多种,包括冷壁CVD、卤化物辅助的大气压生长法、金属有机化学气相沉积(MOCVD)以及扩散控制的外延生长等。这些方法各有优缺点,且在实验室制备中需要注意不同的调整。\n\n1. 冷壁CVD显示出成功,说明在温度控制和反应气体流量方面可能需要精确调节。\n2. 卤化物辅助的大气压生长法成功生产了大尺寸的WSe2,可能需要注意卤化物的选择和浓度。\n3. MOCVD展示了高度可扩展性,可能需要在金属有机物的选择和反应条件上进行优化。\n4. 扩散控制的外延生长在蓝宝石上实现了大面积WSe2单层的合并,说明基底材料的选择和表面处理可能是关键因素。\n\n此外,笔记中提到对WSe2合成的生长机制的全面理解仍然缺失,表明在实验室制备中需要对生长过程进行深入研究和优化'

Agent能根据任务,自主去探索知识图谱,或任何数据库!

然后找到能支撑解决问题的,直接数据!

不存在模糊相似!更不存在胡编乱造!

今天,也是【灵丹】系列的加餐!
如果你未了解,在这了解
上线!“灵丹”-知识图谱+RAG项目官方wiki
由于上下文长度+幻觉的限制,我们不能一次给LLM做太多任务
现在,我们在生产系统开发上
把任务,拆成
一个个的清晰明确,小任务!以工作流的方式,让Agent完成!
把它限在一个象限里干活!杜绝胡思乱想!
一个个小任务干完!大任务也干完了!
比如可以用他做:
a.长文本的标书撰写,每个智能体负责一部分,最后合成高质量标书
b.做医疗领域MAS,每一个节点是一个tool,合成上游Agent做健康管理
c.让他做电脑配置清单的推荐,智能体共享记忆解决兼容性问题
N种复杂任务......
都合适,价值非常!
本身这个系列,是langgraph动手做时实践的材料
雄哥把他放到前面来,大家知道他价值,学基础时,更有目标感!
把他独立出来,我们准备做这些内容:
① Agent+graphRAG的100%准确率如何来的?有什么价值?
② 动起手来!在win11系统搭建实践环境!
③ 把PDF做成Agent探索的知识图谱范式!元素+连接文本块
④ 接入KG做Agent的工作流,让智能体畅顺地探索数据!
整个内容,以实操为主,每个人都能收到结果,然后再返到前面学基础!
方可融会贯通!
本次实践环境
操作系统:win11
知识图谱:neo4j
建模方案:关键节点+原事实块
环境管理:conda、jupyter
python版本:3.10
示例数据:Wse2制备资料.pdf(由会员提供)
RAG及Agent框架:langchain+langgraph
大模型:OpenAI API(本地模型也可,之前做过本地方案)
本系列所有实践数据+代码,均以上传至会员盘,通过知识星球即可获取
还不是会员?
现在,我们正在为会员交付【五大项目】,你一定要识别下方二维码,加入学习,或联系一意,为你赋能

第一部分:100%准确率如何来的?有什么价值?

一个高分RAG,数据入库+查询策略各占一半比重
相似≠相关
使用知识图谱作为数据库
找到的=相关的
1.1 数据入库!50%
在知识图谱中,不存在的客观事实,不存在节点
我们除了把节点提取出来,还会把数据源中的节点相关的信息抽取出来
这样做,对比传统的文本块向量嵌入,有这些优势:
a. 摒弃与节点无关信息,降低模型处理时幻觉
传统文本分块中,有大量无关或不相干的数据,给大模型总结时,会成为干扰
b. 让有效信息塞在大模型的上下文长度中
智能体会找到根数据,找到的就是相关的,除非你的top_k=1,否则你的文本块大概率会超出长度,截断了,大模型处理自然会差
更多的优势和劣势,我们在“灵丹”系列已经展开聊过
你可以在这里了解RAG-灵丹
上线!“灵丹”-知识图谱+RAG项目官方wiki

1.2 查询策略
除了数据入库,在查询策略上
我们为每个查询,都做了一个多步查询策略
以前,我们做RAG用查询扩写、多步查询等各种策略
手把手做高阶RAG!最牛五大知识检索!RAG性能直线提升!44/45
现在,我们可以根据任务,给智能体安排一种或多种查询策略
这些策略,都是根据任务来的
确保能解决问题
有了这个行动/查询计划
智能体能一步步去完成
注意!
是一步步地完成
绕过上下文的限制,把大象一口口吃下去
每一步,都有一个独立的Agent来支撑
1个agent=1个大模型
说这么多,来不及上手跑一跑

第二部分:win11系统的环境搭建

话不多说!
我们在win系统,搭建整个实践
在开始前,需要你本地有AI环境,如果你未有AI基础环境,在这里
第四天!0基础微调大模型+知识库,部署在微信!手把手安装AI必备环境!4/45
搭建好的,跟着操作
2.1 安装neo4j
不同的系统,安装的方法不同的,你可以在neo4j官网
找到自己系统的搭建方法
win11的,跟着雄哥
雄哥在会员盘中,上传了一个neo4j的文件夹
这就是主程序
不管你把他放在哪里,不能有中文路径,比如
记住这个路径!
现在按键盘win+R键,呼出运行
输入以下指令,并点确定
sysdm.cpl
以上,neo4j就可以启动了
打开Windows PowerShell
输入
neo4j console
启动后,你需要打开7474端口,就可以进入管理界面!
注意选择bolt模式!设置账号密码!
一定要记住这个账密,后面我们需要连接他,构建知识图谱!

2.2 搭建实践环境
我们用conda管理环境
1个课程=1个环境
避免依赖冲突
创建环境!
环境名称agent,指定Python3.10版本
conda create -n agent python=3.10
激活环境!
conda activate agent
安装依赖!
在安装的时候,你需要cd先进入存放文件的目录
pip install -r requirements.txt
进入jupyter实操环境!
jupyter lab
他会自动跳转到浏览器!
这里,两节课的代码,都在了!
先打开第一P的内容!
到这里,说明你的环境已经全部搭建好了!
接下来,就进入代码实操!

第三部分:知识图谱关键节点+事实建模

现在,雄哥要把PDF文档,都做成知识图谱
我们用到的是会员提供的数据(这份数就有8000多个节点)
你也可以换成任何自己的pdf数据,放到文件夹下就行
我们写的代码会加载目录下,所有pdf文件!
接下来,就是一步步往下跑
我们沿着一些核心代码
展开!
jupyter使用,是一行行的执行代码,交互式的!
很简单!
如果你不懂怎样用,你要百度一下!
连接知识图谱!
这里,默认开放的端口是7687,账密就是刚刚设置这个
# 连接你本地的neo4jos.environ["NEO4J_URI"] = "bolt://localhost:7687"os.environ["NEO4J_USERNAME"] = "neo4j"os.environ["NEO4J_PASSWORD"] = "password"
graph = Neo4jGraph(refresh_schema=False)
graph.query("CREATE CONSTRAINT IF NOT EXISTS FOR (c:Chunk) REQUIRE c.id IS UNIQUE")graph.query("CREATE CONSTRAINT IF NOT EXISTS FOR (c:AtomicFact) REQUIRE c.id IS UNIQUE")graph.query("CREATE CONSTRAINT IF NOT EXISTS FOR (c:KeyElement) REQUIRE c.id IS UNIQUE")graph.query("CREATE CONSTRAINT IF NOT EXISTS FOR (d:Document) REQUIRE d.id IS UNIQUE")
加载你本地的pdf!
这里,我们使用pdf文件,放在E盘中,不管你放在哪里,直接把下方的文件路径,改为你自己的文件路径!
# 定义 PyPDFDirectoryLoader 实例loader = PyPDFDirectoryLoader(    path="E:\\neo4j000\\data",    glob="**/[!.]*.pdf",    silent_errors=False,    load_hidden=False,    recursive=False,    extract_images=False,    password=None,    mode="page",    headers=None,    extraction_mode="plain",    # extraction_kwargs=None,)
# 加载 PDF 文件documents = loader.load()
# 打印加载的文档for doc in documents:    print(doc)
加载成功,会打印出加载文件结果!
写提取的提示词!
这个提示词,你可以根据自己的数据来写,但是你要明白,他背后的原理是什么,才能写出来,如果你不太懂,跟着雄哥的模板来写就行
因为会员提供的源数据是英文,所以我们写一个英文提示词
如果你的数据是中文的,那就要写中文提示词
# 定义提取知识图谱的关键元素和原子事实construction_system = """You are now an intelligent assistant tasked with meticulously extracting both key elements andatomic facts from a long text.1. Key Elements: The essential nouns (e.g., characters, times, events, places, numbers), verbs (e.g.,actions), and adjectives (e.g., states, feelings) that are pivotal to the text’s narrative.2. Atomic Facts: The smallest, indivisible facts, presented as concise sentences. These includepropositions, theories, existences, concepts, and implicit elements like logic, causality, eventsequences, interpersonal relationships, timelines, etc.Requirements:#####1. Ensure that all identified key elements are reflected within the corresponding atomic facts.2. You should extract key elements and atomic facts comprehensively, especially those that areimportant and potentially query-worthy and do not leave out details.3. Whenever applicable, replace pronouns with their specific noun counterparts (e.g., change I, He,She to actual names).4. Ensure that the key elements and atomic facts you extract are presented in the same language asthe original text (e.g., English or Chinese)."""
construction_human = """Use the given format to extract information from the following input: {input}"""
construction_prompt = ChatPromptTemplate.from_messages(    [        (            "system",            construction_system,        ),        (            "human",            (                "Use the given format to extract information from the "                "following input: {input}"            ),        ),    ])
你现在是一个智能助手,负责从长文本中细致地提取关键元素和原子事实关键元素:对文本叙述至关重要的核心名词(例如人物、时间、事件、地点、数字)、动词(例如动作)和形容词(例如状态、情感)原子事实:最小的、不可分割的事实,以简洁的句子形式呈现。这些包括命题、理论、存在、概念以及隐含的逻辑、因果关系、事件顺序、人际关系、时间线等元素要求:确保所有识别出的关键元素都反映在相应的原子事实中你应该全面提取关键元素和原子事实,特别是那些重要且可能被查询的内容,不要遗漏细节只要适用,用具体的名词替换代词(例如将“我”、“他”、“她”替换为实际名字)确保你提取的关键元素和原子事实与原文使用相同语言(例如英语或中文)
对文本块进行分块+提取关键节点+事实!
我们按2000 token为一个文本块来分!
然后,导入关键节点和事实的数据!
他们是一个个组成的文本块
接下来,在块中间,创建关系和链接
# 2k的chunk_sizeasync def process_document(text, document_name, chunk_size=2000, chunk_overlap=200):    start = datetime.now()    print(f"Started extraction at: {start}")    text_splitter = TokenTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)    texts = text_splitter.split_text(text)    print(f"Total text chunks: {len(texts)}")    tasks = [        asyncio.create_task(construction_chain.ainvoke({"input":chunk_text}))        for index, chunk_text in enumerate(texts)    ]    results = await asyncio.gather(*tasks)    print(f"Finished LLM extraction after: {datetime.now() - start}")    docs = [el.dict() for el in results]    for index, doc in enumerate(docs):        doc['chunk_id'] = encode_md5(texts[index])        doc['chunk_text'] = texts[index]        doc['index'] = index        for af in doc["atomic_facts"]:            af["id"] = encode_md5(af["atomic_fact"])    # 导入块/原子事实/关键元素    graph.query(import_query,             params={"data": docs, "document_name": document_name})    # 在块之间创建下一个关系    graph.query("""MATCH (c:Chunk)<-[:HAS_CHUNK]-(d:Document)WHERE d.id = $document_nameWITH c ORDER BY c.index WITH collect(c) AS nodesUNWIND range(0, size(nodes) -2) AS indexWITH nodes[index] AS start, nodes[index + 1] AS endMERGE (start)-[:NEXT]->(end)""",           params={"document_name":document_name})    print(f"Finished import at: {datetime.now() - start}")

开始提取!
await process_document(text, "wse2", chunk_size=2000, chunk_overlap=100)

看结果!
现在,去到neo4j中!看他提取的结果!
可以看到,围绕一个节点,提取了很多围绕他的节点和事实文本
这,就是数据核心!
高分RAG,都是有这些高质量数据,开始的!
我们来看看这些数据的token长度!
基本都是10-30 token为主!
就是提取出来的一段话,然后加上他的节点!

看看连接起来,最多的5个节点有哪些!
这可以让我们直观看到知识图谱的情况!
现在已经按关键节点+事实文本这样方法做的了!
下一步,我们要把他接入agent中!
让agent可以自主地探索这份数据
受限篇幅,我们明天继续!
这个系列,价值非常!
希望每个人都能掌握!

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询