构建高效ai搜索代理:使用pydanticai和langgraph框架的最佳实践与技巧
- Rifx.Online
- Generative AI , Large Language Models , AI Applications
- 23 Feb, 2025
图片由作者使用 ChatGpt-4o 创建
一个 AI代理 是一个自主软件程序,旨在感知其环境、做出决策并执行任务,以在没有人类干预的情况下实现特定目标。这些代理可以与用户、其他系统或其周围环境进行互动,根据收集到的信息调整其行为。
Pydantic AI 是一个 Python 框架,简化了利用生成性 AI 开发生产级应用的过程。它与 Pydantic(一个数据验证库)无缝集成,以简化 AI 代理的创建和管理,特别是那些由大型语言模型(LLMs)驱动的代理。
LangGraph 是一个旨在构建具有状态的多参与者应用的库,使用大型语言模型(LLMs)。它使开发者能够创建代理和多代理工作流,提供诸如审核、容错可扩展性、持久化上下文和逐令牌流式传输等功能。LangGraph 特别适合需要全面控制代理工作流的应用。
总之,虽然 Pydantic AI 和 LangGraph 都促进了 AI 代理的开发,但 Pydantic AI 专注于将 Pydantic 集成到生成性 AI 应用中,以简化数据验证,而 LangGraph 提供了一个强大的框架,用于构建复杂的、有状态的代理工作流,利用大型语言模型。
让我们来看看一个使用 Pydantic AI 构建的简单代理,该代理利用了搜索工具(Talivy 工具)。Pydantic AI 的一大亮点是其对异步操作的支持,这显著提高了 AI 代理的效率和响应能力。下面提供了代码片段,我们将逐步讲解。首先,确保所有环境变量存储在当前工作目录中的 .env
文件中。一旦在 .env
文件中设置了变量,就可以使用 load_dotenv
函数从 dotenv
库加载它们。以下是 .env
文件可能的样子:
接下来,我们计划在 Jupyter Notebook 中开发这个。然而,由于事件循环冲突,Jupyter Notebook 不允许直接使用 asyncio.run()
。为了解决这个问题,我们使用 nest_asyncio
库。另一个关键步骤是启用对所有代理运行的存储和监控,这被称为 LLM可观察性 的概念。为此,我们使用 logfire。
下一步是定义代理,这很简单。在这里,我们选择 OpenAI 的 GPT-4 模型。deps_type
参数至关重要,因为它指定了用于依赖注入的类型。该参数使我们能够定义代理在其操作过程中可能需要的外部资源或服务的结构,例如数据库连接、API 客户端或配置设置。在这种情况下,我们没有使用它。result_type
设置为 str
,表示代理的输出将是一个字符串。此外,system_prompt
作为代理行为的指导。
然后,使用 Pydantic AI 提供的 @search_agent.tool
装饰器将 talivy_tool
函数注册为 search_agent
的工具。这个装饰器使得该函数可以在代理的操作过程中被利用。Talivy 搜索是一个在线搜索工具,使用时需要 API 密钥。
最后,代理使用用户提供的提示执行。在这种情况下,提示涉及一个非常近期的话题,LLM 可能尚不知晓,这使我们能够观察代理如何利用搜索工具进行响应。下面的示例说明了代理如何激活该工具、收集相关信息并生成全面的最终响应。
Pydantic Logfire — LLM可观察性平台
当上述代理与用户查询一起执行时,Pydantic代理不仅为用户生成响应,还将交互记录到Pydantic Logfire平台上指定的项目中。要利用此功能,我们需要创建一个帐户并设置一个新项目,以便存储和监控代理的日志。下面的截图展示了输出在平台上的显示方式。
在线搜索代理 — LangGraph
以下代码片段演示了如何使用 LangGraph 构建相同的在线搜索代理。如所示,该过程涉及更多步骤来完成代理,但它提供了更大的控制和自定义。与前面的示例类似,代理的响应和其他详细信息可以在 LangSmith 平台上记录和监控。
在没有明确指令的情况下,模型节点根据用户输入自主决定是否需要工具调用。如果模型节点可以独立处理查询,它将跳过工具调用,直接生成最终响应。
使用 FastAPI 和 Docker 容器创建应用程序
要运行此应用程序,请克隆 GitHub 存储库,并按照说明将 .env
文件添加到当前工作目录。确保您的系统上已安装 Docker。
-
使用以下命令构建 Docker 镜像:
docker build -t pydantic-ai-app .
-
使用以下命令运行容器:
docker run -d -p 80:80 pydantic-ai-app
-
要验证容器是否正在运行,请使用:
docker ps
应用程序启动后,通过在您的网络浏览器中导航到 http://0.0.0.0/docs
访问它。
代码概述
FastAPI 是一个现代、高性能的 Python 框架,用于构建 API,具有异步编程、自动验证和自动生成文档的特点,使其非常适合生产级应用。要构建一个 FastAPI 应用,首先创建一个新的 Python 文件(backend/main.py)并定义我们的 FastAPI 应用(app.py)。然后,设置像 /search
或 /healthcheck
这样的端点,以暴露您的 LLM 应用功能。以下是当前工作目录的文件结构。
后端的核心功能如下:
以下是 app.py
的内容
FastAPI 提供了一个直观且用户友好的接口,用于与 API 交互,并且内置了由 Swagger UI 和 ReDoc 提供支持的自动生成文档。
要将此 FastAPI 应用容器化,我们可以利用以下 Dockerfile:
要运行 Docker 容器,请按照以下步骤操作:
- 使用命令构建 Docker 镜像
docker build -t pydantic-ai-app .
- 使用以下命令启动 Docker 容器
docker run -d -p 80:80 pydantic-ai-app
- 最后,通过执行
验证容器是否成功运行。docker ps
如果设置成功,您将看到容器详细信息列出如下:
总之,本文强调了使用 Pydantic AI 和 LangGraph 构建 AI 代理的过程,展示了它们的独特功能和应用。Pydantic AI 通过简化数据验证和集成来简化代理创建,而 LangGraph 提供了构建复杂、有状态工作流的广泛控制。此外,使用 Logfire 和 LangSmith 等工具增强了代理性能的可观察性和监控。通过利用像 FastAPI 和 Docker 这样的框架,这些代理可以高效地部署,确保在生产环境中的可扩展性和稳健性。