大数跨境
0
0

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

使用 A2A 协议+远程代理 创建报销单 数翼
2025-05-08
1
导读:今天演示下 A2A 框架如何实现远程代理,让 AI 帮我们做报销单。
今天演示下 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

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

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

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

事件驱动

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

我们关注下Actor Role 和 内容 三列:

任务列表

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

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

实现远程代理

下面简单讲一下如何使用 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/


【声明】内容源于网络
0
0
数翼
专注 AIGC 人工智能知识传播和实践
内容 228
粉丝 0
数翼 专注 AIGC 人工智能知识传播和实践
总阅读124
粉丝0
内容228