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

动手做过Agent项目的朋友都知道!

Agent实在太难控!

让他往东,偏往西!

特别在MAS(多智能体系统)上!

我们用大量数据微调,以为能得到一个稳定答案

但,太天真!

100%准确率的RAG,从数据入库那一刻!

到用户端发起查询,充满选择,共经历这些:

img

想做高分RAG!我们之前已经拆开过,深入去讲过用知识图谱增强RAG

img

问:

如何制备大尺寸的WSe2,在实验室制备中应该注意哪些方面的调整?

Agent:

‘从笔记本中的信息可以看出,制备大尺寸WSe2的方法有多种,包括冷壁CVD、卤化物辅助的大气压生长法、金属有机化学气相沉积(MOCVD)以及扩散控制的外延生长等。这些方法各有优缺点,且在实验室制备中需要注意不同的调整。\n\n1. 冷壁CVD显示出成功,说明在温度控制和反应气体流量方面可能需要精确调节。\n2. 卤化物辅助的大气压生长法成功生产了大尺寸的WSe2,可能需要注意卤化物的选择和浓度。\n3. MOCVD展示了高度可扩展性,可能需要在金属有机物的选择和反应条件上进行优化。\n4. 扩散控制的外延生长在蓝宝石上实现了大面积WSe2单层的合并,说明基底材料的选择和表面处理可能是关键因素。\n\n此外,笔记中提到对WSe2合成的生长机制的全面理解仍然缺失,表明在实验室制备中需要对生长过程进行深入研究和优化’

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

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

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

img

由于上下文长度+幻觉的限制,我们不能一次给LLM做太多任务

现在,我们在生产系统开发上

把任务,拆成

一个个的清晰明确,小任务!以工作流的方式,让Agent完成!

把它限在一个象限里干活!杜绝胡思乱想!

img

一个个小任务干完!大任务也干完了!

比如可以用他做:

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%

在知识图谱中,不存在的客观事实,不存在节点

我们除了把节点提取出来,还会把数据源中的节点相关的信息抽取出来

img

这样做,对比传统的文本块向量嵌入,有这些优势:

a. 摒弃与节点无关信息,降低模型处理时幻觉

传统文本分块中,有大量无关或不相干的数据,给大模型总结时,会成为干扰

b. 让有效信息塞在大模型的上下文长度中

智能体会找到根数据,找到的就是相关的,除非你的top_k=1,否则你的文本块大概率会超出长度,截断了,大模型处理自然会差

img

1.2 查询策略

除了数据入库,在查询策略上

我们为每个查询,都做了一个多步查询策略

现在,我们可以根据任务,给智能体安排一种或多种查询策略

这些策略,都是根据任务来的

确保能解决问题

img

有了这个行动/查询计划

智能体能一步步去完成

注意!

是一步步地完成

绕过上下文的限制,把大象一口口吃下去

每一步,都有一个独立的Agent来支撑

1个agent=1个大模型

说这么多,来不及上手跑一跑

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


话不多说!

我们在win系统,搭建整个实践

搭建好的,跟着操作

2.1 安装neo4j

不同的系统,安装的方法不同的,你可以在neo4j官网

找到自己系统的搭建方法

win11的,跟着雄哥

雄哥在会员盘中,上传了一个neo4j的文件夹

这就是主程序

不管你把他放在哪里,不能有中文路径,比如

img

记住这个路径!

现在按键盘win+R键,呼出运行

img

输入以下指令,并点确定

sysdm.cpl

img

img

img

img

以上,neo4j就可以启动了

打开Windows PowerShell

输入

neo4j console

img

启动后,你需要打开7474端口,就可以进入管理界面!

注意选择bolt模式!设置账号密码!

img

一定要记住这个账密,后面我们需要连接他,构建知识图谱!

img

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的内容!

img

到这里,说明你的环境已经全部搭建好了!

接下来,就进入代码实操!

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


现在,雄哥要把PDF文档,都做成知识图谱

我们用到的是会员提供的数据(这份数就有8000多个节点)

img

你也可以换成任何自己的pdf数据,放到文件夹下就行

我们写的代码会加载目录下,所有pdf文件!

img

接下来,就是一步步往下跑

我们沿着一些核心代码

展开!

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中!看他提取的结果!

可以看到,围绕一个节点,提取了很多围绕他的节点和事实文本

img

这,就是数据核心!

高分RAG,都是有这些高质量数据,开始的!

我们来看看这些数据的token长度!

img

基本都是10-30 token为主!

就是提取出来的一段话,然后加上他的节点!

看看连接起来,最多的5个节点有哪些!

这可以让我们直观看到知识图谱的情况!

img

现在已经按关键节点+事实文本这样方法做的了!

下一步,我们要把他接入agent中!

让agent可以自主地探索这份数据

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值