首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用 A2A 协议+远程代理 创建报销单

今天演示下 A2A 框架如何实现远程代理,让 AI 帮我们做报销单。

回顾下 A2A 的架构,核心的三部分,用户、客户端、远程代理,后面程序分别有 客户端和远程代理的实现。

首先下载代码:

git clone https://github.com/google/A2A/

cd A2A

里面提供了很多框架集成 A2A 的示例:

• Agent Development Kit (ADK)

• CrewAI

• Enterprise Data Agent (Gemini + Mindsdb)

• LangGraph

• Genkit

• LlamaIndex

• Marvin

• Semantic Kernel

• AG2 + MCP

运行客户端

我们先运行客户端 ui 程序,客户端可以认为是我们的主代理,同时负责与用户进行交互。

cd demo/ui

echo "GOOGLE_API_KEY=your_api_key_here" >> .env

uv run main.py

新建一个聊天,输入hello,测试一下,

提示当前没有任何的远程代理。

运行远程代理

我们现在启动一个 google_adk 的远程代理示例:

cd ../../samples/agents/google_adk/

cp ../../../../demo/ui/.env ./

uv run .

输入如下

INFO:     Started server process [89962]

INFO:     Waiting for application startup.

INFO:     Application startup complete.

INFO:     Uvicorn running on http://localhost:10002 (Press CTRL+C to quit)添加远程代理

我们打开 Agents 页面,然后点击添加:

弹窗里输入我们看到的地址localhost:10002,然后点击读取:

可以看到这个代理的信息:

点击保存就能看到我们添加的 远程代理 了:

这是一个报销代理,为了方便,我们把页面翻译成中文:

用户提交报销任务

然后再新建一个聊天,大模型是理解中文的,我们直接用中文问,「你当前有那些代理」:

新建一个聊天,让 AI 帮我们做一个报销单、

输入报销去北京出差费用 2000, 日期 : 2024-12-12

客户端检测到代理:报销代理,然后根据你当前的信息自动填写表单,返回给你,

这里我们确认无误不需要修改直接提交,

经过短暂的处理,报销申请审批通过了。(只要报销存在,报销代理会自动审批报销单)

事件驱动

我们下面分析一下整个过程中有哪些事件,点击事件菜单:

我们关注下ActorRole和内容三列:

任务列表

最后看一下任务列表,点击任务列表菜单、

目前只有一个报销任务提交给了报销代理。

实现远程代理

下面简单讲一下如何使用 Python 实现一个远程代理。

首先定义一个远程代理类:

class ReimbursementAgent(AgentWithTaskManager):

  """An agent that handles reimbursement requests."""

  SUPPORTED_CONTENT_TYPES = ['text', 'text/plain']

  def__init__(self):

      self._agent = self._build_agent()

      self._user_id = 'remote_agent'

      self._runner = Runner(

          app_name=self._agent.name,

          agent=self._agent,

          artifact_service=InMemoryArtifactService(),

          session_service=InMemorySessionService(),

          memory_service=InMemoryMemoryService(),

      )

然后实现_build_agent方法、

  def _build_agent(self) -> LlmAgent:

      """Builds the LLM agent for the reimbursement agent."""

      return LlmAgent(

          model='gemini-2.0-flash-001',

          name='reimbursement_agent',

          description=('代理的简短介绍'),

          instruction="""代理的提示词,什么情况下使用哪个提示词""",

          tools=[ # 工具列表

              create_request_form,

              reimburse,

              return_form,

          ],

      )

提示词参考:

您是负责处理员工报销流程的代理。

收到报销申请后,首先应使用 create_request_form() 创建一个新的申请表单。仅在用户提供默认值的情况下才提供默认值,否则请使用空字符串作为默认值。

1. “日期”:交易日期。

2. “金额”:交易金额。

3. “业务理由/目的”:报销原因。

创建表单后,应返回调用 return_form 的结果,其中包含 create_request_form 调用中的表单数据。

收到用户填写完毕的表单后,应检查表单是否包含所有必需信息:

1. “日期”:交易日期。

2. “金额”:申请报销的金额。

3. “业务理由/目的”:报销的项目/对象/工件。

如果您没有掌握所有信息,则应直接通过调用 request_form 方法拒绝该请求,并提供缺少的字段。

对于有效的报销申请,您可以使用 reimburse() 为员工报销。

* 在您的回复中,您应该包含 request_id 和报销申请的状态。

代理定义了 三个方法:

• create_request_form,

• reimburse,

• return_form,

实际业务中可以自己构建表单和填写业务逻辑。一般表单都是 agent 返回 Schema 然后再 客户端渲染,Schema 的格式约定好即可。

代码

最后再重复下, A2A 的官方代码库: https://github.com/google/A2A/[1],有兴趣的可以自己运行,或者根据代码库样例集成自己的业务。

页面使用了 Google 自己的 Python Web UI 框架,整体看起来还行,不过有时候反应比较慢,大家运行的时候注意卡的话耐心等待。

引用链接

[1]:https://github.com/google/A2A/

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O-wt8zOlhJ2oybA3OvPXXtNw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券