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

基于Go + gin+gorm+ rag+千问大模型 + pgvector 构建市场监管智能问答智能体

基于Go 千问大模型 pgvector构建市场监管智能问答智能体一、项目背景随着放管服改革的深入推进市场监管领域政策法规不断更新企业和公众对政策咨询的需求日益增长。传统的政策咨询模式存在响应慢、效率低、准确性差等问题已无法满足新时代市场监管的需求。本文基于Go语言、千问大模型、pgvector向量数据库和RAG技术构建了一套完整的市场监管智能问答智能体系统实现法规智能解析、执法文书自动生成、知识库管理等核心功能。二、技术架构2.1 技术栈技术组件选型说明后端框架Go Gin高性能Web框架支持SSE流式输出ORM框架GORMGo语言最流行的ORM库数据库PostgreSQL pgvector关系数据库 向量检索扩展大模型千问大模型(Qwen)阿里云通义千问支持流式调用前端框架Vue 3 Element Plus现代化前端框架良好的用户体验部署容器Docker Docker Compose一键部署环境隔离2.2 系统架构图┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 前端Vue │────▶│ Gin服务 │────▶│ PostgreSQL│ │ ElementUI │◀────│ (SSE流式) │◀────│ pgvector │ └─────────────┘ └─────────────┘ └─────────────┘ │ ▼ ┌─────────────┐ │ 千问大模型 │ │ (Qwen API) │ └─────────────┘三、核心功能实现3.1 数据库设计知识库主表CREATETABLEknowledge_base(id BIGSERIALPRIMARYKEY,nameTEXTNOTNULL,descriptionTEXT,categoryTEXT,statusINTEGERNOTNULLDEFAULT1,create_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,update_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP);知识库分块表支持向量检索CREATETABLEknowledge_chunks(id BIGSERIALPRIMARYKEY,knowledge_doc_idBIGINTNOTNULL,chunk_idTEXTNOTNULL,contentTEXTNOTNULL,extTEXT,statusINTEGERNOTNULLDEFAULT1,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,updated_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,embedding vector(1536)-- 向量字段);3.2 RAG检索增强生成RAG的核心思想是在大模型生成答案前先从知识库中检索相关文档作为上下文输入给大模型从而提升回答的准确性和专业性。// RAG服务核心代码func(r*RAGService)AnswerStream(ctx context.Context,querystring,sendEventfunc(string))error{// 1. 向量检索相关文档docs,err:r.Retrieve(ctx,query,r.TopK)iferr!nil{returnerr}// 2. 构建System PromptsystemPrompt:buildQAPrompt(query,docs)// 3. 流式调用大模型returnCallLLMStream(systemPrompt,query,func(chunkstring){sendEvent(chunk)// 实时推送})}3.3 向量检索优化func(r*RAGService)Retrieve(ctx context.Context,querystring,topKint)([]models.LawDocument,error){// 生成查询向量带缓存emb,err:r.getOrGenerateEmbedding(query)iferr!nil{returnnil,err}vardocs[]models.LawDocument// 使用pgvector的余弦距离排序并过滤低相似度结果errr.DB.WithContext(ctx).Model(models.LawDocument{}).Select(id, title, content, source).Where(embedding ? ?,pgvector.NewVector(emb),r.SimilarityThreshold).Order(embedding ?,pgvector.NewVector(emb)).Limit(topK).Find(docs).Errorreturndocs,err}3.4 PDF知识库构建系统支持上传PDF文档自动解析、分块、向量化后存入知识库func(s*PDFUploadService)UploadPDFWithKnowledgeBase(ctx context.Context,knowledgeBaseIDuint,fileNamestring,fileData[]byte,)(int,error){// 1. 提取PDF文本text,err:ExtractTextFromPDF(fileData)// 2. 文本分块每块500字符重叠50字符chunks:ChunkText(text,500,50)// 3. 生成向量并批量入库for_,chunk:rangechunks{embedding,_:GenerateEmbedding(chunk.Content)chunkModel:models.KnowledgeChunk{Content:chunk.Content,Embedding:embedding,}chunkModelsappend(chunkModels,chunkModel)}// 4. 批量插入数据库returns.DB.CreateInBatches(chunkModels,100).Error}3.5 SSE流式输出为了提升用户体验系统采用SSEServer-Sent Events实现大模型答案的实时流式输出func(qc*QAController)Ask(c*gin.Context){// 设置SSE响应头c.Writer.Header().Set(Content-Type,text/event-stream)c.Writer.Header().Set(Cache-Control,no-cache)c.Writer.Header().Set(Connection,keep-alive)sendEvent:func(datastring){c.Writer.Write([]byte(fmt.Sprintf(data: %s\n\n,data)))c.Writer.Flush()}// 调用流式问答qc.RAG.AnswerStream(c.Request.Context(),req.Question,sendEvent)}四、项目部署4.1 Docker Compose一键部署version:3.8services:postgres:image:pgvector/pgvector:pg16environment:POSTGRES_USER:postgresPOSTGRES_PASSWORD:yourpasswordPOSTGRES_DB:market_intelports:-5432:5432volumes:-postgres_data:/var/lib/postgresql/dataapp:build:.ports:-8080:8080depends_on:-postgresenvironment:DB_HOST:postgresQIANWEN_API_KEY:${QIANWEN_API_KEY}4.2 启动命令# 设置环境变量exportQIANWEN_API_KEYsk-xxx# 一键启动docker-composeup-d# 查看日志docker-composelogs-fapp五、核心优化策略5.1 向量缓存机制对于相同或相似的问题缓存查询向量减少API调用varembeddingCachecache.New(5*time.Minute,10*time.Minute)func(r*RAGService)getOrGenerateEmbedding(textstring)([]float64,error){ifcached,found:embeddingCache.Get(text);found{returncached.([]float64),nil}emb,err:GenerateEmbedding(text)iferrnil{embeddingCache.Set(text,emb,cache.DefaultExpiration)}returnemb,err}5.2 相似度阈值过滤只返回余弦距离低于阈值的文档避免低质量结果影响回答质量Where(embedding ? ?,pgvector.NewVector(emb),0.8)5.3 PDF文本清理处理PDF提取中的编码问题确保文本有效的UTF-8funcsanitizeUTF8(sstring)string{if!utf8.ValidString(s){sstrings.ToValidUTF8(s,)}varresult strings.Builderfor_,r:ranges{ifrutf8.RuneError{continue}result.WriteRune(r)}returnresult.String()}六、性能测试结果测试场景响应时间说明向量检索50ms使用pgvector HNSW索引大模型首字2s千问大模型首Token延迟PDF上传(10MB)15s含解析、分块、向量化并发问答(10)3s平均响应时间七、项目亮点智能问答基于RAG技术打破传统关键词检索局限实现即问即答执法辅助自动识别违法行为生成《检查记录表》《责令整改通知书》等执法文书语音驱动支持语音输入实现一语即中的的监管新模式知识库持续优化通过用户反馈机制不断优化提示词和知识库质量流式输出SSE技术实现实时响应用户体验流畅八、总结本文基于Go语言和千问大模型结合RAG技术构建了一套完整的市场监管智能问答系统。系统实现了法规智能解析、执法文书自动生成、知识库管理、语音输入等核心功能有效提升了市场监管咨询服务的响应效率和准确度。未来将持续优化引入更多大模型适配如GPT、Claude增加多轮对话能力优化向量检索算法HNSW索引实现用户行为分析和个性化推荐作者简介资深后端开发工程师专注于Go语言、大模型应用和云原生技术。欢迎技术交流。

