mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-05-01 23:32:39 +00:00
chore: a2a agent card docs, refine existing a2a docs
This commit is contained in:
@@ -1,43 +1,48 @@
|
|||||||
---
|
---
|
||||||
title: Agent-to-Agent (A2A) Protocol
|
title: Agent-to-Agent (A2A) Protocol
|
||||||
description: Enable CrewAI agents to delegate tasks to remote A2A-compliant agents for specialized handling
|
description: Agents delegate tasks to remote A2A agents and/or operate as A2A-compliant server agents.
|
||||||
icon: network-wired
|
icon: network-wired
|
||||||
mode: "wide"
|
mode: "wide"
|
||||||
---
|
---
|
||||||
|
|
||||||
## A2A Agent Delegation
|
## A2A Agent Delegation
|
||||||
|
|
||||||
CrewAI supports the Agent-to-Agent (A2A) protocol, allowing agents to delegate tasks to remote specialized agents. The agent's LLM automatically decides whether to handle a task directly or delegate to an A2A agent based on the task requirements.
|
CrewAI treats [A2A protocol](https://a2a-protocol.org/latest/) as a first-class delegation primitive, enabling agents to delegate tasks, request information, and collaborate with remote agents, as well as act as A2A-compliant server agents.
|
||||||
|
In client mode, agents autonomously choose between local execution and remote delegation based on task requirements.
|
||||||
<Note>
|
|
||||||
A2A delegation requires the `a2a-sdk` package. Install with: `uv add 'crewai[a2a]'` or `pip install 'crewai[a2a]'`
|
|
||||||
</Note>
|
|
||||||
|
|
||||||
## How It Works
|
## How It Works
|
||||||
|
|
||||||
When an agent is configured with A2A capabilities:
|
When an agent is configured with A2A capabilities:
|
||||||
|
|
||||||
1. The LLM analyzes each task
|
1. The Agent analyzes each task
|
||||||
2. It decides to either:
|
2. It decides to either:
|
||||||
- Handle the task directly using its own capabilities
|
- Handle the task directly using its own capabilities
|
||||||
- Delegate to a remote A2A agent for specialized handling
|
- Delegate to a remote A2A agent for specialized handling
|
||||||
3. If delegating, the agent communicates with the remote A2A agent through the protocol
|
3. If delegating, the agent communicates with the remote A2A agent through the protocol
|
||||||
4. Results are returned to the CrewAI workflow
|
4. Results are returned to the CrewAI workflow
|
||||||
|
|
||||||
|
<Note>
|
||||||
|
A2A delegation requires the `a2a-sdk` package. Install with: `uv add 'crewai[a2a]'` or `pip install 'crewai[a2a]'`
|
||||||
|
</Note>
|
||||||
|
|
||||||
## Basic Configuration
|
## Basic Configuration
|
||||||
|
|
||||||
|
<Warning>
|
||||||
|
`crewai.a2a.config.A2AConfig` is deprecated and will be removed in v2.0.0. Use `A2AClientConfig` for connecting to remote agents and/or `A2AServerConfig` for exposing agents as servers.
|
||||||
|
</Warning>
|
||||||
|
|
||||||
Configure an agent for A2A delegation by setting the `a2a` parameter:
|
Configure an agent for A2A delegation by setting the `a2a` parameter:
|
||||||
|
|
||||||
```python Code
|
```python Code
|
||||||
from crewai import Agent, Crew, Task
|
from crewai import Agent, Crew, Task
|
||||||
from crewai.a2a import A2AConfig
|
from crewai.a2a import A2AClientConfig
|
||||||
|
|
||||||
agent = Agent(
|
agent = Agent(
|
||||||
role="Research Coordinator",
|
role="Research Coordinator",
|
||||||
goal="Coordinate research tasks efficiently",
|
goal="Coordinate research tasks efficiently",
|
||||||
backstory="Expert at delegating to specialized research agents",
|
backstory="Expert at delegating to specialized research agents",
|
||||||
llm="gpt-4o",
|
llm="gpt-4o",
|
||||||
a2a=A2AConfig(
|
a2a=A2AClientConfig(
|
||||||
endpoint="https://example.com/.well-known/agent-card.json",
|
endpoint="https://example.com/.well-known/agent-card.json",
|
||||||
timeout=120,
|
timeout=120,
|
||||||
max_turns=10
|
max_turns=10
|
||||||
@@ -54,9 +59,9 @@ crew = Crew(agents=[agent], tasks=[task], verbose=True)
|
|||||||
result = crew.kickoff()
|
result = crew.kickoff()
|
||||||
```
|
```
|
||||||
|
|
||||||
## Configuration Options
|
## Client Configuration Options
|
||||||
|
|
||||||
The `A2AConfig` class accepts the following parameters:
|
The `A2AClientConfig` class accepts the following parameters:
|
||||||
|
|
||||||
<ParamField path="endpoint" type="str" required>
|
<ParamField path="endpoint" type="str" required>
|
||||||
The A2A agent endpoint URL (typically points to `.well-known/agent-card.json`)
|
The A2A agent endpoint URL (typically points to `.well-known/agent-card.json`)
|
||||||
@@ -95,14 +100,30 @@ The `A2AConfig` class accepts the following parameters:
|
|||||||
Transport protocol for A2A communication. Options: `JSONRPC` (default), `GRPC`, or `HTTP+JSON`.
|
Transport protocol for A2A communication. Options: `JSONRPC` (default), `GRPC`, or `HTTP+JSON`.
|
||||||
</ParamField>
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="accepted_output_modes" type="list[str]" default='["application/json"]'>
|
||||||
|
Media types the client can accept in responses.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="supported_transports" type="list[str]" default='["JSONRPC"]'>
|
||||||
|
Ordered list of transport protocols the client supports.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="use_client_preference" type="bool" default="False">
|
||||||
|
Whether to prioritize client transport preferences over server.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="extensions" type="list[str]" default="[]">
|
||||||
|
Extension URIs the client supports.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
|
|
||||||
For A2A agents that require authentication, use one of the provided auth schemes:
|
For A2A agents that require authentication, use one of the provided auth schemes:
|
||||||
|
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<Tab title="Bearer Token">
|
<Tab title="Bearer Token">
|
||||||
```python Code
|
```python bearer_token_auth.py lines
|
||||||
from crewai.a2a import A2AConfig
|
from crewai.a2a import A2AClientConfig
|
||||||
from crewai.a2a.auth import BearerTokenAuth
|
from crewai.a2a.auth import BearerTokenAuth
|
||||||
|
|
||||||
agent = Agent(
|
agent = Agent(
|
||||||
@@ -110,18 +131,18 @@ agent = Agent(
|
|||||||
goal="Coordinate tasks with secured agents",
|
goal="Coordinate tasks with secured agents",
|
||||||
backstory="Manages secure agent communications",
|
backstory="Manages secure agent communications",
|
||||||
llm="gpt-4o",
|
llm="gpt-4o",
|
||||||
a2a=A2AConfig(
|
a2a=A2AClientConfig(
|
||||||
endpoint="https://secure-agent.example.com/.well-known/agent-card.json",
|
endpoint="https://secure-agent.example.com/.well-known/agent-card.json",
|
||||||
auth=BearerTokenAuth(token="your-bearer-token"),
|
auth=BearerTokenAuth(token="your-bearer-token"),
|
||||||
timeout=120
|
timeout=120
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
</Tab>
|
</Tab>
|
||||||
|
|
||||||
<Tab title="API Key">
|
<Tab title="API Key">
|
||||||
```python Code
|
```python api_key_auth.py lines
|
||||||
from crewai.a2a import A2AConfig
|
from crewai.a2a import A2AClientConfig
|
||||||
from crewai.a2a.auth import APIKeyAuth
|
from crewai.a2a.auth import APIKeyAuth
|
||||||
|
|
||||||
agent = Agent(
|
agent = Agent(
|
||||||
@@ -129,7 +150,7 @@ agent = Agent(
|
|||||||
goal="Coordinate with API-based agents",
|
goal="Coordinate with API-based agents",
|
||||||
backstory="Manages API-authenticated communications",
|
backstory="Manages API-authenticated communications",
|
||||||
llm="gpt-4o",
|
llm="gpt-4o",
|
||||||
a2a=A2AConfig(
|
a2a=A2AClientConfig(
|
||||||
endpoint="https://api-agent.example.com/.well-known/agent-card.json",
|
endpoint="https://api-agent.example.com/.well-known/agent-card.json",
|
||||||
auth=APIKeyAuth(
|
auth=APIKeyAuth(
|
||||||
api_key="your-api-key",
|
api_key="your-api-key",
|
||||||
@@ -139,12 +160,12 @@ agent = Agent(
|
|||||||
timeout=120
|
timeout=120
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
</Tab>
|
</Tab>
|
||||||
|
|
||||||
<Tab title="OAuth2">
|
<Tab title="OAuth2">
|
||||||
```python Code
|
```python oauth2_auth.py lines
|
||||||
from crewai.a2a import A2AConfig
|
from crewai.a2a import A2AClientConfig
|
||||||
from crewai.a2a.auth import OAuth2ClientCredentials
|
from crewai.a2a.auth import OAuth2ClientCredentials
|
||||||
|
|
||||||
agent = Agent(
|
agent = Agent(
|
||||||
@@ -152,7 +173,7 @@ agent = Agent(
|
|||||||
goal="Coordinate with OAuth-secured agents",
|
goal="Coordinate with OAuth-secured agents",
|
||||||
backstory="Manages OAuth-authenticated communications",
|
backstory="Manages OAuth-authenticated communications",
|
||||||
llm="gpt-4o",
|
llm="gpt-4o",
|
||||||
a2a=A2AConfig(
|
a2a=A2AClientConfig(
|
||||||
endpoint="https://oauth-agent.example.com/.well-known/agent-card.json",
|
endpoint="https://oauth-agent.example.com/.well-known/agent-card.json",
|
||||||
auth=OAuth2ClientCredentials(
|
auth=OAuth2ClientCredentials(
|
||||||
token_url="https://auth.example.com/oauth/token",
|
token_url="https://auth.example.com/oauth/token",
|
||||||
@@ -163,12 +184,12 @@ agent = Agent(
|
|||||||
timeout=120
|
timeout=120
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
</Tab>
|
</Tab>
|
||||||
|
|
||||||
<Tab title="HTTP Basic">
|
<Tab title="HTTP Basic">
|
||||||
```python Code
|
```python http_basic_auth.py lines
|
||||||
from crewai.a2a import A2AConfig
|
from crewai.a2a import A2AClientConfig
|
||||||
from crewai.a2a.auth import HTTPBasicAuth
|
from crewai.a2a.auth import HTTPBasicAuth
|
||||||
|
|
||||||
agent = Agent(
|
agent = Agent(
|
||||||
@@ -176,7 +197,7 @@ agent = Agent(
|
|||||||
goal="Coordinate with basic auth agents",
|
goal="Coordinate with basic auth agents",
|
||||||
backstory="Manages basic authentication communications",
|
backstory="Manages basic authentication communications",
|
||||||
llm="gpt-4o",
|
llm="gpt-4o",
|
||||||
a2a=A2AConfig(
|
a2a=A2AClientConfig(
|
||||||
endpoint="https://basic-agent.example.com/.well-known/agent-card.json",
|
endpoint="https://basic-agent.example.com/.well-known/agent-card.json",
|
||||||
auth=HTTPBasicAuth(
|
auth=HTTPBasicAuth(
|
||||||
username="your-username",
|
username="your-username",
|
||||||
@@ -185,7 +206,7 @@ agent = Agent(
|
|||||||
timeout=120
|
timeout=120
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
@@ -194,7 +215,7 @@ agent = Agent(
|
|||||||
Configure multiple A2A agents for delegation by passing a list:
|
Configure multiple A2A agents for delegation by passing a list:
|
||||||
|
|
||||||
```python Code
|
```python Code
|
||||||
from crewai.a2a import A2AConfig
|
from crewai.a2a import A2AClientConfig
|
||||||
from crewai.a2a.auth import BearerTokenAuth
|
from crewai.a2a.auth import BearerTokenAuth
|
||||||
|
|
||||||
agent = Agent(
|
agent = Agent(
|
||||||
@@ -203,11 +224,11 @@ agent = Agent(
|
|||||||
backstory="Expert at delegating to the right specialist",
|
backstory="Expert at delegating to the right specialist",
|
||||||
llm="gpt-4o",
|
llm="gpt-4o",
|
||||||
a2a=[
|
a2a=[
|
||||||
A2AConfig(
|
A2AClientConfig(
|
||||||
endpoint="https://research.example.com/.well-known/agent-card.json",
|
endpoint="https://research.example.com/.well-known/agent-card.json",
|
||||||
timeout=120
|
timeout=120
|
||||||
),
|
),
|
||||||
A2AConfig(
|
A2AClientConfig(
|
||||||
endpoint="https://data.example.com/.well-known/agent-card.json",
|
endpoint="https://data.example.com/.well-known/agent-card.json",
|
||||||
auth=BearerTokenAuth(token="data-token"),
|
auth=BearerTokenAuth(token="data-token"),
|
||||||
timeout=90
|
timeout=90
|
||||||
@@ -223,7 +244,7 @@ The LLM will automatically choose which A2A agent to delegate to based on the ta
|
|||||||
Control how agent connection failures are handled using the `fail_fast` parameter:
|
Control how agent connection failures are handled using the `fail_fast` parameter:
|
||||||
|
|
||||||
```python Code
|
```python Code
|
||||||
from crewai.a2a import A2AConfig
|
from crewai.a2a import A2AClientConfig
|
||||||
|
|
||||||
# Fail immediately on connection errors (default)
|
# Fail immediately on connection errors (default)
|
||||||
agent = Agent(
|
agent = Agent(
|
||||||
@@ -231,7 +252,7 @@ agent = Agent(
|
|||||||
goal="Coordinate research tasks",
|
goal="Coordinate research tasks",
|
||||||
backstory="Expert at delegation",
|
backstory="Expert at delegation",
|
||||||
llm="gpt-4o",
|
llm="gpt-4o",
|
||||||
a2a=A2AConfig(
|
a2a=A2AClientConfig(
|
||||||
endpoint="https://research.example.com/.well-known/agent-card.json",
|
endpoint="https://research.example.com/.well-known/agent-card.json",
|
||||||
fail_fast=True
|
fail_fast=True
|
||||||
)
|
)
|
||||||
@@ -244,11 +265,11 @@ agent = Agent(
|
|||||||
backstory="Expert at working with available resources",
|
backstory="Expert at working with available resources",
|
||||||
llm="gpt-4o",
|
llm="gpt-4o",
|
||||||
a2a=[
|
a2a=[
|
||||||
A2AConfig(
|
A2AClientConfig(
|
||||||
endpoint="https://primary.example.com/.well-known/agent-card.json",
|
endpoint="https://primary.example.com/.well-known/agent-card.json",
|
||||||
fail_fast=False
|
fail_fast=False
|
||||||
),
|
),
|
||||||
A2AConfig(
|
A2AClientConfig(
|
||||||
endpoint="https://backup.example.com/.well-known/agent-card.json",
|
endpoint="https://backup.example.com/.well-known/agent-card.json",
|
||||||
fail_fast=False
|
fail_fast=False
|
||||||
)
|
)
|
||||||
@@ -267,8 +288,8 @@ Control how your agent receives task status updates from remote A2A agents:
|
|||||||
|
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<Tab title="Streaming (Default)">
|
<Tab title="Streaming (Default)">
|
||||||
```python Code
|
```python streaming_config.py lines
|
||||||
from crewai.a2a import A2AConfig
|
from crewai.a2a import A2AClientConfig
|
||||||
from crewai.a2a.updates import StreamingConfig
|
from crewai.a2a.updates import StreamingConfig
|
||||||
|
|
||||||
agent = Agent(
|
agent = Agent(
|
||||||
@@ -276,17 +297,17 @@ agent = Agent(
|
|||||||
goal="Coordinate research tasks",
|
goal="Coordinate research tasks",
|
||||||
backstory="Expert at delegation",
|
backstory="Expert at delegation",
|
||||||
llm="gpt-4o",
|
llm="gpt-4o",
|
||||||
a2a=A2AConfig(
|
a2a=A2AClientConfig(
|
||||||
endpoint="https://research.example.com/.well-known/agent-card.json",
|
endpoint="https://research.example.com/.well-known/agent-card.json",
|
||||||
updates=StreamingConfig()
|
updates=StreamingConfig()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
</Tab>
|
</Tab>
|
||||||
|
|
||||||
<Tab title="Polling">
|
<Tab title="Polling">
|
||||||
```python Code
|
```python polling_config.py lines
|
||||||
from crewai.a2a import A2AConfig
|
from crewai.a2a import A2AClientConfig
|
||||||
from crewai.a2a.updates import PollingConfig
|
from crewai.a2a.updates import PollingConfig
|
||||||
|
|
||||||
agent = Agent(
|
agent = Agent(
|
||||||
@@ -294,7 +315,7 @@ agent = Agent(
|
|||||||
goal="Coordinate research tasks",
|
goal="Coordinate research tasks",
|
||||||
backstory="Expert at delegation",
|
backstory="Expert at delegation",
|
||||||
llm="gpt-4o",
|
llm="gpt-4o",
|
||||||
a2a=A2AConfig(
|
a2a=A2AClientConfig(
|
||||||
endpoint="https://research.example.com/.well-known/agent-card.json",
|
endpoint="https://research.example.com/.well-known/agent-card.json",
|
||||||
updates=PollingConfig(
|
updates=PollingConfig(
|
||||||
interval=2.0,
|
interval=2.0,
|
||||||
@@ -303,12 +324,12 @@ agent = Agent(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
</Tab>
|
</Tab>
|
||||||
|
|
||||||
<Tab title="Push Notifications">
|
<Tab title="Push Notifications">
|
||||||
```python Code
|
```python push_notifications_config.py lines
|
||||||
from crewai.a2a import A2AConfig
|
from crewai.a2a import A2AClientConfig
|
||||||
from crewai.a2a.updates import PushNotificationConfig
|
from crewai.a2a.updates import PushNotificationConfig
|
||||||
|
|
||||||
agent = Agent(
|
agent = Agent(
|
||||||
@@ -316,19 +337,137 @@ agent = Agent(
|
|||||||
goal="Coordinate research tasks",
|
goal="Coordinate research tasks",
|
||||||
backstory="Expert at delegation",
|
backstory="Expert at delegation",
|
||||||
llm="gpt-4o",
|
llm="gpt-4o",
|
||||||
a2a=A2AConfig(
|
a2a=A2AClientConfig(
|
||||||
endpoint="https://research.example.com/.well-known/agent-card.json",
|
endpoint="https://research.example.com/.well-known/agent-card.json",
|
||||||
updates=PushNotificationConfig(
|
updates=PushNotificationConfig(
|
||||||
url={base_url}/a2a/callback",
|
url="{base_url}/a2a/callback",
|
||||||
token="your-validation-token",
|
token="your-validation-token",
|
||||||
timeout=300.0
|
timeout=300.0
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
## Exposing Agents as A2A Servers
|
||||||
|
|
||||||
|
You can expose your CrewAI agents as A2A-compliant servers, allowing other A2A clients to delegate tasks to them.
|
||||||
|
|
||||||
|
### Server Configuration
|
||||||
|
|
||||||
|
Add an `A2AServerConfig` to your agent to enable server capabilities:
|
||||||
|
|
||||||
|
```python a2a_server_agent.py lines
|
||||||
|
from crewai import Agent
|
||||||
|
from crewai.a2a import A2AServerConfig
|
||||||
|
|
||||||
|
agent = Agent(
|
||||||
|
role="Data Analyst",
|
||||||
|
goal="Analyze datasets and provide insights",
|
||||||
|
backstory="Expert data scientist with statistical analysis skills",
|
||||||
|
llm="gpt-4o",
|
||||||
|
a2a=A2AServerConfig(url="https://your-server.com")
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Server Configuration Options
|
||||||
|
|
||||||
|
<ParamField path="name" type="str" default="None">
|
||||||
|
Human-readable name for the agent. Defaults to the agent's role if not provided.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="description" type="str" default="None">
|
||||||
|
Human-readable description. Defaults to the agent's goal and backstory if not provided.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="version" type="str" default="1.0.0">
|
||||||
|
Version string for the agent card.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="skills" type="list[AgentSkill]" default="[]">
|
||||||
|
List of agent skills. Auto-generated from agent tools if not provided.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="capabilities" type="AgentCapabilities" default="AgentCapabilities(streaming=True, push_notifications=False)">
|
||||||
|
Declaration of optional capabilities supported by the agent.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="default_input_modes" type="list[str]" default='["text/plain", "application/json"]'>
|
||||||
|
Supported input MIME types.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="default_output_modes" type="list[str]" default='["text/plain", "application/json"]'>
|
||||||
|
Supported output MIME types.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="url" type="str" default="None">
|
||||||
|
Preferred endpoint URL. If set, overrides the URL passed to `to_agent_card()`.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="preferred_transport" type="Literal['JSONRPC', 'GRPC', 'HTTP+JSON']" default="JSONRPC">
|
||||||
|
Transport protocol for the preferred endpoint.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="protocol_version" type="str" default="0.3">
|
||||||
|
A2A protocol version this agent supports.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="provider" type="AgentProvider" default="None">
|
||||||
|
Information about the agent's service provider.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="documentation_url" type="str" default="None">
|
||||||
|
URL to the agent's documentation.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="icon_url" type="str" default="None">
|
||||||
|
URL to an icon for the agent.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="additional_interfaces" type="list[AgentInterface]" default="[]">
|
||||||
|
Additional supported interfaces (transport and URL combinations).
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="security" type="list[dict[str, list[str]]]" default="[]">
|
||||||
|
Security requirement objects for all agent interactions.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="security_schemes" type="dict[str, SecurityScheme]" default="{}">
|
||||||
|
Security schemes available to authorize requests.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="supports_authenticated_extended_card" type="bool" default="False">
|
||||||
|
Whether agent provides extended card to authenticated users.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
<ParamField path="signatures" type="list[AgentCardSignature]" default="[]">
|
||||||
|
JSON Web Signatures for the AgentCard.
|
||||||
|
</ParamField>
|
||||||
|
|
||||||
|
### Combined Client and Server
|
||||||
|
|
||||||
|
An agent can act as both client and server by providing both configurations:
|
||||||
|
|
||||||
|
```python Code
|
||||||
|
from crewai import Agent
|
||||||
|
from crewai.a2a import A2AClientConfig, A2AServerConfig
|
||||||
|
|
||||||
|
agent = Agent(
|
||||||
|
role="Research Coordinator",
|
||||||
|
goal="Coordinate research and serve analysis requests",
|
||||||
|
backstory="Expert at delegation and analysis",
|
||||||
|
llm="gpt-4o",
|
||||||
|
a2a=[
|
||||||
|
A2AClientConfig(
|
||||||
|
endpoint="https://specialist.example.com/.well-known/agent-card.json",
|
||||||
|
timeout=120
|
||||||
|
),
|
||||||
|
A2AServerConfig(url="https://your-server.com")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
## Best Practices
|
## Best Practices
|
||||||
|
|
||||||
<CardGroup cols={2}>
|
<CardGroup cols={2}>
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
"""Agent-to-Agent (A2A) protocol communication module for CrewAI."""
|
"""Agent-to-Agent (A2A) protocol communication module for CrewAI."""
|
||||||
|
|
||||||
from crewai.a2a.config import A2AConfig
|
from crewai.a2a.config import A2AClientConfig, A2AConfig, A2AServerConfig
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
"A2AClientConfig",
|
||||||
"A2AConfig",
|
"A2AConfig",
|
||||||
|
"A2AServerConfig",
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user