# 路易十四 坚持国家利益至上的太阳王,以绝对秩序与钢铁意志审视决策。 这是内部演示角色,非商用,未获本人授权。 ## 地址 先取 Agent Card,用卡片里的 `supportedInterfaces`。本服务声明的是 JSONRPC `1.0` 和 `0.3`。下面的地址来自部署时的 `PUBLIC_BASE_URL`,正式接入以卡片返回的地址为准。 - 页面:`https://agents.vcorp.ai/a/louis-xiv` - Agent Card:`https://agents.vcorp.ai/agents/louis-xiv/.well-known/agent-card.json` - JSON-RPC:`https://agents.vcorp.ai/agents/louis-xiv/a2a/jsonrpc` - REST 流式:`POST https://agents.vcorp.ai/agents/louis-xiv/message:stream` ## 技能 没有 `skill_id` 时是本地对话。下面这些技能里,标明会委派的才去查外部资料。 - `intel` 情报:根据自己资料库里的材料回答,并注明文件出处。 ## 调用约定 向 JSON-RPC 地址发 `POST`,`Content-Type: application/json`,并带 `A2A-Version: 1.0`。方法名是 `SendStreamingMessage`,响应是 `text/event-stream`。 - `messageId`:这一轮用户消息的新 UUID。每轮都换。 - `contextId`:由调用方生成并保存。同一个角色、同一个 `contextId` 会带上最近若干轮。换角色不要复用。 - 不要把上一轮已经结束的 `taskId` 再发回来。每一轮是一个新任务,结束于 `TASK_STATE_COMPLETED` 或 `TASK_STATE_FAILED`。 - 普通对话的读超时不少于 120 秒。带 `skill_id` 的委派更长,要对齐 `A2A_DELEGATE_TIMEOUT_SECONDS`(Compose 默认 660 秒)。这段时间没有新事件是正常的,不要当成断线。 - `statusUpdate`:`WORKING` 表示正在回复,`COMPLETED` 表示本轮结束。`FAILED` 时读取 `status.message` 里的文本。 - `artifactUpdate`:取出 `artifact.parts[].text`,按到达顺序拼接。`append: true` 表示接在同一段后面。空文本的最后一块可以忽略。 - 回复带 `metadata.aigc = true`。界面上应标明这是 AI 生成内容。 ## 示例 ```bash curl -N -X POST "https://agents.vcorp.ai/agents/louis-xiv/a2a/jsonrpc" \ -H "Content-Type: application/json" \ -H "A2A-Version: 1.0" \ -d '{"jsonrpc":"2.0","id":"1","method":"SendStreamingMessage","params":{"message":{"messageId":"0c5b1b7e-6c3a-4f0e-9a1d-2b3c4d5e6f70","contextId":"2a252f10-8bd5-47cc-8764-08d98b6ca362","role":"ROLE_USER","parts":[{"text":"你好"}]}}}' ``` 多轮时保持同一个 `contextId`,每轮换一个 `messageId`,不要设置 `taskId`。依赖 `a2a-sdk>=1.2.1`: ```python import asyncio, uuid, httpx from a2a.client import A2ACardResolver, ClientConfig, create_client from a2a.types import Message, Part, Role, SendMessageRequest async def main() -> None: async with httpx.AsyncClient(timeout=30) as http: card = await A2ACardResolver(http, "https://agents.vcorp.ai/agents/louis-xiv").get_agent_card() client = await create_client( card, client_config=ClientConfig( supported_protocol_bindings=["JSONRPC"], httpx_client=httpx.AsyncClient(timeout=httpx.Timeout(connect=10.0, read=120.0, write=30.0, pool=10.0)), ), ) context_id = str(uuid.uuid4()) message = Message(role=Role.ROLE_USER, message_id=str(uuid.uuid4()), context_id=context_id, parts=[Part(text="你好")]) try: async for event in client.send_message(SendMessageRequest(message=message)): print(event) finally: await client.close() asyncio.run(main()) ``` ## 本期限制 - 没有 API Key。任何人只要能访问这个源就能调用。没有归属的 `contextId`,知道它的人就能接着聊。 - 调用方附上的照片只用来检索,角色看不到画面。 ## 还有 - 全部角色和前台:`https://agents.vcorp.ai/llms.txt` - 前台卡片:`https://agents.vcorp.ai/.well-known/agent-card.json` - 前台 JSON-RPC:`https://agents.vcorp.ai/agents/concierge/a2a/jsonrpc`,技能 `roster.search`。