Type something to search...
构建ai代理的5个简单步骤:使用pydanticai实现基本工具调用示例

构建ai代理的5个简单步骤:使用pydanticai实现基本工具调用示例

人工智能代理与PydanticAI

人工智能(AI)代理在帮助开发者构建强大、可投入生产的应用程序方面取得了长足的进展。但正如我们许多人所经历的,开始使用复杂的AI框架可能会让人感到畏惧。本文将通过一个简单的示例,指导您如何使用PydanticAI库在Python中创建一个AI代理。我们将更详细地查看“基本代理工具调用”,并提供代码和视觉效果,展示一切是如何结合在一起的。

到最后,您将看到为您的代理设置“工具”是多么简单——它可以调用的函数,以检索当前日期或天气等数据——以及代理如何协调这些工具,以向用户提供最终响应。

下面是一个说明性图表,展示了用户查询如何在系统中流动:

  1. 用户问代理:“今天是什么日期,纽约的天气如何?”
  2. pydantic agent分析查询。
  3. 它确定需要使用哪些工具——在这种情况下是get_current_dateget_weather
  4. 每个工具都使用适当的输入被调用。
  5. 代理从这些工具中收集结果,并为用户撰写最终响应。

这种流程允许模块化、可重用的代码。每个“工具”成为AI代理在需要时可以调用的专用函数。

2. 代码讲解

下面是完整的代码片段,展示了所有内容是如何结合在一起的。我们将逐步讲解重要的部分。

from pydantic_ai import Agent, RunContext
from pydantic_ai.models.openai import OpenAIModel
from pydantic import BaseModel
from datetime import datetime
from dotenv import load_dotenv

load_dotenv()

class GetCurrentDateInput(BaseModel):
    """获取当前日期不需要输入"""
    pass

class GetCurrentDateOutput(BaseModel):
    """获取当前日期的响应"""
    current_date: str

class GetWeatherInput(BaseModel):
    """获取天气的输入"""
    city: str

class GetWeatherOutput(BaseModel):
    """获取天气的响应"""
    weather: str
    temperature: float

model = OpenAIModel(
    model_name='deepseek/deepseek-chat',  
    base_url='https://openrouter.ai/api/v1',
)

agent = Agent(
    model=model,
    system_prompt="""你是一个有帮助的助手。你可以使用工具来帮助你回答问题。 \\
        1. 评估你应该使用哪个工具来回答问题。 \\
        2. 如果你认为问题太复杂或不相关,请回复“我不知道该如何帮助你”。 \\
        3. 使用 get_current_date 获取当前日期。 \\
        4. 使用 get_weather 获取指定城市的天气。 \\
        最后,在你有最终答案时回复。""",
)

@agent.tool  
def get_current_date(_: RunContext[GetCurrentDateInput]) -> GetCurrentDateOutput:
    print("获取当前日期...")
    current_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    return GetCurrentDateOutput(current_date=current_date)

@agent.tool
def get_weather(_: RunContext[GetWeatherInput], city: str) -> GetWeatherOutput:
    print(f"接收到城市: {city}")
    if not city:
        raise ValueError("城市缺失!")

    weather = "晴天"
    temperature = 24.5
    return GetWeatherOutput(weather=weather, temperature=temperature)

def main():
    result = agent.run_sync("今天是什么日期,纽约的天气如何?")
    print(result.data)

if __name__ == "__main__":
    main()

2.1 定义 Pydantic 模型

我们首先定义 Pydantic 数据模型用于输入和输出:

  • GetCurrentDateInputGetCurrentDateOutput:获取日期不需要输入,但输出包含一个 current_date 的字符串。
  • GetWeatherInputGetWeatherOutput:我们提供一个 city 作为输入,并接收 weather(例如,“晴天”)和 temperature(作为 float)作为输出。

这些模型确保了函数输入和输出的一致模式。

2.2 创建代理

在 PydanticAI 中,Agent 是你的 AI “大脑”,配置有一个 model(在这种情况下是一个 OpenAIModel)和一个 system_promptsystem_prompt 指导代理的行为——告诉它可用的工具以及决定查询是否相关的逻辑。

