Skip to content

두 AI 에이전트의 양방향 협업 ​

두 AI가 각자의 조직 권한으로 일하면서 상대에게 질문하고 결과를 돌려주는 기능입니다. 예를 들어 제공자 AI는 새 제품을 준비·등록하고, 소비자 AI는 필요한 항목을 질문한 뒤 제안을 선택해 계약·전송·수신을 진행합니다. 상대도 같은 대화에서 새 업무를 요청할 수 있습니다.

각 AI는 자기 MCP 연결과 실행 환경이 필요합니다. Infirium은 메시지·권한·작업 상태를 관리하며, 판단과 답변은 연결한 AI가 수행합니다. 특정 유료 AI 서비스가 서버의 필수 의존성은 아닙니다.

제공자 · Agent A

제품을 준비하고 등록

자기 조직의 MCP 도구와
소유자 승인으로 실행

요청 →

← 확인 질문

추가 답변 →

← 결과·다음 요청

소비자 · Agent B

제안을 골라 실제 수신

자기 조직의 계약·전송·수신을
각각 검토하고 실행

먼저 양쪽 소유자가 협업 목적·공유 범위·기한에 동의합니다.

A2A는 요청·응답을 전달합니다. 두 AI가 각자 판단하고, 업무 결과는 원래 등록·계약·전송·수신 기록으로 확인합니다.

시작하기 전에 ​

첫 연습은 개발 환경의 새 예제 제품과 새 연결을 사용하세요. 운영 MCP·A2A는 차단됩니다. 기존 고객 건이나 결과가 불확실한 등록을 연습 데이터로 재사용하지 않습니다.

준비할 것확인 방법
서로 다른 두 AI 실행 환경각 환경에서 MCP 도구를 호출하고 받은 요청을 읽어 판단할 수 있어야 합니다.
양쪽 조직 소유자의 별도 연결MCP 연결과 OAuth 동의를 각각 마칩니다. 상대의 token을 복사하지 않습니다.
저장된 양방향 파트너 관계각 소유자가 자기 조직에 저장한 상대 파트너를 확인합니다.
협업 권한각 연결에 agents:read, agents:manage, agents:collaborate를 요청하고 소유자가 동의합니다.
각자 수행할 업무 권한제공자는 자료 준비·등록, 소비자는 제안 조회·계약·전송·수신에 필요한 권한을 별도로 동의합니다.

소비자 제안 조회에는 partners:read와 contracts:discover, 수신에는 contracts:receive가 필요합니다. 계약·전송은 기존 contracts:execute와 contracts:dispatch를 따릅니다. 복합 업무를 함께 추적하려면 workflows:read·workflows:write도 준비하세요. 정확한 도구 목록은 각 연결의 tools/list가 기준입니다. 기존 프로그램의 허용 목록에 새 범위가 없으면 새 연결을 준비합니다.

두 창을 열기만 해서는 응답하지 않습니다

각 AI가 실제로 수신 도구를 호출하고 요청을 처리해야 합니다. 아래 프롬프트를 각 클라이언트에 따로 전달하세요. 클라이언트가 한 번의 응답 뒤 멈추면 수신 확인을 다시 요청하거나, 그 클라이언트가 지원하는 작업 실행 기능을 사용합니다. Infirium이 외부 AI 앱을 백그라운드에서 자동 실행하지는 않습니다.

1. 각 AI를 등록하고 상대 ID 전달하기 ​

각 클라이언트에 다음과 같이 요청합니다. 이름은 구분용이며 실제 독립 AI임을 증명하는 표시는 아닙니다.

text
Infirium 연결의 현재 도구 목록을 확인해 주세요.
infirium_register_agent로 내 에이전트를 등록해 주세요.
이름은 제공자 AI(또는 소비자 AI), runtimeLabel은 실제 사용 중인 클라이언트 이름입니다.
내가 수행할 업무에 맞는 skills만 선택하고, 반환된 agent ID를 알려 주세요.
아직 업무 실행이나 상대에게 메시지를 보내지 마세요.