相关文章:

基于Go + gin+gorm+ rag+千问大模型 + pgvector 构建市场监管智能问答智能体

基于Go 千问大模型 pgvector构建市场监管智能问答智能体 一、项目背景 随着"放管服"改革的深入推进,市场监管领域政策法规不断更新,企业和公众对政策咨询的需求日益增长。传统的政策咨询模式存在响应慢、效率低、准确性差等问题,…...

UniApp地图组件实战:5分钟搞定腾讯位置服务+自定义气泡弹窗(附避坑指南)

UniApp腾讯地图组件深度实战:从Key申请到自定义弹窗全流程解析 1. 腾讯位置服务Key申请与配置 在manifest.json中配置腾讯地图Key是第一步,但90%的开发者会忽略安全配置细节。正确的申请流程应该是: 访问腾讯位置服务官网,进入控制…...

OpenClaw技能扩展:基于百川2-13B开发自定义文件处理器

OpenClaw技能扩展:基于百川2-13B开发自定义文件处理器 1. 为什么需要自定义文件处理技能 上周我在整理项目文档时,发现一个重复性痛点:每天需要手动将同事发来的各种格式文件(PDF、Word、Markdown)按内容分类存储。当…...

Matlab Simulink代码生成全流程解析

matlab simulink代码生成 包括:环境配置,参数与信号配置,函数名配置,数据管理,代码生成,以及代码优化等 文档63页在工程领域,利用Matlab Simulink进行代码生成是一项极为实用的技能,…...

保姆级教程:用Project AirSim的Python脚本,5分钟复现无人机深度图避障Demo

5分钟实战:用Project AirSim实现无人机深度图避障全流程指南 刚接触无人机仿真的开发者常会遇到一个困境:想快速验证某个算法效果,却被复杂的配置和代码绊住脚步。本文将带你用Project AirSim提供的Python脚本,在5分钟内跑通完整的…...

2026年家用投影仪品牌怎么选?聚焦画质准度的工程师推荐

