当前位置: 首页 > 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.zskr.cn/news/1495555.html

相关文章:

  • 2026年 钢丝电缆收卷机厂家推荐:精密排线/自动收线/多功能收线机品牌实力榜单与选购指南 - 企业推荐官【官方】
  • DeepSeek-Coder-V2:打破闭源壁垒,开启代码智能新纪元
  • 读懂文献中的图:Masson染色结果分析(1)
  • MySQL 8 其他新特性
  • 2026年 CNC加工源头厂家实力榜单:塑胶模具/压铸模具/五金模具/夹治具/石墨零件/汽车配件/机械零件/铝合金零件/航空零件/铜公电极推荐 - 品牌发掘
  • Nex-N2重磅开源!具备“智能体思维”,性能直逼GPT-5.5,引领AI新纪元!
  • 多 Agent 架构:从单个助手到协作团队
  • SB-Admin-Angular项目架构解析:理解AngularJS模块化设计
  • 163MusicLyrics:一站式音乐歌词下载与格式转换神器
  • 2026镇海新房除甲醛公司哪家专业?垂直测评:宁波博豪环保凭硬实力脱颖而出 - 专注室内空气检测治理
  • 2026年自动光杆排线器/全自动光杆排线器/伺服排线器厂家推荐:多功能排线机与排线器配件品牌深度解析及选购指南 - 企业推荐官【官方】
  • 终极TikTok评论采集工具:3分钟获取完整评论数据,无需编程基础
  • i.MX RT1160硬件设计实战:从数据手册到SD/eMMC、以太网时序与启动配置
  • 方法类专利选哪种?2026工艺/算法/流程/配方专利选型全攻略|为什么只能申发明专利、适配场景、通过率、避坑误区解析|广州正规专利代理机构TOP3实测测评 - 信息热点
  • 避开这些坑!ArcGIS成本路径分析从数据准备到结果可视化的保姆级避坑指南
  • 铁岭银州区车灯升级门店专业度排行:合规工艺双维度 - 起跑123
  • 如何在Windows资源管理器中快速识别APK文件:终极图标显示解决方案
  • 如何在VS Code笔记本中使用vscode-markdown-mermaid绘制专业流程图:完整指南
  • 3步配置Kodi IPTV Simple客户端:打造你的家庭直播电视中心
  • 成都贝之森科技,实力与口碑俱佳的选择 - 信息热点
  • 2026义乌爪钻批发行业三大核心趋势解读 - 信息热点
  • 2026重庆除甲醛公司性价比排行,这些选择更靠谱 - GrowthUME
  • 期货量化多品种跑起来 CPU 很高:天勤订阅与 is_changing 精简
  • 债券市场数据获取:Finnhub Python API在固定收益分析中的实战应用
  • AI产品经理成长之路:从零基础到专家的详细学习路线全解析
  • AtomGit Flutter鸿蒙客户端:Provider状态管理
  • 2026嘉兴AI搜索优化服务商实战选型评测与避坑指南全解析 - 品牌报告
  • 如何快速掌握MPV_lazy播放器:Windows用户的终极配置指南
  • Kinetis K22F I2S/SAI低功耗时序深度解析与音频系统设计指南
  • Path of Building终极指南:5分钟快速掌握流放之路最强Build规划工具