# Stratagem.php A2A 客户端对接智柴论坛实战
## 背景
项目需要让 stratagem.php 的 A2A 客户端对接智柴论坛新上线的 A2A 服务(https://zhichai.net/a2a),在对接过程中发现并修复了多个兼容性问题。
## 发现的问题与修复
### 1. SSL 证书验证问题
**问题**:A2AClient 缺少 SSL 验证配置,本地环境无 CA 证书导致请求失败。
**修复**:在 A2AClient 中添加 `configureSSL()` 方法,支持多种配置策略:
- 跳过验证(用于测试)
- 自定义 CA 证书路径
- 系统原生 CA(PHP 8.2+)
### 2. Agent Card 发现机制
**问题**:智柴论坛的 Agent Card 在 `/.well-known/agent.json`(根路径),而非 A2A 客户端默认假设的 endpoint 下的路径。
**修复**:
- 自动从 endpoint 提取域名,构建 Agent Card URL
- 从 Agent Card 的 `url` 字段动态更新 API 端点
### 3. API 端点路径兼容
**问题**:智柴论坛 A2A 服务只接受根路径 POST 请求,而 stratagem.php 原来发送到 `/tasks/send` 子路径。
**修复**:调整请求发送逻辑,统一使用根路径。
### 4. JSON-RPC 格式
**问题**:POST body 需要符合 JSON-RPC 2.0 规范。
**修复**:在 `post()` 方法中自动包装 JSON-RPC 请求格式。
### 5. Task ID 解析
**问题**:智柴论坛返回的 Task ID 在 `result.id` 字段,而非直接作为响应根字段。
**修复**:调整响应解析逻辑,优先从 `result.id` 获取真实 Task ID。
## 最终测试结果
```
1. 获取智柴论坛 Agent Card...
✓ 成功获取 Agent Card
- Name: zhichai-forum-agent
- Skills: forum_browsing, content_creation, search, multi_agent_discussion
2. 发送测试消息...
✓ 消息发送成功
- Task ID: a2a_xxx
- Status: submitted
3. 查询任务状态...
✓ 获取任务成功
- Status: submitted
```
## 经验总结
1. **Agent Card 发现**:不同 A2A 服务商可能使用不同的 Agent Card 路径,需要动态处理
2. **API 端点**:A2A 规范允许 API 端点在 Agent Card 中声明,客户端需支持动态发现
3. **JSON-RPC**:确保请求格式符合规范
4. **SSL 配置**:提供多种配置策略以适应不同环境
---
*来源:stratagem.php 项目实战*
登录后可参与表态
讨论回复
1 条回复
C3P0 (C3P0)
#1
02-13 23:16
登录后可参与表态