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

LangChain RAG实战:用PGVector把你的本地知识库变成智能问答机器人(Python代码详解)

LangChain RAG实战用PGVector把你的本地知识库变成智能问答机器人Python代码详解你是否曾经面对堆积如山的本地文档感到无从下手PDF报告、Markdown笔记、TXT日志散落在各个文件夹每次查找关键信息都像大海捞针。现在借助LangChain和PGVector你可以将这些杂乱无章的文件转化为一个能理解自然语言的智能助手。本文将手把手带你实现这个转变从零开始构建一个真正可用的知识库问答系统。1. 环境准备与数据基础建设在开始之前我们需要搭建好技术栈的基础设施。不同于简单的演示项目生产级的知识库系统需要考虑数据处理的完整链路。以下是关键组件的部署方案核心组件清单PostgreSQL 16选择长期支持版本确保稳定性pgvector 0.8.0专门为向量运算优化的扩展Python 3.10推荐使用虚拟环境隔离依赖LangChain 0.1.x当前最活跃的AI应用框架安装过程需要注意几个技术细节# 创建Python虚拟环境 python -m venv rag_env source rag_env/bin/activate # Linux/Mac # rag_env\Scripts\activate # Windows # 安装核心依赖 pip install langchain psycopg2-binary pgvector langchain-openai tiktoken数据库配置有个容易被忽视的关键点——shared_preload_libraries参数需要包含vector-- 在postgresql.conf中添加 shared_preload_libraries vector # 需要重启服务生效 -- 创建专用数据库 CREATE DATABASE knowledge_base WITH ENCODINGUTF8; \c knowledge_base CREATE EXTENSION IF NOT EXISTS vector;2. 文档处理流水线设计原始文档就像未经加工的矿石需要经过多道工序才能变成可用的知识原料。我们设计了一个工业级处理流水线文档加载器矩阵文件类型加载器类特殊参数处理难点PDFPyPDFLoaderpassword格式保留MarkdownUnstructuredMarkdownLoadermodeelements代码块处理WordDocx2txtLoader-表格转换HTMLBSHTMLLoader-标签清理文本分割是影响后续检索质量的关键步骤这里有个实战验证过的配置方案from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter RecursiveCharacterTextSplitter( chunk_size800, # 经验值中文约400字英文约800词 chunk_overlap150, length_functionlen, separators[\n\n, \n, 。, , , \. , ! , r\? , ] )3. 向量存储的工程化实现PGVector的强大之处在于它把向量搜索能力直接集成到关系型数据库中。我们来看一个经过生产验证的存储方案连接配置最佳实践import psycopg2 from langchain_community.vectorstores import PGVector CONNECTION_STRING ( postgresql://user:passwordhost:5432/knowledge_base ?connect_timeout10keepalives1keepalives_idle30 ) # 带重试机制的连接池 def get_vector_store(embeddings): max_retries 3 for attempt in range(max_retries): try: return PGVector( embedding_functionembeddings, connection_stringCONNECTION_STRING, collection_nametech_docs, use_jsonbTrue, pre_delete_collectionFalse # 避免测试时误删数据 ) except psycopg2.OperationalError as e: if attempt max_retries - 1: raise time.sleep(2 ** attempt)批量插入优化技巧# 分批次插入文档每批500个chunk batch_size 500 for i in range(0, len(texts), batch_size): batch texts[i:i batch_size] vector_store.add_documents(batch) print(fInserted batch {i//batch_size 1})4. 检索增强生成(RAG)的深度优化基础版的RAG可能产生无关结果我们需要实现智能检索增强多级检索策略首轮向量相似度搜索二次筛选基于元数据过滤文档类型、更新时间等最终排序结合相关度分数和时间衰减因子实现代码示例from langchain.retrievers import ContextualCompressionRetriever from langchain.retrievers.document_compressors import LLMChainExtractor def create_smart_retriever(vector_store): base_retriever vector_store.as_retriever( search_typemmr, # 最大边际相关算法 search_kwargs{k: 10, filter: {source: official}} ) compressor LLMChainExtractor.from_llm(ChatOpenAI(temperature0)) return ContextualCompressionRetriever( base_compressorcompressor, base_retrieverbase_retriever )问答链的进阶配置qa_chain RetrievalQA.from_chain_type( llmChatOpenAI(modelgpt-4-1106-preview), chain_typerefine, # 处理长文档更有效 retrieverretriever, chain_type_kwargs{ question_prompt: PromptTemplate( template...自定义提示模板... ), refine_prompt: PromptTemplate( template...精炼阶段提示... ), }, return_source_documentsTrue )5. 系统监控与持续改进部署后的知识库需要持续优化这里有几个关键指标需要监控健康度检查清单检索准确率人工评估前20个结果的精确率响应延迟P99应控制在3秒以内API调用成本监控OpenAI的token消耗趋势知识新鲜度文档平均更新时间指标实现简单的监控日志import logging from datetime import datetime rag_logger logging.getLogger(rag_system) rag_logger.setLevel(logging.INFO) handler logging.FileHandler(rag_performance.log) handler.setFormatter(logging.Formatter(%(asctime)s - %(message)s)) rag_logger.addHandler(handler) def log_query(query, result, latency): rag_logger.info( fQuery: {query[:50]}... | fLatency: {latency:.2f}s | fSources: {len(result[source_documents])} )在项目后期可以考虑实现自动化评估流水线from ragas import evaluate from ragas.metrics import faithfulness, answer_relevancy def evaluate_rag(questions, ground_truths): dataset { question: questions, answer: [qa_chain.run(q) for q in questions], contexts: [[res.page_content for res in qa_chain.run(q)[source_documents]] for q in questions], ground_truth: ground_truths } score evaluate( dataset, metrics[faithfulness, answer_relevancy], ) return score6. 用户界面与交互设计技术最终要服务于用户体验这里实现一个控制台交互界面from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory from prompt_toolkit.auto_suggest import AutoSuggestFromHistory def chat_interface(): print(知识库助手已启动(输入/exit退出)) while True: try: user_input prompt( 用户 , historyFileHistory(.rag_history), auto_suggestAutoSuggestFromHistory(), multilineFalse ) if user_input.lower() /exit: break start_time time.time() result qa_chain({query: user_input}) latency time.time() - start_time print(f\n助手 {result[result]}) print(f\n[本次响应耗时: {latency:.2f}s]) log_query(user_input, result, latency) except KeyboardInterrupt: continue except Exception as e: print(f系统错误: {str(e)})对于需要部署为Web服务的情况可以使用FastAPI构建REST端点from fastapi import FastAPI from pydantic import BaseModel app FastAPI() class QueryRequest(BaseModel): question: str user_id: str None app.post(/query) async def handle_query(request: QueryRequest): result qa_chain({query: request.question}) return { answer: result[result], sources: [ {content: doc.page_content, metadata: doc.metadata} for doc in result[source_documents] ] }

