어떤 AI 에이전트든 3줄로 A2A 프로토콜 서버로 변환
요약
이 SDK는 n8n, LangGraph, CrewAI 등 다양한 에이전트 프레임워크를 A2A(Agent-to-Agent) 프로토콜 서버로 단 3줄의 코드로 쉽게 변환할 수 있게 합니다. 이를 통해 사용자의 에이전트는 자동 생성된 AgentCard와 작업 관리 기능을 갖추게 되어 높은 호환성을 확보합니다.
핵심 포인트
- 다양한 프레임워크(LangChain, CrewAI 등)를 지원하는 통합 SDK 제공
- 단 3줄의 코드로 A2A 프로토콜 서버 구축 가능
- 자동 AgentCard 생성 및 스트리밍 지원으로 사용 편의성 증대
AI 에이전트를 A2A 프로토콜 서버로 단 3라인 만에 변환하세요.
A2A (Agent-to-Agent) 프로토콜과 호환되도록 어떤 에이전트 프레임워크(n8n, LangGraph, CrewAI, LangChain, OpenClaw, Hermes Agent, Claude Code, Codex, Ollama 또는 일반 함수)든 사용할 수 있게 해주는 Python SDK입니다.
from a2a_adapter import N8nAdapter, serve_agent
adapter = N8nAdapter(webhook_url="http://localhost:5678/webhook/agent")
serve_agent(adapter, port=9000)
이것으로 끝입니다. 이제 사용자의 에이전트는 A2A SDK가 처리하는 자동 생성된 AgentCard, 작업 관리 및 스트리밍 지원을 통해 A2A 호환성을 갖추게 됩니다.
3줄 설정—import, create, serve
내장 어댑터—n8n, LangChain, LangGraph, CrewAI, OpenClaw, Hermes, Claude Code, Codex, Ollama 등 포함
스트리밍(Streaming)—LangChain 및 LangGraph에 대해 자동 감지
자동 AgentCard—어댑터 메타데이터에서 생성되며 /.well-known/agent-card.json에서 제공됩니다.
(
그리고 레거시 /.well-known/agent.json)
SDK 우선(SDK-First)—작업 관리, SSE, 푸시 알림을 A2A SDK에 위임
확장성(Extensible)—타사 프레임워크를 위한 register_adapter()
최소 표면적(Minimal surface)—invoke() 구현으로 전체 A2A 서버 획득
pip install a2a-adapter # 핵심 (n8n, callable 포함)
pip install a2a-adapter[crewai] # + CrewAI
pip install a2a-adapter[langchain] # + LangChain
...
from a2a_adapter import N8nAdapter, serve_agent
adapter = N8nAdapter(webhook_url="http://localhost:5678/webhook/agent")
serve_agent(adapter, port=9000)
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from a2a_adapter import LangChainAdapter, serve_agent
...
from a2a_adapter import LangGraphAdapter, serve_agent
graph = builder.compile() # 사용자의 LangGraph 워크플로우
adapter = LangGraphAdapter(graph=graph)
...
from a2a_adapter import CrewAIAdapter, serve_agent
adapter = CrewAIAdapter(crew=your_crew, timeout=600)
serve_agent(adapter, port=8001)
from a2a_adapter import OpenClawAdapter, serve_agent
adapter = OpenClawAdapter(thinking="low", agent_id="main")
serve_agent(adapter, port=9008)
from a2a_adapter import OllamaAdapter, serve_agent
from a2a_adapter.integrations.ollama import OllamaClient
client = OllamaClient(model="llama3.2")
...
Hermes는 이 패키지에 의해 설치되지 않습니다. 리포지토리를 클론하여 PYTHONPATH에 추가하고,
자격 증명 및 ~/.hermes/config.yaml를 위해 hermes setup을 실행한 다음:
모델 문자열은 Anthropic의 HTTP API의 빈 model 필드와 반드시 동일하지 않으며, Hermes가 일반적으로 사용하는 provider/model 형식을 따릅니다.
from a2a_adapter import HermesAdapter, serve_agent
adapter = HermesAdapter(
model="anthropic/claude-sonnet-4",
...
)
실행 가능한 템플릿( PYTHONPATH 설정 포함)은 examples/hermes_agent.py를 참조하세요.
from a2a_adapter import ClaudeCodeAdapter, serve_agent
adapter = ClaudeCodeAdapter(working_dir="/path/to/project")
serve_agent(adapter, port=9010)
보안 참고 사항: 기본적으로 skip_permissions는 False입니다. 이것이 없으면 (그리고 사전에 구성된 Claude Code 권한 파일이 없으면), 도구 사용 호출은 비감독 모드에서 진행되지 않을 수 있습니다. 신뢰할 수 있고 격리된 환경에만 사용하세요:
adapter = ClaudeCodeAdapter(working_dir="...", skip_permissions=True)
또는 환경 변수를 통해:
A2A_CLAUDE_SKIP_PERMISSIONS=1
from a2a_adapter import CodexAdapter, serve_agent
adapter = CodexAdapter(working_dir="/path/to/project")
serve_agent(adapter, port=9011)
보안 참고 사항: 기본적으로 bypass_approvals와 skip_git_check는 False입니다. 신뢰할 수 있고 격리된 환경에만 사용하세요:
adapter = CodexAdapter(working_dir="...", bypass_approvals=True, skip_git_check=True)
또는 환경 변수를 통해:
A2A_CODEX_BYPASS_APPROVALS=1
및 A2A_CODEX_SKIP_GIT_CHECK=1
from a2a_adapter import CallableAdapter, serve_agent
async def my_agent(inputs):
return f"Echo: {inputs['message']}"
...
완전한 제어를 위해 BaseA2AAdapter를 상속하세요.
완전한 제어를 위해 BaseA2AAdapter를 상속하세요.
from a2a_adapter import BaseA2AAdapter, serve_agent
class MyAdapter(BaseA2AAdapter):
async def invoke(self, user_input: str, context_id: str | None = None, **kwargs) -> str:
...
A2A Caller (다른 에이전트)
│ A2A 프로토콜 (HTTP + JSON-RPC 2.0 / SSE)
▼
...
설계 원칙: 어댑터는 오직 하나의 질문에 답합니다 —
— auto-parse JSON 문자열을 딕셔너리로 변환하는 parse_json_input
(fallback) — 텍스트를 input_key로 매핑합니다.
{input_key: text}
from a2a_adapter import load_adapter
adapter = load_adapter({
"adapter": "n8n",
...
from a2a_adapter import register_adapter, BaseA2AAdapter
@register_adapter("my_framework")
class MyFrameworkAdapter(BaseA2AAdapter):
...
Gunicorn/Hypercorn을 사용한 프로덕션 배포 시:
from a2a_adapter import N8nAdapter, to_a2a
adapter = N8nAdapter(webhook_url="http://localhost:5678/webhook/agent")
app = to_a2a(adapter) # Starlette ASGI 앱 반환
...
v0.2는 하위 호환성을 유지합니다 — v0.1 코드는 여전히 작동하지만 사용 중단 경고(deprecation warnings)를 발생시킵니다.
| v0.1 (사용 중단됨) | v0.2 (권장) |
|---|---|
BaseAgentAdapter | BaseA2AAdapter |
load_a2a_agent(config) | load_adapter(config) |
build_agent_app(card, adapter) | to_a2a(adapter) |
serve_agent(card, adapter) | serve_agent(adapter) |
N8nAgentAdapter | N8nAdapter |
3개 메서드 오버라이드 (to_framework + call_framework + from_framework) | 단일 invoke() 메서드 |
The examples/ 디렉터리에는 각 어댑터에 대한 작동 예제가 포함되어 있습니다:
python examples/n8n_agent.py # n8n
python examples/langchain_agent.py # LangChain (스트리밍)
python examples/langgraph_server.py # LangGraph (스트리밍)
...
자세한 내용은 examples/README.md를 참조하십시오.
pip install a2a-adapter[dev]
pytest # 모든 테스트
pytest tests/unit/ # 단위 테스트만
기여를 환영합니다! 지침은 CONTRIBUTING.md를 참조하십시오.
빠른 시작:
-
포크 및 클론
pip install -e ".[dev]" -
변경 사항 적용 + 테스트 추가
pytest
검증하려면 제출(Submit) PR을 하십시오.
Apache-2.0 — LICENSE 참조.
HYBRO AI가 정성을 다해 구축했습니다. A2A 프로토콜 기반입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기