AutoGraph Extraction Task
定义
AutoGraph Extraction Task 是 Hyper-Extract 中用 AutoGraph(...) 明确声明的一种图抽取任务配置方式。它把一段自然语言文本交给大语言模型与向量嵌入组件处理,并通过若干键提取规则,把抽取得到的对象组织为节点(nodes)与边(edges)。
在当前来源里,这个任务不是孤立介绍的算法细节,而是 Provider Configuration Guide 摘要 用来演示“provider 可替换,但任务逻辑不变”的统一示例。来源明确说明:三个平台运行的是 同一个抽取任务,只有前 3 行的 client setup 会变化。
在本文档中的语境
该任务出现在 provider 配置指南的 Unified Example 中,分别对应以下三类接入方式:
- OpenAI
- Alibaba Bailian
- Local vLLM
这三种写法都先通过 create_client(...) 得到 llm 和 emb,然后把同一份 AutoGraph 配置传入执行。换句话说,这个词条描述的重点不是具体某一家模型服务,而是一个与 provider 解耦的抽取任务模板。
来源用它证明两件事:
- provider 层可以替换;
- 抽取任务的
instruction、节点键策略、边键策略与执行方式不需要随 provider 改写。
这使它也与 Hyper-Extract Provider Configuration、Hyper-Extract Client String Shorthand 形成直接关联:前者负责说明如何拿到 llm/emb,后者说明 client 参数还能用紧凑字符串语法表达;但两者都不改变这里的抽取任务本体。
关键组成
来源中的 AutoGraph 示例保留了以下关键参数:
instructionllm_clientembeddernode_key_extractoredge_key_extractornodes_in_edge_extractor
对应的完整示例任务为:
graph = AutoGraph(
instruction="Extract people and their relationships",
llm_client=llm,
embedder=emb,
node_key_extractor=lambda n: n.name,
edge_key_extractor=lambda e: (e.source, e.target, e.type),
nodes_in_edge_extractor=lambda e: (e.source, e.target),
)
其中各部分含义在当前示例里的作用很明确:
instruction
instruction="Extract people and their relationships" 是本任务的抽取目标说明。它要求系统从文本中识别“人物”以及“人物之间的关系”。
需要注意的是,来源给出的示例输入文本里同时出现了人物与组织/职位相关表述,因此这个 instruction 更像是任务意图的高层约束,而不是对输出类型边界做形式化定义的 schema。当前页面只能确认该字符串被这样传入,不能从来源外推更完整的类型系统。
llm_client 与 embedder
llm_client=llm:接收由create_client(...)或get_client()返回的大模型客户端。embedder=emb:接收与之配套的嵌入器。
这两个参数是 provider 可替换的主要接口位。来源中的 OpenAI、Bailian、本地 vLLM 示例,都是先得到这两个对象,再复用同一份任务配置。
node_key_extractor
来源把节点键提取器写成:
lambda n: n.name
这表示节点的唯一键或去重键按 n.name 取得。也就是说,在这个示例任务里,节点身份以名称字段为准。
edge_key_extractor
来源把边键提取器写成:
lambda e: (e.source, e.target, e.type)
这说明一条边的键由三元组组成:
e.sourcee.targete.type
因此,在当前任务配置下,只有当源节点、目标节点和关系类型三者都相同时,两条边才会被视为同一键。若关系类型不同,即使 source 和 target 相同,也仍然是不同边。
nodes_in_edge_extractor
来源把“边涉及哪些节点”的提取器写成:
lambda e: (e.source, e.target)
这表示每条边关联的节点集合由 source 和 target 两端给出,不额外包含第三个参与方,也不从 type 中反推出节点。
示例输入与执行方式
来源给出的输入文本是:
Zhang San founded ByteDance. Li Si serves as CEO.
执行方式也非常直接:
graph.parse(text)
print(f"Nodes: {len(graph.nodes)}, Edges: {len(graph.edges)}")
从这个示例可以确认以下事实:
- 任务通过
graph.parse(text)对文本执行解析; - 解析结果会累积到
graph.nodes与graph.edges; - 当前示例的观测方式不是打印完整图内容,而是统计节点数和边数。
也就是说,这里展示的是“任务是否成功运行、是否产出结构化图”的最小验证方法,而不是结果审查的完整流程。
细节与边界
1. 这是同一个任务示例,不是三个不同任务
来源明确写道:All three platforms run the same extraction task below. Only the client setup (first 3 lines) changes.
因此,页面讨论的核心边界是:
- 变的是 provider/client 初始化;
- 不变的是
AutoGraph(...)内的任务定义。
如果把 client setup 换成 OpenAI、Bailian 或本地 vLLM,这个词条指的仍是同一项抽取任务。
2. 当前来源只展示了数量观测,没有展示具体节点/边对象
虽然任务目标是“抽取人物及其关系”,并且给出了文本 Zhang San founded ByteDance. Li Si serves as CEO.,但来源没有打印实际 nodes/edges 内容,也没有给出最终数量的具体数字。
因此,本页不能把“实际抽取出了哪些节点、哪些边、节点数是多少、边数是多少”写成已被来源证实的事实。唯一可确认的是:示例通过 len(graph.nodes) 与 len(graph.edges) 来观察输出。
3. 键策略是任务配置的一部分
node_key_extractor、edge_key_extractor、nodes_in_edge_extractor 不是可有可无的背景代码,而是该任务如何定义节点身份、边身份以及边关联节点的关键机制。
尤其是边键采用 (e.source, e.target, e.type),说明该任务区分“同一对节点之间的不同关系类型”;而边涉及节点只取 (e.source, e.target),说明边的连接端点不包含额外隐式参与者。
4. 页面语义上属于任务配置示例,而非完整 API 规范
来源场景是 provider 配置指南中的 Unified Example。它的重点是展示如何把 client 接上同一份任务,而不是穷尽 AutoGraph 的全部参数、返回结构、错误处理或序列化方式。
因此,本词条应理解为一个“抽取任务配置实例”的概念说明,而不是 AutoGraph 全功能手册。
相关条目
- Provider Configuration Guide 摘要:该任务示例的直接来源,强调同一抽取任务可在不同 provider 上运行。
- Hyper-Extract Provider Configuration:说明如何获得
llm与emb这两个与任务解耦的客户端对象。 - Hyper-Extract Client String Shorthand:说明
create_client()可用provider、provider:model、provider:model@url等紧凑形式配置底层 provider。