Skip to content

Commit fb006ba

Browse files
committed
feat: add remote agent
1 parent 59eaa8e commit fb006ba

File tree

3 files changed

+57
-11
lines changed

3 files changed

+57
-11
lines changed

docs/docs/agent.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,28 @@ Agent中主要包括如下属性:
1515
| knowledgebase | Vector database | 知识库,后端通常为一个向量数据库(Vector database),能够检索 |
1616
| tracers | list | 追踪器列表,能够定义不同的追踪方式,并在Agent执行完毕后对整体Tracing信息保存至本地 |
1717

18+
## A2A智能体
19+
20+
当你的智能体部署到云上后,可以在本地被初始化为一个Remote Agent,也就是能够通过A2A协议来访问的智能体,初始化方法如下:
21+
22+
```python
23+
remote_agent = RemoteVeAgent(
24+
name="a2a_agent",
25+
url="..." # <--- url from cloud platform
26+
)
27+
28+
short_term_memory = ShortTermMemory()
29+
runner = Runner(
30+
agent=remote_agent,
31+
short_term_memory=short_term_memory
32+
)
33+
34+
res = await runner.run(
35+
messages="...",
36+
session_id="sample_session"
37+
)
38+
```
39+
1840
## 运行
1941

2042
在生产环境中,我们推荐您使用`Runner`来进行多租户服务:
@@ -29,6 +51,11 @@ USER_ID = ""
2951
SESSION_ID = ""
3052

3153
agent = Agent()
32-
runner = Runner(agent=agent, short_term_memory=ShortTermMemory())
54+
55+
runner = Runner(
56+
agent=agent,
57+
short_term_memory=ShortTermMemory()
58+
)
59+
3360
response = await runner.run(messages=prompt, session_id=session_id)
3461
```

veadk/a2a/remote_ve_agent.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import json
2+
3+
import requests
4+
from a2a.types import AgentCard
5+
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent
6+
7+
AGENT_CARD_WELL_KNOWN_PATH = "/.well-known/agent-card.json"
8+
9+
10+
class RemoteVeAgent(RemoteA2aAgent):
11+
def __init__(self, name: str, url: str):
12+
agent_card_dict = requests.get(url + AGENT_CARD_WELL_KNOWN_PATH).json()
13+
agent_card_dict["url"] = url
14+
15+
agent_card_json_str = json.dumps(agent_card_dict, ensure_ascii=False, indent=2)
16+
17+
agent_card_object = AgentCard.model_validate_json(str(agent_card_json_str))
18+
19+
super().__init__(
20+
name=name, description="weather reporter", agent_card=agent_card_object
21+
)

veadk/runner.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from google.genai import types
2020
from google.genai.types import Blob
2121

22+
from veadk.a2a.remote_ve_agent import RemoteVeAgent
2223
from veadk.agent import Agent
2324
from veadk.evaluation import EvalSetRecorder
2425
from veadk.memory.short_term_memory import ShortTermMemory
@@ -41,7 +42,7 @@
4142
class Runner:
4243
def __init__(
4344
self,
44-
agent: Agent,
45+
agent: Agent | RemoteVeAgent,
4546
short_term_memory: ShortTermMemory,
4647
app_name: str = "veadk_default_app",
4748
user_id: str = "veadk_default_user",
@@ -56,7 +57,10 @@ def __init__(
5657
self.short_term_memory = short_term_memory
5758
self.session_service = short_term_memory.session_service
5859

59-
self.long_term_memory = self.agent.long_term_memory
60+
if isinstance(self.agent, Agent):
61+
self.long_term_memory = self.agent.long_term_memory
62+
else:
63+
self.long_term_memory = None
6064

6165
# maintain a in-memory runner for fast inference
6266
self.runner = ADKRunner(
@@ -67,13 +71,6 @@ def __init__(
6771
)
6872

6973
def _convert_messages(self, messages) -> list:
70-
# RunnerMessage = Union[
71-
# str, # single turn text-based prompt
72-
# list[str], # multiple turn text-based prompt
73-
# dict, # single turn prompt with media
74-
# list[dict], # multiple turn prompt with media
75-
# list[dict | str], # multiple turn prompt with media and text-based prompt
76-
# ]
7774
if isinstance(messages, str):
7875
messages = [types.Content(role="user", parts=[types.Part(text=messages)])]
7976
elif isinstance(messages, MediaMessage):
@@ -159,7 +156,8 @@ async def run(
159156
final_output = await self._run(session_id, message, stream)
160157

161158
# try to save tracing file
162-
self.save_tracing_file(session_id)
159+
if isinstance(self.agent, Agent):
160+
self.save_tracing_file(session_id)
163161

164162
return final_output
165163

0 commit comments

Comments
 (0)