2026年高端家用投影仪哪个品牌最好?基于评分卡模型的权威品牌排行备选标题:2026年高端家用投影仪哪个品牌最好?四大品牌量化评分终极排行从色彩科学到口碑:2026年高端家用投影仪品牌深度评测榜预算2万到5万:2026年明基…...

从0到1:Fugu14完美越狱工具实战指南

从0到1:Fugu14完美越狱工具实战指南 【免费下载链接】Fugu14 Fugu14 is an untethered iOS 14.3-14.5.1 jailbreak 项目地址: https://gitcode.com/gh_mirrors/fu/Fugu14 iOS 14.3-14.5.1设备如何突破系统限制?Fugu14作为一款强大的完美越狱工具&…...

SAP BP客户主数据批量修改实战:从Excel导入到ALV报表展示全流程

SAP BP客户主数据批量修改实战:Excel导入与ALV报表全流程解析 当企业客户规模达到数万甚至数十万级别时,手动逐个修改客户主数据无异于一场噩梦。我曾参与过某跨国零售集团的SAP系统升级项目,仅客户地址变更就需要处理超过8万条记录。传统方式…...

Karabiner-Elements设备过滤与条件判断深度解析

Karabiner-Elements设备过滤与条件判断深度解析 【免费下载链接】Karabiner-Elements Karabiner-Elements is a powerful utility for keyboard customization on macOS Sierra (10.12) or later. 项目地址: https://gitcode.com/gh_mirrors/ka/Karabiner-Elements Kara…...

uConfigLib:嵌入式轻量级类型安全配置注册表

