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

AI Agent与RAG结合:构建知识增强型智能体

AI Agent与RAG结合:构建知识增强型智能体

大语言模型(LLM)虽然知识广博,但在面对特定领域问题时往往力不从心——要么产生幻觉,要么知识已经过时。检索增强生成(RAG)技术恰好为 AI Agent è¡¥å 了"实时精准知识"è¿™ä¸€å ³é”®èƒ½åŠ›ã€‚æœ¬æ–‡å°†ç³»ç»Ÿè®²è§£ RAG åŽŸç†ã€å‘é‡æ£€ç´¢æœºåˆ¶ã€æ–‡æ¡£å¤„ç†ç­–ç•¥ä»¥åŠä¸€ä¸ªå®Œæ•´çš„ä»£ç å®žçŽ°ã€‚

一、RAG æ ¸å¿ƒåŽŸç†

1.1 什么是 RAG

RAG(Retrieval-Augmented Generationï¼‰çš„æ ¸å¿ƒæ€æƒ³æ˜¯ï¼šåœ¨ç”Ÿæˆå›žç­”å‰ï¼Œå ˆä»Žå¤–éƒ¨çŸ¥è¯†åº“æ£€ç´¢ç›¸å ³ä¿¡æ¯ï¼Œå°†æ£€ç´¢ç»“æžœä½œä¸ºä¸Šä¸‹æ–‡è¾“å ¥å¤§è¯­è¨€æ¨¡åž‹ï¼Œå¼•å¯¼å ¶ç”Ÿæˆæ›´å‡†ç¡®çš„å›žç­”ã€‚

相比微调 LLM,RAG å ·æœ‰ä¸‰ä¸ªä¼˜åŠ¿ï¼š

  • çŸ¥è¯†å®žæ—¶æ€§ï¼šæ— éœ€é‡æ–°è®­ç»ƒå³å¯æ›´æ–°çŸ¥è¯†åº“
  • å¯æº¯æºï¼šæ¯ä¸ªå›žç­”éƒ½å¯è¿½æº¯åˆ°å ·ä½“æ¥æº
  • 幻觉抑制:检索到的真实信息有效约束模型输出

1.2 æ ‡å‡†æµç¨‹

ä¸€ä¸ªå ¸åž‹çš„ RAG ç³»ç»ŸåŒ å«ï¼šæ–‡æ¡£åŠ è½½ → 文档切分 → å‘é‡åµŒå ¥ → 向量存储 → 检索 → 重排序 → 提示构建 → 生成回答。

二、文档切分策略

2.1 切分策略对比

| 策略 | 说明 | 适用场景 | |------|------|----------| | 固定字符数 | 按固定长度切分 | 通用场景,实现简单 | | 递归字符切分 | å ˆæŒ‰æ®µè½ï¼Œå†æŒ‰å¥å­åˆ‡åˆ† | 结构化文档 | | é‡å åˆ‡åˆ† | 相邻 chunk ä¿ç•™é‡å åŒºåŸŸ | é¿å è¾¹ç•Œä¿¡æ¯ä¸¢å¤± |

2.2 切分实现

import re from typing import List class DocumentChunker: def __init__(self, chunk_size: int = 500, chunk_overlap: int = 100): self.chunk_size = chunk_size self.chunk_overlap = chunk_overlap def split_text(self, text: str) -> List[str]: paragraphs = [p.strip() for p in text.split('\n\n') if p.strip()] chunks = [] for p in paragraphs: if len(p) <= self.chunk_size: chunks.append(p) else: chunks.extend(self._split_by_sentences(p)) return self._merge_small_chunks(chunks) def _split_by_sentences(self, text: str) -> List[str]: sentences = re.split(r'(?<=[。..?!])\s+', text) sentences = [s.strip() for s in sentences if s.strip()] chunks, current = [], "" for s in sentences: if len(current) + len(s) <= self.chunk_size: current += s else: if current: chunks.append(current) overlap = current[-self.chunk_overlap:] if self.chunk_overlap > 0 else "" current = overlap + s if current: chunks.append(current) return chunks def _merge_small_chunks(self, chunks: List[str]) -> List[str]: merged, current = [], "" for chunk in chunks: if len(current) + len(chunk) <= self.chunk_size: current += chunk else: if current: merged.append(current) current = chunk if current: merged.append(current) return merged

三、向量检索与存储

3.1 向量数据库

æ–‡æœ¬é€šè¿‡åµŒå ¥æ¨¡åž‹è½¬æ¢ä¸ºé«˜ç»´å‘é‡ï¼Œå­˜å‚¨åœ¨å‘é‡æ•°æ®åº“ä¸­ã€‚å¸¸è§çš„å¼€æºæ–¹æ¡ˆåŒ æ‹¬ BGE-M3、E5-Mistral 等。下面用纯 Python å®žçŽ°ä¸€ä¸ªå† å­˜å‘é‡åº“ï¼ˆç”Ÿäº§çŽ¯å¢ƒå»ºè®®ä½¿ç”¨ Milvus 或 Chroma):

