我们很高兴地宣布,您现在可以将自己的三元组导入 WhyHow.AI 的知识图谱工作室(测试版)中,以进行进一步处理和管理,特别是对于多代理工作流程中的多个模块化图编排。要使用此功能,您需要访问平台测试版(测试版访问代码可在下面找到)。
这意味着,如果您通过一系列其他流程创建了三元组 – 无论是通过 LangChain 的 LLMGraphTransformer 包、LlamaIndex 的 Property Graph 包还是通过内部管道,您仍然可以利用 WhyHow.AI 的模块化图基础设施。这样做的主要优点是:
- 多图多代理工作流程的模块化图管理
- 通过公共图链接创建多人图
- 个性化人在环实体解析和实体提取
为了说明如何执行此操作,我们有一个笔记本,可以在此处找到并在下面进行解释,它演示了使用 Amazon 10-K 财务报告从 Langchain 的 LLMGraphTransformer 包创建图形的过程。如果您想跳到结果图的样子,请查看此处。
由于我们与数据库无关,您还可以将 Cypher 中生成的图形导出到您选择的任何外部图形数据库。
我们希望通过这个过程解决的具体问题是:
- 我是一名开发人员,正在构建需要调用一系列结构化数据的多代理工作流程。我希望能够按不同的域、文档源或类型(词汇与语义)分隔我的图表,并能够独立调用每个图表以实现多图表、多代理工作流程。
- 我是一名开发人员,构建了自己复杂的数据处理管道来创建三元组。我想将这些图表交给领域专家(他们可能不是技术人员),以确保三元组和图表是准确的。
- 我是一名开发人员,希望能够针对我拥有的单个或一系列图表使用 WhyHow.AI 的结构化和非结构化查询(即以编程方式指定特定实体类型、实体和关系)包。
- 我是一名领域专家,负责清理主要由开发人员生成的图表,并希望使用 UI 创建节点、三元组和实体解析。
- 我是法学硕士。我喜欢漂亮的图表和结构化数据,因为当我只使用向量来检索相关信息并构建答案时,人们会生我的气。我想插入 WhyHow.AI 的 Studio 平台以实现更可靠的上下文注入。
将 Langchain 创建的三元组导入 WhyHow
导入迭代工具
导入操作系统
进口泡菜
从 langchain.text_splitter 导入 RecursiveCharacterTextSplitter
从 langchain_community.document_loaders 导入 PyPDFLoader
从 langchain_experimental.graph_transformers 导入 LLMGraphTransformer
从 langchain_openai 导入 ChatOpenAI
from WhyHow 导入 WhyHow、节点、关系、三重
从 dotenv 导入 find_dotenv、load_dotenv
load_dotenv(find_dotenv())
llm = ChatOpenAI(模型=“gpt-4o”)
llm_transformer = LLMGraphTransformer(llm=llm)
从所选文件加载文本
我们在此处加载 2024 年 Amazon 10K 文件。
文件路径 =“数据/amazon_10K_2024.pdf”
加载器 = PyPDFLoader(文件路径)
文档 = loader.load()
流程文件
然后我们将文档分割成块进行处理。
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=0)
split_docs = text_splitter.split_documents(文档)
将处理后的文本转换为三元组
然后,我们使用 Langchain 的模式格式指定我们希望看到的节点和关系。
# 选择您想要的三元组的实体类型和关系
allowed_nodes=["公司","风险因素","法律诉讼","业务部门"]
allowed_relationships=[“影响”、“INVOLVED_IN”、“WORKED_AT”、“POSES_RISK”]
llm_transformer_props = LLMGraphTransformer(
llm=llm,
allowed_nodes=允许的_nodes,
allowed_relationships=允许的_关系
)
graph_documents_props = llm_transformer_props.aconvert_to_graph_documents(split_docs)
[可选]存储三元组
或者,您可以独立存储三元组以加载到 WhyHow 中。
# 序列化列表并将其写入文件
以 open('langchain_triples.pkl', 'wb') 作为文件:
pickle.dump(flat_triples,文件)
为什么如何整合
在这里,我们加载 WhyHow API 密钥并初始化工作区。
# 使用您的 WhyHow API 密钥初始化客户端
客户端 = WhyHow(api_key=os.environ.get("WHYHOW_API_KEY"), base_url="https://api-test.whyhow.ai/")
工作空间 = client.workspaces.create(name="Amazon 10-K Analysis")
# 或者,如果您已经有一个工作区
# 工作空间 = client.workspaces.get(workspace_id="")
[可选]加载三元组
我们可以加载在可选步骤中保存的三元组。
以 open('langchain_triples.pkl', 'rb') 作为文件:
flat_triples = pickle.load(文件)
预处理三元组
在这里,我们以 WhyHow 平台可以接受的格式处理三元组。
def format_triple(三重):
”“”
将 LangChain 三元组格式化为所需的结构。
参数:
三元组:包含源、目标和类型属性的对象。
返回:
Triple:具有格式化头、关系和尾部的 Triple 对象。
”“”
# 从三元组中提取源和目标
来源=三重.来源
目标=三重.目标
# 创建并返回格式化的 Triple 对象
返回三重(
head=Node(name=source.id, label=source.type), # 具有源 id 和类型的头节点
relation=Relation(name=triple.type), # 三元组类型的关系
tail=Node(name=target.id, label=target.type) # 带有目标 id 和类型的尾节点
)
# 生成带有索引的格式化三元组列表
formatted_triples = [format_triple(triple, str(index)) 用于索引,三元组在 enumerate(flat_triples)]
# 查看前3个三元组
格式化三元组[:3]
创建和查询图表
然后,我们通过将格式化的三元组加载到指定的工作区中并命名该图来创建图。
图 = client.graphs.create_graph_from_triples(
工作空间_id=工作空间.工作空间_id,
三元组=格式化三元组,
name="亚马逊 10-K 图"
)
我们还可以通过 SDK 的结构化或非结构化查询端点来查询图表。
# 亚马逊各业务板块的查询图
Question =“亚马逊的主要业务部门是什么?”
query_response = client.graphs.query_unstructed(
graph_id=graph.graph_id,
查询=问题,
)
print(f"LLM 回复: {query_response.answer}")
print(f"返回的三元组:{query_response.triples}")
这张图是什么样子的?您可以在此链接中查看由这些 Langchain 三元组生成的图表并与之交互。 Langchain 的 Graph 包不允许我们将向量块本地链接到三元组,这与我们的 Graph Creation SDK 不同,因此它只导入三元组并将我们的 Chunk 部分留空,但我们正在开发一个包以允许您导入和绑定块。
我们还相信模式的质量(即它的结构如何,以及它反映底层内容的程度)会影响图形输出的质量。如果您已经构建了不受约束的模式图,我们正在开发一个更加自动化的系统来帮助您清理模式,所以请继续关注!
WhyHow.AI 的知识图工作室平台(目前处于测试阶段)是构建 Agentic 和 RAG 原生知识图的最简单方法,结合了开发人员和非技术领域专家的工作流程。
版权声明
本文为本站原创内容,转载需注明文章来源(https://www.eiefun.com),另:文中部分素材可能会引用自其他平台,如有侵权或其它,请联系 admin@eiefun.com,我们会第一时间配合删除