2.3 工具:get_current_date 和 get_weather

一个关键的 PydanticAI 概念是你可以为你的 agent 注册“工具”。工具是用 @agent.tool 装饰的普通 Python 函数。在这个例子中,我们有:

  • get_current_date

    • 打印一条消息(“获取当前日期…”)
    • 返回今天的日期和时间作为字符串
  • get_weather

    • 打印接收到的城市名称
    • 返回模拟的天气状态和温度

每当 agent 的语言模型看到用户的查询需要日期或天气时,它可以自主调用你提供的类型和文档字符串中的这些函数。

3. 运行脚本

当你运行:

python basic_agent_call.py

你将看到控制台输出(如第二张附图所示),指示正在使用的工具:

获取当前日期…
收到城市:纽约
今天的日期是2024年12月30日。纽约的天气是晴天,温度为24.5°C。

以下是背后发生的事情:

  1. 用户查询: “今天是什么日期,纽约的天气怎么样?”
  2. 代理逻辑: 系统提示指示代理决定调用哪个工具。
  3. get_current_date 被调用。
  4. get_weather 随后与城市“纽约”一起被调用。
  5. 代理格式化最终响应:

今天的日期是2024年12月30日。纽约的天气是晴天,温度为24.5°C。

4. 为什么选择 PydanticAI?

  • 易用性: 定义你的工具和架构非常简单。
  • 健壮性: Pydantic 确保类型有效性,因此你会知道自己是否返回或传递了错误的数据。
  • 灵活性: 你可以自由地为你的 pydantic agent 定义新工具,使你的 AI 系统模块化。

许多 AI 框架使构建“生产级”系统变得困难。PydanticAI 旨在简化工具管理和输入/输出验证的复杂性,让你专注于业务逻辑。

5. 结论

在本文中,我们探讨了一个使用 PydanticAI 的 基本代理工具调用 示例。我们使用了两个简单的“工具”——一个用于获取当前日期,一个用于检索天气数据。代理协调这些调用,返回最终面向用户的响应。

这个模式乍一看可能很简单,但它非常强大:随着应用程序的发展,您可以添加更多特定领域的工具,让代理智能地将它们串联在一起。无论您是在构建对话应用、数据检索管道,还是更高级的 AI 工作流,PydanticAI 强类型和 AI 驱动的协调组合有助于确保流畅的开发者体验。

随时可以尝试其他工具或不同的提示。凭借框架的灵活性,您会发现将 AI 代理扩展以处理更复杂任务是相当简单的。

Related Posts

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

AI 研究报告和论文写作 合并两个系统指令以获得两个模型的最佳效果 Perplexity AI 的 Deep Research 工具提供专家级的研究报告,而 OpenAI 的 ChatGPT-o3-mini-high 擅长推理。我发现你可以将它们结合起来生成令人难以置信的论文,这些论文比任何一个模型单独撰写的都要好。你只需要将这个一次性提示复制到 **

阅读更多
让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

Non members click here作为一名软件开发人员,多年来的一个发现总是让我感到惊讶,那就是人们还在 Excel

阅读更多
使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

10 个常见问题解答 本文是我推出的一个名为“10 个常见问题解答”的新系列的一部分。在本系列中,我旨在通过回答关于该主题的十个最常见问题来分解复杂的概念。我的目标是使用简单的语言和相关的类比,使这些想法易于理解。 图片来自 [Solen Feyissa](https://unsplash.com/@solenfeyissa?utm_source=medium&utm_medi

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

在AI军备竞赛中分辨事实与虚构 DeepSeek AI真的是它所宣传的游戏规则改变者,还是仅仅聪明的营销和战略炒作?👀 虽然一些人将其视为AI效率的革命性飞跃,但另一些人则认为它的成功建立在借用(甚至窃取的)创新和可疑的做法之上。传言称,DeepSeek的首席执行官在疫情期间像囤积卫生纸一样囤积Nvidia芯片——这只是冰山一角。 从其声称的550万美元培训预算到使用Open

阅读更多
Type something to search...