微信扫码
与创始人交个朋友
我要投稿
本文将展示如何借助R2R和Triplex模型,用文件创建知识图谱。构建的图谱可以选择在下游R2R RAG中使用。
R2R是一个全面、易用的检索增强型生成(RAG)应用开发平台,支持多模态文件处理、混合搜索、知识图谱构建,并提供用户管理、性能监控和可扩展的API接口。
安装R2R
使用命令行工具开始使用R2R:
pip install r2r
安装后,如果条件允许,建议通过Docker启动R2R:
# export OPENAI_API_KEY=sk-...r2r --config-name=default serve --dockerj
r2r --config-name=local_llm_neo4j_kg serve --docker
Triplex模型用于本地构建知识图谱,使用成本远远低于GPT-4o。
# Check the name of the ollama container and modify the command if it differs from r2r-ollama-1docker exec -it r2r-ollama-1 ollama pull sciphi/triplexdocker exec -it r2r-ollama-1 ollama pull llama3.1docker exec -it r2r-ollama-1 ollama pull mxbai-embed-large
本地安装Triplex模型方法可以参考这篇文章:
Triplex :用于创建知识图谱的开源模型,成本比GPT-4o低10倍!
安装完成后,使用Ollama启动模型。
此处我们在本地创建了一个文件test.txt。
John is a person that works at Google. Paul is a person that works at Microsoft that collaborates with John.
然后使用R2R对test.txt把文件变成知识图谱
r2r ingest-files --file-paths r2r/examples/data/test.txt
最后,就得到了下面的知识图谱。图谱表达出文件test.txt˙各个实体之间的关系。
R2R还对文本进行了分块和嵌入,以实现语义搜索。验证步骤如下:
r2r search --query="who is john?"
{'id': '5c7731be-81d6-5ab1-ae88-458fee8c462b', 'score': 0.5679587721418247, 'metadata': {'text': 'John is a person that works at Google.\n\nPaul is a person that works at Microsoft that knows John.', 'title': 'test.txt', 'version': 'v0', 'chunk_order': 0, 'document_id': '56f1fdc0-df48-5245-9910-75a0cfb5c641', 'extraction_id': 'e7db5809-c9e0-529d-85bb-5a78c5d21a94', 'associatedQuery': 'who is john?'}}
我们想获取硅谷著名风投公司YC有关的几千家创业公司信息。怎么办呢?
首先,指定构建知识图谱的实体类型和关系,便于提高知识图谱构建质量:
from r2r import EntityType, Relation
entity_types = [
EntityType("ORGANIZATION"),
EntityType("COMPANY"),
EntityType("SCHOOL"),
# ... more entity types
]
relations = [
Relation("EDUCATED_AT"),
Relation("WORKED_AT"),
Relation("FOUNDED"),
# ... more relations
]
然后,向R2R服务器提交请求,更新知识图谱,使用你指定的实体类型:
client = R2RClient(base_url=base_url)
r2r_prompts = R2RPromptProvider()
# use few-shot example to improve cloud provider performance
prompt_base = (
"zero_shot_ner_kg_extraction"
if local_mode
else "few_shot_ner_kg_extraction"
)
update_kg_prompt(client, r2r_prompts, prompt_base, entity_types, relations)
接下来,使用下面命令查看他们之间的关系。
# add --local_mode=False when using cloud providerspython -m r2r.examples.scripts.advanced_kg_cookbook --max_entries=1
再次使用Neo4j浏览器可视化生成的基础图谱。下图可视化显示了和Airbnb公司有关的信息。
现在使用更大规模的数据集:
python -m r2r.examples.scripts.advanced_kg_cookbook --max_entries=100
加载完上述所有数据后,你会发现图谱更加丰富。当专注于旧金山并限制节点数为250时,我们可以看到更多数据之间的联系。
你可以使用下面命令,便捷查询各种信息。
# Find all founders
query = """
MATCH (p:PERSON)-[:FOUNDED]->(c)
RETURN p.id AS Founder, c.id AS Company
ORDER BY c.id
LIMIT 10;
"""
# [{'Founder': 'Nathan Blecharczyk', 'Company': 'Airbnb'}, {'Founder': 'Brian Chesky', 'Company': 'Airbnb'}, {'Founder': 'Joe Gebbia', 'Company': 'Airbnb'}, {'Founder': 'Tommy Guo', 'Company': 'Airfront'}, {'Founder': 'Joanne Wang', 'Company': 'Airfront'}, {'Founder': 'Adam Tilton', 'Company': 'Aktive'}, {'Founder': 'Abraham Heifets', 'Company': 'Atomwise'}, {'Founder': 'Nicholas Charriere', 'Company': 'Axilla'}, {'Founder': 'Caitlin', 'Company': 'B2B marketing software'}, {'Founder': 'Timmy', 'Company': 'B2B marketing software'}]
# Find 2-time founders
query = """
MATCH (p:PERSON)-[:FOUNDED]->(c:ORGANIZATION)
WITH p.id AS Person, COUNT(c) AS CompaniesCount
RETURN Person, CompaniesCount
ORDER BY CompaniesCount DESC
LIMIT 10;
"""
# [{'Person': 'Ilana Nasser', 'CompaniesCount': 3}, {'Person': 'Eric', 'CompaniesCount': 2}, {'Person': 'Kris Pahuja', 'CompaniesCount': 2}, {'Person': 'Sam', 'CompaniesCount': 2}, {'Person': 'Tom Blomfield', 'CompaniesCount': 2}, {'Person': 'Umur Cubukcu', 'CompaniesCount': 2}, {'Person': 'Jason', 'CompaniesCount': 2}, {'Person': 'Joe Gebbia', 'CompaniesCount': 2}, {'Person': 'Adam Tilton', 'CompaniesCount': 2}, {'Person': 'Alex', 'CompaniesCount': 2}]
# Find companies with AI products
query = """
MATCH (c:ORGANIZATION)-[r:PRODUCT]->(t)
WHERE t.id CONTAINS 'AI'
RETURN DISTINCT c.id AS Company, t.id AS Product
ORDER BY c.id
LIMIT 10;
"""
# [{'Company': 'AgentsForce', 'Product': 'AI support agents'}, {'Company': 'Airfront', 'Product': 'AI-first email platform'}, {'Company': 'Airfront', 'Product': 'AI-first email platform with built-in automations'}, {'Company': 'Airfront', 'Product': 'AI automation platform'}, {'Company': 'Axflow', 'Product': 'AI app'}, {'Company': 'Clarum', 'Product': 'AI-powered due diligence solutions'}, {'Company': 'Clarum', 'Product': 'AI-powered due diligence'}, {'Company': 'CommodityAI', 'Product': 'AI-automation platform'}, {'Company': 'Dawn', 'Product': 'Analytics for AI products'}, {'Company': 'Decipher', 'Product': 'AI-powered user impact summaries'}]```
R2R还可以使用知识图谱代理(Agents)完成更灵活和复杂的查询,此部分可以参考官方文档(见文末)。
R2R创建后的知识图谱,提供了一种便捷的方式结构化和查询从文档中提取的信息。通过结合向量搜索、语义搜索和结构化查询,你可以使用非结构化和结构化数据构建复杂检索系统。
微软7月发布的GraphRAG技术,通过整合文本抽取、网络分析和大型语言模型的提示与总结功能,形成了一个全面的系统,能够提供对文本数据的深度理解。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-24
AutoFlow:基于图 RAG 的智能知识库构建之路
2024-11-23
DB-GPT V0.6.2 版本更新:牵手libro社区、GraphRAG图谱构建能力增强等
2024-11-22
技术动态 | 如何使用知识图谱改进RAG?
2024-11-22
RAG前沿之RAG–知识图谱构建框架Graphusion:兼看LongRAG双视角检索增强生成范式
2024-11-21
OpenSPG/KAG 新版发布:聚焦用户反馈,大幅优化用户体验!
2024-11-15
大语言模型与图结构的融合:推荐系统中的新兴范式
2024-11-15
利用LLM构建非结构化文本的知识图谱
2024-11-13
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
2024-07-17
2024-07-11
2024-07-13
2024-08-13
2024-07-08
2024-07-12
2024-07-26
2024-06-10
2024-07-04
2024-06-24
2024-11-22
2024-11-04
2024-10-10
2024-10-03
2024-09-27
2024-09-08
2024-09-05
2024-08-27