07_artifacts_server.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from python_a2a import A2AServer, run_server, AgentCard, AgentSkill, TaskStatus, TaskState
  2. # 定义代理卡片
  3. ticket_card = AgentCard(
  4. name="TicketAgentServer",
  5. description="票务代理",
  6. url="http://127.0.0.1:5010",
  7. skills=[AgentSkill(name="book_ticket", description="预订票务")]
  8. )
  9. # 自定义 A2AServer 子类
  10. class TicketServer(A2AServer):
  11. def __init__(self):
  12. super().__init__(agent_card=ticket_card)
  13. def handle_task(self, task):
  14. print("收到A2A任务的task:=>", task)
  15. #默认写法:获取任务内容
  16. query = (task.message or {}).get("content", {}).get("text", "")
  17. if "上海" in query and "北京" in query:
  18. # 这里的结果可以来自于 MCP 模块,这里我们直接模拟结果
  19. # 本例只演示北京、上海两座城市,按请求中的先后顺序确定方向。
  20. if query.index("北京") < query.index("上海"):
  21. route = "北京到上海"
  22. else:
  23. route = "上海到北京"
  24. train_result = f"模拟预订成功:{route},G1001,10车1A(不生成真实订单)"
  25. else:
  26. train_result = "请输入明确的出发地和目的地。"
  27. task.artifacts = [{"parts": [{"type": "text", "text": train_result}]}]
  28. if "上海" in query and "北京" in query:
  29. task.status = TaskStatus(state=TaskState.COMPLETED)
  30. else:
  31. task.status = TaskStatus(state=TaskState.INPUT_REQUIRED)
  32. print(f"[{self.agent_card.name} 日志] 任务处理完毕")
  33. print(f"[{self.agent_card.name} 日志] 输出结果task: {task}")
  34. print(f"[{self.agent_card.name} 日志] 输出结果task.artifacts: {task.artifacts}")
  35. return task
  36. # 启动服务器
  37. if __name__ == "__main__":
  38. server = TicketServer()
  39. print(f"[{server.agent_card.name}] 启动成功,服务地址: {server.agent_card.url}")
  40. run_server(server, host="127.0.0.1", port=5010, debug=False)