新闻详情

新闻详情

首页 / 资讯中心 / 详情

RAG实现公司制度智能问答系统

发布时间:2026/9/15 21:11:22来源:尧图网络
RAG实现公司制度智能问答系统
一、整体流程图及代码解析二、整体架构图及核心代码解析流程图三、核心代码#RAG 实现公司 HR 制度智能问答系统 .py # 需要 #pip install python-docx #pip install pdfminer.six from pdfminer.high_level import extract_pages from pdfminer.layout import LTTextContainer import chromadb from chromadb.config import Settings from docx import Document from models import get_normal_client, Constants client get_normal_client() # 读取 PDF 文本内容的函数供参考本示例中没有用到 def extract_text_from_pdf (filename, page_numbers None , min_line_length 1 ): 从 PDF 文件中按指定页码提取文字 paragraphs [] buffer full_text # 提取全部文本 for i, page_layout in enumerate (extract_pages(filename)): # 如果指定了页码范围跳过范围外的页 if page_numbers is not None and i not in page_numbers: continue for element in page_layout: if isinstance (element, LTTextContainer): full_text element.get_text() \n # 按空行分隔将文本重新组织成段落 lines full_text.split( \n ) for text in lines: if len (text) min_line_length: buffer ( text) if not text.endswith( - ) else text.strip( - ) elif buffer: paragraphs.append(buffer) buffer if buffer: paragraphs.append(buffer) return paragraphs # 读取 Word 文档 def extract_text_from_docx (filename, min_line_length 1 ): 从 DOCX 文件中提取文字 paragraphs [] buffer full_text # 打开并读取文档 doc Document(filename) # 提取全部文本 for para in doc.paragraphs: full_text para.text \n # 按空行分隔将文本重新组织成段落 lines full_text.split( \n ) for line in lines: # 这里其实起到一个分块的作用原文中的标题往往字数小于 10 个 # 如果当前行的长度小于 10 认为是标题不加到 paragraphs 中进行后续处理 # 这里的分块是比较粗糙的 if len (line) min_line_length: buffer ( line) if not line.endswith( - ) else line.strip( - ) elif buffer: paragraphs.append(buffer) buffer if buffer: paragraphs.append(buffer) return paragraphs # 使用示例 docx_filename 人事管理流程 .docx # 读取 Word 文件 paragraphs extract_text_from_docx(docx_filename, min_line_length 10 ) # paragraphs extract_text_from_pdf( 人事管理流程 .pdf, page_numbers[ # 2, 3], min_line_length10) # 向量数据库类 class MyVectorDBConnector: def __init__ ( self , collection_name, embedding_fn): chroma_client chromadb.Client(Settings( allow_reset True )) # 为了演示实际不需要每次 reset() # chroma_client.reset() # 创建一个 collection self .collection chroma_client.get_or_create_collection( name collection_name) self .embedding_fn embedding_fn def add_documents ( self , documents): 向 collection 中添加文档与向量 batch_size 10 for i in range ( 0 , len (documents), batch_size): batch_docs documents[i:i batch_size] self .collection.add( embeddings self .embedding_fn(batch_docs), # 每个文档的向量 documents batch_docs, # 文档的原文 ids [ fid { i } for i in range (i, i len (batch_docs))] # 每个文档的 id ) def search ( self , query, top_n): 检索向量数据库 results self .collection.query( query_embeddings self .embedding_fn([query]), n_results top_n ) return results # 使用千问的模型进行向量化 def get_embeddings (texts, modelConstants.EMBEDDING_MODEL.value): data client.embeddings.create( input texts, model model).data return [x.embedding for x in data] # 创建一个向量数据库对象 vector_db MyVectorDBConnector( demo , get_embeddings) # 向向量数据库中添加文档 1 vector_db.add_documents(paragraphs) # llm 模型 def get_completion (prompt, modelConstants.LLM_MODEL.value): 封装 openai 接口 messages [{ role : user , content : prompt}] response client.chat.completions.create( model model, messages messages, temperature 0 , # 模型输出的随机性 0 表示随机性最小 ) return response.choices[ 0 ].message.content prompt_template 你是一个问答机器人。 你的任务是根据下述给定的已知信息回答用户问题。 确保你的回复完全依据下述已知信息。不要编造答案。 如果下述已知信息不足以回答用户的问题请直接回复 我无法回答您的问题 。 已知信息 : __INFO__ 用户问 __QUERY__ 请用中文回答用户问题。 # 给 Prompt 模板赋值 def build_prompt (prompt_template, **kwargs): 将 Prompt 模板赋值 prompt prompt_template for k, v in kwargs.items(): if isinstance (v, str ): val v elif isinstance (v, list ) and all ( isinstance (elem, str ) for elem in v): val \n .join(v) else : val str (v) # 返回转换为大写的字符串副本 prompt prompt.replace( f__ { k.upper() } __ , val) return prompt # 定义 chat 函数 def rag_chat (vector_db,llm_api,user_query,n_results 2 ): # 1. 检索 search_results vector_db.search(user_query, n_results) print ( search_results: ,search_results) # 2. 构建提示词模板 build_prompt prompt build_prompt(prompt_template, info search_results[ documents ][ 0 ], query user_query) print ( prompt: , prompt) # 3, 调用 LLM 模型方法生成回答 responsellm_api(prompt) return response user_query 视为不符合录用条件的情形有哪些 response rag_chat(vector_db,get_completion,user_query) print (response)学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