import numpy as np from typing import List, Tuple, Dict from dataclasses import dataclass @dataclass class Document: id: str content: str embedding: np.ndarray metadata: dict class SimpleVectorStore: def __init__(self, embedding_dim: int =
http://www.gsyq.cn/news/1617668.html

相关文章:

  • TEKLauncher终极方舟启动器:告别MOD管理噩梦的完整解决方案
  • 一文读懂utpasswd架构:Rust如何提升Linux密码工具安全性
  • openEuler/kiran-tests核心组件揭秘:Behave BDD框架与自动化测试实践
  • STM32与13DOF传感器融合开发实战
  • 终极免费解锁Wand专业版:开源增强工具完整指南
  • 【课程设计/毕业设计】基于 SpringBoot 的宠物医院物资设备一体化管理系统的设计与实现【附源码、数据库、万字文档】
  • 别再Ctrl+F了!用IDEA书签实现毫秒级代码定位(附性能对比数据:平均跳转耗时降低87.3%)
  • 5分钟解锁3D魔法:用Deep3D让普通视频瞬间立体化!
  • Python自动化测试实战:从Selenium到Playwright,构建高效测试框架
  • MAA明日方舟智能助手完整使用指南:5分钟快速上手解放双手
  • 【Springboot毕设全套源码+文档】基于Java+springboot家装项目管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • Linux应急响应实战:从入侵检测到溯源加固的必备工具集
  • ASM330LHH与TM4C123GH6PZ运动跟踪系统设计
  • AI率总超标?2026年AI写作辅助软件排行榜权威发布,一次过审不是梦!
  • TomcatScanPro:自动化Tomcat安全扫描与漏洞利用实战指南
  • Flux2 文生图/图生图整合包本地化部署与极限显存优化
  • 保姆级教程:让你的 Node.js 应用永远在线的神器——PM2
  • okbiye 毕业论文 AI 创作实测|页面功能逐项拆解,一站式写论文全流程详解
  • TV Bro:如何在电视上用遥控器轻松上网?终极指南告诉你!
  • HackBar插件实战指南:Web安全手工测试利器详解
  • [论文学习]LLM 代理的隐私黑洞:外部存储个人数据的提示注入攻击基准测试深度解读
  • 错过这6个SonarLint高级技巧,你在IDEA里写的每行代码都可能成为生产事故源头——资深架构师20年代码治理血泪总结
  • 【案例】角色智能体“小真”3D重建:张雪摩托车(由一张图重建成3D模型)
  • 不锈钢防火玻璃门现行全套新国标(2026强制执行版)
  • 构建高效移动端调试流程:以WebDebugX为核心的工具链与实战
  • Appium自动化测试从入门到精通:环境搭建、元素定位与框架构建实战指南
  • isula-transform 存储驱动支持:Devicemapper 与 Overlay2 转换指南 [特殊字符]
  • Kiran Authentication Service架构解析:DBus驱动的现代认证系统设计
  • 机电安装公司有哪些?广州机电安装公司推荐!
  • IMU与MCU协同实现6DoF运动追踪的技术解析