agno-6-rag

发布时间:2026/7/6 13:46:42
agno-6-rag 什么是 RAGRAGRetrieval Augmented Generation检索增强生成是一种结合了信息检索和文本生成的技术它通过在生成回答之前先从外部知识源检索相关信息来增强大型语言模型LLM的能力。RAG 的核心思想是让 LLM 不仅依赖其训练数据中的知识还能够访问和利用外部、最新的信息源。RAG 工作原理RAG 系统的基本工作流程包括以下几个步骤┌─────────────┐ ┌──────────────┐ ┌─────────────┐ │ 用户查询 │────│ 查询问题向量化 │────│ 向量检索 │ └─────────────┘ └──────────────┘ └─────────────┘ │ ▼ ┌─────────────┐ ┌──────────────┐ ┌─────────────┐ │ 生成回答 │────│ LLM 处理 │────│ 相关文档 │ └─────────────┘ └──────────────┘ └─────────────┘Agno 的 RAG检索增强生成是一套模块化、可插拔的完整技术方案用于构建能够与私有数据交互的智能体Agent。其核心理念是智能体驱动的检索增强生成Agentic RAG。与传统 RAG 不同Agno 的智能体并非被动地接收检索结果而是主动决定“何时”搜索、“搜索什么”以及“如何使用”检索到的信息核心组件与工作流程Agno 的知识库Knowledge Base通过一套标准化的流水线来处理和检索数据。内容源 (Content Sources)原始数据的来源可以是 PDF、网页、数据库等。读取器 (Readers)负责解析不同类型的内容源提取出纯文本。例如PDFReader、WebsiteReader、CSVReader等。分块策略 (Chunking Strategies)将长文本切分成适合处理的小块。支持语义分块、固定大小分块等策略。嵌入器 (Embedders)将文本块转换为向量数学表示。Agno 支持 29 种嵌入器选项。向量数据库 (Vector Databases)存储向量并支持相似性搜索。Agno 支持 25 种以上的向量数据库。重排序器 (Rerankers)可选对初步检索结果进行二次排序提升最相关文档的排名两种 RAG 模式Agno 提供了两种 RAG 模式适应不同复杂度的需求。传统 RAG (Traditional RAG)通过add_referencesTrue启用。系统在每次请求时自动检索知识库并将检索到的内容作为上下文注入到系统提示中。适用于大多数标准问答场景。智能体 RAG (Agentic RAG)通过search_knowledgeTrue启用当提供knowledge时默认开启。智能体拥有一个search_knowledge_base工具自主决定是否以及如何检索信息。适用于复杂、多步推理的场景。高级特性混合搜索 (Hybrid Search)结合向量搜索和关键词搜索提高检索准确性。通过在PgVector等向量数据库中设置search_typeSearchType.hybrid启用。知识过滤 (Knowledge Filtering)基于元数据如用户 ID、文档类型过滤检索结果实现数据隔离和个性化。自定义检索器 (Custom Retriever)允许通过knowledge_retriever参数传入自定义函数实现对检索逻辑的完全控制。异步操作 (Async Operations)通过ainsert和arun等方法支持异步操作优化大规模数据加载和响应的性能。远程知识库 (LightRAGKnowledgeBase)集成 LightRAG一种基于图结构的 RAG 系统以增强知识查询能力。文档加载Agno 支持多种文档格式的加载器Reader支持格式说明PDFReaderPDF支持加密PDF、图像OCRPDFImageReaderPDF图像专门处理基于图像的PDFDocxReaderDOCXWord 文档CSVReaderCSV表格数据JSONReaderJSON结构化数据TextReaderTXT纯文本文件MarkdownReaderMDMarkdown 文档WebsiteReader网页爬取整个网站WebSearchReader搜索结果网络搜索结果WikipediaReaderWikipediaWikipedia 文章YouTubeReaderYouTube视频转录和元数据ArxivReaderarXiv学术论文FirecrawlReader网页通过Firecrawl API抓取从url加载from agno.knowledge.reader.website_reader import WebsiteReader website_reader WebsiteReader( max_depth2, # 爬取深度 max_links50, # 最大链接数 chunkTrue, chunk_size800 ) documents website_reader.read(https://docs.agno.com) if documents: print(f成功读取 {len(documents)} 个文档片段。) print(第一个文档片段的内容预览) print(documents[0].content[:500]) # 打印前500个字符 print(\n元数据, documents[0].meta_data) else: print(未能读取到任何内容。)从本地加载import os from pathlib import Path from agno.knowledge.reader.pdf_reader import PDFReader from agno.knowledge.knowledge import Knowledge from agno.knowledge.embedder.openai import OpenAIEmbedder from agno.vectordb.pgvector import PgVector, SearchType from dotenv import load_dotenv load_dotenv() # 创建 PDF Reader pdf_reader PDFReader( chunkTrue, chunk_size1000, split_on_pagesTrue, read_imagesTrue, # OCR 读取图像 # 通用配置 namePDF Documents # Reader 名称 ) script_dir Path(__file__).parent documents pdf_reader.read(str(script_dir) /ThaiRecipes.pdf) if documents: print(f成功读取 {len(documents)} 个文档片段。) print(第一个文档片段的内容预览) print(documents[0].content[:500]) # 打印前500个字符 print(\n元数据, documents[0].meta_data) else: print(未能读取到任何内容。)ReaderFactory智能选择from pathlib import Path from agno.knowledge.reader.reader_factory import ReaderFactory # 自动选择 Reader # 根据文件后缀识别 script_dir Path(__file__).parent reader ReaderFactory.get_reader_for_extension(.pdf) docs reader.read(str(script_dir) /caozuo.pdf ) for doc in docs: print(doc)文档分块策略策略 (Strategy)说明适用场景示例Fixed Size Chunking按固定的字符或 Token 数量进行切分并可设置重叠部分。需要统一的块大小适用于格式简单或对切分精度要求不高的文档。FixedSizeChunking(chunk_size1000, overlap200)Semantic Chunking通过分析文本的语义相似度在自然语义边界处进行切分。需指定一个嵌入器Embedder。通用文本能更好地保持内容的语义完整性。SemanticChunking(embedderembedder, chunk_size500, similarity_threshold0.5)Recursive Chunking使用多级分隔符如段落、句子进行分层切分力图在达到目标大小的同时最大限度地保持文本的自然结构。结构混合的文档。RecursiveChunking(chunk_size500, separators[\n\n, \n, . , ])Document Chunking基于文档的自然结构如段落、章节进行切分以保留文档的原始层次。结构清晰的文档如报告、书籍需要保留章节上下文。DocumentChunking(max_chunk_size2000, preserve_sectionsTrue)Markdown Chunking专门为 Markdown 文件设计根据标题层级#,##等进行切分。Markdown 格式的文档。-Code Chunking利用抽象语法树AST分析代码结构在函数、类等逻辑边界处切分。源代码文件。CodeChunking(languagepython, chunk_byfunction)CSV Row Chunking将 CSV 文件中的每一行作为一个独立的块。表格型数据。-Agentic Chunking使用 LLM 智能地分析文本自主决定在何处进行切分。内容复杂、结构不清晰的文档。AgenticChunking(modelmodel, max_chunk_size3000)from pathlib import Path from agno.knowledge.reader.pdf_reader import PDFReader from dotenv import load_dotenv from agno.knowledge.chunking.fixed import FixedSizeChunking load_dotenv() fixed_size_chunk FixedSizeChunking( chunk_size1000, overlap200 ) # 创建 PDF Reader pdf_reader PDFReader( chunkTrue, chunk_size1000, split_on_pagesTrue, read_imagesTrue, # OCR 读取图像 # 通用配置 namePDF Documents, # Reader 名称 chunking_strategyfixed_size_chunk ) script_dir Path(__file__).parent documents pdf_reader.read(str(script_dir) /caozuo.pdf) if documents: print(f成功读取 {len(documents)} 个文档片段。) print(第一个文档片段的内容预览) print(documents[0].content[:500]) # 打印前500个字符 print(\n元数据, documents[0].meta_data) else: print(未能读取到任何内容。)向量数据库集成Agno 支持20 种向量数据库包括数据库类型适用场景PgVectorPostgreSQL 扩展生产环境、需要 SQL 功能LanceDB本地嵌入式开发测试、快速原型ChromaDB本地/云端开发和生产均可Pinecone托管服务生产环境、无运维需求Qdrant本地/云端高性能需求Weaviate本地/云端复杂查询、GraphQLMilvus分布式向量库大规模生产环境MongoDB文档数据库已有 MongoDB 基础设施SingleStore分布式SQL实时分析Cassandra分布式NoSQL高可用性需求Couchbase文档数据库移动和边缘计算Clickhouse列式数据库分析型应用Upstash VectorServerlessServerless 应用LightRAG高性能高准确率的开源RAG对检索精度、性能要求高的场景参考Weaviate Db - Agnopg向量数据库import os from agno.agent import Agent from agno.knowledge.knowledge import Knowledge from agno.vectordb.pgvector import PgVector, SearchType from dotenv import load_dotenv from agno.models.deepseek import DeepSeek from agno.knowledge.embedder.openai import OpenAIEmbedder from agno.knowledge.reranker.cohere import CohereReranker load_dotenv() #定义大模型 deepseek DeepSeek(iddeepseek-chat) # OpenAI 嵌入器 embedder OpenAIEmbedder( idtext-embedding-v4, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, dimensions1536, # 向量维度 api_keyos.getenv(QWEN_API_KEY) ) vector_db PgVector( table_namemk1, db_urlpostgresql://postgres:ekcai123456localhost:5432/rag1, embedderembedder, search_typeSearchType.hybrid, # 混合检索 vector_score_weight0.5, # 正确的参数名 ) knowledge Knowledge(vector_dbvector_db) docs knowledge.search(agno是什么) for doc in docs: print(doc.content)Agno 提供了多种内置的检索方法通过SearchType枚举配置from agno.vectordb.search import SearchType # 向量搜索语义相似度 SearchType.vector # 关键词搜索传统全文搜索 SearchType.keyword # 混合搜索结合向量和关键词 SearchType.hybrid支持混合搜索的向量数据库PgVectorPineconeLanceDBWeaviateMongoDBQdrantMilvusRAG 与 Agent 集成# 步骤1创建知识库 import os from agno.agent import Agent from agno.knowledge.knowledge import Knowledge from agno.vectordb.pgvector import PgVector, SearchType from dotenv import load_dotenv from agno.models.deepseek import DeepSeek from agno.knowledge.embedder.openai import OpenAIEmbedder from agno.knowledge.reranker.cohere import CohereReranker load_dotenv() #定义大模型 deepseek DeepSeek(iddeepseek-chat) # OpenAI 嵌入器 embedder OpenAIEmbedder( idtext-embedding-v4, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, dimensions1536, # 向量维度 api_keyos.getenv(QWEN_API_KEY) ) # rerankerCohereReranker(modelrerank-v3.5) vector_db PgVector( table_namemy_knowledge, db_urlpostgresql://postgres:ekcai123456localhost:5432/rag1, embedderembedder, search_typeSearchType.hybrid, vector_score_weight0.5, # 正确的参数名 #rerankerreranker ) knowledge Knowledge(vector_dbvector_db) # knowledge.insert( # urlhttps://docs.agno.com/agents/overview.md # ) # 步骤2创建 Agent 并关联知识库 agent Agent( modeldeepseek, nameKnowledge Agent, knowledgeknowledge, # 关联知识库 add_knowledge_to_contextTrue, # 将知识添加到上下文 search_knowledgeFalse, # 不使用搜索工具可选 instructions在回答问题前总是先搜索你的知识库。包含来源引用。, knowledge_filters{source_type: ThaiRecipes.pdf} #静态过滤器 ) # 步骤3查询 agent.print_response(你是谁?, markdownTrue)agentic_rag实现# 步骤1创建知识库 import os from agno.agent import Agent from agno.knowledge.knowledge import Knowledge from agno.vectordb.pgvector import PgVector, SearchType from dotenv import load_dotenv from agno.models.deepseek import DeepSeek from agno.knowledge.embedder.openai import OpenAIEmbedder from agno.knowledge.reranker.cohere import CohereReranker load_dotenv() #定义大模型 deepseek DeepSeek(iddeepseek-chat) # OpenAI 嵌入器 embedder OpenAIEmbedder( idtext-embedding-v4, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, dimensions1536, # 向量维度 api_keyos.getenv(QWEN_API_KEY) ) # 排序 # rerankerCohereReranker(modelrerank-v3.5) vector_db PgVector( table_namemy_knowledge, db_urlpostgresql://postgres:ekcai123456localhost:5432/rag1, embedderembedder, search_typeSearchType.hybrid, vector_score_weight0.5, # 正确的参数名 #rerankerreranker ) knowledge Knowledge(vector_dbvector_db) # knowledge.insert( # urlhttps://docs.agno.com/agents/overview.md # # ) # 步骤2创建 Agent 并关联知识库 agent Agent( modeldeepseek, nameKnowledge Agent, knowledgeknowledge, # 关联知识库 search_knowledgeTrue, # 启用知识搜索默认为 True instructions在回答问题前总是先搜索你的知识库。包含来源引用。 ) # 步骤3查询 agent.print_response(你是谁, markdownTrue)