100 个 Agent Skills 盘点(六):知识管理与 RAG

写在前面
这是「100 个 Agent Skills 盘点」系列的第六篇。这一篇聚焦一个非常热门的领域:知识管理与 RAG(检索增强生成)。
为什么 RAG 是 Agent 的”大脑升级”?
LLM 的知识有截止日期,且不了解你的私有数据。RAG 让 Agent 能够:
- 📚 访问企业内部文档
- 🔍 基于最新信息回答问题
- 🧠 维护长期记忆
- 📖 引用信息来源
没有 RAG 的 Agent 是”博学但过时的学者”,有 RAG 的 Agent 是”实时联网的专家”。
1. Chroma 向量数据库 🟣
类别: 向量存储 协议: 直接集成 / MCP
Chroma 是最轻量的开源向量数据库,适合快速原型和小规模应用。Agent 可以用几行代码就搭建起 RAG 系统。
能力说明:
- 向量存储和检索
- 元数据过滤
- 自动 Embedding
- 持久化存储
Agent 使用场景:
# Agent 构建简单的 RAG 系统import chromadbfrom chromadb.utils import embedding_functions
# 初始化client = chromadb.PersistentClient(path="./chroma_db")ef = embedding_functions.OpenAIEmbeddingFunction(api_key="sk-...")collection = client.get_or_create_collection( name="documents", embedding_function=ef)
# 添加文档collection.add( documents=["Python 是一种解释型语言", "JavaScript 运行在浏览器中"], metadatas=[{"source": "wiki"}, {"source": "mdn"}], ids=["doc1", "doc2"])
# 检索results = collection.query( query_texts=["什么是编程语言?"], n_results=5, where={"source": "wiki"} # 元数据过滤)典型指令:
把项目的技术文档导入 Chroma,然后实现一个基于 RAG 的文档问答系统,用户提问时检索相关文档片段并生成回答。2. Pinecone 向量数据库 🌲
类别: 云向量存储 协议: REST API / SDK
Pinecone 是最受欢迎的云向量数据库,无需运维,自动扩展,适合生产环境。
能力说明:
- 全托管向量存储
- 高性能 ANN 检索
- 元数据过滤
- 命名空间隔离
- 自动扩缩容
Agent 使用场景:
# Agent 构建生产级 RAGimport pinecone
pinecone.init(api_key="YOUR_API_KEY", environment="us-east-1-aws")
# 创建索引index = pinecone.Index("knowledge-base")
# 批量上传向量vectors = [ (f"doc_{i}", embedding, {"text": text, "source": source}) for i, (text, source, embedding) in enumerate(documents)]index.upsert(vectors=vectors, namespace="production")
# 检索results = index.query( vector=query_embedding, top_k=10, namespace="production", filter={"source": {"$eq": "official_docs"}}, include_metadata=True)典型指令:
在 Pinecone 中建立知识库索引,导入我们所有的产品文档,然后实现语义搜索功能。3. Qdrant 向量数据库 ⚡
类别: 高性能向量存储 协议: REST API / gRPC / MCP
Qdrant 是 Rust 编写的高性能向量数据库,支持复杂的过滤条件和多向量检索。
能力说明:
- 高性能向量检索
- 复杂过滤条件
- 多向量支持(同一文档多个 Embedding)
- 分布式部署
- 量化压缩
Agent 使用场景:
# Agent 使用 Qdrant 构建多模态 RAGfrom qdrant_client import QdrantClientfrom qdrant_client.models import Distance, VectorParams, PointStruct
client = QdrantClient(host="localhost", port=6333)
# 创建集合(支持多向量)client.create_collection( collection_name="multimodal", vectors_config={ "text": VectorParams(size=1536, distance=Distance.COSINE), "image": VectorParams(size=512, distance=Distance.COSINE) })
# 检索时可以指定使用哪个向量results = client.query_points( collection_name="multimodal", using="text", # 使用文本向量检索 query=text_embedding, query_filter={ "must": [ {"key": "category", "match": {"value": "technical"}}, {"key": "date", "range": {"gte": "2026-01-01"}} ] })典型指令:
在 Qdrant 中建立支持文本和图片的多模态知识库,用户可以用文字搜索图片,也可以用图片搜索相关文档。4. Weaviate 向量数据库 🌊
类别: AI 原生向量数据库 协议: REST API / GraphQL / MCP
Weaviate 是一个 AI 原生的向量数据库,内置 Embedding 模型,支持混合搜索(向量 + 关键词)。
能力说明:
- 内置 Embedding 模型
- 混合搜索(向量 + BM25)
- GraphQL 查询接口
- 多模态支持
- 自动 Schema 推断
Agent 使用场景:
# Agent 使用 Weaviate 混合搜索import weaviate
client = weaviate.Client("http://localhost:8080")
# 混合搜索:结合语义和关键词result = ( client.query .get("Document", ["title", "content", "source"]) .with_hybrid( query="AI agent 最佳实践", alpha=0.75 # 0=纯关键词, 1=纯向量 ) .with_where({ "path": ["category"], "operator": "Equal", "valueString": "technical" }) .with_limit(10) .do())典型指令:
用 Weaviate 搭建一个支持混合搜索的知识库,对中文文档同时使用语义搜索和关键词搜索,对比两种搜索方式的效果。5. Embedding 模型服务 📐
类别: 文本向量化 适用工具: OpenAI Embedding / Cohere / Jina / BGE
Embedding 是 RAG 的基础——把文本转换为向量,才能进行语义搜索。选择合适的 Embedding 模型直接影响 RAG 的效果。
能力说明:
- 文本向量化
- 多语言支持
- 批量处理
- 维度选择
Agent 使用场景:
# Agent 使用不同的 Embedding 模型from openai import OpenAIimport requests
# OpenAI Embeddingdef get_openai_embedding(text): client = OpenAI() response = client.embeddings.create( model="text-embedding-3-small", input=text ) return response.data[0].embedding
# Jina Embedding(免费、多语言)def get_jina_embedding(text): response = requests.post( "https://api.jina.ai/v1/embeddings", headers={"Authorization": f"Bearer {JINA_API_KEY}"}, json={ "model": "jina-embeddings-v3", "input": [text] } ) return response.json()["data"][0]["embedding"]
# 本地 BGE 模型(免费、隐私友好)from sentence_transformers import SentenceTransformermodel = SentenceTransformer("BAAI/bge-large-zh-v1.5")embedding = model.encode("什么是 RAG?")常用 Embedding 模型对比:
| 模型 | 维度 | 多语言 | 价格 | 适用场景 |
|---|---|---|---|---|
| text-embedding-3-small | 1536 | ✅ | $0.02/1M tokens | 通用 |
| text-embedding-3-large | 3072 | ✅ | $0.13/1M tokens | 高精度 |
| Jina v3 | 1024 | ✅ | 免费额度 | 多语言 |
| BGE-large-zh | 1024 | 中文优先 | 免费(本地) | 中文场景 |
6. 文档分块策略 📄
类别: 数据处理 适用工具: LangChain / LlamaIndex / 自定义
文档分块(Chunking)是 RAG 中最关键的环节之一。分块策略直接影响检索质量。
能力说明:
- 按句子/段落/语义分块
- 重叠窗口(Overlap)
- 递归分块
- 语义分块
Agent 使用场景:
# Agent 实现多种分块策略from langchain.text_splitter import ( RecursiveCharacterTextSplitter, MarkdownHeaderTextSplitter)
# 1. 递归分块(最常用)splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50, separators=["\n\n", "\n", "。", "!", "?", ".", " "])chunks = splitter.split_text(document)
# 2. Markdown 标题分块(保留结构)headers_to_split = [ ("#", "h1"), ("##", "h2"), ("###", "h3"),]md_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split)chunks = md_splitter.split_text(markdown_document)
# 3. 语义分块(基于 Embedding 相似度)def semantic_chunk(text, threshold=0.8): sentences = split_into_sentences(text) chunks = [] current_chunk = [sentences[0]]
for i in range(1, len(sentences)): similarity = cosine_sim( get_embedding(sentences[i]), get_embedding(current_chunk[-1]) ) if similarity > threshold: current_chunk.append(sentences[i]) else: chunks.append(" ".join(current_chunk)) current_chunk = [sentences[i]]
return chunks分块策略对比:
| 策略 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 固定大小 | 简单 | 可能切断语义 | 快速原型 |
| 递归 | 保留结构 | 需调参 | 通用 |
| Markdown 标题 | 保留层级 | 仅限 Markdown | 文档 |
| 语义 | 最智能 | 计算量大 | 高质量 RAG |
7. RAG Pipeline 框架 🔧
类别: RAG 编排 适用工具: LlamaIndex / LangChain / Haystack
RAG 框架把 Embedding、检索、生成等环节串联起来,让 Agent 能快速构建 RAG 应用。
能力说明:
- 文档加载和解析
- 向量索引构建
- 查询引擎
- 响应合成
Agent 使用场景:
# Agent 使用 LlamaIndex 构建 RAGfrom llama_index.core import VectorStoreIndex, SimpleDirectoryReaderfrom llama_index.core.node_parser import SentenceSplitter
# 加载文档documents = SimpleDirectoryReader("./docs").load_data()
# 构建索引index = VectorStoreIndex.from_documents( documents, transformations=[ SentenceSplitter(chunk_size=512, chunk_overlap=50) ])
# 创建查询引擎query_engine = index.as_query_engine( similarity_top_k=5, response_mode="tree_summarize" # 多文档综合)
# 查询response = query_engine.query("如何配置 RAG 系统?")print(response)print("Sources:", response.source_nodes)# Agent 使用 LangChain 构建 RAGfrom langchain_openai import ChatOpenAI, OpenAIEmbeddingsfrom langchain_community.vectorstores import Chromafrom langchain.chains import RetrievalQA
vectorstore = Chroma.from_documents(docs, OpenAIEmbeddings())retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
qa_chain = RetrievalQA.from_chain_type( llm=ChatOpenAI(model="gpt-4"), retriever=retriever, return_source_documents=True)
result = qa_chain.invoke({"query": "什么是 Agent Skills?"})8. Agent 记忆系统 🧠
类别: 长期记忆 适用工具: Mem0 / Zep / 自定义
Agent 的记忆系统让它能在多次对话中保持上下文,记住用户偏好,学习历史交互。
能力说明:
- 短期记忆(对话上下文)
- 长期记忆(跨会话持久化)
- 用户偏好记忆
- 事实记忆
Agent 使用场景:
# Agent 使用 Mem0 管理记忆from mem0 import Memory
memory = Memory()
# 存储记忆memory.add("用户喜欢用 Python 写后端,TypeScript 写前端", user_id="raymin")memory.add("用户的项目使用 Next.js + Supabase 技术栈", user_id="raymin")memory.add("用户偏好简洁的代码风格,不喜欢过度抽象", user_id="raymin")
# 检索相关记忆relevant = memory.search("帮我写一个新的 API", user_id="raymin")# 返回:用户的语言偏好、技术栈、代码风格偏好
# 基于记忆个性化回答context = "\n".join([m["text"] for m in relevant])response = llm.generate( f"基于以下用户偏好回答问题:\n{context}\n\n问题:帮我写一个新的 API")典型指令:
记住我的技术偏好:Python + FastAPI 后端,React + TypeScript 前端,PostgreSQL 数据库。下次帮我写代码时自动应用这些偏好。9. 知识图谱 🕸️
类别: 结构化知识 适用工具: Neo4j / Memgraph / 自定义
知识图谱用实体和关系表示知识,比纯向量检索更适合处理复杂的关联查询。
能力说明:
- 实体识别和关系抽取
- 图查询(Cypher)
- 路径查找
- 图 RAG(GraphRAG)
Agent 使用场景:
# Agent 构建技术知识图谱from neo4j import GraphDatabase
driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password"))
def create_knowledge_graph(tech_docs): with driver.session() as session: for doc in tech_docs: # 创建技术实体 session.run(""" MERGE (t:Technology {name: $name}) SET t.category = $category, t.description = $description """, name=doc["name"], category=doc["category"], desc=doc["desc"])
# 创建依赖关系 for dep in doc["dependencies"]: session.run(""" MATCH (a:Technology {name: $from}) MATCH (b:Technology {name: $to}) MERGE (a)-[:DEPENDS_ON]->(b) """, **{"from": doc["name"], "to": dep})
# 查询:找到从 React 到 PostgreSQL 的依赖路径def find_dependency_path(from_tech, to_tech): with driver.session() as session: result = session.run(""" MATCH path = shortestPath( (a:Technology {name: $from})-[*]-(b:Technology {name: $to}) ) RETURN [n IN nodes(path) | n.name] AS path """, **{"from": from_tech, "to": to_tech}) return result.single()["path"]典型指令:
分析我们项目的技术依赖关系,构建知识图谱,找出所有间接依赖,识别潜在的技术风险。10. 上下文窗口管理 📐
类别: 上下文优化 适用工具: 自定义策略
LLM 的上下文窗口有限(4K-200K tokens)。Agent 需要智能地管理上下文,在有限的窗口中放入最有价值的信息。
能力说明:
- 上下文压缩
- 相关性排序
- 滑动窗口
- 摘要生成
Agent 使用场景:
# Agent 智能上下文管理class ContextManager: def __init__(self, max_tokens=8000): self.max_tokens = max_tokens self.history = [] self.system_prompt = ""
def add_message(self, role, content): self.history.append({"role": role, "content": content}) self._trim_context()
def _trim_context(self): """智能裁剪上下文""" total = self._count_tokens()
while total > self.max_tokens and len(self.history) > 2: # 策略1:压缩早期对话 if len(self.history) > 4: early = self.history[:2] summary = self._summarize(early) self.history = [{"role": "system", "content": f"之前的对话摘要:{summary}"}] + self.history[2:]
# 策略2:移除低价值消息 if total > self.max_tokens: self._remove_low_value_messages()
total = self._count_tokens()
def _remove_low_value_messages(self): """移除低价值消息(工具调用的中间结果等)""" for i, msg in enumerate(self.history): if msg["role"] == "tool" and i > 0: self.history.pop(i) break上下文管理策略对比:
| 策略 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 截断 | 移除最早的消息 | 简单 | 丢失信息 |
| 摘要 | 压缩早期对话 | 保留要点 | 需要额外调用 |
| 滑动窗口 | 只保留最近 N 轮 | 节省 token | 丢失长期上下文 |
| 相关性 | 只保留相关消息 | 精准 | 计算量大 |
本篇小结
| # | Skill | 类别 | 难度 | 价值 |
|---|---|---|---|---|
| 1 | Chroma | 向量存储 | ⭐ | ⭐⭐⭐⭐ |
| 2 | Pinecone | 云向量存储 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| 3 | Qdrant | 高性能向量 | ⭐⭐ | ⭐⭐⭐⭐ |
| 4 | Weaviate | AI 原生向量 | ⭐⭐ | ⭐⭐⭐⭐ |
| 5 | Embedding 模型 | 文本向量化 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| 6 | 文档分块 | 数据处理 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 7 | RAG 框架 | RAG 编排 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| 8 | 记忆系统 | 长期记忆 | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 9 | 知识图谱 | 结构化知识 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 10 | 上下文管理 | 上下文优化 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
核心观点: 知识管理 Skills 是 Agent 的”大脑升级包”。没有 RAG 的 Agent 只能用训练数据回答问题;有了 RAG,Agent 能访问最新信息、私有知识、长期记忆,真正成为”专家级助手”。
系列导航
- 👈 上一篇: 第五篇:云服务与 DevOps
- 👉 下一篇: 第七篇:版本控制与协作
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!