新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/1 11:24:28来源:尧图网络
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

相关资讯

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

较早相关资讯

最新相关资讯

Google Flow实战:用5款免费AI工具打造图片转视频工作流 2026/9/1 11:22:20

Google Flow实战:用5款免费AI工具打造图片转视频工作流

最近我一直在研究如何把 AI 创作工具串成一条高效的工作流,而不是今天用一个生成文案、明天再换另一个工具出图。Google 生态里其实已经有不少免费又好用的小工具,只不过很多朋友把它们当成独立产品来用,没有意识到组合起来的威力。这篇文章就…

阅读更多 →
capsule-fs开发者指南:如何基于Astrid SDK开发你的第一个自定义Capsule 2026/9/1 11:22:20

capsule-fs开发者指南:如何基于Astrid SDK开发你的第一个自定义Capsule

capsule-fs开发者指南:如何基于Astrid SDK开发你的第一个自定义Capsule 【免费下载链接】capsule-fs Filesystem tools for agents. Read, write, replace, grep, list, create, delete, move via VFS airlock. Part of Unicity AOS. 项目地址: https://gitcode.c…

阅读更多 →
10分钟录音跑通语音转换:RVC实战 2026/9/1 11:22:20

10分钟录音跑通语音转换:RVC实战

10分钟录音跑通语音转换&#xff1a;RVC实战 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI 刚录完…

阅读更多 →
如何快速上手OmniGet:Windows、macOS、Linux三大平台安装与首次启动完全指南 2026/9/1 11:22:20

如何快速上手OmniGet:Windows、macOS、Linux三大平台安装与首次启动完全指南

如何快速上手OmniGet&#xff1a;Windows、macOS、Linux三大平台安装与首次启动完全指南 【免费下载链接】omniget Download Udemy and Hotmart courses, YouTube videos, music and books — 1,800 sites, no terminal. Free open-source desktop app for Windows, macOS and …

阅读更多 →
【数据结构】二叉树 2026/9/1 11:22:20

【数据结构】二叉树

一、二叉树介绍 二叉树是最常用的树形结构&#xff0c;特别适合编码&#xff0c;常常将一般的树转换为二叉树来处理。 二叉树的每个节点最多有两个子节点&#xff0c;分别称为左孩子、右孩子&#xff0c;以它们为根的子树称为左子树、右子树。 二叉树的每层节点数以2的倍数递增…

阅读更多 →
企业为什么需要AI网关?MAI Gateway(魔芋企业级AI网关)给出企业级答案 2026/9/1 11:19:19

企业为什么需要AI网关?MAI Gateway(魔芋企业级AI网关)给出企业级答案

个人开发者管住自己的API调用&#xff0c;用一个开源网关脚本就够了。企业为什么需要"企业级"AI网关&#xff1f;因为企业级不是功能更多&#xff0c;而是几个个人场景根本不会遇到的硬标准。MAI Gateway&#xff08;魔芋企业级AI网关&#xff09;的答案就藏在这几个…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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