crewai的进一步工具扩展

crewai的进一步工具扩展

SerperDevTool

前置环境

今天来测试一下关于网页访问的一些tools的调用,首先就是SerperDevTool,这是一个crewai框架提供的内置搜索工具之一,底层调用的是serper.dev 提供的 Google 搜索 API(SERP API),主要功能:让 AI Agent 能够实时上网搜索,获取最新的网页搜索结果

这个工具的调用方法是使用serper.dev 服务的 API Key。

os.environ["SERPER_API_KEY"] = "Your Key" 是什么?从哪里获得?

这是 serper.dev 服务的 API Key。

  • Serper.dev 是一个专门提供 Google 搜索结果的第三方 API 服务
  • 价格很便宜(号称是 SerpAPI 等竞品的 1/5 ~ 1/10 价格)
  • 有免费额度(通常注册送 2500 次查询,够测试和轻度使用)

获取方式(2026 年最新流程基本没变):

  1. 打开官网:https://serper.dev/

  2. 用邮箱注册账号(Sign up),不需要信用卡

  3. 注册/登录后,进入 dashboard(控制台)

  4. 在左侧菜单或主页明显位置找到 API KeyGet API Key

  5. 复制那一串很长的密钥(类似 sk-abc123...)

  6. 粘贴到代码里替换 "Your Key":

    os.environ["SERPER_API_KEY"] = "你的真实密钥写在这里"

此外还要先下载crewai - tools,方便后面的调用

python 复制代码
install crewai crewai-tools

调用方式

python 复制代码
import os
from dotenv import load_dotenv  # 需安装:pip install python-dotenv

# 加载.env文件中的环境变量(优先读取系统环境变量,本地开发用.env)
load_dotenv()

# 从环境变量读取SERPER API密钥,移除硬编码
os.environ["SERPER_API_KEY"] = os.getenv("SERPER_API_KEY", "your-serper-api-key-here")

from crewai import Agent, Task, Crew, LLM
from crewai_tools import SerperDevTool

LLM_API_KEY = os.getenv("LLM_API_KEY", "your-llm-api-key-here") 
LLM_BASE_URL = os.getenv("LLM_BASE_URL", "https://your-llm-base-url-here/api/v1") 
LLM_MODEL = os.getenv("LLM_MODEL", "your-llm-model-name-here") 

os.environ["OPENAI_API_KEY"] = LLM_API_KEY
os.environ["OPENAI_API_BASE"] = LLM_BASE_URL

my_llm = LLM(
    model=f"openai/{LLM_MODEL}",
    base_url=LLM_BASE_URL,
    api_key=LLM_API_KEY
)

research_agent = Agent(
  role='研究员',
  goal='查找并总结最新的人工智能新闻',
  backstory="""您是一家大公司的研究员。
  您负责分析数据并为业务提供见解。""",
  llm=my_llm,
  verbose=True
)

search_tool = SerperDevTool()

task = Task(
  description='查找并总结最新的人工智能新闻',
  expected_output='对前 5条最重要的人工智能新闻进行项目符号列表总结',
  agent=research_agent,
  tools=[search_tool]
)

crew = Crew(
    agents=[research_agent],
    tasks=[task],
    verbose=True
)

result = crew.kickoff()
print(result)

结果反馈

但是我们发现这里我们调用的api训练数据是比较老的,他默认当前最新的信息是23年,所以如果我们想去查询实时消息的话,我们需要对时间进行一个定义

python 复制代码
from datetime import datetime
#重新定义时间
    description=f'查找并总结 {datetime.now().year} 年最新的 AI 新闻',

定义玩之后,我们获取的数据就正常了

DuckDuckGoSearchRun

前置环境

首先是前置准备,这里我们全部写到requirements.txt里面去,以便于一键安装前置环境

txt 复制代码
unstructured
          
langchain
          
Jinja2>=3.1.2
          
click>=7.0

langchain-community
          
duckduckgo-search
bash 复制代码
pip install requirements.txt

这样我们的前置工作就准备好了,工具的调用和之前的是差不多了,也是直接从库里import出来

python 复制代码
from crewai import Agent, Task, Crew, Process, LLM
from crewai.tools import BaseTool
import os
from langchain_community.tools import DuckDuckGoSearchRun

这样我们的ai就具有了去搜查相应网站的实时数据的能力

调用方式

python 复制代码
from crewai import Agent, Task, Crew, Process, LLM
from crewai.tools import BaseTool
import os
from dotenv import load_dotenv  # 需安装:pip install python-dotenv
from langchain_community.tools import DuckDuckGoSearchRun

