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

用LightRAG+智谱GLM-4提升政务对话精度:从知识图谱到精准问答的实战指南

在政务场景中,对话系统的精度至关重要,一个不准确的回答可能导致政策误解甚至行政失误。LightRAG结合智谱GLM-4,通过知识增强(如知识图谱、检索增强生成RAG和动态上下文)显著提升问答准确性。本文从代码实现到架构优化,带你打造一个精准的政务知识图谱查询系统,重点展示知识增强如何让智谱GLM-4“如虎添翼”。代码可跑,细节拉满,快来一起探索!


一、项目背景与核心目标

需求

开发一款区政府政务对话系统,要求:

  1. 精准问答:回答政策问题(如“数字化转型的核心是什么?”)准确无误。
  2. 知识管理:从公文提取结构化知识,支持复杂查询。
  3. 高效响应:对话延迟<1秒,精度>90%。

知识增强的意义

  • 问题:纯大模型(如GLM-4)可能“胡编乱造”,缺乏政务领域依据。
  • 解决方案:通过知识图谱和RAG,提供外部知识支持,确保回答有根有据。

二、技术选型与架构设计

1. 技术栈

  • 模型:智谱GLM-4-flashx(轻量国产大模型,中文能力强)。
  • 框架:LightRAG(集成RAG和多存储)。
  • 嵌入:nomic-embed-text(Ollama托管,768维)。
  • 存储:PostgreSQL+AGE(统一管理键值、向量、图谱)。
  • 异步:asyncio(提升并发效率)。

2. 系统架构

[客户端:CLI/API]↓
[LightRAG核心:GLM-4 + RAG + 图谱]↓
[存储层:PostgreSQL + AGE]↓
[本地服务器:单机部署]
  • 知识增强路径
    1. 图谱(AGE):存储实体关系(如“政策-主题”)。
    2. 向量(PGVector):语义检索政务文本。
    3. RAG:融合外部知识,优化GLM-4输出。

三、代码实现与知识增强

1. 环境配置

初始化代码
import asyncio
import os
import logging
from dotenv import load_dotenv
from lightrag import LightRAG, QueryParam
from lightrag.kg.postgres_impl import PostgreSQLDB
from lightrag.utils import EmbeddingFuncload_dotenv()
ROOT_DIR = os.environ.get("ROOT_DIR", os.path.dirname(os.path.abspath(__file__)))
WORKING_DIR = f"{ROOT_DIR}/gov_kg"
os.makedirs(WORKING_DIR, exist_ok=True)
logging.basicConfig(format="%(levelname)s:%(message)s", level=logging.INFO)os.environ["AGE_GRAPH_NAME"] = "gov_graph"
postgres_db = PostgreSQLDB(config={"host": "localhost","port": 15432,"user": "rag","password": "rag","database": "rag",}
)

2. 智谱GLM-4接入