1. uConfigLib 库深度解析:面向嵌入式系统的轻量级配置注册表实现1.1 设计目标与工程定位uConfigLib 是一个专为资源受限嵌入式平台设计的纯 C 语言配置管理库,其核心目标并非提供通用键值存储,而是构建一种类 Windows 注册表(Reg…...

硬件编译器工具链新手指南:从概念到实践

硬件编译器工具链新手指南:从概念到实践 【免费下载链接】circt Circuit IR Compilers and Tools 项目地址: https://gitcode.com/gh_mirrors/ci/circt 一、CIRCT核心价值解析 在硬件设计领域,你是否曾面临这些挑战:高级算法难以直接…...

AI 模型推理引擎性能比较

AI模型推理引擎性能比较:解锁高效计算的秘密 在人工智能技术快速发展的今天,AI模型推理引擎的性能直接决定了实际应用的效率和成本。无论是云端服务还是边缘设备,选择一款高效的推理引擎可以大幅提升响应速度、降低资源消耗。本文将从计算速…...

M5Stack舵机驱动库:PCA9685硬件PWM控制与多平台移植

1. 项目概述M5Hat-8Servos 是专为 M5Stack 生态设计的硬件驱动库,用于控制 M5Stack 官方推出的HAT-8SERVO扩展模块。该模块基于PCA9685 16通道12位PWM LED与伺服驱动芯片,通过 IC 总线与主控(如 M5Stack Core2、M5Stamp C3、M5Paper 等&#…...

Windows下Java网络嗅探实战:jNetPcap配置与HTTP报文捕获详解

Windows下Java网络嗅探实战:jNetPcap配置与HTTP报文捕获详解 网络协议分析一直是开发者探索网络通信底层机制的重要途径。对于Java开发者而言,虽然标准库提供了丰富的网络编程接口,但涉及网络层及以下协议的操作却需要借助第三方库。本文将深…...

别再只盯着RTK了!聊聊GNSS/INS组合导航里,紧耦合如何用1颗卫星‘吊住’你的定位

1颗卫星的逆袭:紧耦合技术如何在极端环境下守护你的定位精度 想象一下,你正驾驶一辆L4级自动驾驶汽车穿越曼哈顿的钢铁森林。高楼间的"城市峡谷"让GPS信号时断时续,传统导航系统已经开始报警——"卫星信号丢失"。但你的车…...

掌握小程序逆向工具:wxapkg解析与代码还原全流程指南

掌握小程序逆向工具:wxapkg解析与代码还原全流程指南 【免费下载链接】wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 当你需要逆向分析小程序包时,是否遇到过这些痛点?wxapkg文件无法直接查看内容、…...

使用Yolo 11进行定制化图像识别全流程

全流程预览 Label Studio标注 → 导出YOLO格式 → 编写data.yaml → 拆分数据集 → 模型训练 → 预测部署步骤工具/技术产出物数据标注Label Studio标注好的图片数据导出YOLO with imagesimages/ labels/配置文件data.yaml数据集配置数据拆分Python脚本train/val/test模型训练…...

GLM-4.1V量化模型实测:NPU部署精度仅差0.17%

GLM-4.1V量化模型实测:NPU部署精度仅差0.17% 【免费下载链接】GLM-4.1V-9B-Thinking-w8a8s-310 项目地址: https://ai.gitcode.com/Eco-Tech/GLM-4.1V-9B-Thinking-w8a8s-310 导语:近日,基于GLM-4.1V-9B-Thinking模型的量化版本GLM-4…...

吴恩达Agentic AI教程·模块5:高度自主智能体的模式 知识点总结

吴恩达Agentic AI教程模块5:高度自主智能体的模式 知识点总结一、规划设计模式(高度自主智能体的核心模式)1.1 规划设计模式的核心定义与价值1.1.1 核心定义1.1.2 核心价值1.2 规划设计模式的基础流程与示例1.2.1 基础流程1.2.2 示例1&#x…...

别再纠结Seurat版本了!手把手教你用CCA和Harmony搞定单细胞数据整合(附避坑指南)

单细胞数据整合实战:从CCA到Harmony的精准选择与避坑指南 单细胞RNA测序技术正在重塑我们对复杂生物系统的认知边界。当实验室积累了大量单细胞数据集后,如何将这些分散的数据整合成一个连贯的整体,成为每个研究者必须面对的挑战。我曾见证过…...

Linux期末突击:从体系结构到VFS,一张图搞定所有简答题

Linux期末突击:从体系结构到VFS,一张图搞定所有简答题 距离期末考试只剩三天,书桌上堆满的Linux教材和笔记让人头皮发麻。别慌,这份突击指南将用最直观的图解方式,帮你把零散的知识点串联成完整的知识网络。我们不仅会…...

告别‘Hello World’:用Gin框架从零搭建一个带用户登录和文件上传的Web服务(Go 1.21+)

告别‘Hello World’:用Gin框架从零搭建一个带用户登录和文件上传的Web服务(Go 1.21) 当你已经掌握了Go语言的基础语法,接下来最令人兴奋的莫过于亲手构建一个真实的Web服务。Gin框架以其高性能和简洁的设计,成为Go开发…...

draw.io桌面版终极指南:离线绘图革命与数据主权回归

draw.io桌面版终极指南:离线绘图革命与数据主权回归 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 你是否曾因网络中断而无法完成重要的图表设计?是否担…...

探索水煤气交换反应的SOFC模型:从理论到Comsol仿真

水煤气交换反应的SOFC模型,固体氧化物燃料电池 考察了水煤气反应对电池内部气体浓度,温度的影响,基于仿真软件comsol探究了单通道SOFC的内特性,考虑了传热传质下的SOFC内特性,电池片的厚度来自于实际电池SEM扫描结果&a…...

探索基于Cruise与Simulink的前后双电机纯电动汽车联合仿真

基于Cruise和Simulink联合仿真前后双电机纯电动汽车模型,包含驱动转矩控制策略和最优转矩分配分配系数的dll文件,可根据自身车辆参数修改相关参数在电动汽车的研发领域,联合仿真技术正逐渐成为提升性能与优化设计的关键手段。今天咱就来唠唠基…...

Qt串口开发避坑指南:从QSerialPort基础到实战封装,解决粘包和跨平台问题

Qt串口开发避坑指南:从QSerialPort基础到实战封装 1. 串口开发的典型痛点与解决思路 嵌入式开发中,串口通信就像一位性格古怪的老朋友——看似简单却暗藏玄机。许多开发者第一次使用Qt的QSerialPort类时,往往会被其简洁的API迷惑,…...

实时数据复制技术在大数据平台中的应用与实践

实时数据复制技术在大数据平台中的应用与实践关键词:实时数据复制、大数据平台、CDC(变更数据捕获)、数据同步、数据一致性、分布式系统、ETL摘要:本文深入探讨了实时数据复制技术在大数据平台中的核心应用场景与实践方法。我们将…...

看完就会:2026年最强AI论文写作软件榜单,AI工具一键写高质论文

2026 年实测 10 款主流 AI 论文工具,千笔AI以全流程覆盖 语义级降重 免费查重领跑综合榜;ThouPen 稳坐留学生毕业全流程工具头把交椅;免费工具中DeepSeek Scholar、豆包学术版表现亮眼,30 分钟即可生成万字高质量初稿&#xff0…...

OpenClaw自动化报告:Qwen3.5-4B-Claude周报生成与邮件发送

OpenClaw自动化报告:Qwen3.5-4B-Claude周报生成与邮件发送 1. 为什么选择OpenClaw处理周报任务 每周五下午,我都会面临同样的困扰——需要从零散的会议记录、Git提交和即时通讯对话中提取关键信息,整理成一份结构清晰的周报。这个耗时1-2小…...

如何快速使用wiliwili:Switch本地视频播放完全指南

如何快速使用wiliwili:Switch本地视频播放完全指南 【免费下载链接】wiliwili 专为手柄控制设计的第三方跨平台B站客户端,目前可以运行在PC全平台、PSVita、PS4 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili …...