crewai框架(0.83.0)添加知识源

官方的文档如下

https://docs.crewai.com/concepts/knowledge

但是不知道为什么,可能是版本的问题(我用的是0.86.0),参考官方文档的配置我会报错,并且也导入不了数据库,也可能用的不是官方API。本文以常用的csvjsonpdf作为知识库进行举例

重点:下面的代码是基于0.83.0版本的!!!
在这里插入图片描述

使用csv文件作为数据源

def csv_knowledge_source():
    # 指定向量数据库持久化文件夹(如需要可取消注释)
    os.environ["CREWAI_STORAGE_DIR"] = "vector_store_csv"

    current_dir = Path(__file__).parent
    csv_path = current_dir / "files/high_school_scores.csv"

    if not csv_path.exists():
        raise FileNotFoundError(f"CSV file not found at {csv_path}")

    csv_source = CSVKnowledgeSource(
        file_path=csv_path,
        metadata={"preference": "score"}
    )

    openai_api_base = os.getenv("OPENAI_API_BASE")
    openai_api_key = os.getenv("OPENAI_API_KEY")

    if not openai_api_base or not openai_api_key:
        raise ValueError("OPENAI_API_BASE or OPENAI_API_KEY not set.")

    agent = Agent(
        role="高中老师",
        goal="你了解学生的所有成绩",
        backstory="你经常关注学生的成绩",
        verbose=True,
    )

    task = Task(
        description="使用知识库中的信息回答有关学生成绩的问题: {question}",
        expected_output="基于知识库数据的解答:",
        agent=agent,
    )

    crew = Crew(
        agents=[agent],
        tasks=[task],
        verbose=True,
        process=Process.sequential,
        knowledge={
            "sources": [csv_source],
            # "embedder": {
            #     "provider": "openai",
            #     "api_base": openai_api_base,  # 移除了config层级
            #     "api_key": openai_api_key,
            #     "model": "text-embedding-3-small"
            # }
        }
    )

    try:
        result = crew.kickoff(inputs={"question": "孙七的语文成绩是多少"})
        print(result)
    except Exception as e:
        print(f"An error occurred: {e}")

high_school_scores.csv文件

学生姓名,语文成绩,数学成绩,英语成绩
张三,63,137,66
李四,82,98,83
王五,66,50,96
赵六,57,109,145
孙七,136,121,147

在这里插入图片描述

使用json文件作为数据源

def json_knowledge_source():
    # 指定向量数据库持久化文件夹
    os.environ["CREWAI_STORAGE_DIR"] = "vector_store_json"

    # 获取当前位置路径
    current_dir = Path(__file__).parent
    # 指定到文件路径
    json_path = current_dir / "files/high_school_scores.json"

    json_source = JSONKnowledgeSource(
        file_path=json_path, metadata={"preference": "personal"}
    )

    agent = Agent(
        role="高中老师",
        goal="你了解学生的所有成绩",
        backstory="""你经常关注学生的成绩""",
        verbose=True,
    )

    task = Task(
        description="使用知识库中的信息回答有关学生成绩的问题: {question}",
        expected_output="基于知识库数据的解答:",
        agent=agent,
    )

    crew = Crew(
        agents=[agent],
        tasks=[task],
        verbose=True,
        process=Process.sequential,
        knowledge={
            "sources": [json_source],
            "metadata": {"preference": "personal"},
            # "embedder_config": {
            #     "provider": "openai",
            #     "config": {"model": "text-embedding-3-small"}
            # }
        }
    )


    crew.kickoff(inputs={"question": "孙七的语文成绩是多少"})

high_school_scores.json

[
    {
        "姓名": "张三",
        "语文": 63,
        "数学": 137,
        "英语": 66
    },
    {
        "姓名": "李四",
        "语文": 82,
        "数学": 98,
        "英语": 83
    },
    {
        "姓名": "王五",
        "语文": 66,
        "数学": 50,
        "英语": 96
    },
    {
        "姓名": "赵六",
        "语文": 57,
        "数学": 109,
        "英语": 145
    },
    {
        "姓名": "孙七",
        "语文": 136,
        "数学": 121,
        "英语": 147
    }
]

在这里插入图片描述

使用pdf文件作为数据源

def pdf_knowledge_source():
    # 指定向量数据库持久化文件夹
    os.environ["CREWAI_STORAGE_DIR"] = "vector_store_pdf"

    # 获取当前位置路径
    current_dir = Path(__file__).parent
    # 指定到文件路径
    pdf_path = current_dir / "files/人物介绍.pdf"

    pdf_source = PDFKnowledgeSource(
        file_path=pdf_path, metadata={"preference": "personal"}
    )

    agent = Agent(
        role="About User",
        goal="你了解文档的一切。",
        backstory="""你是一个回答文档内容的高手。""",
        verbose=True
    )

    task = Task(
        description="回答有关用户的问题: {question}",
        expected_output="解答问题。",
        agent=agent,
    )

    crew = Crew(
        agents=[agent],
        tasks=[task],
        verbose=True,
        process=Process.sequential,
        knowledge={
            "sources": [pdf_source],
            "metadata": {"preference": "personal"},
        }
    )

    crew.kickoff(inputs={"question": "张三的基本信息?"})

人物介绍.pdf

张三,35 岁,是一位在科技领域崭露头角的软件工程师。他毕业于国内顶尖学府的计算机科学专业,凭借扎实的专业知识和对技术的热爱,在行业内积累了丰富的经验。
张三性格沉稳且富有创造力,面对复杂的技术难题,总能冷静分析,找到创新的解决方案。工作之余,他还是个户外运动爱好者,经常参与登山、骑行活动,这不仅锻炼了他的体魄,也培养了他坚韧不拔的毅力。在团队合作中,张三善于倾听他人意见,凭借出色的沟通能力,总能高效地协调团队成员,推动项目顺利进行。无论是工作还是生活,他都以积极的态度影响着身边的人,是大家眼中的榜样。

在这里插入图片描述
参考资料:

https://www.bilibili.com/video/BV1jPBfYfE8C

补充:

向量数据库的本地存储位置,Win系统的在这里

C:\Users\用户名\AppData\Local\CrewAI

快速浏览:

Win+R,然后粘贴

explorer.exe C:\Users\%USERNAME%\AppData\Local\CrewAI

如果使用的版本是0.86.0的,将会出现如下错误,暂时还不知道是什么原因。并且目前还不可以使用自定义的embedding层。借此博文,也希望抛砖引玉一下,求助怎么解决上述问题~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/970241.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

deepseek + embeding模型搭建本地知识库

上一篇文章讲了ollamadeepseek模型的本地化部署,具体能部署哪一款取决于你的土豪程度: 今天的目标是本地安装部署embeding模型,实现LLMembeding模型的rag知识库的本地化部署,包括: embeding模型的本地化部署anyhingL…

2、树莓派5第一次开机三种方式:使用外设 / 使用网线 / 使用wifi

本文整理了树莓派第一次开机方式,供大家参考 方式一:连接鼠标、键盘、显示器外设开机 树莓派自带USB接口及HDMI接口,因此可以通过USB连接鼠标键盘,HDMI接入显示器,再进行电源供电,就可以完成第一次开机 …

案例-02.部门管理-查询

