Agent2Agent (A2A) adalah standar terbuka yang dirancang untuk memungkinkan komunikasi dan kolaborasi lancar antar agen AI. Penerapan server A2A di Knative memanfaatkan fitur-fitur seperti penskalaan otomatis—termasuk scale-in hingga nol—untuk memungkinkan penggunaan sumber daya sesuai permintaan dan iterasi versi yang cepat.
Cara kerja
Agen AI memiliki kemampuan inferensi, perencanaan, dan memori, sehingga dapat belajar secara otonom serta menyelesaikan tugas atas nama pengguna. Mirip dengan cara MCP menyediakan standar akses data untuk LLM, protokol Agent2Agent (A2A) menetapkan kerangka kerja standar untuk interoperabilitas antar agen.
Penerapan server A2A di Knative melibatkan interaksi inti berikut:
-
Discovery: Setelah diterapkan, layanan mengekspos antarmukanya melalui agent card standar, memungkinkan agen lain mengkueri keterampilannya (AgentSkill) dan kemampuannya (AgentCapabilities).
-
Komunikasi: Gunakan kemampuan gateway dan routing layanan Knative untuk menangani pertukaran pesan standar melalui HTTP atau gRPC.
-
Kolaborasi: Agen mendelegasikan tugas dan mengoordinasikan aksi melalui API.
Lihat spesifikasi A2A untuk arsitektur protokol dan konsep utama komunikasi agen.
Persiapan
-
Terapkan Knative di kluster Anda. Untuk informasi lebih lanjut, lihat Deploy and manage Knative components.
-
Anda telah deployed Knative di kluster ACS.
-
Anda telah memperoleh alamat akses gateway.
Anda dapat menemukannya di halaman Add-ons atau Services. Contoh berikut menunjukkan cara menemukannya.
Di bagian bawah halaman Service Management, lihat alamat Access Gateway. Formatnya sebagai berikut:
alb-<instance ID>.cn-hangzhou.alb.aliyuncsslb.com.
Langkah 1: Deploy server A2A
Contoh ini menerapkan layanan agen dasar bernama helloworld-agent-server.
-
Buat file
a2a-service.yaml.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-agent-server # Perbarui namespace sesuai kebutuhan namespace: default annotations: # Gunakan domain wildcard untuk validasi cepat knative.aliyun.com/serving-ingress: / spec: template: spec: containers: # Ganti {region} dengan wilayah Anda yang sebenarnya, misalnya cn-hangzhou - image: registry-{region}-vpc.ack.aliyuncs.com/acs/knative-samples-a2a:v1.0-952c112 name: user-container env: # INVOKE menentukan URL invoke yang dikembalikan dalam Agent Card. Ganti dengan alamat gateway Anda. - name: INVOKE value: http://<YOUR_GATEWAY_ADDRESS>/invoke ports: - containerPort: 9001 name: http1 protocol: TCP -
Terapkan layanan tersebut.
kubectl apply -f a2a-service.yaml -
Periksa status Knative Service.
kubectl get ksvc helloworld-agent-serverOutput yang diharapkan:
NAME URL LATESTCREATED LATESTREADY READY REASON helloworld-agent-server http://helloworld-agent-server.default.example.com helloworld-agent-server-00001 helloworld-agent-server-00001 True
Langkah 2: Verifikasi layanan dan ambil agent card
Setelah penerapan, verifikasi bahwa layanan mengembalikan agent card yang sesuai dengan protokol A2A.
-
Dapatkan alamat gateway dan nama domain default layanan.
Di halaman ACK Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Masuk ke ACS console. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih .
-
Di halaman Services, dapatkan Default Domain layanan tersebut.
Berikut ini menampilkan Gateway dan Default Domain.
Alamat gateway mengikuti format berikut:
alb-<instance ID>.cn-hangzhou.alb.aliyuncsslb.com. Layanan helloworld-agent-server berada dalam status sukses, dan nama domain default-nya adalahhelloworld-agent-server.default.example.com.
-
Akses titik akhir metadata layanan.
# Ganti <GATEWAY_ADDRESS> dengan alamat gateway Anda yang sebenarnya curl http://<GATEWAY_ADDRESS>/.well-known/agent-card.json | jq .Tinjau output yang diharapkan.
Output harus mencakup kemampuan agen (capabilities), deskripsi (description), dan daftar keterampilan (skills).{ "capabilities": { "streaming": true }, "defaultInputModes": [ "text" ], "defaultOutputModes": [ "text" ], "description": "Just a hello world agent", "name": "Hello World Agent", "preferredTransport": "JSONRPC", "protocolVersion": "", "skills": [ { "description": "Returns a 'Hello, world!'", "examples": [ "hi", "hello" ], "id": "hello_world", "name": "Hello, world!", "tags": [ "hello world" ] } ], "url": "http://XXX/invoke", "version": "" }
Langkah 3: Panggil layanan menggunakan klien A2A
Tulis kode klien dalam Golang untuk mensimulasikan agen lain yang berkomunikasi dengan server A2A yang telah diterapkan.
-
Siapkan lingkungan pengembangan Anda dan instal Go.
-
Buat file bernama main.go dan tambahkan kode berikut.
package main import ( "context" "flag" "log" // Impor pustaka inti untuk protokol A2A "github.com/a2aproject/a2a-go/a2a" "github.com/a2aproject/a2a-go/a2aclient" "github.com/a2aproject/a2a-go/a2aclient/agentcard" // Impor pustaka terkait gRPC "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" ) // Ganti <GATEWAY_ADDRESS> dengan alamat gateway Anda yang sebenarnya var cardURL = flag.String("card-url", "http://<GATEWAY_ADDRESS>", "Base URL of AgentCard client.") func main() { flag.Parse() ctx := context.Background() // Service discovery card, err := agentcard.DefaultResolver.Resolve(ctx, *cardURL) if err != nil { log.Fatalf("Failed to resolve an AgentCard: %v", err) } // Konfigurasikan lapisan transport withInsecureGRPC := a2aclient.WithGRPCTransport(grpc.WithTransportCredentials(insecure.NewCredentials())) // Buat klien client, err := a2aclient.NewFromCard(ctx, card, withInsecureGRPC) if err != nil { log.Fatalf("Failed to create a client: %v", err) } // Bangun pesan msg := a2a.NewMessage(a2a.MessageRoleUser, a2a.TextPart{Text: "Hello, world"}) resp, err := client.SendMessage(ctx, &a2a.MessageSendParams{Message: msg}) if err != nil { log.Fatalf("Failed to send a message: %v", err) } log.Printf("Server responded with: %+v", resp) } -
Jalankan kode untuk pengujian.
go mod init a2a-demo go mod tidy go run main.goOutput berikut menunjukkan bahwa klien berhasil terhubung ke layanan Knative dan menerima respons dari server.
2025/11/27 17:24:21 Server responded with: &{ID:019ac4a0-c386-7cdc-9aad-d40fb8f98ae2 ContextID: Extensions:[] Metadata:map[] Parts:[{Text:Hello, world! Metadata:map[]}] ReferenceTasks:[] Role:agent TaskID:}
Rekomendasi lingkungan produksi
-
Domain kustom dan HTTPS: Jangan gunakan domain pengujian di lingkungan produksi. Konfigurasikan nama domain kustom dan aktifkan sertifikat HTTPS untuk mengamankan komunikasi antar agen.
-
Optimalisasi cold start: Jika panggilan agen jarang terjadi, Knative akan menskalakan instans hingga nol. Untuk menghindari latensi cold-start pada permintaan pertama, konfigurasikan jumlah instans minimum (MinScale) atau configure reserved instances.
Tagihan
Knative itu sendiri tidak dikenai biaya tambahan. Namun, Anda akan ditagih untuk layanan cloud yang Anda gunakan, seperti resource komputasi dan jaringan. Untuk informasi lebih lanjut, lihat Cloud service costs dan Billing.