A2A Protocol Specification (Python)

Overzicht
Het A2A (Agent2Agent) protocol is een communicatieprotocol gebaseerd op JSON-RPC 2.0, ontworpen voor interactie tussen intelligente agenten. Dit protocol definieert kernfunctionaliteiten inclusief agent capability declaratie, berichtoverdracht, taakbeheer en beveiligingsauthenticatie.
Dit document is gebaseerd op het bestand a2a-python/src/a2a/types.py
en biedt een gedetailleerde introductie van alle datastructuren en objectrelaties van het A2A protocol.
Protocolversie
Huidige protocolversie: 0.2.5
Kernconcepten
1. Agent
De Agent is de hoofdentiteit van het A2A protocol, met specifieke vaardigheden en mogelijkheden om gebruikersverzoeken te verwerken en taken uit te voeren.
2. Taak
De Taak is de werkeenheid uitgevoerd door de agent, gekenmerkt door levenscyclus statusbeheer en geschiedenisregistratie.
3. Bericht
Het Bericht is de basiseenheid voor informatie-uitwisseling tussen gebruiker en agent, ondersteunt meerdere inhoudstypen.
4. JSON-RPC 2.0
Het A2A protocol is gebaseerd op de JSON-RPC 2.0 standaard en biedt een gestandaardiseerd verzoek-antwoord communicatiepatroon.
Datastructuur Details
Basistypen
A2A
class A2A(RootModel[Any]):
root: Any
Worteltype van het protocol, kan willekeurige data bevatten.
Role (Enumeratie)
class Role(str, Enum):
"""Rol van de berichtzender"""
agent = 'agent' # Agent
user = 'user' # Gebruiker
TaskState (Enumeratie)
class TaskState(str, Enum):
"""Mogelijke toestanden van de taak"""
submitted = 'submitted' # Ingediend
working = 'working' # In uitvoering
input_required = 'input-required' # Invoer vereist
completed = 'completed' # Voltooid
canceled = 'canceled' # Geannuleerd
failed = 'failed' # Mislukt
rejected = 'rejected' # Afgewezen
auth_required = 'auth-required' # Authenticatie vereist
unknown = 'unknown' # Onbekende status
Agent-gerelateerde Typen
AgentCard
class AgentCard(A2ABaseModel):
"""Agentkaart - bevat belangrijke informatie van de agent"""
name: str # Agentnaam
description: str # Agentbeschrijving
version: str # Agentversie
url: str # Agent URL
protocolVersion: str | None = '0.2.5' # Protocolversie
skills: list[AgentSkill] # Vaardighedenlijst
capabilities: AgentCapabilities # Mogelijkhedendeclaratie
defaultInputModes: list[str] # Standaard invoermodi
defaultOutputModes: list[str] # Standaard uitvoermodi
provider: AgentProvider | None = None # Serviceprovider
security: list[dict[str, list[str]]] | None = None # Beveiligingsvereisten
securitySchemes: dict[str, SecurityScheme] | None = None # Beveiligingsschema's
# ... andere velden
AgentSkill
class AgentSkill(A2ABaseModel):
"""Agentvaardigheid - uitvoerbare vaardigheidseenheid door de agent"""
id: str # Unieke vaardigheidsidentificatie
name: str # Vaardigheidsnaam
description: str # Vaardigheidsbeschrijving
tags: list[str] # Vaardigheids-tags
examples: list[str] | None = None # Gebruiksvoorbeelden
inputModes: list[str] | None = None # Invoermodi
outputModes: list[str] | None = None # Uitvoermodi
AgentCapabilities
class AgentCapabilities(A2ABaseModel):
"""Agent mogelijkheidsdefinitie"""
extensions: list[AgentExtension] | None = None # Ondersteunde uitbreidingen
pushNotifications: bool | None = None # Push notificatie ondersteuning
stateTransitionHistory: bool | None = None # Status overgangsgeschiedenis
streaming: bool | None = None # Streaming ondersteuning
AgentExtension
class AgentExtension(A2ABaseModel):
"""Agent uitbreidingsdeclaratie"""
uri: str # Uitbreidings-URI
description: str | None = None # Uitbreidingsbeschrijving
params: dict[str, Any] | None = None # Uitbreidingsparameters
required: bool | None = None # Vereist of niet
AgentProvider
class AgentProvider(A2ABaseModel):
"""Agent serviceprovider"""
organization: str # Organisatienaam
url: str # Organisatie URL
AgentInterface
class AgentInterface(A2ABaseModel):
"""Agent interfacedeclaratie"""
transport: str # Transportprotocol (JSONRPC, GRPC, HTTP+JSON)
url: str # Interface URL
Bericht-gerelateerde Typen
Message
class Message(A2ABaseModel):
"""Berichten uitgewisseld tussen gebruiker en agent"""
messageId: str # Bericht-ID
role: Role # Rol van de zender
parts: list[Part] # Berichtinhoud delen
kind: Literal['message'] = 'message' # Gebeurtenistype
taskId: str | None = None # Gerelateerde taak-ID
contextId: str | None = None # Context-ID
referenceTaskIds: list[str] | None = None # Gerefereerde taak-ID lijst
extensions: list[str] | None = None # Uitbreidings-URI lijst
metadata: dict[str, Any] | None = None # Metadata
Part (Union Type)
class Part(RootModel[TextPart | FilePart | DataPart]):
"""Berichtdeel - tekst, bestand of gestructureerde data"""
root: TextPart | FilePart | DataPart
TextPart
class TextPart(A2ABaseModel):
"""Tekst berichtdeel"""
kind: Literal['text'] = 'text' # Deeltype
text: str # Tekstinhoud
metadata: dict[str, Any] | None = None # Metadata
FilePart
class FilePart(A2ABaseModel):
"""Bestand berichtdeel"""
kind: Literal['file'] = 'file' # Deeltype
file: FileWithBytes | FileWithUri # Bestandsinhoud
metadata: dict[str, Any] | None = None # Metadata
DataPart
class DataPart(A2ABaseModel):
"""Gestructureerde data berichtdeel"""
kind: Literal['data'] = 'data' # Deeltype
data: dict[str, Any] # Gestructureerde data
metadata: dict[str, Any] | None = None # Metadata
Bestandstypen
FileWithBytes
class FileWithBytes(A2ABaseModel):
"""Bestand met byte-inhoud"""
bytes: str # base64-gecodeerde bestandsinhoud
name: str | None = None # Bestandsnaam
mimeType: str | None = None # MIME-type
FileWithUri
class FileWithUri(A2ABaseModel):
"""Bestand met URI"""
uri: str # Bestand URL
name: str | None = None # Bestandsnaam
mimeType: str | None = None # MIME-type
Taak-gerelateerde Typen
Task
class Task(A2ABaseModel):
"""Taakentiteit"""
id: str # Unieke taakidentificatie
contextId: str # Context-ID
status: TaskStatus # Taakstatus
kind: Literal['task'] = 'task' # Gebeurtenistype
history: list[Message] | None = None # Berichtgeschiedenis
artifacts: list[Artifact] | None = None # Gegenereerde artefacten
metadata: dict[str, Any] | None = None # Metadata
TaskStatus
class TaskStatus(A2ABaseModel):
"""Taakstatus en gerelateerd bericht"""
state: TaskState # Taaktoestand
message: Message | None = None # Status update bericht
timestamp: str | None = None # Tijdstempel (ISO 8601)
Artifact
class Artifact(A2ABaseModel):
"""Door de taak gegenereerd artefact"""
artifactId: str # Artefact-ID
parts: list[Part] # Artefactinhoud delen
name: str | None = None # Artefactnaam
description: str | None = None # Artefactbeschrijving
extensions: list[str] | None = None # Uitbreidings-URI lijst
metadata: dict[str, Any] | None = None # Metadata
JSON-RPC-gerelateerde Typen
JSONRPCMessage (Basisklasse)
class JSONRPCMessage(A2ABaseModel):
"""JSON-RPC 2.0 bericht basisklasse"""
jsonrpc: Literal['2.0'] = '2.0' # Protocolversie
id: str | int | None = None # Verzoek/antwoord ID
JSONRPCRequest
class JSONRPCRequest(A2ABaseModel):
"""JSON-RPC 2.0 verzoekobject"""
jsonrpc: Literal['2.0'] = '2.0' # Protocolversie
method: str # Methodenaam
params: dict[str, Any] | None = None # Parameters
id: str | int | None = None # Verzoek-ID
JSONRPCSuccessResponse
class JSONRPCSuccessResponse(A2ABaseModel):
"""JSON-RPC 2.0 succes antwoordobject"""
jsonrpc: Literal['2.0'] = '2.0' # Protocolversie
result: Any # Resultaatdata
id: str | int | None = None # Antwoord-ID
JSONRPCErrorResponse
class JSONRPCErrorResponse(A2ABaseModel):
"""JSON-RPC 2.0 fout antwoordobject"""
jsonrpc: Literal['2.0'] = '2.0' # Protocolversie
error: JSONRPCError | [specific error type] # Foutinformatie
id: str | int | None = None # Antwoord-ID
Fouttypen
Het A2A protocol definieert verschillende fouttypen, allemaal afgeleid van standaard JSON-RPC fouten:
Standaard JSON-RPC Fouten
JSONParseError
class JSONParseError(A2ABaseModel):
"""JSON parsing fout"""
code: Literal[-32700] = -32700
message: str | None = 'Invalid JSON payload'
data: Any | None = None
InvalidRequestError
class InvalidRequestError(A2ABaseModel):
"""Ongeldig verzoek fout"""
code: Literal[-32600] = -32600
message: str | None = 'Request payload validation error'
data: Any | None = None
MethodNotFoundError
class MethodNotFoundError(A2ABaseModel):
"""Methode niet gevonden fout"""
code: Literal[-32601] = -32601
message: str | None = 'Method not found'
data: Any | None = None
InvalidParamsError
class InvalidParamsError(A2ABaseModel):
"""Ongeldige parameters fout"""
code: Literal[-32602] = -32602
message: str | None = 'Invalid parameters'
data: Any | None = None
InternalError
class InternalError(A2ABaseModel):
"""Interne fout"""
code: Literal[-32603] = -32603
message: str | None = 'Internal error'
data: Any | None = None
A2A-specifieke Fouten
TaskNotFoundError
class TaskNotFoundError(A2ABaseModel):
"""Taak niet gevonden fout"""
code: Literal[-32001] = -32001
message: str | None = 'Task not found'
data: Any | None = None
TaskNotCancelableError
class TaskNotCancelableError(A2ABaseModel):
"""Taak niet annuleerbaar fout"""
code: Literal[-32002] = -32002
message: str | None = 'Task cannot be canceled'
data: Any | None = None
PushNotificationNotSupportedError
class PushNotificationNotSupportedError(A2ABaseModel):
"""Push notificatie niet ondersteund fout"""
code: Literal[-32003] = -32003
message: str | None = 'Push Notification is not supported'
data: Any | None = None
UnsupportedOperationError
class UnsupportedOperationError(A2ABaseModel):
"""Niet ondersteunde operatie fout"""
code: Literal[-32004] = -32004
message: str | None = 'This operation is not supported'
data: Any | None = None
ContentTypeNotSupportedError
class ContentTypeNotSupportedError(A2ABaseModel):
"""Inhoudstype niet ondersteund fout"""
code: Literal[-32005] = -32005
message: str | None = 'Incompatible content types'
data: Any | None = None
InvalidAgentResponseError
class InvalidAgentResponseError(A2ABaseModel):
"""Ongeldig agent antwoord fout"""
code: Literal[-32006] = -32006
message: str | None = 'Invalid agent response'
data: Any | None = None
Beveiligingsauthenticatie-gerelateerde Typen
SecurityScheme (Union Type)
class SecurityScheme(RootModel[
APIKeySecurityScheme |
HTTPAuthSecurityScheme |
OAuth2SecurityScheme |
OpenIdConnectSecurityScheme
]):
"""Beveiligingsschema - ondersteunt meerdere authenticatiemethoden"""
APIKeySecurityScheme
class APIKeySecurityScheme(A2ABaseModel):
"""API sleutel beveiligingsschema"""
type: Literal['apiKey'] = 'apiKey'
name: str # Parameternaam
in_: In # Locatie (header/query/cookie)
description: str | None = None # Beschrijving
HTTPAuthSecurityScheme
class HTTPAuthSecurityScheme(A2ABaseModel):
"""HTTP authenticatie beveiligingsschema"""
type: Literal['http'] = 'http'
scheme: str # Authenticatieschema (Basic, Bearer etc.)
bearerFormat: str | None = None # Bearer token formaat
description: str | None = None # Beschrijving
OAuth2SecurityScheme
class OAuth2SecurityScheme(A2ABaseModel):
"""OAuth2.0 beveiligingsschema"""
type: Literal['oauth2'] = 'oauth2'
flows: OAuthFlows # OAuth flow instellingen
description: str | None = None # Beschrijving
OpenIdConnectSecurityScheme
class OpenIdConnectSecurityScheme(A2ABaseModel):
"""OpenID Connect beveiligingsschema"""
type: Literal['openIdConnect'] = 'openIdConnect'
openIdConnectUrl: str # OpenID Connect discovery URL
description: str | None = None # Beschrijving
OAuth Flow Typen
OAuthFlows
class OAuthFlows(A2ABaseModel):
"""OAuth flow instellingen"""
implicit: ImplicitOAuthFlow | None = None # Impliciete flow
password: PasswordOAuthFlow | None = None # Wachtwoord flow
clientCredentials: ClientCredentialsOAuthFlow | None = None # Client credentials flow
authorizationCode: AuthorizationCodeOAuthFlow | None = None # Authorization code flow
Push Notificatie-gerelateerde Typen
PushNotificationConfig
class PushNotificationConfig(A2ABaseModel):
"""Push notificatie configuratie"""
url: str # Push URL
id: str | None = None # Push notificatie ID
token: str | None = None # Sessietoken
authentication: PushNotificationAuthenticationInfo | None = None # Authenticatie informatie
PushNotificationAuthenticationInfo
class PushNotificationAuthenticationInfo(A2ABaseModel):
"""Push notificatie authenticatie informatie"""
schemes: list[str] # Ondersteunde authenticatieschema's
credentials: str | None = None # Authenticatie informatie
Verzoek en Antwoord Typen
Bericht Verzending
SendMessageRequest
class SendMessageRequest(A2ABaseModel):
"""Bericht verzending verzoek"""
jsonrpc: Literal['2.0'] = '2.0'
method: Literal['message/send'] = 'message/send'
params: MessageSendParams
id: str | int
MessageSendParams
class MessageSendParams(A2ABaseModel):
"""Bericht verzending parameters"""
message: Message # Te verzenden bericht
configuration: MessageSendConfiguration | None = None # Verzending instellingen
metadata: dict[str, Any] | None = None # Metadata
MessageSendConfiguration
class MessageSendConfiguration(A2ABaseModel):
"""Bericht verzending configuratie"""
acceptedOutputModes: list[str] # Geaccepteerde uitvoermodi
blocking: bool | None = None # Verzoek blokkeren of niet
historyLength: int | None = None # Berichtgeschiedenis lengte
pushNotificationConfig: PushNotificationConfig | None = None # Push notificatie instellingen
Taak Operaties
GetTaskRequest
class GetTaskRequest(A2ABaseModel):
"""Taak ophaal verzoek"""
jsonrpc: Literal['2.0'] = '2.0'
method: Literal['tasks/get'] = 'tasks/get'
params: TaskQueryParams
id: str | int
TaskQueryParams
class TaskQueryParams(A2ABaseModel):
"""Taak query parameters"""
id: str # Taak-ID
historyLength: int | None = None # Geschiedenis lengte
metadata: dict[str, Any] | None = None # Metadata
CancelTaskRequest
class CancelTaskRequest(A2ABaseModel):
"""Taak annulering verzoek"""
jsonrpc: Literal['2.0'] = '2.0'
method: Literal['tasks/cancel'] = 'tasks/cancel'
params: TaskIdParams
id: str | int
Gebeurtenistypen
TaskStatusUpdateEvent
class TaskStatusUpdateEvent(A2ABaseModel):
"""Taak status update gebeurtenis"""
kind: Literal['status-update'] = 'status-update'
taskId: str # Taak-ID
contextId: str # Context-ID
status: TaskStatus # Taakstatus
final: bool # Finale gebeurtenis of niet
metadata: dict[str, Any] | None = None # Metadata
TaskArtifactUpdateEvent
class TaskArtifactUpdateEvent(A2ABaseModel):
"""Taak artefact update gebeurtenis"""
kind: Literal['artifact-update'] = 'artifact-update'
taskId: str # Taak-ID
contextId: str # Context-ID
artifact: Artifact # Artefact
append: bool | None = None # Toevoegen of niet
lastChunk: bool | None = None # Laatste chunk of niet
metadata: dict[str, Any] | None = None # Metadata
Objectrelatie Diagram
graph TB
%% Hoofdentiteiten
AgentCard[AgentCard<br/>Agentkaart]
Task[Task<br/>Taak]
Message[Message<br/>Bericht]
%% Agent-gerelateerd
AgentSkill[AgentSkill<br/>Agentvaardigheid]
AgentCapabilities[AgentCapabilities<br/>Agentmogelijkheden]
AgentProvider[AgentProvider<br/>Serviceprovider]
AgentExtension[AgentExtension<br/>Agentuitbreiding]
AgentInterface[AgentInterface<br/>Agentinterface]
%% Berichtinhoud
Part[Part<br/>Berichtdeel]
TextPart[TextPart<br/>Tekstdeel]
FilePart[FilePart<br/>Bestandsdeel]
DataPart[DataPart<br/>Datadeel]
%% Bestandstypen
FileWithBytes[FileWithBytes<br/>Byte-bestand]
FileWithUri[FileWithUri<br/>URI-bestand]
%% Taak-gerelateerd
TaskStatus[TaskStatus<br/>Taakstatus]
Artifact[Artifact<br/>Artefact]
%% JSON-RPC
JSONRPCRequest[JSONRPCRequest<br/>JSON-RPC Verzoek]
JSONRPCResponse[JSONRPCResponse<br/>JSON-RPC Antwoord]
%% Beveiligingsauthenticatie
SecurityScheme[SecurityScheme<br/>Beveiligingsschema]
APIKeySecurityScheme[APIKeySecurityScheme<br/>API Sleutel Schema]
HTTPAuthSecurityScheme[HTTPAuthSecurityScheme<br/>HTTP Auth Schema]
OAuth2SecurityScheme[OAuth2SecurityScheme<br/>OAuth2 Schema]
OpenIdConnectSecurityScheme[OpenIdConnectSecurityScheme<br/>OpenID Connect Schema]
%% Push notificaties
PushNotificationConfig[PushNotificationConfig<br/>Push Notificatie Configuratie]
PushNotificationAuthenticationInfo[PushNotificationAuthenticationInfo<br/>Push Auth Informatie]
%% Fouttypen
A2AError[A2AError<br/>A2A Fout]
JSONRPCError[JSONRPCError<br/>JSON-RPC Fout]
%% Gebeurtenissen
TaskStatusUpdateEvent[TaskStatusUpdateEvent<br/>Status Update Gebeurtenis]
TaskArtifactUpdateEvent[TaskArtifactUpdateEvent<br/>Artefact Update Gebeurtenis]
%% Relatieverbindingen
AgentCard --> AgentSkill
AgentCard --> AgentCapabilities
AgentCard --> AgentProvider
AgentCard --> AgentInterface
AgentCard --> SecurityScheme
AgentCapabilities --> AgentExtension
Task --> TaskStatus
Task --> Message
Task --> Artifact
Message --> Part
Part --> TextPart
Part --> FilePart
Part --> DataPart
FilePart --> FileWithBytes
FilePart --> FileWithUri
Artifact --> Part
SecurityScheme --> APIKeySecurityScheme
SecurityScheme --> HTTPAuthSecurityScheme
SecurityScheme --> OAuth2SecurityScheme
SecurityScheme --> OpenIdConnectSecurityScheme
PushNotificationConfig --> PushNotificationAuthenticationInfo
TaskStatusUpdateEvent --> TaskStatus
TaskArtifactUpdateEvent --> Artifact
JSONRPCResponse --> A2AError
A2AError --> JSONRPCError
%% Stijlen
classDef coreEntity fill:#e1f5fe
classDef agentRelated fill:#f3e5f5
classDef messageRelated fill:#e8f5e8
classDef taskRelated fill:#fff3e0
classDef securityRelated fill:#fce4ec
classDef errorRelated fill:#ffebee
classDef eventRelated fill:#f1f8e9
class AgentCard,Task,Message coreEntity
class AgentSkill,AgentCapabilities,AgentProvider,AgentExtension,AgentInterface agentRelated
class Part,TextPart,FilePart,DataPart,FileWithBytes,FileWithUri messageRelated
class TaskStatus,Artifact taskRelated
class SecurityScheme,APIKeySecurityScheme,HTTPAuthSecurityScheme,OAuth2SecurityScheme,OpenIdConnectSecurityScheme,PushNotificationConfig,PushNotificationAuthenticationInfo securityRelated
class A2AError,JSONRPCError errorRelated
class TaskStatusUpdateEvent,TaskArtifactUpdateEvent eventRelated
Protocol Flow Diagram
sequenceDiagram
participant Client as Client
participant Agent as Agent
Note over Client,Agent: 1. Agent ontdekking en mogelijkheden query
Client->>Agent: GET /agent-card
Agent->>Client: AgentCard (vaardigheden, mogelijkheden, beveiligingsvereisten)
Note over Client,Agent: 2. Authenticatie (indien vereist)
Client->>Agent: Authenticatie verzoek (volgens SecurityScheme)
Agent->>Client: Authenticatie antwoord
Note over Client,Agent: 3. Bericht verzending en taak creatie
Client->>Agent: SendMessageRequest
Note right of Agent: Taak creatie<br/>Status: submitted
Agent->>Client: SendMessageResponse (Task)
Note over Client,Agent: 4. Taak verwerking (optionele push notificatie)
loop Taak Verwerking
Note right of Agent: Taak status update<br/>working -> completed
alt Push Notificatie Ondersteuning
Agent->>Client: TaskStatusUpdateEvent
else Polling Modus
Client->>Agent: GetTaskRequest
Agent->>Client: GetTaskResponse (bijgewerkte Task)
end
end
Note over Client,Agent: 5. Finaal resultaat ophalen
Client->>Agent: GetTaskRequest
Agent->>Client: Task (met Artifacts en volledige geschiedenis)
Taak Status Overgang Diagram
stateDiagram-v2
[*] --> submitted: Taak creatie
submitted --> working: Verwerking begint
submitted --> rejected: Taak afgewezen
submitted --> auth_required: Authenticatie vereist
working --> completed: Verwerking voltooid
working --> failed: Verwerking mislukt
working --> input_required: Gebruikersinvoer vereist
working --> canceled: Gebruiker annulering
input_required --> working: Gebruikersinvoer ontvangen
input_required --> canceled: Gebruiker annulering
auth_required --> working: Authenticatie succesvol
auth_required --> rejected: Authenticatie mislukt
completed --> [*]
failed --> [*]
canceled --> [*]
rejected --> [*]
unknown --> working: Status herstel
unknown --> failed: Herstel onmogelijk
Bericht Deel Type Hiërarchie Diagram
flowchart TD
Part["Part<br/>Berichtdeel Basisklasse"]
Part --> TextPart["TextPart<br/>Tekstdeel<br/>kind: text"]
Part --> FilePart["FilePart<br/>Bestandsdeel<br/>kind: file"]
Part --> DataPart["DataPart<br/>Datadeel<br/>kind: data"]
FilePart --> FileContent{"Bestandsinhoud"}
FileContent --> FileWithBytes["FileWithBytes<br/>Bevat base64 byte data"]
FileContent --> FileWithUri["FileWithUri<br/>Bevat bestand URI"]
TextPart --> TextContent["text: str<br/>Tekstinhoud"]
DataPart --> DataContent["data: dict[str, Any]<br/>Gestructureerde data"]
FileWithBytes --> BytesContent["bytes: str<br/>base64-gecodeerde inhoud"]
FileWithUri --> UriContent["uri: str<br/>Bestand URL"]
%% Gemeenschappelijke eigenschappen
Part --> Metadata["metadata: dict[str, Any]<br/>Optionele metadata"]
FileWithBytes --> FileMetadata["name: str<br/>mimeType: str<br/>Bestandsmetadata"]
FileWithUri --> FileMetadata
classDef baseClass fill:#e3f2fd
classDef textClass fill:#e8f5e8
classDef fileClass fill:#fff3e0
classDef dataClass fill:#f3e5f5
classDef metaClass fill:#f5f5f5
class Part baseClass
class TextPart,TextContent textClass
class FilePart,FileWithBytes,FileWithUri,BytesContent,UriContent fileClass
class DataPart,DataContent dataClass
class Metadata,FileMetadata metaClass
Beveiligingsschema Type Diagram
flowchart TD
SecurityScheme["SecurityScheme<br/>Beveiligingsschema Union Type"]
SecurityScheme --> APIKeySecurityScheme["APIKeySecurityScheme<br/>API Sleutel Authenticatie<br/>type: apiKey"]
SecurityScheme --> HTTPAuthSecurityScheme["HTTPAuthSecurityScheme<br/>HTTP Authenticatie<br/>type: http"]
SecurityScheme --> OAuth2SecurityScheme["OAuth2SecurityScheme<br/>OAuth2 Authenticatie<br/>type: oauth2"]
SecurityScheme --> OpenIdConnectSecurityScheme["OpenIdConnectSecurityScheme<br/>OpenID Connect<br/>type: openIdConnect"]
APIKeySecurityScheme --> APIKeyDetails["name: str<br/>in: header|query|cookie"]
HTTPAuthSecurityScheme --> HTTPDetails["scheme: str<br/>bearerFormat: str"]
OAuth2SecurityScheme --> OAuthFlows["flows: OAuthFlows"]
OpenIdConnectSecurityScheme --> OIDCDetails["openIdConnectUrl: str"]
OAuthFlows --> ImplicitFlow["implicit: ImplicitOAuthFlow"]
OAuthFlows --> PasswordFlow["password: PasswordOAuthFlow"]
OAuthFlows --> ClientCredentialsFlow["clientCredentials: ClientCredentialsOAuthFlow"]
OAuthFlows --> AuthorizationCodeFlow["authorizationCode: AuthorizationCodeOAuthFlow"]
ImplicitFlow --> ImplicitDetails["authorizationUrl: str<br/>scopes: dict[str, str]"]
PasswordFlow --> PasswordDetails["tokenUrl: str<br/>scopes: dict[str, str]"]
ClientCredentialsFlow --> ClientDetails["tokenUrl: str<br/>scopes: dict[str, str]"]
AuthorizationCodeFlow --> AuthCodeDetails["authorizationUrl: str<br/>tokenUrl: str<br/>scopes: dict[str, str]"]
classDef baseClass fill:#e3f2fd
classDef apiKeyClass fill:#e8f5e8
classDef httpClass fill:#fff3e0
classDef oauthClass fill:#f3e5f5
classDef oidcClass fill:#fce4ec
class SecurityScheme baseClass
class APIKeySecurityScheme,APIKeyDetails apiKeyClass
class HTTPAuthSecurityScheme,HTTPDetails httpClass
class OAuth2SecurityScheme,OAuthFlows,ImplicitFlow,PasswordFlow,ClientCredentialsFlow,AuthorizationCodeFlow,ImplicitDetails,PasswordDetails,ClientDetails,AuthCodeDetails oauthClass
class OpenIdConnectSecurityScheme,OIDCDetails oidcClass
Foutcode Mapping Tabel
Foutcode | Fouttype | Beschrijving | Gebruikscase |
---|---|---|---|
-32700 | JSONParseError | JSON parsing fout | Ongeldig JSON formaat |
-32600 | InvalidRequestError | Ongeldig verzoek | Verzoekformaat voldoet niet aan specificatie |
-32601 | MethodNotFoundError | Methode niet gevonden | Aanroep van niet-bestaande methode |
-32602 | InvalidParamsError | Ongeldige parameters | Methodeparameters niet correct |
-32603 | InternalError | Interne fout | Server interne verwerkingsfout |
-32001 | TaskNotFoundError | Taak niet gevonden | Gevraagde taak-ID bestaat niet |
-32002 | TaskNotCancelableError | Taak niet annuleerbaar | Taakstatus staat annulering niet toe |
-32003 | PushNotificationNotSupportedError | Push notificatie niet ondersteund | Agent ondersteunt geen push notificaties |
-32004 | UnsupportedOperationError | Operatie niet ondersteund | Agent ondersteunt gevraagde operatie niet |
-32005 | ContentTypeNotSupportedError | Inhoudstype niet ondersteund | Gevraagd inhoudstype komt niet overeen met agentmogelijkheden |
-32006 | InvalidAgentResponseError | Ongeldig agent antwoord | Agent heeft antwoord met verkeerd formaat geretourneerd |
Lijst van Ondersteunde Methoden
Het A2A protocol definieert de volgende standaardmethoden:
Bericht-gerelateerde Methoden
message/send
- Bericht naar agent verzendenmessage/stream
- Streaming bericht naar agent verzenden
Taak-gerelateerde Methoden
tasks/get
- Taakdetails ophalentasks/cancel
- Taak annulerentasks/resubscribe
- Taak updates opnieuw abonneren
Push Notificatie Configuratie Methoden
tasks/pushNotificationConfig/set
- Push notificatie configuratie instellentasks/pushNotificationConfig/get
- Push notificatie configuratie ophalentasks/pushNotificationConfig/list
- Push notificatie configuraties opsommentasks/pushNotificationConfig/delete
- Push notificatie configuratie verwijderen
Gebruiksvoorbeelden
1. Eenvoudig tekstbericht verzenden
from a2a.types import SendMessageRequest, MessageSendParams, Message, TextPart, Part
# Tekstberichtdeel maken
text_part = TextPart(text="Hallo, hoe kan ik u helpen?")
part = Part(root=text_part)
# Bericht maken
message = Message(
messageId="msg-001",
role="user",
parts=[part]
)
# Verzendparameters maken
params = MessageSendParams(message=message)
# Verzoek maken
request = SendMessageRequest(
id="req-001",
params=params
)
2. Bericht met bestand verzenden
from a2a.types import FilePart, FileWithBytes
import base64
# Bestand lezen en coderen
with open("document.pdf", "rb") as f:
file_bytes = base64.b64encode(f.read()).decode()
# Bestandsdeel maken
file_with_bytes = FileWithBytes(
bytes=file_bytes,
name="document.pdf",
mimeType="application/pdf"
)
file_part = FilePart(file=file_with_bytes)
part = Part(root=file_part)
# Bericht met bestand maken
message = Message(
messageId="msg-002",
role="user",
parts=[part]
)
3. Taakstatus Query
from a2a.types import GetTaskRequest, TaskQueryParams
# Taak query verzoek maken
request = GetTaskRequest(
id="req-002",
params=TaskQueryParams(
id="task-001",
historyLength=10 # Nieuwste 10 berichtgeschiedenis ophalen
)
)
4. Push Notificatie Configuratie
from a2a.types import (
SetTaskPushNotificationConfigRequest,
TaskPushNotificationConfig,
PushNotificationConfig,
PushNotificationAuthenticationInfo
)
# Push notificatie configuratie maken
push_config = PushNotificationConfig(
url="https://my-app.com/webhook/task-updates",
authentication=PushNotificationAuthenticationInfo(
schemes=["Bearer"],
credentials="my-auth-token"
)
)
# Taak push configuratie maken
task_push_config = TaskPushNotificationConfig(
taskId="task-001",
pushNotificationConfig=push_config
)
# Configuratie verzoek maken
request = SetTaskPushNotificationConfigRequest(
id="req-003",
params=task_push_config
)
Beste Praktijken
1. Foutafhandeling
- Altijd het foutveld van het antwoord controleren
- Passende herhalingsstrategie implementeren gebaseerd op foutcode
- Betekenisvolle foutberichten voor gebruikers verstrekken
2. Taakbeheer
- Push notificaties gebruiken in plaats van polling voor taak updates
- Taak timeout mechanisme implementeren
- Taak-ID's opslaan voor latere queries
3. Beveiliging
- HTTPS transport gebruiken
- Authenticatieschema's correct implementeren
- API sleutels en tokens regelmatig roteren
4. Prestatie Optimalisatie
- Streaming gebruiken voor grote antwoordverwerking
- Berichtgeschiedenis lengte beperken
- Client-side caching implementeren
Uitbreidbaarheid
Het A2A protocol ondersteunt uitbreidingen door de volgende mechanismen:
- Agent Uitbreidingen - Aangepaste mogelijkheden declareren via
AgentExtension
- Metadata Velden - De meeste objecten bevatten een optioneel
metadata
veld - Aangepaste Transport Protocollen - Ondersteuning van nieuwe transportmethoden via
AgentInterface
- Uitbreidings-URI's - Referentie naar uitbreidingsspecificaties in berichten en artefacten
Samenvatting
Het A2A protocol biedt een uitgebreid framework voor communicatie en samenwerking tussen intelligente agenten. Gebaseerd op JSON-RPC 2.0 biedt het gestandaardiseerde berichtoverdracht, taakbeheer, beveiligingsauthenticatie en uitbreidingsmechanismen.
Hoofdkenmerken:
- Gestandaardiseerde Communicatie: JSON-RPC 2.0-gebaseerd verzoek-antwoord patroon
- Rijke Inhoudsondersteuning: Ondersteuning voor tekst, bestanden en gestructureerde data
- Flexibele Beveiliging: Ondersteuning van meerdere authenticatiemethoden
- Real-time Updates: Push notificatie mechanisme
- Robuuste Foutafhandeling: Uitgebreide foutcodes en berichten
- Goede Uitbreidbaarheid: Uitbreidingsmechanismen en metadata ondersteuning
Dit protocol biedt ontwikkelaars een solide basis voor het bouwen van krachtige agent-gebaseerde applicaties.