当前位置: 首页 > java >正文

GraphRAG 知识图谱核心升级:集成 langextract 与 Gemini ----实现高精度实体与关系抽取

一、引言

graphrag-Chinese-llm 项目启动以来,其核心目标始终是利用大语言模型(LLM)从中文非结构化文本中自动化构建高质量的知识图谱。

在实践中我们发现,图谱构建的质量极大程度上取决于 实体与关系提取 这一核心环节的精度和稳定性。

传统的、依赖于简单指令式 Prompt 的方法,在面对复杂或专业领域的文本时,往往存在:

  • 输出格式不稳定
  • 关键信息遗漏

为了解决这些问题,我们引入了基于 langextract 库Google Gemini 模型 的全新提取引擎。本文将深入剖析这一新架构的技术实现、设计思想及其带来的显著优势。

项目地址: https://github.com/via007/graphrag-Chinese-llm


二、传统 Prompt 方法的局限性

在旧工作流中,我们主要通过精心设计的 Prompt 指示 LLM 完成提取任务,但存在以下问题:

  1. 格式一致性差:LLM 生成具有随机性,即使有格式要求,也难保证输出结构统一。
  2. 复杂任务表达力不足:对于多实体、多关系、附加属性等复杂提取,Prompt 难以精确定义。
  3. 泛化与稳定性的矛盾:Prompt 过于泛化会降低精度,过于具体则在新场景中适应性差。

因此,我们需要一种 更稳定、更精确、更可扩展 的结构化数据提取范式。


三、技术深潜:基于 langextract 的全新提取引擎

新架构的核心是位于 graphrag/index/operations/extract_graph/langext.pyLangExtractor 类,它基于 Few-Shot Learning 构建了完整的提取流程,主要包含四大组件:

1. 任务描述 (Schema Definition)

self.prompt_description = textwrap.dedent("""从以下历史文本中,提取所有定义的实体,包括:“人物”、“组织”、“地点”、“时间”、“事件”、“群体”、“会议”、“重大政策”对于每一个实体,请根据上下文提供一句简洁的描述。同时,识别并描述实体之间的关系,并为每个关系评估其紧密程度(1-10分)。
""")

2. 示例驱动 (Few-Shot Examples)

self.examples = [lx.data.ExampleData(text="一九四六年八月六日,领导在与美国记者安娜·路易斯·斯特朗的谈话中指出...",extractions=[lx.data.Extraction(extraction_class="人物",extraction_text="领导",attributes={"entity_description": "领导,提出“坚持就是胜利”的论点。"}),# ... 其他实体 ...lx.data.Extraction(extraction_class="relationship",extraction_text="领导指出坚持就是胜利。",attributes={"entity1": "领导","entity2": "坚持","strength": "10","relationship_description": "领导是“坚持”理论的提出者和核心阐释者。"}),# ... 其他关系 ...])
]

通过 输入-输出对 (IO Pairs) 演示任务,让模型在 In-Context Learning 中学习抽取逻辑,提高精度与格式一致性。

3. 核心提取调用 (The Engine Call)

def _run_sync_extraction(self, text: str) -> List[lx.data.Extraction]:result = lx.extract(text_or_documents=text,prompt_description=self.prompt_description,examples=self.examples,model_id="gemini-2.5-flash",   # 指定模型api_key=self.api_key,use_schema_constraints=True,   # 强制模式约束format_type=lx.data.FormatType.JSON,  # 结构化 JSON 输出debug=False)return result.extractions

关键参数:

  • model_id="gemini-2.5-flash":指定使用 Gemini。

  • use_schema_constraints=True:强制 Gemini 输出遵循 JSON 模式。

  • format_type=JSON:确保结果为结构化数据。

4. 输出格式化 (Output Formatting)

def _format_extractions(extractions: List[lx.data.Extraction],tuple_delimiter: str = "<|>",record_delimiter: str = "##",# ...
) -> str:output_parts = []for ext in extractions:if ext.extraction_class in entity_types:record = f'("entity"{tuple_delimiter}...)'output_parts.append(record)elif ext.extraction_class == "relationship":record = f'("relationship"{tuple_delimiter}...)'output_parts.append(record)final_output = record_delimiter.join(output_parts)return final_output

该方法作为 适配器,将提取结果转化为 GraphRAG 可消费的格式,保证模块无缝集成。


四、新架构的价值与影响

  • 精度与召回率显著提升:示例学习提升了复杂任务的识别能力。

  • 稳定性大幅增强use_schema_constraints 确保输出格式 100% 可控。

  • 语义信息更丰富:不仅抽取实体和关系,还附带描述与强度评分。

  • 可扩展性卓越:新增任务只需补充示例,无需重新设计复杂 Prompt。


五、结论

graphrag-Chinese-llm 项目通过集成 langextractGemini,实现了从“指令式 Prompt”到“示例驱动式提取”的范式转变。

这次升级带来了:

  • 精度

  • 稳定性

  • 可扩展性

的全面提升,为后续更复杂的知识应用与推理奠定了坚实基础。

我们欢迎社区的朋友们试用新版本,并提出宝贵的意见。

http://www.xdnf.cn/news/19164.html

相关文章:

  • 营业执照识别技术应用OCR与深度学习,实现高效、精准提取企业核心信息,推动数字化管理发展。
  • Linux时间处理函数
  • 机器学习(三)sklearn机器学习
  • 第二阶段WinForm-11:自定义控件
  • Java全栈工程师的面试实战:从技术细节到业务场景
  • 在八月点燃AI智慧之火:CSDN创作之星挑战赛开启灵感盛宴
  • 04.《VLAN基础与配置实践指南》
  • Django Admin 管理工具
  • NSSCTF-[NISACTF 2022]string_WP
  • 身份证实名认证API集成—身份核验接口-网络平台安全合规
  • mitmproxy的使用初试
  • windows中Qwen3‑Coder 与 Claude Code 搭配使用
  • 《UE5_C++多人TPS完整教程》学习笔记45 ——《P46 待机与跳跃动画(Idle And Jumps)》
  • 【完整源码+数据集+部署教程】植物病害检测系统源码和数据集:改进yolo11-EMSCP
  • Lombok vs Java Record:谁才是未来?
  • week5-[二维数组]翻转
  • Node.js 的流(Stream)是什么?有哪些类型?
  • DBeaver 的 PostgreSQL 驱动包默认存储位置
  • 计算机网络知识--对称加密、非对称加密和数字证书详解
  • “上门做饭”平台的核心技术栈与运营壁垒是什么?
  • OpenCV之霍夫变换
  • Linux系统部署:Certbot 实现 Nginx 自动续期部署 Let‘s Encrypt 免费 SSL 证书
  • css三角形
  • 万字解析RAG(检索增强生成)系统的构建与优化,从基础架构逐步深入到高级技术
  • 深度学习入门Day10:深度强化学习原理与实战全解析
  • 虚拟机快照对内存与磁盘空间的影响
  • Git 合并冲突
  • C++ 编译和运行 LibCurl 动态库和静态库
  • 32.String str=aaa与 String str=new String(aaa)一样吗?new String(“aaa”);创建了几个字符串对象
  • Linux按键驱动开发