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

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_length=10) # 向量数据库类 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 =[ f"id { 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, model=Constants.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, model=Constants.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 模型方法生成回答 response=llm_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%免费

http://www.jsqmd.com/news/983822/

相关文章:

  • 嵌入式开发实战:从Kinetis K22F数据手册到硬件设计优化
  • 西门子定位器6DR5110-0NG00-0AA0基础安装调试步骤与新手操作指南
  • TGIK开发工具集终极指南:Skaffold、Tilt、Telepresence本地开发快速入门
  • 沈阳2026瓷砖空鼓翘边拱起原因及解决办法 免砸砖快速修复 - 苏易房屋修缮
  • 经济指标和日历事件:使用Finnhub Python API进行宏观经济分析
  • 智能体泡沫:88%死于投产前
  • 43dBm输出功率!成都鼎讯DXGF-21A让光伏、风电信号覆盖无死角
  • 寄快递想省钱?试试这3个方法,价格低到5折起 - 快递物流资讯
  • 5分钟学会永久保存B站视频:m4s-converter零转码转换终极指南
  • 2026高端进口车库门十大品牌测评:德国霍曼领衔,五款标杆级隔音抗风防盗门深度解析 - 品牌发掘
  • 如何在Windows电脑上直接安装安卓应用?APK安装器终极指南
  • Kinetis K21F I2S/SAI时序与低功耗模式实战解析
  • 2026年 钢丝电缆收卷机厂家推荐:精密排线/自动收线/多功能收线机品牌实力榜单与选购指南 - 企业推荐官【官方】
  • 3大核心功能揭秘:暗黑破坏神2存档编辑器如何重塑你的游戏体验
  • 2026客厅金属线条装饰厂家实力排名:六家匠心工艺标杆企业及核心优势深度解析 - 品牌发掘
  • FreeKill架构深度剖析:Qt+Lua+C++如何打造跨平台桌游引擎
  • 读懂文献中的图:Masson染色结果分析(1)
  • APKMirror:3个场景解决安卓应用下载的终极难题
  • DeepSeek-Coder-V2:打破闭源壁垒,开启代码智能新纪元
  • TrafficMonitorPlugins插件性能优化:减少CPU占用与内存使用的终极指南
  • Nex-N2重磅开源!具备“智能体思维”,性能直逼GPT-5.5,引领AI新纪元!
  • 2026年 CNC加工源头厂家实力榜单:塑胶模具/压铸模具/五金模具/夹治具/石墨零件/汽车配件/机械零件/铝合金零件/航空零件/铜公电极推荐 - 品牌发掘
  • 重磅!2025JCR,即将发布!
  • 成都友发管业有限公司|焊管|镀锌管|方矩管|镀锌方矩管|螺旋钢管|钢管 - 四川盛世钢联营销中心
  • 视频修复神器untrunc:5分钟拯救损坏的MP4文件终极指南
  • MySQL 8 其他新特性
  • 163MusicLyrics:一站式音乐歌词下载与格式转换神器
  • 多 Agent 架构:从单个助手到协作团队
  • SB-Admin-Angular项目架构解析:理解AngularJS模块化设计
  • 终极指南:3步实现同花顺Python自动化交易,告别手动盯盘