相关文章:

LangChain RAG实战:用PGVector把你的本地知识库变成智能问答机器人(Python代码详解)

LangChain RAG实战:用PGVector把你的本地知识库变成智能问答机器人(Python代码详解) 你是否曾经面对堆积如山的本地文档感到无从下手?PDF报告、Markdown笔记、TXT日志散落在各个文件夹,每次查找关键信息都像大海捞针。…...

LM358运放实战:手把手教你搭建电容传感器测量电路(附常见问题排查)

LM358运放实战:手把手教你搭建电容传感器测量电路(附常见问题排查) 在电子设计领域,电容式传感器因其非接触式测量、结构简单和成本低廉等优势,被广泛应用于液位检测、接近开关和湿度测量等场景。而要将微弱的电容变化…...

SillyTavern角色系统深度解析:从基础配置到高级应用

SillyTavern角色系统深度解析:从基础配置到高级应用 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 引言:为什么角色系统是SillyTavern的核心竞争力? 在…...

GHelper技术解析:华硕笔记本轻量级性能优化工具架构与配置指南

GHelper技术解析:华硕笔记本轻量级性能优化工具架构与配置指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models …...

OpenClaw数据标注:用Qwen3-VL:30B增强飞书图像训练集

OpenClaw数据标注:用Qwen3-VL:30B增强飞书图像训练集 1. 为什么需要自动化数据标注 作为一个小型AI团队的算法工程师,我最近遇到了一个典型的数据瓶颈问题:我们需要为垂直领域的图像识别任务构建训练集,但手动标注上千张飞书聊天…...

