目录
- 1、引言
- 2、GraphRAG概览
-
- 2.1 技术定义
- 2.2 技术核心
- 2.3 开源影响
- 2.4 社区反响
- 3、技术架构与原理
-
- 3.1 架构组成
- 3.2 知识图谱的构建
- 3.3 社区检测与信息摘要
- 4、功能特点与优势
-
- 4.1 功能特性
- 4.2 技术优势分析
- 4.3 应用潜力
- 5、应用场景探索
-
- 5.1 私有数据分析
- 5.2 新闻媒体与内容创作
- 5.3 学术研究与知识发现
- 5.4 医疗健康信息管理
- 5.5 智能教育与个性化学习
- 6、探索与学习资源
- 7、GraphRAG的未来展望
-
- 7.1 多模态数据处理
- 7.2 增强的个性化服务
- 7.3 跨领域知识融合
- 7.4 可解释性和透明度
- 8、结语
- 9、参考资料与链接
1、引言
在当今信息爆炸的时代,人工智能(AI)正迅速成为处理和理解海量数据的中坚力量。作为AI领域的关键技术之一,大型语言模型(LLM)在自然语言处理(NLP)方面取得了显著成就。然而,面对复杂和多样化的私有数据集,如何提升LLM的理解和推理能力,成为了技术发展的一个重要课题。
2024年7月2日,微软开源了GraphRAG技术,这一举措不仅为AI领域带来了创新的解决方案,也为开发者社区注入了新的活力。GraphRAG,即基于图的检索增强生成(Graph-based Retrieval-Augmented Generation),是一种革命性的技术,它通过结合知识图谱和图机器学习,显著提升了LLM在处理私有数据时的性能。
GraphRAG的开源,是微软对AI技术共享精神的又一次体现。它不仅推动了技术的创新和普及,也为全球的开发者和研究者提供了一个探索和实验的新平台。随着GraphRAG技术的不断发展和完善,我们有理由相信它将在智能问答、数据摘要、知识推理等多个领域发挥重要作用。
2、GraphRAG概览
2.1 技术定义
GraphRAG代表了一种技术革新,它通过结合检索增强生成(RAG)技术和知识图谱,为大模型提供了一种全新的数据理解和生成能力。与传统的RAG技术相比,GraphRAG通过构建基于图的数据结构,使得模型能够更深入地挖掘数据间的复杂关系和交互,从而在问答、摘要和推理任务中表现出更优的性能。
2.2 技术核心
GraphRAG技术的核心在于其能够将非结构化的文本数据转换为结构化的图谱形式。在这个过程中,文本中的每个实体和概念都被视为图中的节点,而它们之间的关系则构成了节点之间的边。这种方法不仅增强了模型对数据的理解能力,也为模型提供了更丰富的信息检索和推理路径。
2.3 开源影响
微软开源GraphRAG的决定对整个AI社区产生了深远的影响。开源意味着技术的透明度和可访问性的提升,它鼓励全球的开发者和研究者共同参与到技术的发展和完善中来。此外,开源还促进了技术的快速迭代和创新,为AI领域带来了更多的合作机会和应用场景。
2.4 社区反响
自GraphRAG开源以来,它已经迅速获得了技术社区的广泛关注和积极响应。开发者们对这项技术表现出了浓厚的兴趣,他们在GitHub上积极地star和fork项目,参与到讨论和贡献中。GraphRAG的开源地址已成为了一个充满活力的交流平台,汇聚了来自世界各地的开发者的智慧和创意。
3、技术架构与原理
3.1 架构组成
GraphRAG的架构是一个多层次、模块化的设计,主要包括以下几个关键部分:
- 数据预处理:将原始文本数据清洗、分词,并转化为模型可理解的格式。
- 实体识别与链接:使用自然语言处理技术从文本中识别出关键实体,并在知识图谱中进行链接或创建新节点。
- 关系抽取:确定文本中实体间的关系,并将这些关系作为边添加到图中。
- 知识图谱构建:将提取的实体和关系整合,形成一个互联的图结构,这是GraphRAG进行后续操作的基础。
- 社区检测:在知识图谱中识别高度相关的节点群体,形成社区结构,以便于集中分析和处理。
- 查询处理与答案生成:接收用户查询,通过图谱检索相关信息,并生成准确、全面的答案。
3.2 知识图谱的构建
知识图谱的构建是GraphRAG技术的核心。这一过程涉及以下几个步骤:
- 文本分析:使用大型语言模型对输入的文本进行深入分析,识别关键信息。
- 实体抽取:从文本中抽取出人名、地点、机构等实体。
- 关系识别:确定实体间的关系,如“位于”、“属于”等。
- 图谱更新:将抽取的实体和关系更新到知识图谱中,形成完整的图结构。
3.3 社区检测与信息摘要
在知识图谱构建完成后,GraphRAG进一步执行以下操作:
- 社区检测:应用图算法识别图中的社区结构,这些社区代表了文本中的主题或概念群。
- 信息摘要:为每个社区生成摘要,这些摘要概括了社区内的关键信息和关系。
4、功能特点与优势
4.1 功能特性
GraphRAG的功能特性是其技术创新的具体体现,主要包括以下几个方面:
- 多维度问答能力:GraphRAG能够理解并回答涉及复杂关系和多步骤推理的问题。
- 自动知识图谱更新:随着新数据的输入,GraphRAG能够自动更新知识图谱,保持信息的时效性。
- 跨领域信息整合:能够处理跨领域的数据集,整合不同来源和类型的信息。
- 高效的信息检索:通过社区检测算法,GraphRAG能够快速定位到相关信息,提高检索效率。
- 定制化摘要生成:根据不同的查询需求,GraphRAG能够生成定制化的信息摘要。
4.2 技术优势分析
GraphRAG的技术优势是其在多个方面超越传统技术的体现:
- 全面性:GraphRAG能够提供全面的答案,不仅仅局限于局部文本片段。
- 多样性:通过图谱结构,GraphRAG能够从不同角度和社区中提取信息,生成多样化的摘要。
- 赋权性:GraphRAG增强了模型对数据集结构的理解,使得生成的答案更加权威和准确。
- 资源优化:与传统的全文摘要方法相比,GraphRAG在生成高质量摘要的同时,显著降低了对计算资源的需求。
4.3 应用潜力
GraphRAG的应用潜力巨大,它不仅可以作为独立的问答系统,还可以集成到现有的AI平台中,提升其数据处理和分析能力。以下是GraphRAG应用潜力的几个方面:
- 企业决策支持:在企业中,GraphRAG可以帮助分析市场趋势、客户反馈和内部报告,为决策提供数据支持。
- 学术研究:在学术领域,GraphRAG可以辅助研究人员快速获取文献中的深层信息,促进知识发现。
- 内容创作:在媒体和出版行业,GraphRAG可以用于自动化内容创作,如新闻摘要、故事生成等。
5、应用场景探索
5.1 私有数据分析
GraphRAG技术在私有数据分析方面展现出了巨大潜力。企业可以利用GraphRAG从内部数据中提取深层洞见,这些数据可能包括客户互动记录、市场研究报告、产品使用数据等。GraphRAG能够帮助企业快速识别关键信息,构建知识图谱,并提供决策支持。
- 市场分析:通过分析社交媒体和客户反馈,GraphRAG能够识别市场趋势和消费者需求。
- 风险管理:在金融领域,GraphRAG能够分析交易模式和市场动态,帮助识别潜在风险。
5.2 新闻媒体与内容创作
在新闻媒体行业,GraphRAG的应用可以极大地提高新闻报道的深度和广度。它能够快速从大量文本中提取关键信息,生成新闻摘要,甚至对事件进行深入分析和报道。
- 快速报道:在突发事件报道中,GraphRAG能够迅速整合信息,提供实时更新。
- 深度分析:对复杂事件进行多角度分析,提供全面的背景信息和深入见解。
5.3 学术研究与知识发现
GraphRAG在学术研究中的应用可以加速知识的发现和传播。研究人员可以利用GraphRAG来分析文献,识别研究趋势,甚至发现新的研究方向。
- 文献综述:自动生成文献综述,为研究人员提供研究领域的宏观视角。
- 交叉学科研究:通过整合不同学科的知识图谱,促进交叉学科的创新。
5.4 医疗健康信息管理
在医疗健康领域,GraphRAG可以帮助整合和分析病历记录、医学研究和治疗指南,为医生提供诊断支持和个性化治疗建议。
- 病例分析:通过分析病历,GraphRAG能够辅助医生快速理解病情发展和治疗历史。
- 药物研发:整合生物医学数据,加速新药的研发过程。
5.5 智能教育与个性化学习
GraphRAG在教育领域的应用可以提供个性化的学习体验。通过分析学生的学习历史和偏好,GraphRAG能够推荐适合的学习材料和课程。
- 个性化推荐:根据学生的学习进度和兴趣,提供定制化的学习资源。
- 知识评估:评估学生对特定主题的掌握程度,提供针对性的辅导。
6、探索与学习资源
微软官方提供了详尽的GraphRAG文档和GitHub仓库,这是学习GraphRAG的首要资源。在这里,你可以找到安装指南、快速入门教程、API文档以及贡献指南。
# 受 MIT 许可证许可。
import os
import pandas as pd
import tiktoken
# 从 graphrag 包中导入所需的模块和类
from graphrag.query.context_builder.entity_extraction import EntityVectorStoreKey
from graphrag.query.indexer_adapters import (
read_indexer_covariates,
read_indexer_entities,
read_indexer_relationships,
read_indexer_reports,
read_indexer_text_units,
)
from graphrag.query.input.loaders.dfs import (
store_entity_semantic_embeddings,
)
from graphrag.query.llm.oai.chat_openai import ChatOpenAI
from graphrag.query.llm.oai.embedding import OpenAIEmbedding
from graphrag.query.llm.oai.typing import OpenaiApiType
from graphrag.query.question_gen.local_gen import LocalQuestionGen
from graphrag.query.structured_search.local_search.mixed_context import (
LocalSearchMixedContext,
)
from graphrag.query.structured_search.local_search.search import LocalSearch
from graphrag.vector_stores.lancedb import LanceDBVectorStore
# 本地搜索示例
# 本地搜索方法通过结合AI提取的知识图谱中的相关数据与原始文档的文本块来生成答案。
# 这种方法适用于需要理解文档中提到的特定实体的问题(例如,甘菊的治愈属性是什么?)。
# 加载文本单元和图数据表作为本地搜索的上下文
# 在此测试中,我们首先将parquet文件中的索引输出加载到数据框中,然后将这些数据框转换为与知识模型对齐的数据对象集合。
# 输入目录和Lancedb的URI
INPUT_DIR = "./inputs/operation dulce"
LANCEDB_URI = f"{INPUT_DIR}/lancedb"
# 定义数据表名称
COMMUNITY_REPORT_TABLE = "create_final_community_reports"
ENTITY_TABLE = "create_final_nodes"
ENTITY_EMBEDDING_TABLE = "create_final_entities"
RELATIONSHIP_TABLE = "create_final_relationships"
COVARIATE_TABLE = "create_final_covariates"
TEXT_UNIT_TABLE = "create_final_text_units"
COMMUNITY_LEVEL = 2
# 读取实体
# 读取节点表以获取社区和度数数据
entity_df = pd.read_parquet(f"{INPUT_DIR}/{ENTITY_TABLE}.parquet")
entity_embedding_df = pd.read_parquet(f"{INPUT_DIR}/{ENTITY_EMBEDDING_TABLE}.parquet")
entities = read_indexer_entities(entity_df, entity_embedding_df, COMMUNITY_LEVEL)
# 加载描述嵌入到内存中的lancedb向量存储中
# 要连接到远程数据库,请指定url和端口值。
description_embedding_store = LanceDBVectorStore(
collection_name="entity_description_embeddings",
)
description_embedding_store.connect(db_uri=LANCEDB_URI)
entity_description_embeddings = store_entity_semantic_embeddings(
entities=entities, vectorstore=description_embedding_store
)
print(f"实体数量: {len(entity_df)}")
entity_df.head()
# 读取关系
relationship_df = pd.read_parquet(f"{INPUT_DIR}/{RELATIONSHIP_TABLE}.parquet")
relationships = read_indexer_relationships(relationship_df)
print(f"关系数量: {len(relationship_df)}")
relationship_df.head()
covariate_df = pd.read_parquet(f"{INPUT_DIR}/{COVARIATE_TABLE}.parquet")
claims = read_indexer_covariates(covariate_df)
print(f"声明记录数: {len(claims)}")
covariates = {"claims": claims}
# 读取社区报告
report_df = pd.read_parquet(f"{INPUT_DIR}/{COMMUNITY_REPORT_TABLE}.parquet")
reports = read_indexer_reports(report_df, entity_df, COMMUNITY_LEVEL)
print(f"报告记录数: {len(report_df)}")
report_df.head()
# 读取文本单元
text_unit_df = pd.read_parquet(f"{INPUT_DIR}/{TEXT_UNIT_TABLE}.parquet")
text_units = read_indexer_text_units(text_unit_df)
print(f"文本单元记录数: {len(text_unit_df)}")
text_unit_df.head()
# 从环境变量中获取API密钥、LLM模型和嵌入模型
api_key = os.environ["GRAPHRAG_API_KEY"]
llm_model = os.environ["GRAPHRAG_LLM_MODEL"]
embedding_model = os.environ["GRAPHRAG_EMBEDDING_MODEL"]
# 初始化ChatOpenAI实例
llm = ChatOpenAI(
api_key=api_key,
model=llm_model,
api_type=OpenaiApiType.OpenAI, # OpenaiApiType.OpenAI 或 OpenaiApiType.AzureOpenAI
max_retries=20,
)
# 初始化文本编码器
token_encoder = tiktoken.get_encoding("cl100k_base")
# 初始化OpenAIEmbedding实例
text_embedder = OpenAIEmbedding(
api_key=api_key,
api_base=None,
api_type=OpenaiApiType.OpenAI,
model=embedding_model,
deployment_name=embedding_model,
max_retries=20,
)
# 创建本地搜索上下文构建器
context_builder = LocalSearchMixedContext(
community_reports=reports,
text_units=text_units,
entities=entities,
relationships=relationships,
covariates=covariates,
entity_text_embeddings=description_embedding_store,
embedding_vectorstore_key=EntityVectorStoreKey.ID, # 如果向量存储使用实体标题作为ID,则将其设置为EntityVectorStoreKey.TITLE
text_embedder=text_embedder,
token_encoder=token_encoder,
)
# 创建本地搜索引擎
# text_unit_prop: 专用于相关文本单元的上下文窗口比例
# community_prop: 专用于社区报告的上下文窗口比例。
# 其余比例专用于实体和关系。text_unit_prop 和 community_prop 的总和应 <= 1
# conversation_history_max_turns: 要包含在对话历史中的最多轮次数。
# conversation_history_user_turns_only: 如果为True,则只包含用户查询在对话历史中。
# top_k_mapped_entities: 从实体描述嵌入存储中检索的相关实体数量。
# top_k_relationships: 控制要拉入上下文窗口的网络外关系的数量。
# include_entity_rank: 如果为True,则在上下文窗口中包含实体表中的实体排名。默认实体排名 = 节点度数。
# include_relationship_weight: 如果为True,则在上下文窗口中包含关系权重。
# include_community_rank: 如果为True,则在上下文窗口中包含社区排名。
# return_candidate_context: 如果为True,则返回一组包含所有候选实体/关系/协变量记录的数据框,
# 这些记录可能相关。注意,并非所有这些记录都会被包含在上下文窗口中。这些数据框中的"in_context"列指示记录是否包含在上下文窗口中。
# max_tokens: 上下文窗口使用的最大令牌数。
local_context_params = {
"text_unit_prop": 0.5,
"community_prop": 0.1,
"conversation_history_max_turns": 5,
"conversation_history_user_turns_only": True,
"top_k_mapped_entities": 10,
"top_k_relationships": 10,
"include_entity_rank": True,
"include_relationship_weight": True,
"include_community_rank": False,
"return_candidate_context": False,
"embedding_vectorstore_key": EntityVectorStoreKey.ID, # 如果向量存储使用实体标题作为ID,则将其设置为EntityVectorStoreKey.TITLE
"max_tokens": 12_000, # 根据您在模型上的令牌限制更改此值(如果您使用的是8k限制的模型,一个良好的设置可能是5000)
}
llm_params = {
"max_tokens": 2_000, # 根据您在模型上的令牌限制更改此值(如果您使用的是8k限制的模型,一个良好的设置可能是1000-1500)
"temperature": 0.0,
}
search_engine = LocalSearch(
llm=llm,
context_builder=context_builder,
token_encoder=token_encoder,
llm_params=llm_params,
context_builder_params=local_context_params,
response_type="多段文本", # 描述响应类型和格式的自由形式文本,可以是任何内容,例如优先级列表、单段文本、多段文本、多页报告
)
# 在示例查询上运行本地搜索
result = await search_engine.asearch("告诉我关于Agent Mercer的信息")
print(result.response)
question = "告诉我关于Dr. Jordan Hayes的信息"
result = await search_engine.asearch(question)
print(result.response)
# 检查用于生成响应的上下文数据
result.context_data["entities"].head()
result.context_data["relationships"].head()
result.context_data["reports"].head()
result.context_data["sources"].head()
if "claims" in result.context_data:
print(result.context_data["claims"].head())
# 问题生成
# 下面的部分是问题生成功能的实现,它接收用户查询列表并生成下一个候选问题。
# LocalQuestionGen 类负责生成问题,它使用与搜索相同的底层模型和上下文构建器。
question_generator = LocalQuestionGen(
llm=llm,
context_builder=context_builder,
token_encoder=token_encoder,
llm_params=llm_params,
context_builder_params=local_context_params, # 这里缺少了参数的定义,应从前面代码中获取
)
# 定义一个用户查询的历史列表
question_history = [
"告诉我关于Agent Mercer的信息",
"Dulce军事基地发生了什么?",
]
# 使用问题生成器来生成候选问题
# agenerate 方法接收问题历史、上下文数据和所需生成的问题数量
candidate_questions = await question_generator.agenerate(
question_history=question_history,
context_data=None, # 这里传入None,实际使用时可以传入相关上下文数据
question_count=5
)
# 打印生成的候选问题
print(candidate_questions.response)
7、GraphRAG的未来展望
随着人工智能技术的不断进步,GraphRAG的未来充满了无限可能。以下是一些可能的发展方向:
7.1 多模态数据处理
未来GraphRAG可能会集成多模态数据处理能力,结合文本、图像、声音等多种数据类型,提供更丰富的信息分析和生成能力。
7.2 增强的个性化服务
GraphRAG在个性化服务方面具有巨大潜力,未来可能会根据用户的行为和偏好提供更加定制化的信息和服务。
7.3 跨领域知识融合
GraphRAG可能会进一步发展其跨领域知识融合的能力,连接不同领域的知识图谱,促进跨学科的创新和发现。
7.4 可解释性和透明度
随着对模型可解释性需求的增加,GraphRAG的未来发展可能会更加注重其决策过程的透明度和可解释性。
关于AI大模型技术储备
学好 AI大模型 不论是就业还是在工作技能提升上都不错,但要学会 AI大模型 还是要有一个学习规划。最后大家分享一份全套的 AI大模型 学习资料,给那些想学习 AI大模型 的小伙伴们一点帮助!
感兴趣的小伙伴,赠送全套AI大模型学习资料和安装工具,包含Agent行业报告、精品AI大模型学习书籍手册、视频教程、最新实战学习等录播视频,具体看下方。
需要的可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

如何学习大模型 AI ?
🔥AI取代的不是人类,而是不会用AI的人!麦肯锡最新报告显示:掌握AI工具的从业者生产效率提升47%,薪资溢价达34%!🚀
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工
📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)
第一阶段(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 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