一.查询部门-需求 二.查询部门-思路 API接口文档 三.代码实现 1.controller层:负责与前端进行交互,接收前端所发来的请求 注:Slf4j用于记录日志使用,可以省略private static Logger log LoggerFactory.getLogger(DeptControlle…

小程序包体积优化指南:静态资源条件编译与分包编译技巧

在开发小程序时,可能大家都遇到过包体积超限的情况,这对多平台支持、用户体验和加载速度带来不少困扰。UniApp 提供了一些强大的功能,比如静态资源的条件编译和分包编译,这些功能可以帮助我们减少小程序的包体积,提高加…

12. QT控件:多元素控件

0. 概述 Qt中提供的多元素控件 QListWidget QListView QTableWidget QTableView QTreeWidget QTreeView xxWidget 和 xxView的区别 以QTableWidget 和 QTableView 为例: QTableView 是基于MVC设计的控件,QTableView自身不持有数据。使用QTableView需…

CAS单点登录(第7版)20.用户界面

如有疑问,请看视频:CAS单点登录(第7版) 用户界面 概述 概述 对 CAS 用户界面 (UI) 进行品牌化涉及编辑 CSS 样式表以及一小部分相对简单的 HTML 包含文件,也称为视图。(可选&…

android 的抓包工具

charles 抓包工具 官网地址 nullCharles Web Debugging Proxy - Official Sitehttps://www.charlesproxy.com/使用手册一定记得看官网 SSL Certificates • Charles Web Debugging Proxy http请求: 1.启动代理: 2.设置设备端口 3.手机连接当前代理 …

关于视频去水印的一点尝试

一. 视频去水印的几种方法 1. 使用ffmpeg delogo滤镜 delogo 滤镜的原理是通过插值算法,用水印周围的像素填充水印的位置。 示例: ffmpeg -i input.mp4 -filter_complex "[0:v]delogox420:y920:w1070:h60" output.mp4 该命令表示通过滤镜…

预测技术在美团弹性伸缩场景的探索与应用

管理企业大规模服务的弹性伸缩场景中,往往会面临着两个挑战:第一个挑战是精准的负载预测,由于应用实例的启动需要一定预热时间,被动响应式伸缩会在一段时间内影响服务质量;第二个挑战是高效的资源分配,即在…

【含开题报告+文档+PPT+源码】基于Spring+Vue的拾光印记婚纱影楼管理系统

开题报告 本论文旨在探讨基于Spring和Vue框架的拾光印记婚纱影楼管理系统的设计与实现。该系统集成了用户注册登录、个人资料修改、婚庆资讯浏览、婚庆套餐查看、婚纱拍摄预约、婚纱浏览与租赁、客片查看以及在线客服等多项功能,为用户提供了一站式的婚纱影楼服务体…

ASP.NET Core 使用 FileStream 将 FileResult 文件发送到浏览器后删除该文件

FileStream 在向浏览器发送文件时节省了服务器内存和资源,但如果需要删除文件怎么办?本文介绍如何在发送文件后删除文件;用 C# 编写。 另请参阅:位图创建和下载 使用FileStream向浏览器发送数据效率更高,因为文件是从…

字节跳动后端二面

📍1. 数据库的事务性质,InnoDB是如何实现的? 数据库事务具有ACID特性,即原子性、一致性、隔离性和持久性。InnoDB通过以下机制实现这些特性: 🚀 实现细节: 原子性:通过undo log实…

【个人开发】cuda12.6安装vllm安装实践【内含踩坑经验】

1. 背景 vLLM是一个快速且易于使用的LLM推理和服务库。企业级应用比较普遍,尝试安装相关环境,尝试使用。 2. 环境 模块版本python3.10CUDA12.6torch2.5.1xformers0.0.28.post3flash_attn2.7.4vllm0.6.4.post1 2.1 安装flash_attn 具体选择什么版本&…

19.4.9 数据库方式操作Excel

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本节所说的操作Excel操作是讲如何把Excel作为数据库来操作。 通过COM来操作Excel操作,请参看第21.2节 在第19.3.4节【…

2024-2025年主流的开源向量数据库推荐

以下是2024-2025年主流的开源向量数据库推荐,涵盖其核心功能和应用场景: 1. Milvus 特点:专为大规模向量搜索设计,支持万亿级向量数据集的毫秒级搜索,适用于图像搜索、聊天机器人、化学结构搜索等场景。采用无状态架…

vue项目使用vite和vue-router实现history路由模式空白页以及404问题

开发项目的时候,我们一般都会使用路由,但是使用hash路由还是history路由成为了两种选择,因为hash路由在url中带有#号,history没有带#号,看起来更加自然美观。但是hash速度更快而且更通用,history需要配置很…

AI编程01-生成前/后端接口对表-豆包(或Deepseek+WPS的AI

前言: 做过全栈的工程师知道,如果一个APP的项目分别是前端/后端两个团队开发的话,那么原型设计之后,通过接口文档进行开发对接是非常必要的。 传统的方法是,大家一起定义一个接口文档,然后,前端和后端的工程师进行为何,现在AI的时代,是不是通过AI能协助呢,显然可以…

切换git仓库远程地址

1、首先可以先查看一下当前git库的远程地址 【cd .git】 切换到git目录【cat config】查看【cd ../】 返回项目目录 2、 切换到目标远程git地址 【git remote rm origin】 删除现有远程仓库 【git remote add origin url】添加新远程仓库 【cat .git/config】验证是否切换成功…

mapbox 从入门到精通 - 目录

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀总目录1.1 ☘️ mapbox基础1.2 ☘️…