大模型上下文缓存机制:原理、实现与优化 2026/9/15 21:08:51

大模型上下文缓存机制:原理、实现与优化

1. 大模型上下文缓存机制的本质解析当我们在使用ChatGPT这类大语言模型时,经常会遇到这样的场景:连续提问时,模型似乎"记得"之前的对话内容。这种"记忆"能力的背后,就是上下文缓存机制在发挥作用。简单来说&a…

阅读更多 →
基于Python3+Django的Web可视化运维自动化平台设计与实现 2026/9/15 21:08:51

基于Python3+Django的Web可视化运维自动化平台设计与实现

简介:这是一套基于 Python3 与 Django 框架打造的 Web 可视化运维自动化项目源码,适合有一定 Python 基础、希望将运维工作平台化的开发或运维工程师。项目以 Django 为核心组织业务逻辑,配合 HTML/CSS/JavaScript 构建交互界面,可…

阅读更多 →
Ubuntu 22.04双屏触摸屏错位修复:xinput映射与坐标矩阵实战 2026/9/15 21:08:51

Ubuntu 22.04双屏触摸屏错位修复:xinput映射与坐标矩阵实战

先说结论:在 Ubuntu 22.04 下碰到的双屏触摸屏错位,绝大多数不是触摸屏硬件坏了,也不是显卡驱动没装好,而是 Xorg 把触摸设备默认当成了“覆盖整张桌面”的绝对定位设备。双屏扩展之后,桌面坐标范围变宽,物…

阅读更多 →
大型Git仓库性能优化:从浅克隆到filter-repo的实践指南 2026/9/15 21:08:51

大型Git仓库性能优化:从浅克隆到filter-repo的实践指南

1. 仓库变慢之前,先搞清楚Git到底慢在哪接手一个几年的老项目,第一件事往往不是看代码,而是先跑一次git clone。几GB的仓库,等上十几分钟甚至更久,心里基本就有数了:这个仓库已经进入了"大型仓库"…

阅读更多 →
Java Swing实验室管理系统设计与实现:数据库到GUI全栈指南 2026/9/15 21:08:51

Java Swing实验室管理系统设计与实现:数据库到GUI全栈指南

简介:一套基于 Java Swing 的实验室管理系统课程设计项目,面向 Java 初学者及高校课程设计/毕业设计场景,可用于快速理解 Swing 图形界面开发与实验室业务流程实现。系统内置文件、维修管理、管理员助理信息、实验室课程查询预约、系统设置、…

阅读更多 →
Unity游戏Web迁移:Phaser+TypeScript重构实战指南 2026/9/15 21:05:51

Unity游戏Web迁移:Phaser+TypeScript重构实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