Files
test-repo/docs/.vitepress/theme/components/appendix/ai-protocols/A2AVisualDemo.vue
T
sanbuphy e5a5b9df5b feat(ai-protocols): add MCP and A2A protocol demos and documentation
docs(ai-protocols): update AI protocols page with visual demos and detailed explanations
style(git-demos): improve responsive design and layout for git visualization components
refactor(ai-history): simplify and clean up demo components
chore: update config to register new AI protocol components
2026-02-22 18:26:19 +08:00

222 lines
5.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="a2a-visual-demo">
<div class="section-title">A2A 是什么</div>
<div class="intro-text">
A2AAgent-to-Agent Protocol Google 2025 4 月推出的<strong>Agent 之间相互协作的通信标准</strong>它让不同厂商不同框架的 Agent 能够相互发现分配任务交换信息就像给 AI 世界装上了"对讲机"
</div>
<div class="section-title">核心概念</div>
<div class="concepts-grid">
<div class="concept">
<div class="concept-title">Agent CardAgent 名片</div>
<div class="concept-desc">每个 Agent 公开的元数据包括能力描述版本号端点地址等相当于人的"名片"</div>
</div>
<div class="concept">
<div class="concept-title">Task任务</div>
<div class="concept-desc">Agent 之间传递的工作单元可以包含多轮对话文件附件等</div>
</div>
<div class="concept">
<div class="concept-title">Message消息</div>
<div class="concept-desc">Agent 之间的通信内容支持文本文件语音等多模态</div>
</div>
<div class="concept">
<div class="concept-title">SSEServer-Sent Events</div>
<div class="concept-desc">服务器推送技术用于实时任务进度更新</div>
</div>
</div>
<div class="section-title">什么时候用 A2A</div>
<div class="use-cases">
<div class="use-case">
<div class="use-case-title">当需要多个 Agent 协作完成复杂任务时</div>
<div class="use-case-desc">一个 Agent 负责需求分析一个负责写代码一个负责测试各自发挥专长</div>
</div>
<div class="use-case">
<div class="use-case-title">当需要集成不同厂商的 Agent </div>
<div class="use-case-desc">Google AgentAnthropic AgentOpenAI Agent 需要相互协作</div>
</div>
<div class="use-case">
<div class="use-case-title">当需要任务委托和进度追踪时</div>
<div class="use-case-desc"> Agent 分配任务给专家 Agent并实时接收进度更新</div>
</div>
</div>
<div class="section-title">如何使用 A2A</div>
<div class="usage-steps">
<div class="step">
<div class="step-num">1</div>
<div class="step-content">
<div class="step-title">发布 Agent Card</div>
<div class="step-desc"> /.well-known/agent.json 路径暴露 Agent 的能力描述</div>
</div>
</div>
<div class="step">
<div class="step-num">2</div>
<div class="step-content">
<div class="step-title">发现 Agent</div>
<div class="step-desc">通过 agents/get API 获取其他 Agent 的名片了解其能力</div>
</div>
</div>
<div class="step">
<div class="step-num">3</div>
<div class="step-content">
<div class="step-title">发送任务</div>
<div class="step-desc">通过 tasks/send API 发送任务支持 SSE 接收进度更新</div>
</div>
</div>
<div class="step">
<div class="step-num">4</div>
<div class="step-content">
<div class="step-title">获取结果</div>
<div class="step-desc">任务完成后通过 tasks/get API 获取最终结果</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
</script>
<style scoped>
.a2a-visual-demo {
border: 1px solid var(--vp-c-divider);
border-radius: 6px;
background: var(--vp-c-bg-soft);
padding: 1.25rem;
margin: 1rem 0;
}
.section-title {
font-weight: 600;
font-size: 1rem;
color: var(--vp-c-text-1);
margin-bottom: 0.75rem;
margin-top: 1.25rem;
}
.section-title:first-child {
margin-top: 0;
}
.intro-text {
font-size: 0.9rem;
color: var(--vp-c-text-2);
line-height: 1.6;
margin-bottom: 1rem;
}
.intro-text strong {
color: var(--vp-c-brand);
}
.concepts-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 0.6rem;
margin-bottom: 1rem;
}
.concept {
padding: 0.75rem;
background: var(--vp-c-bg);
border-radius: 6px;
}
.concept-title {
font-weight: 600;
font-size: 0.85rem;
color: var(--vp-c-text-1);
margin-bottom: 0.3rem;
}
.concept-desc {
font-size: 0.75rem;
color: var(--vp-c-text-2);
line-height: 1.4;
}
.use-cases {
display: flex;
flex-direction: column;
gap: 0.6rem;
margin-bottom: 1rem;
}
.use-case {
padding: 0.75rem;
background: var(--vp-c-bg);
border-radius: 6px;
border-left: 3px solid var(--vp-c-brand);
}
.use-case-title {
font-weight: 600;
font-size: 0.85rem;
color: var(--vp-c-text-1);
margin-bottom: 0.3rem;
}
.use-case-desc {
font-size: 0.8rem;
color: var(--vp-c-text-2);
line-height: 1.4;
}
.usage-steps {
display: flex;
flex-direction: column;
gap: 0.6rem;
}
.step {
display: flex;
align-items: flex-start;
gap: 0.75rem;
padding: 0.75rem;
background: var(--vp-c-bg);
border-radius: 6px;
}
.step-num {
display: flex;
align-items: center;
justify-content: center;
width: 1.5rem;
height: 1.5rem;
background: var(--vp-c-brand);
color: white;
border-radius: 50%;
font-size: 0.75rem;
font-weight: 600;
flex-shrink: 0;
}
.step-content {
flex: 1;
}
.step-title {
font-weight: 600;
font-size: 0.85rem;
color: var(--vp-c-text-1);
margin-bottom: 0.2rem;
}
.step-desc {
font-size: 0.8rem;
color: var(--vp-c-text-2);
line-height: 1.4;
}
@media (max-width: 640px) {
.concepts-grid {
grid-template-columns: 1fr;
}
}
</style>