본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 06. 10. 04:52

어떤 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_permissionsFalse입니다. 이것이 없으면 (그리고 사전에 구성된 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_approvalsskip_git_checkFalse입니다. 신뢰할 수 있고 격리된 환경에만 사용하세요:
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 (권장)
BaseAgentAdapterBaseA2AAdapter
load_a2a_agent(config)load_adapter(config)
build_agent_app(card, adapter)to_a2a(adapter)
serve_agent(card, adapter)serve_agent(adapter)
N8nAgentAdapterN8nAdapter
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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0