Type something to search...
构建强大的ai研究代理:使用pydantic Ai Web Scraper和llama 3.3的3个关键步骤

构建强大的ai研究代理:使用pydantic Ai Web Scraper和llama 3.3的3个关键步骤

在这个视频中,我将快速演示如何使用 Pydantic AI、网页抓取工具和 Llama 3.3 创建一个多代理聊天机器人,为您的业务或个人使用制作一个强大的代理聊天机器人。

在检索增强生成(RAG)和大型语言模型(LLM)基础的工作流程中,结构化输出提高了准确性和清晰度,使数据更易于理解。

我们许多人都知道验证或将数据转换为正确格式是多么令人沮丧。当处理接口数据时,您会遇到复杂的数据格式。如果不小心,您可能会遇到难以发现的错误。

这就是 Pydantic 的用武之地。它是一个著名的数据验证工具,在幕后发挥着关键作用。OpenAI、Anthropic、LangChain 和 LlamaIndex 都将 Pydantic 作为核心组件,负责数据验证等重要功能。

不久前,Pydantic 团队推出了 PydanticAI,这是一个基于 Pydantic 的 AI 代理框架。它旨在简化 AI 应用开发的复杂性,并解决 AI 代理开发中的各种痛点。

在东部时间12月6日星期五,Meta 宣布推出一款新的 Llama 系列生成 AI 模型:具有 70 亿参数的 Llama 3.3,也称为 Llama 3.3 70B。首席执行官扎克伯格在他的社交媒体 Instagram 上表示,这是今年最后一次重大 AI 模型更新,下一步将是明年 Llama 4 的首次亮相。

Llama 3.3 现在可以从在线来源下载,例如 oLlama 官方网站和 AI 开发平台 Hugging Face。

Llama 3.3 在行业基准测试中表现优于本周早些时候发布的 Google 的 Gemini 1.5 Pro、OpenAI 的 GPT-4o 和 Amazon 的 Nova Pro。扎克伯格表示,这是今年最后一次重大 AI 模型更新,下一步将是明年 Llama 4 的亮相。

那么,让我给您演示一个实时聊天机器人的示例,让您了解我的意思。

让我问一个简单的问题:今年发布的最新大型语言模型是什么?如果您查看 Pydantic AI 如何生成输出,您会看到当我提问并点击搜索按钮时,研究功能检索当前日期,将查询和日期传递给 AI 代理(search_agent),并使用 Tavily 客户端获取搜索结果。AI 代理处理这些结果并将其组织成结构化字段(ResearchResult),并返回总结内容,包括标题、主要文章和要点。这个简化的系统将 AI 能力与用户友好的界面相结合,以提供简洁且视觉吸引的信息检索和总结。

在这个视频中,我们将讨论 Pydantic AI 是什么,Pydantic AI 的特点,Langchain、LlamaIndex 和 Pydantic AI 之间的区别,以及如何使用 Pydantic AI 创建一个超级 AI 代理。

在我们开始之前!

如果你喜欢这个主题:

  1. 我的文章点赞50次;这对我真的很有帮助。
  2. 关注我在Medium上,并订阅以免费获取我的最新文章。
  3. 加入这个大家庭 — 订阅YouTube频道

Pydantic AI是什么

PydanticAI提倡类型安全操作、结构化响应验证和一种新颖的依赖注入系统,所有这些都在Python最佳实践的熟悉领域内。这使其成为开发人员在不牺牲代码质量或安全性的情况下利用生成式AI力量的宝贵工具。PydanticAI值得探索,特别是它与Logfire的集成,以增强调试和监控能力。

特性

PydanticAI 是由 Pydantic 团队开发的一个 Python 代理框架,用于构建使用生成式 AI 的生产级应用程序。它提供模型无关的支持、类型安全的验证、结构化响应处理以及与各种 LLM 提供商的无缝集成。该框架强调简洁性和可靠性,同时提供强大的功能,如依赖注入、流式响应和通过 Logfire 集成进行全面监控。

  • 类型安全的响应验证: 利用 Pydantic 确保 LLM 输出符合预期的数据结构,为生产应用程序提供强有力的验证。

  • 依赖注入系统: 一种新颖的类型安全系统,允许自定义代理行为,并促进测试和评估驱动的开发。

  • 模型无关架构: 支持多个 LLM 提供商(OpenAI、Gemini、Groq),并为额外模型支持提供简单接口。

  • 流式响应处理: 能够实时处理和验证流式响应,包括在流式传输期间的结构化数据验证。

Langchain Vs Llamaindex Vs Pydantic AI

这些框架之间的差异体现在它们的技术特性、对大型语言模型应用开发的不同理解和实际方向上。

PydanticAI 优先考虑工程实践和生产可靠性,其核心是严格的类型系统和标准化的开发模型。

LangChain 为开发者提供了一种便捷的方式,通过灵活的组件设计和丰富的生态系统快速构建应用程序。

LlamaIndex 专注于文档处理和知识检索,在数据处理和索引优化方面形成了独特的优势。

让我们开始编码

在我们深入应用程序之前,我们将为代码的运行创建一个理想的环境。为此,我们需要安装必要的Python库。首先,我们将开始安装支持模型的库。为此,我们将对下面的库进行pip安装。

pip install -r requirements.txt

安装完成后,我们导入Pydantic AI、数据类、tavily、streamlit和devtools。

import os
import asyncio
import datetime
from typing import Any
from dataclasses import dataclass

