向量数据库实战-利用PostgreSQL+pgvector构建AI 智能应用:AI-Agent集成-智能对话系统
📅 2026/7/12 3:29:51
👁️ 次浏览
第四章:AI Agent集成 - 从FAQ到智能对话本章目标: 构建基于RAG架构的智能客服Agent学习时间: 90分钟难度等级: ⭐⭐⭐⭐ 高级本章导读上一章我们实现了FAQ搜索,但用户真正想要的是"聊天式"的智能回答,而不是冷冰冰的FAQ列表。这一章,我们把pgvector和大语言模型结合,构建真正的AI Agent!你将学到:✅ 什么是RAG(检索增强生成)架构✅ 如何把向量搜索和GPT结合✅ 构建智能客服Agent(完整代码)✅ 文档问答系统(支持PDF上传)✅ Prompt工程最佳实践4.1 什么是RAG?(检索增强生成)传统AI的痛点直接用ChatGPT有三个严重问题:知识过时: 只知道训练数据,不了解你的业务幻觉问题: 会胡编乱造不存在的信息无法引用: 不知道答案来源,无法验证举例:用户: 你们的收费标准是什么? ChatGPT: (幻觉)我们提供免费版和专业版,专业版每月$19.99... ❌ 完全是编的!RAG解决方案RAG = Retrieval-Augmented Generation工作流程:Retrieval(检索): 从向量库找相关知识Augmented(增强): 把知识喂给AIGeneration(生成): AI基于知识回答同样的问题,用RAG:1. 从向量库检索到: "按月订阅制,基础版99元/月,专业版599元/月..." 2. 构建Prompt: "基于以下知识回答: [检索的FAQ] 用户问题: 你们的收费标准?" 3. GPT生成: "我们提供两种套餐:基础版99元/月,专业版599元/月..." ✅ 准确且有依据!RAG架构图用户提问向量化查询pgvector检索TOP-K文档构建Prompt知识+问题LLM生成回答返回答案+引用4.2 案例1:智能客服Agent项目结构code/04_customer_service_agent/ ├── agent.py # 智能客服主程序(完整代码) ├── requirements.txt # 依赖 ├── .env.example # 环境配置模板 └── README.md # 使用说明完整代码实现requirements.txt:psycopg2-binary==2.9.9 openai==1.12.0 python-dotenv==1.0.1agent.py(完整代码,280行):""" 智能客服Agent 功能: 基于RAG架构的智能问答系统 架构: pgvector检索 + GPT生成 """importpsycopg2fromopenaiimportOpenAIimportosfromdotenvimportload_dotenvfromtypingimportList,Dict,Optionalimportjson# 加载环境变量load_dotenv()# 数据库配置DB_CONFIG={'host':os.getenv('DB_HOST','localhost'),'port':os.getenv('DB_PORT','5432'),'database':os.getenv('DB_NAME','vectordb'),'user':os.getenv('DB_USER','postgres'),'password':os.getenv('DB_PASSWORD','mysecret123')}classCustomerServiceAgent:"""智能客服Agent类"""def__init__(self,api_key:Optional[str]=None):""" 初始化Agent Args: api_key: OpenAI API Key(可选,默认从环境变量读取) """# 初始化OpenAI客户端self.llm_client=OpenAI(api_key=api_keyoros.getenv('OPENAI_API_KEY'))# 数据库连接self.db_conn=Noneself.connect_database()print("✅ 智能客服Agent初始化成功!")defconnect_database(self):"""连接数据库"""try:self.db_conn=psycopg2.connect(**DB_CONFIG)print("✓ 数据库连接成功")exceptExceptionase:print(f"❌ 数据库连接失败:{e}")raisedef_get_embedding(self,text:str)-List[float]:""" 获取文本向量 Args: text: 要向量化的文本 Returns: 1536维向量 """response=self.llm_client.embeddings.create(model="text-embedding-3-small",input=text)returnresponse.data[0].embeddingdefretrieve_knowledge(self,query:str,top_k:int=3,category_filter:Optional[str]=None)-List[Dict]:""" 从知识库检索相关FAQ Args: query: 用户查询 top_k: 返回结果数量 category_filter: 分类过滤(可选) Returns: 相关FAQ列表 """cur=self.db_conn.cursor()try:# 1. 向量化查询query_embedding=self._get_embedding(query)# 2. 构建SQLifcategory_filter:sql=""" SELECT id, category, question, answer, embedding = %s::vector AS distance FROM faq_knowledge WHERE category = %s ORDER BY distance LIMIT %s """params=(query_embedding,category_filter,top_k)else:sql=""" SELECT id, category, question, answer, embedding = %s::vector AS distance FROM faq_knowledge ORDER BY distance LIMIT %s """params=(query_embedding,top_k)# 3. 执行查询cur.execute(sql,params)results=cur.fetchall()# 4. 格式化结果knowledge_list=[]forrowinresults:/
L2/L3交换机选型实战:5个真实网络场景下的配置与性能对比刚接手公司网络改造项目时,面对机房里琳琅满目的交换机型号,我盯着产品手册上的"L3交换容量480Gbps"参数发愣——这个数字对200人的办公网络到底意味着性能过剩还是勉强够用…
📅 2026/7/12 3:29:51
VSCode C/C 调试输入问题:MinGW32 与 MinGW64 环境配置深度解析 当你在 Windows 平台上使用 VSCode 调试 C/C 程序时,是否遇到过 DEBUG CONSOLE 无法进行输入输出的困扰?这个问题看似简单,实则背后隐藏着 MinGW 环境选择的玄机。…
📅 2026/7/12 3:29:51
在日常开发中,我们经常遇到需要多轮交互才能完成的复杂任务,比如修复代码库中的多个错误、重构复杂模块或移植功能。传统方式需要开发者不断发送"继续"指令,效率低下且容易中断。Hermes Agent 的持久目标(Goalÿ…
📅 2026/7/12 3:28:51
目录
1.const/static const
2.#define 常量是相对于变量而言,变量,顾名思义就是值可以被改变,而常量,则不可以。C中常用的常量命名方式有两种,一种是const 修饰变量名,另一种是用#define 宏定义。
1.con…
📅 2026/7/12 4:35:17
1. 项目概述:为什么选择UE5建模编辑器? 如果你和我一样,是从3ds Max、Maya或者Blender这类传统数字内容创作软件转战到虚幻引擎的,那么第一次打开UE5的建模模式时,可能会有点懵。这玩意儿看起来既熟悉又陌生࿰…
📅 2026/7/12 4:35:17
STM32F103C8T6与ESP8266物联网实战:构建高可靠农业灌溉系统在智能农业领域,远程监控与自动化控制正成为提升生产效率的关键技术。本文将详细介绍如何利用STM32F103C8T6微控制器和ESP8266 WiFi模块,搭建一套完整的农业灌溉监控系统。不同于简单…
📅 2026/7/12 4:35:17
1. 项目概述:为什么你的UE5植被系统总是“掉帧”?如果你正在用UE5做开放世界或者大场景,大概率遇到过这个头疼的问题:场景里植被一多,帧率就直线下降,GPU负载拉满,甚至直接崩溃。这太常见了&…
📅 2026/7/12 4:35:17
1. 项目概述:从静态到动态的材质革命在虚幻引擎5(UE5)的世界里,材质系统是构建视觉奇观的基石。无论是写实的光照、流动的熔岩,还是角色受伤时的血迹效果,其背后都离不开材质蓝图的精妙控制。很多刚接触UE5…
📅 2026/7/12 4:35:17
1. 项目背景与核心需求在医疗设备、精密仪器和高端家电领域,直流电机的噪声控制一直是个棘手问题。去年我在开发一款医用输液泵时,就遇到过电机啸叫导致设备无法通过医疗认证的困境——传统PWM调速方案在低速运行时产生的20kHz左右高频噪声,不…
📅 2026/7/12 4:34:17
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/12 0:00:04
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/12 0:00:28
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/12 0:00:28
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/12 0:00:04
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/12 0:00:28
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/12 0:00:28
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/12 0:15:59
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/10 22:46:54
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/10 22:46:54