|
今天!内容非常简单!
#1 做知识图谱!把N份PDF,给本地大模型做!
#2 接入RAG系统!用知识图谱提升性能! 提问:“卖油翁的作者是谁?”
大模型学习知识图谱后,回答: 卖油翁的作者是欧阳修。根据提供的文本信息,“《卖油翁》 -> Written by -> 欧阳修”明确指出《卖油翁》是由欧阳修所写。此外,文本中也提到“《卖油翁》写作背景是宋英宗治平四年(1067年),欧阳修遭飞语中伤,自请外任,在出知亳州时作该文”,进一步证实了这一点。因此,可以确定卖油翁的作者是欧阳修! 

它背后,三大板块在工作!大模型+知识图谱+RAG! 大模型后端:VLLM高速推理Qwen2!
知识图谱:毫秒级nebulagraph RAG框架:llama-index
还没看到上一篇环境搭建的,一定要返回去看!搭建有问题的,一定要解决!在这里学搭建! 提升RAG性能!接入知识图谱!结合nebulagraph,生产+AI拓展两相宜!番外3
今天,就是跑代码的!现在打开雄哥上传的代码文件!跟着对照! 
如果你还没获得,直接到末尾找工程师-小胖!报 “老粉”加入! 嫌麻烦的,直接识别二维码申请!

人的专注力只有10分钟,那!话不多说! ①进入环境及依赖说明
② VLLM推理Qwen2!高并发,快生产! ③加载本地数据并构建知识图谱 ④接入Llama-index,增强检索!
许多依赖,只有linux版本,所以,win系统的朋友,你要换个电脑/系统跑了!公司生产,一般都是Linux!如果不是你的菜,马上可以关闭。 接下来!跑起来!一边跑,一边聊细节!
第一部分:进入环境及依赖说明
书接上一回!
你进入了jupyter环境,整体就是跟着代码,点一遍运行就行! 非常简单!
但,今天是想告诉你,雄哥没有在代码注解的细节!完整代码,一定要自己实操! 先把依赖装完! !pipinstallllama-index-llms-vllm!pipinstallllama-index!pipinstallipython-ngql!pipinstallvllm%pipinstallnebula3-python%pipinstallllama-index-graph-stores-nebula%pipinstallllama-index-embeddings-huggingface%pipinstallllama-index-embeddings-instructor%pipinstalljupyter-nebulagraph 有几个包,这里说一下!
这个包,是我们在jupyter链接知识图谱的拓展,没装的话,用不了啦!
安装VLLM!
高速推理框架!本次,我们直接在jupyter上推理! 你可能遇到的最多安装问题,就是这里,本地环境,依赖难倒很多人! 注意自己的cuda、pytorch、gcc版本! 基本做法,就是缺啥补啥,如果补了还不行,一定要找小胖!
第二部分:部署本地Qwen2+text2vec
非常简单,如果你本地就有大模型,没有的!去会员盘下载! 直接把你存放本地的model路径,粘贴到代码块中,即可! 要绝对路径!不能有中文! from llama_index.llms.vllm import Vllm
llm = Vllm(model="/media/auys/AI/models/glm-4-9b-chat",dtype="float16",tensor_parallel_size=1,temperature=0,max_new_tokens=100,vllm_kwargs={"swap_space": 1,"gpu_memory_utilization": 0.9,"max_model_len": 8192,},)
雄哥设置了参数0.9,上下文8192!看到这样,就说明启动成功! 
看一下资源情况!加上向量模型,GPU占用约23G! 
VLLM是一个大模型的推理框架,支持高并发!还不知道怎么部署,看这! 给本地大模型装氦气!高并发!推理速度翻NNN倍!Qwen+ChatGLM+Yi等全支持!接fastgpt!Vllm喂饭到嘴!
设置默认工作大模型! 这里我们设置了qwen2-7b+text2vec-large-chinese! from llama_index.core import Settings#把加载的模型添加到环境设置中,定义全局模型
Settings.llm = llmSettings.embed_model=embed_mode
第三部分:加载本地数据并构建知识图谱
这里,支持无数份PDF,当然!数据越多,处理时间越长! 加载数据后!把数据推给大模型,让大模型自行构建节点+关系!
最后,写入星云图中! 雄哥在网上找了一个示意图,大概就这样!

导入PDF数据文件夹!
这个文件夹,要把所有的pdf文件,都放在里面!然后把路径,填到下图! 系统会全部加载! documents=SimpleDirectoryReader("/home/auys/agent_tools/datasets").load_data()
创建知识图谱空间! 如果你已经有了知识图谱,就不用创建了!没有就要创建!
名字是:llamaindex_nebula_property_graph 256的FIXED_STRING类型! %ngqlCREATESPACEIFNOTEXISTSllamaindex_nebula_property_graph(vid_type=FIXED_STRING(256)); 这里,要等10秒,再开始下一步,会有延迟,没建好,就干不了下一步!
越复杂的集群,时间可能越久!
把知识图谱接入RAG!
这里,只是接入,后面我们要让大模型生成节点,让知识图谱的内容,成为上下文,达到开头效果! fromllama_index.graph_stores.nebulaimportNebulaPropertyGraphStore#加载刚刚创建的知识图谱,如果你之前创建过,把名称改一下graph_store=NebulaPropertyGraphStore(space="llamaindex_nebula_property_graph",overwrite=True)
把PDF做成知识图谱+向量! 这里!可以指定他输出一个知识图谱的json文件!想存到哪,自己改! index=PropertyGraphIndex.from_documents(documents,property_graph_store=graph_store,vector_store=vec_store,show_progress=True,) 
打印看看成果! 这里,雄哥打印了1000个节点看看! %ngql MATCH p=(v:Entity__)-[r]->(t:Entity__) RETURN p LIMIT 1000;

看一下这些图谱! 
到这里!知识图谱就搞掂了! 你也可以在刚刚我们安装的前端,进到系统,就可以看到啦! 
那怎样去接入RAG系统中?增强我们检索!
第四部分:接入RAG
到了这! 雄哥创建了一个query_engine查询引擎!这是最基本的设置! 你可以在这个基础上拓展,甚至实现多跳查询+意图识别等复杂功能! 需要的也可留言! 回到我们代码,雄哥输入提问,他会先去知识图谱检索相似图,然后把这个些关系,发给大模型,让大模型根据图谱关系,回答! query_engine = index.as_query_engine(include_text=True)
response = query_engine.query("卖油翁的作者是谁?")
print(str(response))
先发一个问题!
query_engine.query("卖油翁的作者是谁?")
大模型的回答! 卖油翁的作者是欧阳修。根据提供的文本信息,“《卖油翁》->Writtenby->欧阳修”明确指出《卖油翁》是由欧阳修所写。此外,文本中也提到“《卖油翁》写作背景是宋英宗治平四年(1067年),欧阳修遭飞语中伤,自请外任,在出知亳州时作该文”,进一步证实了这一点。因此,可以确定卖油翁的作者是欧阳修。
我们看看他背后,检索到什么图谱关系! retriever = index.as_retriever(include_text=False,# 这是返回原文,设置为True,如果要让知识图谱根据问题返回节点,设置为False)
nodes=retriever.retrieve("卖油翁的作者是谁?")
这里,让他返回检索到的节点关系!
如果设置True,会检索返回原文!

ok! 做完这篇知识图谱的板块,是给有需要的会员,一个交代了!
之前,雄哥就跑过如何制作知识图谱,今天把它在生产的角度,做出来! 并且接入RAG系统中,发挥知识图谱的价值! 这下,我们专心搞Agent项目!
就聊这么多!
|