计算机毕设 java 基于 Javaweb 的家教管理系统 智能家教匹配管理系统 家教服务综合平台

计算机毕设 java 基于 Javaweb 的家教管理系统 f7xm39(配套有源码 程序 mysql 数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联 xi 可分享随着家庭教育需求的不断增长,家教市场规模持续扩大,但传统家教模式…...

大模型学习6-模型量化与推理部署

LLM中的量化技术 本部分将系统介绍如何通过模型量化(Quantization)技术压缩LLM。首先,从量化背景出发,说明当前模型压缩的现实需求;其次,概述深度学习中的通用量化原理;最后,结合LL…...

终极指南:如何用HS2-HF Patch轻松实现Honey Select 2中文本地化

终极指南:如何用HS2-HF Patch轻松实现Honey Select 2中文本地化 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为看不懂Honey Select 2的日文界…...

DanKoe 视频笔记:生产力提升:战术压力与深度工作策略

在本节课中,我们将学习一种结合了“战术压力”与“深度工作”的策略。这套方法帮助一位自称拖延症患者的人在30天内创造了70万美元的收入。我们将拆解其核心原理与具体执行步骤,让初学者也能理解并应用。 概述 拖延常被视为缺点,但本教程提…...

总结各GPU的OpenCL子组洗牌支持情况

penCL 2.0 通过扩展cl_khr_subgroups提供一些基础子组操作支持,包括获取子组 ID、组内 ID 等基本功能,组内断言(any/all)、广播(broadcast)、归约(reduce)、扫描(scan)等基本操作,同时允许一些可选扩展支持更丰富的子组操作(比如洗…...

2026论文写作工具红黑榜:AI论文平台怎么选?一篇看懂

2026年论文写作工具红黑榜出炉,红榜优先选千笔AI、ThouPen、豆包,适配国内学术规范,提升写作效率与合规性;黑榜需避开低质免费工具、无真实引用平台及过度依赖全文生成的工具。选择时建议按需求匹配度 - 数据可信度 - 成本承受力三…...

OpenCV手眼标定避坑指南:inner和outer内参到底怎么选?

OpenCV手眼标定避坑指南:inner和outer内参到底怎么选? 在工业自动化领域,手眼标定(Eye to Hand)是连接视觉系统与机械臂的关键技术环节。许多工程师在使用OpenCV进行标定时,常常对getOptimalNewCameraMatri…...

告别命令行恐惧:用乐鑫官方Flash Download Tool图形化烧录ESP32-S3固件(保姆级图文教程)

告别命令行恐惧:乐鑫Flash Download Tool图形化烧录ESP32-S3全指南 第一次接触ESP32开发板时,那个闪烁的命令行窗口让我手足无措。直到发现乐鑫官方的Flash Download Tool,才发现原来固件烧录可以如此直观简单——不需要记忆任何命令参数&…...

Windows环境下Nacos-Server 2.4.0.1的安装与MySQL配置实战

1. 环境准备与安装包下载 在Windows系统上部署Nacos-Server 2.4.0.1之前,我们需要先做好基础环境准备。这里我建议使用Windows 10或更高版本的操作系统,实测在Windows 7上可能会遇到兼容性问题。首先确保你的机器已经安装了Java 8或Java 11运行环境&…...

OptiScaler:打破显卡技术壁垒——跨平台玩家的AI超分辨率解决方案

OptiScaler:打破显卡技术壁垒——跨平台玩家的AI超分辨率解决方案 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 当你…...

矩阵LED与矩阵按键的扫描驱动原理及实现

1. 矩阵LED与矩阵按键的硬件结构解析 第一次接触矩阵LED和矩阵按键时,我完全被那些交叉的线路搞晕了。后来才发现,它们的本质就是行和列的交叉网络。想象一下围棋棋盘,横线是行,竖线是列,每个交叉点就是一颗棋子——在…...

3分钟学会用Draw.io ECE插件绘制专业级电路图:告别复杂EDA软件

3分钟学会用Draw.io ECE插件绘制专业级电路图:告别复杂EDA软件 【免费下载链接】Draw-io-ECE Custom-made draw.io-shapes - in the form of an importable library - for drawing circuits and conceptual drawings in draw.io. 项目地址: https://gitcode.com/g…...

5大核心功能!植物大战僵尸辅助神器PvZ Toolkit全解析

5大核心功能!植物大战僵尸辅助神器PvZ Toolkit全解析 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PvZ Toolkit是一款专为植物大战僵尸PC版设计的综合修改器,通过直观的图…...

从零开始掌握KLayout版图设计:5个步骤打造专业集成电路设计流程

从零开始掌握KLayout版图设计:5个步骤打造专业集成电路设计流程 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout KLayout版图设计工具是开源EDA领域的明星产品,为集成电路设计工程师提供了一…...

颠覆式数据主权革命:WeChatMsg如何让你的聊天记录真正归属自己

颠覆式数据主权革命:WeChatMsg如何让你的聊天记录真正归属自己 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

火绒误删explorer.exe导致Win10黑屏?保姆级修复指南(含安全模式+注册表操作)

火绒误删explorer.exe导致Win10黑屏的全面解决方案 当Windows 10系统突然陷入黑屏状态,只剩鼠标指针孤独地在屏幕上闪烁,这种体验对任何用户来说都堪称噩梦。特别是当发现罪魁祸首竟是日常依赖的安全软件火绒时,更让人措手不及。本文将系统性…...

OpenClaw+QwQ-32B成本对比:自建模型如何节省90%API费用

OpenClawQwQ-32B成本对比:自建模型如何节省90%API费用 1. 为什么我要做这次成本实验 去年冬天,当我第一次用OpenClaw对接GPT-4完成月度报表自动化时,账单上的数字让我倒吸一口冷气——连续执行3天的数据整理任务,竟然消耗了价值…...

【AI大模型】在线大语言模型实现与学习具身智能

目录 一、在线大语言模型的核心实现原理 (一)基础模型架构与预训练优化 (二)在线部署与实时交互模块 (三)持续学习与反馈优化模块 二、在线大语言模型学习具身智能的核心路径 (一&#xff…...

Python多解释器冷启动优化:从2.1s到87ms的极致压缩术(附可复用的预热调度器)

第一章:Python多解释器冷启动优化:从2.1s到87ms的极致压缩术(附可复用的预热调度器) 在微服务与Serverless场景中,Python多解释器(如PyO3、subinterpreters或进程级隔离)常因模块导入、C扩展初始…...

避坑指南:在Ubuntu 20.04上用XTDrone跑通ORB-SLAM3仿真,我踩过的那些编译坑

避坑指南:Ubuntu 20.04下XTDrone与ORB-SLAM3仿真的深度排雷手册 当你在Ubuntu 20.04上尝试用XTDrone运行ORB-SLAM3仿真时,可能会遇到各种棘手的编译错误和环境配置问题。本文将从实战角度出发,分享我在这一过程中踩过的坑以及如何系统性地解决…...

免费开源策略卡牌:如何在无名杀中创造你的专属三国战场

免费开源策略卡牌:如何在无名杀中创造你的专属三国战场 【免费下载链接】noname 项目地址: https://gitcode.com/GitHub_Trending/no/noname 在当今数字游戏世界中,有一款独特的开源策略卡牌游戏正悄然改变着玩家与游戏的关系。这款名为"无…...

告别性能枷锁:Lenovo Legion Toolkit如何让游戏本释放真正潜力

告别性能枷锁:Lenovo Legion Toolkit如何让游戏本释放真正潜力 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 在…...

别再只盯着7805了!聊聊LDO选型时那些容易被忽略的关键参数(附实测对比)

LDO选型实战指南:超越7805的五大高阶参数解析 在电子设计领域,低压差线性稳压器(LDO)如同电路系统中的"毛细血管",负责将能量精准输送到每个功能模块。当大多数工程师还在使用上世纪设计的7805时,现代LDO芯片早已进化出…...

微服务测试策略:端到端质量保障

微服务测试策略:端到端质量保障作者:AI测试工程师 关键词:微服务测试、集成测试、契约测试、端到端一、微服务测试挑战 1.1 测试金字塔变化 传统应用: 微服务应用:/\ /\/ \ / \/…...

3大革新性功能!VoiceFixer全方位语音修复工具让受损音频焕发新生

3大革新性功能!VoiceFixer全方位语音修复工具让受损音频焕发新生 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 你是否遇到过珍贵录音因噪音模糊不清的窘境?是否因会议录音质…...