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

CrewAI 核心概念(Knowledge)篇

CrewAI 知识系统(Knowledge)核心内容总结

该文档详细讲解了 CrewAI 框架中“知识系统(Knowledge)”的定义、使用方式、层级划分、存储机制及高级特性,是为智能体(Agent)和团队(Crew)提供外部信息支持的核心指南,内容可分为知识系统概述、知识源类型、知识层级划分、配置与存储、高级功能、故障排除与最佳实践六部分,具体如下:

一、知识系统概述(Overview of Knowledge)

CrewAI 的知识系统是为智能体提供“外部参考库”的核心模块,旨在解决智能体依赖内部知识导致的“信息滞后”“领域知识缺失”问题,核心价值包括:

  1. 补充领域知识:为智能体注入行业文档、技术规范等专业信息,提升任务专业性;
  2. 锚定事实依据:让智能体的决策与响应基于真实数据(如用户信息、市场报告),减少幻觉;
  3. 跨对话保上下文:存储并复用历史交互或任务中的关键信息,避免重复输入;
  4. 支持实时数据:通过网页、API 等源获取最新信息(如新闻、股价),适配动态场景。

核心逻辑:知识系统将外部信息(文件、网页、API 数据等)转化为向量存储(默认用 ChromaDB),智能体执行任务时自动检索相关知识片段,结合自身逻辑生成输出,无需手动调用检索工具。

二、支持的知识源类型(Supported Knowledge Sources)

CrewAI 原生支持多种格式的知识源,覆盖文本、结构化数据、网页内容等场景,可直接通过对应类初始化使用,所有文件类知识源需放在项目根目录的 knowledge 文件夹中,使用相对路径引用。