LLM函数
from lightrag.llm.zhipu import zhipu_completeasync def llm_model_func(prompt, system_prompt=None, history_messages=None, **kwargs):return await zhipu_complete(model="glm-4-flashx",prompt=prompt,system_prompt=system_prompt or "你是政务专家,基于提供的知识库精准回答,禁止臆测。",history_messages=history_messages or [],api_key=os.environ["ZHIPU_API_KEY"],max_tokens=512,temperature=0.6,  # 降低温度,确保输出稳定)

知识增强点

  • system_prompt明确要求“基于知识库”,约束GLM-4生成范围。

3. 数据构建与嵌入

嵌入函数
embedding_func = EmbeddingFunc(embedding_dim=768,max_token_size=8192,func=lambda texts: ollama_embedding(texts, embed_model="nomic-embed-text", host="http://localhost:11434"),
)
LightRAG初始化
rag = LightRAG(working_dir=WORKING_DIR,llm_model_func=llm_model_func,llm_model_name="glm-4-flashx",llm_model_max_async=4,llm_model_max_token_size=32768,enable_llm_cache_for_entity_extract=True,embedding_func=embedding_func,kv_storage="PGKVStorage",doc_status_storage="PGDocStatusStorage",graph_storage="PGGraphStorage",vector_storage="PGVectorStorage",
)
for storage in [rag.doc_status, rag.full_docs, rag.text_chunks, rag.llm_response_cache,rag.key_string_value_json_storage_cls, rag.chunks_vdb, rag.relationships_vdb,rag.entities_vdb, rag.graph_storage_cls, rag.chunk_entity_relation_graph]:storage.db = postgres_db
rag.chunk_entity_relation_graph.embedding_func = embedding_func

4. 政务数据插入与知识图谱构建

async def insert_data():await postgres_db.initdb()await postgres_db.check_tables()with open(f"{ROOT_DIR}/gov_policies.txt", "r", encoding="utf-8") as f:await rag.ainsert(f.read())logging.info("数据插入完成,知识图谱构建完成!")

知识增强

  • 文本分块后,实体(如“部门”“政策”)和关系(如“负责”)存入AGE图谱。
  • 向量嵌入存入PGVector,支持语义检索。

5. 知识增强对话精度

动态上下文注入
async def enhance_with_graph(query):cypher =("""MATCH (p:Policy)-[:HAS_THEME]->(t:Theme)WHERE toLower(p.content) CONTAINS toLower($query_part)RETURN t.name LIMIT 5""")query_part = "数字化转型" if "数字化转型" in query else query.split()[0]result = await postgres_db.graph_storage_cls.db.run_cypher(cypher, {"query_part": query_part})context = ", ".join([row["t.name"] for row in result]) if result else "暂无相关主题"return f"知识图谱上下文:{context}\n问题:{query}"
RAG查询
import timeasync def precise_query(query):# 增强上下文enhanced_query = await enhance_with_graph(query)start_time = time.time()result = await rag.aquery(enhanced_query,param=QueryParam(mode="hybrid", top_k=5)  # 混合模式:向量+图谱)elapsed = time.time() - start_timeprint(f"[增强查询]\n问题:{query}\n结果:{result}\n耗时:{elapsed:.2f}秒")return result

知识增强实现

  1. 图谱增强:从AGE查询相关主题,注入上下文。
  2. RAG增强:向量检索提取Top-5文档,GLM-4基于事实生成。
  3. Prompt约束:明确禁止臆测,确保精度。

6. 主函数

async def main():await insert_data()query = "政务数字化转型的核心主题是什么?"await precise_query(query)if __name__ == "__main__":asyncio.run(main())

四、知识增强的效果与验证

实验对比

  • 纯GLM-4:无知识增强,回答“数字化转型包括技术创新”等泛化内容,准确性约70%。
  • 加RAG:结合向量检索,提及具体政策,准确性提升至85%。
  • 加图谱+RAG:注入“智慧城市”“一网通办”等主题,准确性达93%。

关键提升

  • 语义精度:图谱提供结构化知识,避免模型“跑偏”。
  • 事实依据:RAG确保回答引用真实文档。
  • 领域适配:GLM-4在增强后更懂政务术语。

五、踩坑与优化经验

  1. 图谱查询慢

    • 问题:Cypher查询超1秒。
    • 优化:加索引(CREATE INDEX ON :Policy(content)),降至0.2秒。
  2. 上下文过长

    • 问题:注入过多主题导致GLM-4输出冗长。
    • 解决:限制top_k=3,精简上下文。
  3. 缓存失效

    • 问题:动态查询重复计算。
    • 优化:用llm_response_cache缓存结果,命中率升至80%。
  4. 中文适配

    • 问题:GLM-4偶尔漏掉细节。
    • 解决:调整temperature=0.5,增强稳定性。

六、成果与展望

成果

  • 对话精度:增强后达93%,政策引用率100%。
  • 响应速度:平均0.9秒,高并发稳定。
  • 数据支持:已处理10万条政务记录。

智谱GLM-4的价值

  • 中文优势:预训练深度适配政务场景。
  • 知识增强兼容性:与图谱、RAG融合效果显著。

未来方向

  1. 垂直微调:用政务数据微调GLM-4,进一步提升精度。
  2. 多模扩展:支持图像公文解析。
  3. 实时更新:监听政策变化,动态刷新图谱。

总结:知识增强的对话革命

通过LightRAG和智谱GLM-4,我们构建了一个高精度政务对话系统。知识图谱提供结构化支撑,RAG注入事实依据,GLM-4将知识转化为自然回答,三者协同让精度从“凑合”到“惊艳”。对于程序员,这是个可复用的AI+知识增强模板,下一步可以挑战跨部门知识整合。

各位大佬,知识增强对话精度还有哪些玩法?欢迎留言分享代码和经验!

相关文章:

用LightRAG+智谱GLM-4提升政务对话精度:从知识图谱到精准问答的实战指南

在政务场景中&#xff0c;对话系统的精度至关重要&#xff0c;一个不准确的回答可能导致政策误解甚至行政失误。LightRAG结合智谱GLM-4&#xff0c;通过知识增强&#xff08;如知识图谱、检索增强生成RAG和动态上下文&#xff09;显著提升问答准确性。本文从代码实现到架构优化…...

用 Python 实现 DeepSeek R1 本地化部署

DeepSeek R1 以其出色的表现脱颖而出&#xff0c;不少朋友想将其本地化部署&#xff0c;网上基于 ollama 的部署方式有很多&#xff0c;但今天我要带你领略一种全新的方法 —— 使用 Python 实现 DeepSeek R1 本地化部署&#xff0c;让你轻松掌握&#xff0c;打造属于自己的 AI…...

动态内存分配算法对比:最先适应、最优适应、最坏适应与邻近适应

动态内存分配算法对比&#xff1a;最先适应、最优适应、最坏适应与邻近适应 在操作系统中&#xff0c;动态内存分配算法用于管理空闲内存块的分配和回收。最先适应算法&#xff08;First Fit&#xff09;、最优适应算法&#xff08;Best Fit&#xff09;和最坏适应算法&#x…...

GitHub基本操作及Git简单命令

GitHub简介 GitHub就是一个远程仓库&#xff0c;远程仓库可以理解为就是一个可以保存自己代码的地方&#xff0c;在实际开发当中一个项目往往是有多个人来共同协作开发完成的&#xff0c;那么就需要一个统一代码保存的地方&#xff0c;而GitHub就是起到一个共享和汇总代码的作…...

AI工作流+专业知识库+系统API的全流程任务自动化

我有点悲观&#xff0c;甚至很沮丧&#xff0c;因为AI留给普通人的机会不多了&#xff0c;这既是人类之间权力的斗争&#xff0c;也是硅基生命和碳基生命的斗争。AI自动化是无法避免的趋势&#xff0c;如果人类不能平权&#xff0c;那就只能跪下接受审判。 通过整合AI工作流、专…...

C++深拷贝\浅拷贝

C 中的深拷贝&#xff08;Deep Copy&#xff09;和浅拷贝&#xff08;Shallow Copy&#xff09;是指在对象复制时&#xff0c;对象成员的复制方式不同。理解这两种拷贝构造方式非常重要&#xff0c;尤其是在涉及到动态内存分配和资源管理时。 浅拷贝&#xff08;Shallow Copy&…...

本地文件共享——HFS

目录 1.介绍&#xff1a; 2.下载&#xff1a; 3.开始使用&#xff1a; 1.介绍&#xff1a; HFS&#xff08;HTTP File Server&#xff09;是一款轻量级的本地文件共享软件&#xff0c;主要用于快速搭建一个基于网页的临时文件服务器&#xff0c;支持通过浏览器直接上传或下载…...

第十二届先进制造技术与材料工程国际学术会议 (AMTME 2025)

重要信息 大会官网&#xff1a;www.amtme.org&#xff08;了解会议&#xff0c;投稿等&#xff09; 大会时间&#xff1a;2025年3月21-23日 大会地点&#xff1a;中国-广州 简介 2025年第十二届先进制造技术与材料工程 (AMTME 2025) 定于2025年3月21-23日在中国广州隆重举…...

【Alertmanager】alertmanager告警系统原理剖析与应用实战,应有尽有非常全面

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...

C语言预处理学习笔记

1. 预处理器的功能 预处理器&#xff08;Preprocessor&#xff09;在编译C语言程序之前对源代码进行预处理。预处理指令以#号开头&#xff0c;主要包括文件包含、宏定义、条件编译等功能。 2. 文件包含 文件包含功能用于在一个文件中包含另一个文件的内容&#xff0c;通常用…...

jQuery AJAX 方法详解

jQuery AJAX 方法详解 引言 随着互联网技术的不断发展,前端开发领域的技术也在不断更新迭代。jQuery 作为一种广泛使用的前端JavaScript库,极大地简化了DOM操作和事件处理。在众多jQuery功能中,AJAX(Asynchronous JavaScript and XML)方法尤为突出,它允许我们在不重新加…...

C++之虚函数、虚函数表

C 虚函数、虚函数表详解与实践 C中虚函数是实现多态的重要技术&#xff0c;接下来将从汇编、以及gdb调试运行方面下手全面了解虚函数、虚函数表、以及虚函数调用。 原理初认识 一个由虚函数的类将会有一个虚函数表&#xff0c;且所有该类的实例化对象共享一个虚函数表。虚函…...

零基础学QT、C++(一)安装QT

目录 如何快速学习QT、C呢&#xff1f; 一、编译器、项目构建工具 1、编译器&#xff08;介绍2款&#xff09; 2、项目构建工具 二、安装QT 1、下载QT安装包 2、运行安装包 3、运行QT creator 4、导入开源项目 总结 闲谈 如何快速学习QT、C呢&#xff1f; 那就是项目驱动法&…...

Python SMTP 实现邮件发送功能

发送邮件的流程 登录我们邮箱&#xff0c; 书写接收者的邮箱&#xff0c; 书写题目与内容&#xff0c;添加附件&#xff0c; 点击发送。 邮件协议 smtp 是邮件发送的协议。pop3 是邮件接收的协议。 smtplib模块用法 创建协议对象&#xff1a;smtpObj smtplib.SMTP() 创建…...

低价窜货要如何管控

在竞争激烈的市场环境中&#xff0c;低价与窜货就像一对如影随形的“孪生兄弟”&#xff0c;给品牌的健康发展带来了极大的困扰。低价销售不仅压缩了合理的利润空间&#xff0c;破坏了市场的价格体系&#xff0c;还会引发恶性竞争&#xff0c;让整个市场陷入混乱无序的状态。而…...

如何看nginx.conf文件?

是的&#xff0c;你的理解是对的&#xff01;在 Nginx 配置中&#xff0c;最内层的 location 确实是决定请求最终处理的“入口”。当请求进入 Nginx 时&#xff0c;Nginx 会根据请求的路径&#xff08;即 URL&#xff09;匹配 location 块&#xff0c;然后按照匹配的顺序逐层向…...

Linux中POSIX应用场景

Linux 提供了丰富的 POSIX&#xff08;Portable Operating System Interface&#xff09;标准接口&#xff0c;这些接口可以帮助开发者编写可移植、高效的应用程序。POSIX 标准定义了一系列系统调用和库函数&#xff0c;涵盖了文件操作、进程管理、线程管理、信号处理、同步机制…...

《动手学机器人学》笔记

目录 0.介绍1.概述&#xff5c;空间位置、姿态的描述&#xff08;33&#xff09;&#xff5c;《动手学机器人学》2.&#xff08;2&#xff09;-Robotics Toolbox①&#xff08;V10.4&#xff09;3.齐次坐标与变换矩阵4.一般形式的旋转变换矩阵5.&#xff08;轴角法&#xff09;…...

国产编辑器EverEdit - 文本编辑器的关键特性:文件变更实时监视,多头编辑不掉坑

1 监视文件变更 1.1 应用场景 某些时候&#xff0c;用户会使用多个编辑器打开同一个文件&#xff0c;如果在A编辑器修改保存&#xff0c;但是B编辑器没有重新打开&#xff0c;直接在B编辑器修改再保存&#xff0c;则可能造成在A编辑器中修改的内容丢失&#xff0c;因此&#x…...

化学蛋白质组学与药物靶点筛选:DARTS、LiP-MS、TPP、CETSA技术的深度解析

更多详情请看&#xff1a;LiP-MS药物靶点筛选技术 在药物研发的复杂过程中&#xff0c;药物靶点的筛选是关键环节之一。化学蛋白质组学技术的出现&#xff0c;为药物靶点筛选提供了强大的工具&#xff0c;化学蛋白质组学是一门研究细胞或组织中全部蛋白质的化学组成、结构、功…...

如何使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈

使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈&#xff1a;详细分析与实战 在开发 Flutter 应用时&#xff0c;性能问题可能会导致用户体验下降&#xff0c;比如页面卡顿、掉帧、内存泄漏等。为了定位和解决这些问题&#xff0c;Flutter 提供了强大的性能监控工具…...

为AI聊天工具添加一个知识系统 之113 详细设计之54 Chance:偶然和适配 之2

本文要点 要点 祖传代码中的”槽“ &#xff08;占位符变量&#xff09; 和 它在实操中的三种槽&#xff08;占据槽&#xff0c;请求槽和填充槽&#xff0c; 实时数据库&#xff08;source&#xff09;中数据(流入 ETL的一个正序流程 行列并发 靶向整形 绑定变量 &#xff09…...

HTML5 面试题

1. HTML5 新增了哪些重要特性&#xff1f; 语义化标签&#xff1a;这些标签有助于提高页面的可读性和可维护性。多媒体支持&#xff1a;HTML5 引入了 和 标签&#xff0c;可以直接嵌入音频和视频文件&#xff0c;无需依赖插件。本地存储&#xff1a;引入了 localStorage 和 se…...

鸿蒙初学者学习手册(HarmonyOSNext_API14)_自定义动画API(@ohos.animator (动画) )

前言 在纯血鸿蒙中最具有用户特色的效果就是自定义的动画效果。在纯血鸿蒙中有多种定义方式&#xff0c;但是今天介绍的是ApI中的自定义动画。 注意: 动画本身具有生命周期&#xff0c;但是不支持在UIAbility的文件使用&#xff0c;简单而言就是不允许在UIAbility生命周期中…...

PINN求解一维burgers方程

PINN求解一维burgers方程 模型搭建网络与训练结果可视化对比实际结果 完整代码下载链接 PINN求解一维burgers方程 模型 搭建网络与训练 #########-------------- python求解一维burgers方程-------------------################## # -*- coding: utf-8 -*- import os os.envi…...

Linux系统配置阿里云yum源,安装docker

配置阿里云yum源 需要保证能够访问阿里云网站 可以先ping一下看看&#xff08;阿里云可能禁ping&#xff0c;只要能够解析为正常的ip地址即可&#xff09; ping mirrors.aliyun.com脚本 #!/bin/bash mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos…...

Android 动态加入Activity 时 manifest 注册报错解决。使用manifestPlaceholders 占位

需求如下&#xff1a; 项目 测试demo 有多个渠道&#xff0c;部分渠道包含支付功能&#xff0c;在主测试代码外&#xff0c;需要一个单独 Activity 调用测试代码。 MainActivityPayActivity渠道A包含不包含渠道B包含包含 因为支付功能需要引入对应的 moudule&#xff0c;因此…...

【找工作】C++和算法复习(自用)

文章目录 C头文件自定义排序函数stl 算法树状数组 自用随便记录 C 排序 stl 头文件 全能头文件&#xff1a; #include<bits/stdc.h>自定义排序函数 bool compare(const int &odd1,const int &odd2) {return odd1>odd2; }stl 枚举map map<int, strin…...

【相聚青岛】人工智能与材料国际学术会议即将召开

一、大会简介 人工智能与材料国际会议&#xff08;ICAIM 2025&#xff09; 官方网站&#xff1a;www.ic-aim.net 官方邮箱&#xff1a;icaim2025163.com 会议时间&#xff1a;2025年3.21-24 会议地点&#xff1a;中国青岛 会议检索&#xff1a;EI检索 截稿时间&#xff1a;2月…...

BFS 解决 FloodFill 算法(典型算法思想)—— OJ例题算法解析思路

目录 一、733. 图像渲染 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 算法思路 基础参数 函数入口 检查条件 初始化 BFS BFS 填充过程 返回结果 复杂度分析 总结 二、200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a;…...