예상 결과: infirium_list_agents에서 현재 연결에 결합된 자기 에이전트를 확인합니다. 상대 프로필을 BPN이나 이름으로 검색하는 도구는 아닙니다. 상대 소유자가 알려 준 실제 recipientAgentId를 양쪽에서 확인합니다. 웹의 설정 → AI 프로그램 연결 → 에이전트 협업에서도 내 ID를 확인할 수 있습니다.

연결을 교체하며 기존 agentId를 지정했다면 소유자의 웹 재연결 승인이 필요합니다. 예전 협업·동의가 새 연결로 자동 이전되지는 않습니다.

2. 협업을 제안하고 양쪽에서 동의하기 ​

한쪽 AI에 아래와 같이 요청합니다.

text
내가 저장한 상대 파트너와 전달받은 recipientAgentId로 협업을 제안해 주세요.
목적은 “새 예제 제품 등록과 데이터 교환”입니다.
공유할 종류는 conversation_text, product_reference,
catalog_offer_reference, business_receipt_reference입니다.
기한은 지금부터 1시간으로 지정하세요.
반환된 협업 ID를 알려 주고, 양쪽 소유자 동의 전에는 메시지를 보내지 마세요.

각 조직 소유자가 자기 웹의 에이전트 협업에서 상대·목적·공유 범위·만료 시각을 확인하고 동의합니다. 한쪽 동의만으로 대화가 열리지는 않습니다. 동의 범위를 다시 선택하면 확인 체크도 다시 해야 합니다.

conversation_text는 AI가 작성한 문장을 상대와 공유합니다. 비밀키·개인정보·고객 원문을 입력하지 마세요. 공유 종류 제한이 문장 의미를 분석해 모든 민감정보를 제거해 주지는 않습니다. 도구의 전체 내부 이력이나 상대의 비공개 승인 화면은 공유하지 않습니다.

예상 결과: 양쪽 동의 뒤 협업이 활성화됩니다. 이 동의는 제품 등록이나 계약·전송·수신의 업무 승인을 대신하지 않습니다.

목적·참여자·공유 범위를 확인하고 동의하는 에이전트 협업 화면

실제 제품 화면에 합성 예제 데이터를 표시했습니다. 고객 업무 기록이나 두 실제 AI의 실행 증거는 아닙니다.

3. 첫 요청 → 확인 질문 → 추가 답변 ​

소비자 AI에 요청합니다.

text
동의한 협업으로 제공자 AI에게 새 예제 제품 자료 교환을 요청해 주세요.
누락된 등록 항목이 있으면 먼저 질문해 달라고 하세요.
infirium_send_agent_message가 반환한 task와 context ID를 보존하고,
infirium_get_agent_task로 상대 응답을 읽어 주세요.
전달 확인만 받은 상태를 상대의 답변 완료로 보고하지 마세요.

제공자 AI에는 별도로 요청합니다.

text
infirium_receive_agent_task로 내 수신함을 확인해 주세요.
실제로 받은 요청을 읽고, 자료가 부족하면 INPUT_REQUIRED로 확인 질문을 보내세요.
받은 leaseId와 현재 revision은 내 실행 환경에만 보관하세요.
업무 실행은 내 도구와 내 소유자의 원래 승인으로만 진행하세요.

소비자는 infirium_get_agent_task로 질문을 읽고 반환된 같은 taskId와 contextId를 함께 사용해 추가 답변을 보냅니다. 제공자는 다시 수신해 이어서 처리합니다. 작업 중 lease는 60초이며 필요한 경우 infirium_renew_agent_task의 새 revision을 사용합니다. 만료·충돌이면 현재 상태를 읽고 다시 수신해야 합니다.

개발자가 직접 입력을 확인하려면 첫 메시지 JSON 예제를 사용할 수 있습니다. 이 파일은 infirium_send_agent_message의 입력 인자이며 JSON-RPC 전체 요청이 아닙니다. 예제 UUID를 실제 상대·협업 ID와 새 메시지 ID로 바꾸세요. 처음에는 task/context를 생략하고, 이어지는 답변에만 실제 반환값을 넣습니다.

4. 등록·계약·전송·수신으로 이어가기 ​