知识源类型对应类适用场景代码示例
字符串(Raw Text)StringKnowledgeSource简短文本信息(如用户画像、单条规则)StringKnowledgeSource(content="用户姓名:John,年龄30岁")
文本文件(.txt)TextFileKnowledgeSource纯文本文档(如产品说明、日志)TextFileKnowledgeSource(file_paths=["guide.txt", "notes.txt"])
PDF 文档PDFKnowledgeSource结构化文档(如论文、合同、报告)PDFKnowledgeSource(file_paths=["research.pdf", "agreement.pdf"])
CSV 表格CSVKnowledgeSource结构化数据(如用户列表、销售数据)CSVKnowledgeSource(file_paths=["sales_data.csv"])
Excel 表格ExcelKnowledgeSource多sheet数据(如财务报表、库存记录)ExcelKnowledgeSource(file_paths=["inventory.xlsx"])
JSON 数据JSONKnowledgeSource键值对数据(如配置信息、API 响应)JSONKnowledgeSource(file_paths=["config.json"])
网页内容CrewDoclingSource在线文档、博客、论文(需安装 doclingCrewDoclingSource(file_paths=["https://lilianweng.github.io/posts/2024-11-28-reward-hacking"])
自定义源继承 BaseKnowledgeSource特殊数据(如 API 接口、数据库数据)见“高级功能-自定义知识源”示例

快速示例:网页内容知识源(分析论文)

# 需先安装依赖:uv add docling
from crewai.knowledge.source.crew_docling_source import CrewDoclingSource# 从两个网页加载论文内容作为知识源
paper_source = CrewDoclingSource(file_paths=["https://lilianweng.github.io/posts/2024-11-28-reward-hacking",  # 奖励黑客攻击论文"https://lilianweng.github.io/posts/2024-07-07-hallucination"     # 幻觉问题论文]
)

三、知识层级划分(Agent vs Crew Knowledge)

CrewAI 支持智能体级团队级两种知识层级,层级独立但可叠加使用,适配不同协作场景。

1. 核心差异对比

维度智能体级知识(Agent-Level)团队级知识(Crew-Level)
作用范围仅当前智能体可用(私有知识)团队内所有智能体可用(共享知识)
初始化位置Agent 类的 knowledge_sources 参数中配置Crew 类的 knowledge_sources 参数中配置
存储独立性独立存储在以“智能体角色名”命名的集合中统一存储在名为“crew”的集合中
适用场景角色专属信息(如销售的定价策略、技术专家的文档)团队通用信息(如公司政策、项目背景、公共数据)
依赖关系无需团队知识,可独立使用需绑定团队,智能体加入团队后自动继承

2. 关键使用示例

(1)仅智能体级知识(私有信息)
from crewai import Agent, Crew, Task
from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource# 1. 定义智能体私有知识(技术文档)
tech_knowledge = StringKnowledgeSource(content="产品X的API密钥:abc123,端口:8080")# 2. 智能体绑定私有知识
tech_agent = Agent(role="技术专家",goal="维护产品X的API服务",backstory="熟悉产品X的技术细节,负责API问题排查",knowledge_sources=[tech_knowledge]  # 仅该智能体可用
)# 3. 团队无需配置知识(智能体知识独立生效)
crew = Crew(agents=[tech_agent],tasks=[Task(description="查询产品X的API密钥", agent=tech_agent, expected_output="API密钥")]
)
crew.kickoff()  # 智能体可直接从私有知识中获取密钥
(2)智能体+团队级知识(叠加使用)
# 1. 团队共享知识(公司政策)
company_policy = StringKnowledgeSource(content="所有对外报告需标注日期,使用Markdown格式")# 2. 智能体私有知识(销售定价表)
sales_price = StringKnowledgeSource(content="产品A定价:199元,产品B定价:299元")# 3. 配置智能体(私有知识)和团队(共享知识)
sales_agent = Agent(role="销售代表",goal="生成产品报价报告",knowledge_sources=[sales_price]  # 私有知识:定价表
)general_agent = Agent(role="助理",goal="协助整理报告",# 无私有知识,仅使用团队知识
)# 4. 团队配置共享知识
crew = Crew(agents=[sales_agent, general_agent],tasks=[...],knowledge_sources=[company_policy]  # 共享知识:公司政策
)# 执行结果:
# - sales_agent 可使用:私有定价表 + 共享政策
# - general_agent 可使用:仅共享政策

四、知识配置与存储(Configuration & Storage)

1. 核心配置参数

通过 KnowledgeConfig 类可自定义知识检索的行为,支持调整相关性、数量等,在 AgentCrew 中配置均可:

from crewai.knowledge.knowledge_config import KnowledgeConfig# 配置:最多返回10条相关知识,相关性分数阈值0.5(分数越高越相关)
custom_config = KnowledgeConfig(results_limit=10,  # 默认3条score_threshold=0.5  # 默认0.35
)# 绑定到智能体
agent = Agent(role="分析师",knowledge_sources=[...],knowledge_config=custom_config
)

2. 存储机制与自定义

(1)默认存储位置

知识默认使用 ChromaDB 存储在平台特定目录,路径可通过代码查询:

from crewai.utilities.paths import db_storage_path
import os# 获取知识存储根路径
knowledge_root = os.path.join(db_storage_path(), "knowledge")
print(f"知识存储位置:{knowledge_root}")
# 不同平台默认路径:
# - macOS: ~/Library/Application Support/CrewAI/{项目名}/knowledge/
# - Linux: ~/.local/share/CrewAI/{项目名}/knowledge/
# - Windows: C:\Users\{用户名}\AppData\Local\CrewAI\{项目名}\knowledge/
(2)自定义存储位置

通过环境变量或代码配置,将知识存储到指定目录(如项目内):

import os
from crewai import Crew# 方式1:通过环境变量(推荐,全局生效)
os.environ["CREWAI_STORAGE_DIR"] = "./my_project/knowledge_storage"  # 项目内目录# 方式2:通过自定义存储类(精细控制)
from crewai.knowledge.storage.knowledge_storage import KnowledgeStoragecustom_storage = KnowledgeStorage(embedder={"provider": "ollama", "config": {"model": "mxbai-embed-large"}},  # 自定义嵌入模型collection_name="my_custom_collection"  # 自定义集合名
)

3. 嵌入模型配置

知识存储依赖嵌入模型(将文本转化为向量),默认使用 OpenAI 的 text-embedding-3-small,可根据 LLM 类型自定义(如 Claude 推荐用 Voyage AI,本地部署用 Ollama):

# 示例1:Claude 适配 Voyage AI 嵌入
crew = Crew(agents=[...],tasks=[...],knowledge_sources=[...],embedder={"provider": "voyageai","config": {"api_key": "your-voyage-key", "model": "voyage-3"}}
)# 示例2:本地 Ollama 嵌入(无外部API调用)
agent = Agent(role="本地分析师",knowledge_sources=[...],embedder={"provider": "ollama","config": {"model": "mxbai-embed-large", "url": "http://localhost:11434/api/embeddings"}}
)

五、高级功能(Advanced Features)

1. 自动查询重写(Query Rewriting)

智能体执行任务时,会自动将原始提示(如含格式要求、冗余内容)转化为“聚焦核心需求”的检索查询,提升知识匹配精度,无需手动配置。

示例逻辑

  • 原始任务提示:"回答用户喜欢的电影:John上周看了什么电影?用JSON格式输出"
  • 自动重写后的检索查询:"John上周看了什么电影"(去除格式要求,保留核心问题)

2. 知识事件监听(Knowledge Events)

通过事件系统监听知识检索的全流程(开始、成功、失败),用于调试、日志记录或监控,支持的核心事件包括:

  • KnowledgeRetrievalStartedEvent:检索开始时触发
  • KnowledgeRetrievalCompletedEvent:检索完成时触发(返回查询内容、结果数量)
  • KnowledgeQueryFailedEvent:检索失败时触发(返回错误信息)

监听示例

from crewai.utilities.events import KnowledgeRetrievalStartedEvent, KnowledgeRetrievalCompletedEvent
from crewai.utilities.events.base_event_listener import BaseEventListener# 自定义监听器
class KnowledgeMonitor(BaseEventListener):def setup_listeners(self, event_bus):# 监听检索开始@event_bus.on(KnowledgeRetrievalStartedEvent)def on_start(source, event):print(f"智能体[{event.agent.role}]开始检索知识")# 监听检索完成@event_bus.on(KnowledgeRetrievalCompletedEvent)def on_complete(source, event):print(f"检索完成,查询:{event.query},结果数:{len(event.retrieved_knowledge)}")# 启用监听
monitor = KnowledgeMonitor()

3. 自定义知识源(Custom Knowledge Sources)

通过继承 BaseKnowledgeSource 类,可实现任意数据源的知识接入(如 API、数据库、爬虫数据),需重写 load_content(加载数据)、add(处理并存储数据)方法。

示例:从 API 获取太空新闻

from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource
import requests
from pydantic import Fieldclass SpaceNewsSource(BaseKnowledgeSource):"""从太空新闻API获取数据的自定义知识源"""api_endpoint: str = Field(description="API地址")limit: int = Field(default=5, description="获取文章数量")# 1. 加载API数据def load_content(self):try:response = requests.get(f"{self.api_endpoint}?limit={self.limit}")response.raise_for_status()articles = response.json()["results"]# 格式化数据为文本formatted = "\n".join([f"标题:{a['title']},摘要:{a['summary']}" for a in articles])return {self.api_endpoint: formatted}except Exception as e:raise ValueError(f"API请求失败:{str(e)}")# 2. 处理并存储数据(切割为片段+保存到向量库)def add(self):content = self.load_content()for _, text in content.items():self.chunks.extend(self._chunk_text(text))  # 自动切割文本self._save_documents()  # 保存到向量库# 使用自定义知识源
news_source = SpaceNewsSource(api_endpoint="https://api.spaceflightnewsapi.net/v4/articles"
)
agent = Agent(role="太空分析师", knowledge_sources=[news_source], ...)

六、故障排除与最佳实践

1. 常见问题解决方案

(1)“文件找不到”错误
  • 原因:文件未放在 knowledge 文件夹,或路径引用错误;
  • 解决方案
    from crewai.utilities.constants import KNOWLEDGE_DIRECTORY
    import os# 验证文件路径
    file_path = os.path.join(KNOWLEDGE_DIRECTORY, "data.pdf")
    if not os.path.exists(file_path):print(f"文件缺失:{file_path},请放在 {KNOWLEDGE_DIRECTORY} 文件夹中")
    
(2)“嵌入维度不匹配”错误
  • 原因:切换嵌入模型后,旧向量与新模型维度不一致;
  • 解决方案:重置知识存储,清除旧向量:
    # 代码方式重置
    crew.reset_memories(command_type="knowledge")# 或CLI命令重置
    # crewai reset-memories --knowledge
    
(3)知识未生效(智能体未检索到信息)
  • 原因:检索阈值过高、知识未初始化、存储路径错误;
  • 解决方案
    1. 降低 score_threshold(如设为 0.2);
    2. 验证知识是否初始化(kickoff 后查看 agent.knowledge);
    3. 检查存储路径是否正确(见“存储机制”部分代码)。

2. 核心最佳实践

  1. 分层管理知识:私有信息用智能体级知识,公共信息用团队级知识,避免混淆;
  2. 控制知识粒度:大文件(如长篇论文)优先切割为小片段(通过 chunk_size 参数),提升检索精度;
  3. 适配嵌入模型:使用 Claude 时推荐 Voyage AI 嵌入,本地部署用 Ollama,避免 API 冲突;
  4. 生产环境配置:通过 CREWAI_STORAGE_DIR 指定固定存储路径,便于备份与监控;
  5. 定期重置知识:更新知识源后,用 reset-memories 清除旧数据,确保智能体使用最新信息。

总结

CrewAI 知识系统是提升智能体专业性与准确性的核心模块,通过“多类型知识源+分层管理+自动检索”的模式,解决了外部信息接入的痛点。使用时需根据信息的“私有/共享”属性选择层级,结合自定义知识源适配特殊场景,并通过事件监听与存储管理确保稳定性。核心目标是让智能体“带着参考库工作”,而非仅依赖内部训练数据。

http://www.dtcms.com/a/520599.html

相关文章:

  • 预检查和表单提交
  • [MySQL] 数据库设计
  • 数据处理像搭乐高?详解 RAGFlow Ingestion Pipeline
  • 模仿网站属于侵权吗做网站视频是什么专业
  • 汽车转向控制 / 线控转向介绍——控制技术——智能驾驶专栏
  • 基于KSP密钥管理系统的汽车 ECU JTAG 调试接口动态授权与安全管控
  • 世界经理人网站手机版学生网页网站制作软件大全
  • 企业网站带新闻发布功能的建站wordpress文章显示颜色
  • SpringBoot-Web开发之Web原生组件注入
  • Spring Cloud - Spring Cloud 本地配置(本地配置概述、本地配置实现)
  • 青岛商城网站建设长春建设平台网站的公司
  • 这几年做网站怎么样wordpress adsense主题
  • 做视频网站服务器怎么选择12306网站开发时间
  • 如何做家教网站赚钱如何申请国外网站
  • 淄博做网站建设云南网站建设方案
  • 实用指南--多账号矩阵防封控
  • 前端框架Vue(Vue 的挂载点与 data 数据对象)
  • pycharm 远程连接服务器添加github copilot
  • 金融智能体的技术底座解析:AI Agent如何实现“认知+执行”闭环?
  • PostgreSQL 选择数据库:深入解析与最佳实践
  • 木材模板.网站黄山网站建设推广
  • 临沧永德网站建设电子商务公司个人博客网站制作论文
  • MOshell (13) :运维自动化与参数一致性管理
  • CS224N-Lecture01-Word Vectors
  • vscode 配置ROS项目 导入库来源
  • 探寻架构师职责(一)----建新系统
  • 广州seo效果下载班级优化大师app
  • 兴城做网站推广的做网商必备网站
  • Windows系统php8.2.9 安装imagick扩展
  • 如何用router-view实现嵌套路由,完整使用示例