
源代码
项目概述
本项目展示了一个使用 A2A(智能体到智能体)框架构建的综合性电影信息智能体。该智能体利用 TMDB(电影数据库)API 提供详细的电影信息、搜索功能,并通过 OpenRouter 集成实现 AI 驱动的对话能力。
主要特性
- 增强的 TMDB API 集成:使用 Bearer token 认证的现代化实现
- 全面的电影搜索:支持年份、成人内容等过滤器的电影搜索
- 多重搜索能力:同时搜索电影、电视剧和人物
- AI 驱动的对话:利用 OpenRouter API 进行智能电影查询
- 代理支持:内置 SOCKS5/HTTP 代理支持网络请求
- A2A 框架:实现智能体到智能体通信协议
- CLI 界面:用于测试的交互式命令行界面
- Express 服务器:用于智能体通信的 RESTful API 端点
项目架构
项目采用模块化架构,具有清晰的关注点分离:
src/
├── index.ts # 主服务器入口点
├── cli.ts # 命令行界面
├── config/
│ └── env.ts # 环境配置
└── movie-agent/
├── index.ts # 核心智能体执行器
├── tools.ts # TMDB API 工具
├── tmdb.ts # TMDB API 客户端
└── openai.ts # OpenRouter 集成
分步设置和运行
1. 前置条件
- Node.js(v18 或更高版本)
- Bun 包管理器
- TMDB API 账户
- OpenRouter API 账户
2. 安装依赖
# 克隆仓库
git clone https://github.com/sing1ee/a2a-js-movie-agent.git
cd a2a-js-movie-agent
# 使用 Bun 安装依赖
bun install
3. 环境配置
在项目根目录创建 .env 文件:
# TMDB API 密钥(Bearer token)
TMDB_API_TOKEN=your_tmdb_api_token_here
# OpenRouter API 密钥用于 AI 功能
OPENROUTER_API_KEY=your_openrouter_api_key_here
# 代理配置(可选)
USE_PROXY=true
PROXY_URL=socks5://127.0.0.1:7890
# 服务器配置
NODE_ENV=development
PORT=3000
4. 运行智能体服务器
# 启动开发服务器
bun dev
# 或构建并在生产环境中运行
bun run build
bun start
服务器将在 http://localhost:3000(或您在 .env 文件中指定的端口)上启动。
5. 使用 CLI 界面测试
# 运行交互式 CLI
bun cli
# 或指定自定义服务器 URL
bun cli http://localhost:3000
6. 访问智能体信息
服务器运行后,您可以访问:
- 智能体卡片:
http://localhost:3000/.well-known/agent.json - API 文档:通过 A2A 框架端点提供
项目逻辑说明
核心组件
- MovieAgentExecutor:处理用户查询的主要智能体逻辑
- TMDB 工具:用于电影数据检索的五个专用工具
- OpenAI 集成:通过 OpenRouter 处理 AI 驱动的对话
- A2A 框架:管理智能体通信协议
可用工具
智能体提供五个主要的电影信息工具:
- searchMovies:带有可选过滤器(年份、成人内容)的基本电影搜索
- searchPeople:搜索演员、导演和其他电影行业人士
- getMovieDetails:检索特定电影的详细信息
- searchMoviesWithDetails:在一次调用中结合搜索和详情(推荐)
- multiSearch:同时搜索所有内容类型(电影、电视剧、人物)
工作流程
智能体遵循以下一般工作流程:
- 请求处理:通过 A2A 框架接收用户查询
- 上下文管理:维护对话历史和上下文
- AI 分析:使用 OpenRouter 理解用户意图
- 工具执行:根据查询调用适当的 TMDB 工具
- 响应生成:格式化并返回全面的电影信息
- 状态管理:跟踪任务状态并提供实时更新
Mermaid 序列图
sequenceDiagram
participant U as 用户
participant CLI as CLI 客户端
participant A as A2A 服务器
participant MA as 电影智能体
participant AI as OpenRouter API
participant TMDB as TMDB API
U->>CLI: 输入电影查询
CLI->>A: 通过 A2A 协议发送消息
A->>MA: 执行任务
MA->>A: 发布"工作中"状态
A->>CLI: 流式状态更新
CLI->>U: 显示"处理中..."消息
MA->>AI: 发送带有可用工具的查询
AI->>MA: 响应工具调用
MA->>TMDB: 执行工具调用(searchMovies、getMovieDetails 等)
TMDB->>MA: 返回电影数据
MA->>AI: 发送工具结果
AI->>MA: 生成最终响应
MA->>A: 发布"已完成"状态和响应
A->>CLI: 流式最终响应
CLI->>U: 显示电影信息
Note over MA,TMDB: 可用工具:<br/>- searchMovies<br/>- searchPeople<br/>- getMovieDetails<br/>- searchMoviesWithDetails<br/>- multiSearch
技术亮点
AI 驱动的智能
智能体使用 OpenRouter 提供智能响应,根据用户查询自动确定使用哪些工具。它可以通过组合多个工具调用来处理复杂请求,如"查找 2023 年汤姆·克鲁斯主演的动作电影"。
增强的 TMDB 集成
与基本的 TMDB 实现不同,此智能体:
- 使用现代 Bearer token 认证
- 实现"追加到响应"以提高 API 使用效率
- 自动生成完整的图像 URL
- 提供全面的错误处理
A2A 协议合规性
智能体完全实现 A2A(智能体到智能体)协议,支持:
- 通过智能体卡片进行标准化智能体发现
- 处理过程中的实时状态更新
- 适当的任务生命周期管理
- 更好用户体验的流式响应
代理支持
内置代理支持确保智能体可以在受限网络环境中工作,支持:
- SOCKS5 代理
- HTTP/HTTPS 代理
- 可配置的代理设置
使用示例
基本电影搜索
用户:"告诉我关于电影《盗梦空间》的信息"
智能体:[搜索《盗梦空间》,检索详情、演员和剧情]
复杂查询
用户:"找到 2020 年克里斯托弗·诺兰导演的科幻电影"
智能体:[使用多个工具搜索和过滤结果]
演员信息
用户:"莱昂纳多·迪卡普里奥最近演了哪些电影?"
智能体:[搜索演员并列出最近的电影作品]
开发和部署
项目包含全面的开发工具:
- TypeScript:整个代码库的完整类型安全
- ESLint & Prettier:代码质量和格式化
- Bun:快速包管理和执行
- 模块化架构:易于扩展和维护
结论
这个 A2A JS 电影智能体展示了智能体到智能体框架的复杂实现,结合现代 Web 技术和 AI 能力创建了一个强大的电影信息系统。该项目是如何构建能够与外部 API 交互并为用户查询提供丰富、上下文相关响应的智能对话智能体的优秀示例。
模块化设计、全面的错误处理和对 A2A 协议的遵循使该项目既适合学习目的,也适合生产部署场景。
Related Articles
Explore more content related to this topic
A2A + CrewAI + OpenRouter Chart Generation Agent Tutorial
Complete tutorial for building an intelligent chart generation agent using OpenRouter, CrewAI, and A2A protocol. Master end-to-end agent development, image data handling, and A2A Inspector debugging skills with full workflow guidance from setup to deployment.
A2A JS SDK Complete Tutorial: Quick Start Guide
A2A Protocol JavaScript/TypeScript implementation guide. Features TypeScript type safety, Express.js server SDK, streaming processing, and intelligent agent development best practices.
A2A Sample: Travel Planner OpenRouter
A2A implementation of Travel Planner with OpenRouter and Python a2a-sdk
LlamaIndex File Chat Workflow with A2A Protocol
A comprehensive guide for building file chat agents using LlamaIndex Workflows and A2A Protocol. Includes detailed implementation of file upload and parsing, multi-turn conversations, real-time streaming, inline citations, LlamaParse and OpenRouter integration, and webhook notification systems. Perfect for developers looking to build advanced conversational AI agent services.
Implementing CurrencyAgent with A2A Python SDK
A step-by-step guide to building a currency conversion agent with A2A Python SDK. Features detailed implementation of CurrencyAgent, AgentExecutor, and AgentServer components, complete with environment setup, testing, and deployment instructions. Perfect for developers looking to create AI-powered currency conversion services.