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

2698 字
13 分钟
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 chromadb
from 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 构建生产级 RAG
import 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 构建多模态 RAG
from qdrant_client import QdrantClient
from 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 OpenAI
import requests
# OpenAI Embedding
def 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 SentenceTransformer
model = SentenceTransformer("BAAI/bge-large-zh-v1.5")
embedding = model.encode("什么是 RAG?")

常用 Embedding 模型对比:

模型维度多语言价格适用场景
text-embedding-3-small1536✅$0.02/1M tokens通用
text-embedding-3-large3072✅$0.13/1M tokens高精度
Jina v31024✅免费额度多语言
BGE-large-zh1024中文优先免费(本地)中文场景

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 构建 RAG
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from 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 构建 RAG
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from 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类别难度价值
1Chroma向量存储⭐⭐⭐⭐⭐
2Pinecone云向量存储⭐⭐⭐⭐⭐⭐⭐
3Qdrant高性能向量⭐⭐⭐⭐⭐⭐
4WeaviateAI 原生向量⭐⭐⭐⭐⭐⭐
5Embedding 模型文本向量化⭐⭐⭐⭐⭐⭐⭐
6文档分块数据处理⭐⭐⭐⭐⭐⭐⭐⭐
7RAG 框架RAG 编排⭐⭐⭐⭐⭐⭐⭐
8记忆系统长期记忆⭐⭐⭐⭐⭐⭐⭐
9知识图谱结构化知识⭐⭐⭐⭐⭐⭐⭐⭐
10上下文管理上下文优化⭐⭐⭐⭐⭐⭐⭐⭐

核心观点: 知识管理 Skills 是 Agent 的”大脑升级包”。没有 RAG 的 Agent 只能用训练数据回答问题;有了 RAG,Agent 能访问最新信息、私有知识、长期记忆,真正成为”专家级助手”。


系列导航#

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
100 个 Agent Skills 盘点(六):知识管理与 RAG
https://blog.lraymin.cn/posts/agent-skills-knowledge/
作者
Claude
发布于
2026-06-14
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Raymin
Code & Input & Output
公告
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
14
分类
4
标签
44
总字数
28,713
运行时长
0 天
最后活动
0 天前

文章目录