import nest_asyncio
nest_asyncio.apply()
from openai import AsyncOpenAI
from pydantic_ai.models.openai import OpenAIModel
import streamlit as st
from pydantic_ai import Agent, RunContext
from pydantic import BaseModel, Field
from tavily import AsyncTavilyClient
from dotenv import load_dotenv

为您的LLM提供商设置API令牌。Pydantic直接与OpenAI、Groq和VertexAI合作。

client = AsyncOpenAI(
    base_url='http:',
    api_key='your-api-key',
)

model = OpenAIModel('llama3.3:latest', openai_client=client)

我们将使用tavily来抓取浏览器、过滤和聚合数据。

TAVILY_API_KEY = os.getenv("TAVILY_API_KEY")
if not TAVILY_API_KEY:
    raise ValueError("请设置TAVILY_API_KEY环境变量。")

tavily_client = AsyncTavilyClient(api_key=TAVILY_API_KEY)

我们定义三个类。第一个**SearchDataclass**是一个数据类,旨在存储与搜索相关的信息,特别是最大结果数(max_results)和今天的日期(todays_date)。

第二个类**ResearchDependencies**是另一个数据类,仅存储今天的日期。

第三个类**ResearchResult**扩展了**BaseModel**,表示一篇研究文章,包含文章标题(research_title)、主体(research_main)和一组总结关键点的要点(research_bullets)字段。

**Field**函数用于为每个属性添加描述,这有助于验证和文档编制。

@dataclass
class SearchDataclass:
    max_results: int
    todays_date: str

@dataclass
class ResearchDependencies:
    todays_date: str

class ResearchResult(BaseModel):
    research_title: str = Field(description='Markdown标题描述文章主题,以#为前缀')
    research_main: str = Field(description='提供详细新闻文章的主要部分')
    research_bullets: str = Field(description='总结关键点的一组要点')

我创建了一个**Agent** Llama3.3用于研究任务。它使用ResearchDependencies数据类作为输入,使用ResearchResult类作为输出。然后我们编写一个系统提示,指示它从查询中识别关键字,执行多个搜索,然后将这些结果组合成详细的响应。

## 创建代理
search_agent = Agent(
    model,
    deps_type=ResearchDependencies,
    result_type=ResearchResult,
    system_prompt=
)

我们创建一个add_current_date函数,指示代理从给定问题中识别强关键字,使用这些关键字执行3-5次搜索,并将结果组合成详细响应,同时确保信息准确且是最新的。

@search_agent.system_prompt
async def add_current_date(ctx: RunContext[ResearchDependencies]) -> str:
    todays_date = ctx.deps.todays_date
    system_prompt = (
        f"你是一个有帮助的研究助手和研究专家。"
        f"在给定问题时,写出强关键字以进行3-5次搜索 "
        f"(每次带有query_number),然后组合结果。"
        f"如果你需要今天的日期,它是{todays_date}。"
        f"专注于提供准确和最新的信息。"
    )
    return system_prompt

我们定义两个异步函数:get_searchdo_search

  • **get_search**search_agent用来执行搜索的工具。它接收搜索查询和搜索上下文(包括最大结果数),并使用tavily_client检索搜索结果,将其作为字典返回。
  • **do_search**通过创建SearchDataclass的实例(包括当前日期和最大结果数)来准备必要的依赖项。然后,它使用这些依赖项和查询运行search_agent,等待结果。
@search_agent.tool
async def get_search(search_data: RunContext[SearchDataclass], query: str, query_number: int) -> dict[str, Any]:
    """使用Tavily客户端执行搜索。"""
    max_results = search_data.deps.max_results
    results = await tavily_client.get_search_context(query=query, max_results=max_results)
    return results

async def do_search(query: str, max_results: int):
    # 准备依赖项
    current_date = datetime.date.today()
    date_string = current_date.strftime("%Y-%m-%d")
    deps = SearchDataclass(max_results=max_results, todays_date=date_string)
    result = await search_agent.run(query, deps=deps)

让我们设置一个Streamlit应用程序,用户可以在其中输入查询并指定要检索的搜索结果数量。在我们点击按钮以启动搜索后,应用程序获取相关的研究数据(包括标题、主要文章和关键要点)并以组织良好的格式显示。

st.set_page_config(page_title="AI新闻研究员", layout="centered")

st.title("大型语言模型新闻研究员")
st.write("了解大型语言模型的最新趋势和发展。")

st.sidebar.title("搜索参数")
query = st.sidebar.text_input("输入您的查询:", value="最新大型语言模型新闻")
max_results = st.sidebar.slider("搜索结果数量:", min_value=3, max_value=10, value=5)

st.write("使用侧边栏调整搜索参数。")

if st.button("获取最新大型语言模型新闻"):
    with st.spinner("正在研究,请稍候..."):
        result_data = asyncio.run(do_search(query, max_results))

st.markdown(result_data.research_title)

st.markdown(f"<div style='line-height:1.6;'>{result_data.research_main}</div>", unsafe_allow_html=True)

st.markdown("### 关键要点")
st.markdown(result_data.research_bullets)

结论:

Pydantic AI 是一个很棒的库,但有很多方法可以实现相同的功能。我花了很多精力来理解和使用我在这里展示的例子。我希望你能利用这些例子更快、更轻松地熟悉 Pydantic。

无论是构建一个简单的聊天机器人还是一个复杂的系统,Pydantic 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...