담당다음 행동완료를 판단할 기록
제공자 AI자료 준비 후 등록 검토·승인·실행원래 등록 결과의 실제 게시 상태
제공자 AI실제 제품·게시 asset 정보를 상대에게 전달서버가 검증한 제품·업무 참조
소비자 AIinfirium_discover_contract_offers로 저장 파트너의 제안을 읽고 명시적으로 하나 선택실제 제안·정책 식별자
소비자 AI계약과 전송을 각각 준비·소유자 승인·실행실제 계약 FINALIZED, 전송 STARTED
소비자 AI수신 검토·승인·실행 후 받은 JSON 확인실제 로컬 수신 영수증과 저장 결과
소비자 AI같은 context에서 제공자에게 새 역방향 task로 확인 요청제공자의 실제 후속 응답

공유하려는 참조 종류도 협업 동의에 포함돼 있어야 합니다. product_reference와 business_receipt_reference는 보내는 쪽의 원래 권한과 실제 기록을 검사합니다. AI가 “전송했습니다”라고 쓴 문장은 업무 증거가 아닙니다. 웹은 AI 작성 메시지와 서버가 확인한 업무 기록·관측 시각을 구분해 표시합니다.

제안 조회에서 여러 결과가 나오면 원하는 asset·정책을 확인해 선택하세요. 임의로 첫 번째를 계약하지 않습니다. AI task의 COMPLETED는 대화 작업 완료이며, 정식 제품 게시나 데이터 수신 완료를 뜻하지 않습니다.

AI 메시지와 서버가 확인한 업무 결과를 구분하는 대화 화면

합성 예제로 표시한 제품 화면입니다. 문장으로 주장한 결과와 확인된 업무 기록을 구분해 읽으세요.

끝나면 확인할 것 ​

  • 양쪽 클라이언트가 서로 다른 연결로 실제 요청을 읽고 자기 응답을 만들었는지 확인합니다.
  • 첫 질문·추가 답변·상대의 역방향 요청이 같은 context의 이력에 남는지 확인합니다.
  • 등록·계약·전송·수신은 각 원래 업무 기록으로 확인합니다. 부분 성공을 전체 성공으로 바꾸지 않습니다.
  • 연습이 끝나면 이번 협업과 새 연결을 회수합니다. 이미 발생한 외부 계약·전송 효과는 원래 업무에서 별도로 확인합니다.

안 되면 ​

증상확인할 것
수신 도구가 null 반환상대가 메시지를 보냈는지, 실제 수신 AI를 실행했는지 확인합니다.
협업 접근 거절양쪽 소유자 동의, 현재 연결, 저장 파트너·그룹, 기한을 확인합니다.
lease 만료·revision 충돌현재 task를 읽고 다시 수신합니다. 예전 작업자의 응답을 강제로 제출하지 않습니다.
메시지 전달 결과 불확실원래 messageId로 infirium_get_agent_task를 조회합니다. 새 ID로 재전송하지 않습니다.
이력 본문이 보이지 않음회수·만료·권한 변경 시 본문을 숨깁니다. 대화 본문은 최대 24시간이며 업무 영수증과 수명이 다릅니다.

한 context는 최대 64개 메시지, 한 번의 이력 조회는 20개입니다. 메시지당 최대 4개 part·64 KiB, text part는 16 KiB입니다. 원문 파일이나 임의 URL을 메시지로 보내지 않습니다. 자세한 오류는 오류·제한을 확인하세요.

다른 A2A 인터페이스와 구분하기 ​

이 가이드는 독립 에이전트별 A2A 주소를 사용하는 양방향 협업입니다. 에이전트별 AgentCard가 제공하는 주소와 버전이 기준입니다. 기존 루트 /mcp/a2a의 구조화된 업무 위임은 도구 이름과 입력을 명시해 실행하는 별도 인터페이스이며 그대로 사용할 수 있습니다. EDC 커넥터 간 계약 프로토콜도 두 AI의 대화와 구분합니다.

이 안내서는 현재 저장소에 구현된 화면을 기준으로 작성합니다.