# 加载.env文件中的环境变量(优先读取系统环境变量)
load_dotenv()

llm = LLM(
    model=os.getenv("LLM_MODEL", "openai/deepseek-v3"),  
    api_key=os.getenv("LLM_API_KEY", "your-llm-api-key-here"),  
    base_url=os.getenv("LLM_BASE_URL", "https://your-llm-base-url-here/api/v1")  
)

class SearchTool(BaseTool):
    name: str = "DuckDuckGo Search"
    description: str = "Search the web for information using DuckDuckGo"

    def _run(self, query: str) -> str:
        return DuckDuckGoSearchRun().run(query)

search_tool = SearchTool()

researcher = Agent(
    role='Researcher',
    goal='Research methods to grow this channel 毕导THU on Bilibili and get more subscribers',
    backstory='You are an AI research assistant specializing in Bilibili content ecosystem',
    tools=[search_tool],
    verbose=True,
    llm=llm,
    allow_delegation=False
)

writer = Agent(
    role='Writer',
    goal='Write compelling and engaging reasons as to why someone should join 毕导THU Bilibili channel',
    backstory='You are an AI master mind capable of growing any Bilibili channel',
    verbose=True,
    llm=llm,
    allow_delegation=False
)

task1 = Task(
    description='Investigate 毕导THU Bilibili channel', 
    agent=researcher,
    expected_output='A detailed report about the channel performance, content style, and current subscriber base.'
)

task2 = Task(
    description='Investigate sure fire ways to grow a Bilibili channel', 
    agent=researcher,
    expected_output='A comprehensive list of proven strategies to grow a Bilibili channel including content optimization and engagement techniques.'
)

task3 = Task(
    description='Write a list of tasks 毕导THU must do to grow his channel', 
    agent=writer,
    expected_output='A actionable checklist of tasks for the channel owner to implement immediately.'
)

crew = Crew(
    agents=[researcher, writer],
    tasks=[task1, task2, task3],
    verbose=True,
    process=Process.sequential
)

result = crew.kickoff()
print(result)

结果反馈

这里我们做了两组实验,第一个用了deep seekv3去调查国内视频平台的以为up主,第二个使用了deep seekr1去调查了了国外视频平台的一位up主。其中发现了一些问题。

1. v3模型------bilibili毕导

首先我们记录一下第一组测试。由于v3是通用文本处理,所以它在工具调用的频率以及深度上是不及于r1的,这里我们从报告的详细度以及丰富度可以看出来。但是因为视频平台是国内的,所以它搜索统计的速度也相对快很多,一共是进行了六次工具的调用。

2. r1模型------YouTube高达烈

其次是r1大模型对国外博主推理结果,因为其是开放式推理,所以处理速度相对要慢很多,当然数据的收集以及统筹就相对详细了,但是由于YouTube是外网的视频平台,国内的api接口在具体访问油管平台进行粉丝数量调查的时候会出现链接超时或者报错的情况。一共调用了19次工具,其中超时失败了4次

共性问题

讲一下两个模型在测试的时候会遇到的共性问题

  1. 首先是因为deepseek属于基于openai协议的大模型,与crewai本土支持的gpt在内容输出上还是有一定的差异性,所以两者在调用工具的时候,会时不时出现调用工具内容出错的问题

  2. 其次是可能是由于工具的问题,这个进行调查总结的效率并不高,进程执行的比较缓慢

相关推荐
喵手2 小时前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第3节】稳定性第一课:超时、重试、退避(指数退避)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·requests静态爬取·超时、重试、退避
啊阿狸不会拉杆2 小时前
《机器学习》第 7 章 - 神经网络与深度学习
人工智能·python·深度学习·神经网络·机器学习·ai·ml
明洞日记2 小时前
【软考每日一练015】计算机网络:DNS 递归查询与迭代查询解析
git·计算机网络·github
没有bug.的程序员2 小时前
Spring Boot 启动原理:从 @SpringBootApplication 到自动配置深度解析
java·spring boot·后端·python·springboot·application
学掌门2 小时前
从数据库到可视化性能,5个大数据分析工具测评,python只排倒数
数据库·python·数据分析
小二·2 小时前
Python Web 开发进阶实战:联邦学习平台 —— 在 Flask + Vue 中构建隐私保护的分布式 AI 训练系统
前端·python·flask
kuiini2 小时前
scikit-learn 常用算法与评估方法【Plan 7】
python·算法·scikit-learn
SunnyRivers2 小时前
Python 包和项目管理工具uv核心亮点详解
python·uv·亮点
充值修改昵称2 小时前
数据结构基础:堆高效数据结构全面解析
数据结构·python·算法