Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion docs/docs/agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,28 @@ Agent中主要包括如下属性:
| knowledgebase | Vector database | 知识库,后端通常为一个向量数据库(Vector database),能够检索 |
| tracers | list | 追踪器列表,能够定义不同的追踪方式,并在Agent执行完毕后对整体Tracing信息保存至本地 |

## A2A智能体

当你的智能体部署到云上后,可以在本地被初始化为一个Remote Agent,也就是能够通过A2A协议来访问的智能体,初始化方法如下:

```python
remote_agent = RemoteVeAgent(
name="a2a_agent",
url="..." # <--- url from cloud platform
)

short_term_memory = ShortTermMemory()
runner = Runner(
agent=remote_agent,
short_term_memory=short_term_memory
)

res = await runner.run(
messages="...",
session_id="sample_session"
)
```

## 运行

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

agent = Agent()
runner = Runner(agent=agent, short_term_memory=ShortTermMemory())

runner = Runner(
agent=agent,
short_term_memory=ShortTermMemory()
)

response = await runner.run(messages=prompt, session_id=session_id)
```
21 changes: 21 additions & 0 deletions veadk/a2a/remote_ve_agent.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import json

import requests
from a2a.types import AgentCard
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent

AGENT_CARD_WELL_KNOWN_PATH = "/.well-known/agent-card.json"


class RemoteVeAgent(RemoteA2aAgent):
def __init__(self, name: str, url: str):
agent_card_dict = requests.get(url + AGENT_CARD_WELL_KNOWN_PATH).json()
agent_card_dict["url"] = url

agent_card_json_str = json.dumps(agent_card_dict, ensure_ascii=False, indent=2)

agent_card_object = AgentCard.model_validate_json(str(agent_card_json_str))

super().__init__(
name=name, description="weather reporter", agent_card=agent_card_object
)
18 changes: 8 additions & 10 deletions veadk/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from google.genai import types
from google.genai.types import Blob

from veadk.a2a.remote_ve_agent import RemoteVeAgent
from veadk.agent import Agent
from veadk.evaluation import EvalSetRecorder
from veadk.memory.short_term_memory import ShortTermMemory
Expand All @@ -41,7 +42,7 @@
class Runner:
def __init__(
self,
agent: Agent,
agent: Agent | RemoteVeAgent,
short_term_memory: ShortTermMemory,
app_name: str = "veadk_default_app",
user_id: str = "veadk_default_user",
Expand All @@ -56,7 +57,10 @@ def __init__(
self.short_term_memory = short_term_memory
self.session_service = short_term_memory.session_service

self.long_term_memory = self.agent.long_term_memory
if isinstance(self.agent, Agent):
self.long_term_memory = self.agent.long_term_memory
else:
self.long_term_memory = None

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

def _convert_messages(self, messages) -> list:
# RunnerMessage = Union[
# str, # single turn text-based prompt
# list[str], # multiple turn text-based prompt
# dict, # single turn prompt with media
# list[dict], # multiple turn prompt with media
# list[dict | str], # multiple turn prompt with media and text-based prompt
# ]
if isinstance(messages, str):
messages = [types.Content(role="user", parts=[types.Part(text=messages)])]
elif isinstance(messages, MediaMessage):
Expand Down Expand Up @@ -159,7 +156,8 @@ async def run(
final_output = await self._run(session_id, message, stream)

# try to save tracing file
self.save_tracing_file(session_id)
if isinstance(self.agent, Agent):
self.save_tracing_file(session_id)

return final_output

Expand Down