目录
1. 核心概念
1.1 智能体定义
智能体(Agent)是一个能够自主感知环境、进行推理、做出决策并执行动作的计算实体。与传统软件组件不同,智能体具有以下核心特性:
| 特性 | 说明 |
|---|---|
| 自主性(Autonomy) | 无需人工干预,独立决策和执行 |
| 反应性(Reactivity) | 感知环境变化并及时响应 |
| 主动性(Proactivity) | 主动采取行动以达成目标 |
| 社会性(Social Ability) | 与其他智能体或人类进行交互 |
1.2 智能体类型
┌─────────────────────────────────────────────────────┐
│ 智能体分类体系 │
├─────────────────┬───────────────────────────────────┤
│ 按能力划分 │ • 通用智能体(General Agent) │
│ │ • 专用智能体(Specialized Agent) │
├─────────────────┼───────────────────────────────────┤
│ 按架构划分 │ • 反应式(Reactive) │
│ │ • 认知式(Cognitive/Deliberative) │
│ │ • 混合式(Hybrid) │
├─────────────────┼───────────────────────────────────┤
│ 按角色划分 │ • 执行者(Executor) │
│ │ • 协调者(Coordinator) │
│ │ • 监督者(Monitor) │
│ │ • 评审者(Reviewer) │
└─────────────────┴───────────────────────────────────┘
1.3 基础接口模型
typescript
// 智能体核心接口
interface Agent {
id: string;
name: string;
capabilities: string[];
model: string; // 底层 LLM 模型
// 核心循环
perceive(input: AgentInput): Observation;
reason(observation: Observation): Thought;
decide(thought: Thought): Decision;
execute(decision: Decision): ActionResult;
// 通信能力
sendMessage(message: Message): Promise<void>;
receiveMessage(): Promise<Message>;
}
// 智能体输入
interface AgentInput {
prompt: string; // 任务指令
context?: string; // 上下文信息
tools?: Tool[]; // 可用工具集
constraints?: Constraints; // 约束条件
}
// 智能体输出
interface AgentOutput {
result: string; // 最终结果
reasoning: string; // 推理过程
toolCalls: ToolCall[]; // 工具调用记录
metadata: AgentMetadata; // 元数据
}
2. 架构模式
2.1 分层架构(Layered Architecture)
┌─────────────────────────────────────────────────────┐
│ Application Layer(应用层) │
│ 业务逻辑、用户交互、结果呈现 │
├─────────────────────────────────────────────────────┤
│ Orchestration Layer(编排层) │
│ 任务分解、调度策略、流程控制、异常处理 │
├─────────────────────────────────────────────────────┤
│ Agent Layer(智能体层) │
│ 智能体实例、推理引擎、工具调用 │
├─────────────────────────────────────────────────────┤
│ Communication Layer(通信层) │
│ 消息传递、协议处理、序列化/反序列化 │
├─────────────────────────────────────────────────────┤
│ Infrastructure Layer(基础设施层) │
│ 运行时环境、资源管理、监控日志 │
└─────────────────────────────────────────────────────┘
各层职责:
- 应用层:接收用户请求,返回结构化结果,处理用户交互
- 编排层:将复杂任务分解为子任务,分配给合适的智能体,监控执行进度
- 智能体层:承载具体的推理和执行逻辑,管理工具调用
- 通信层:实现智能体间的消息传递,保证消息可靠投递
- 基础设施层:提供运行时支持,包括内存管理、并发控制、错误恢复
2.2 拓扑结构
星型拓扑(Star Topology)
Agent A
│
▼
Agent B ◄── Coordinator ──► Agent C
│
▼
Agent D
- 优点:集中控制,易于管理
- 缺点:单点故障,协调者瓶颈
- 适用:任务分解明确、子任务独立性强的场景
网状拓扑(Mesh Topology)
Agent A ◄──────► Agent B
▲ ╲ ╱ ▲
│ ╲ ╱ │
│ ╲ ╱ │
▼ ╲╱ ▼
Agent C ◄──────► Agent D
- 优点:无单点故障,灵活性高
- 缺点:协调复杂度高
- 适用:需要频繁协商和信息交换的场景
层级拓扑(Hierarchical Topology)
┌─────────┐
│ Manager │
└────┬────┘
┌─────────┼─────────┐
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│ Lead A │ │ Lead B │ │ Lead C │
└───┬────┘ └───┬────┘ └───┬────┘
┌─┴─┐ ┌─┴─┐ ┌─┴─┐
▼ ▼ ▼ ▼ ▼ ▼
W1 W2 W3 W4 W5 W6
- 优点:职责清晰,可扩展性好
- 缺点:层级过深导致信息传递延迟
- 适用:大规模任务、需要分级管理的场景
2.3 协作模式对比
| 模式 | 描述 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|
| 主从式(Master-Slave) | 中央控制器分配任务,智能体执行并汇报 | 简单高效,易于监控 | 单点瓶颈 | Workflow.phase() |
| 对等式(Peer-to-Peer) | 智能体平等协商,共同决策 | 鲁棒性强,无单点故障 | 协调复杂 | parallel() 并发 |
| 市场式(Market-based) | 竞标机制,按能力分配任务 | 资源利用率高 | 需要定价机制 | 动态负载均衡 |
| 黑板式(Blackboard) | 共享知识空间,智能体异步协作 | 解耦程度高 | 一致性维护复杂 | 复杂推理任务 |
3. 通信机制
3.1 消息传递模型
基于言语行为理论(Speech Act Theory),智能体通信采用**述行语(Performatives)**作为消息类型:
typescript
// 消息类型定义
type Performative =
| 'REQUEST' // 请求执行某项服务
| 'INFORM' // 传递信息或知识
| 'PROPOSE' // 提出建议或方案
| 'ACCEPT' // 接受提议
| 'REJECT' // 拒绝提议
| 'QUERY' // 查询信息
| 'CONFIRM' // 确认事实
| 'DISCONFIRM' // 否认事实
| 'CFP' // 征求提案(Call for Proposals)
| 'FAILURE' // 报告任务失败
| 'DONE' // 报告任务完成
// 消息结构
interface AgentMessage {
id: string; // 消息唯一标识
performative: Performative; // 消息类型
sender: AgentId; // 发送方
receiver: AgentId | AgentId[]; // 接收方(支持广播)
content: MessageContent; // 消息内容
inReplyTo?: string; // 回复目标消息ID
conversationId: string; // 会话ID
timestamp: number; // 时间戳
priority?: number; // 优先级
ttl?: number; // 生存时间(毫秒)
}
3.2 通信协议
同步通信(Synchronous)
Agent A Agent B
│ │
│──── REQUEST(task) ──────►│
│ │ (处理中...)
│◄──── RESULT(data) ──────│
│ │
- 适用场景:需要立即获取结果的交互
- 实现方式:
await agent(prompt)阻塞等待
异步通信(Asynchronous)
Agent A Agent B
│ │
│──── REQUEST(task) ──────►│
│ │ (继续其他工作)
│ │
│◄──── INFORM(result) ────│
│ │
- 适用场景:耗时任务、并行处理
- 实现方式:
agent(prompt, {run_in_background: true})
3.3 会话协议
请求-响应协议
Initiator Participant
│ │
│──── CFP(query) ───────►│
│ │
│◄─── PROPOSE(answer) ───│
│ │
│──── ACCEPT ────────────►│
│ │
│◄─── DONE ──────────────│
委托协议(Contract Net)
Manager Worker
│ │
│──── CFP(task) ─────────►│
│ │ (评估能力)
│◄─── PROPOSE(cost) ──────│
│ │
│──── ACCEPT(proposal) ───►│
│ │ (执行任务)
│◄─── INFORM(result) ─────│
4. 任务分解与调度
4.1 任务分解策略
递归分解(Recursive Decomposition)
typescript
interface Task {
id: string;
description: string;
complexity: number; // 复杂度评分
dependencies: string[]; // 依赖任务ID
subtasks?: Task[]; // 子任务
assignedTo?: AgentId; // 分配的智能体
status: TaskStatus;
}
// 分解算法
function decompose(task: Task, threshold: number): Task[] {
if (task.complexity <= threshold) {
return [task]; // 已足够简单,不再分解
}
const subtasks = analyzeAndSplit(task);
return subtasks.flatMap(st => decompose(st, threshold));
}
基于能力的分解
原始任务: "构建完整的用户认证系统"
分解结果:
┌─────────────────────────────────────────────────┐
│ Subtask 1: 设计认证架构 │
│ → 分配给: Architecture Agent │
│ → 能力要求: ["system-design", "security"] │
├─────────────────────────────────────────────────┤
│ Subtask 2: 实现 JWT 令牌服务 │
│ → 分配给: Backend Agent │
│ → 能力要求: ["node.js", "cryptography"] │
├─────────────────────────────────────────────────┤
│ Subtask 3: 构建登录 UI 组件 │
│ → 分配给: Frontend Agent │
│ → 能力要求: ["react", "ui-design"] │
├─────────────────────────────────────────────────┤
│ Subtask 4: 编写集成测试 │
│ → 分配给: Testing Agent │
│ → 能力要求: ["testing", "automation"] │
└─────────────────────────────────────────────────┘
4.2 调度算法
优先级调度
typescript
class PriorityScheduler {
private queue: PriorityQueue<Task>;
schedule(tasks: Task[]): Assignment[] {
// 计算优先级分数
const scored = tasks.map(task => ({
task,
priority: this.calculatePriority(task)
}));
// 按优先级排序
this.queue.enqueue(scored);
// 贪心分配
const assignments: Assignment[] = [];
while (!this.queue.isEmpty()) {
const task = this.queue.dequeue();
const agent = this.findBestAgent(task);
assignments.push({ task, agent });
}
return assignments;
}
private calculatePriority(task: Task): number {
// 考虑因素:紧急度、依赖关系、资源需求
const urgency = task.deadline ?
1 / (task.deadline - Date.now()) : 0.5;
const dependency = task.dependents.length / 10;
const complexity = task.complexity / 100;
return urgency * 0.5 + dependency * 0.3 + complexity * 0.2;
}
}
依赖感知调度
typescript
function scheduleWithDependencies(tasks: Task[]): ExecutionPlan {
// 构建依赖图
const graph = buildDependencyGraph(tasks);
// 拓扑排序获取执行顺序
const levels = topologicalSort(graph);
// 同一层级的任务可以并行执行
const plan: ExecutionPlan = {
stages: levels.map(level => ({
parallel: level, // 并行执行的任务组
barrier: true // 等待所有任务完成
}))
};
return plan;
}
/*
执行计划示例:
Stage 1 (并行):
├── Task A: 设计数据库 schema
├── Task B: 定义 API 接口
└── Task C: 创建项目结构
Stage 2 (等待 Stage 1 完成):
├── Task D: 实现数据模型 (依赖 A)
├── Task E: 实现 API 路由 (依赖 B, C)
└── Task F: 配置中间件 (依赖 C)
Stage 3 (等待 Stage 2 完成):
└── Task G: 集成测试 (依赖 D, E, F)
*/
4.3 执行模式
Pipeline 模式
typescript
// Pipeline: 每个项目独立流经所有阶段,无需等待
const results = await pipeline(
items, // 输入数据集
stage1, // 第一阶段处理
stage2, // 第二阶段处理
stage3 // 第三阶段处理
);
/*
执行流程:
Item 1: [Stage 1] ──► [Stage 2] ──► [Stage 3] ──► Done
Item 2: [Stage 1] ──► [Stage 2] ──► [Stage 3] ──► Done
Item 3: [Stage 1] ──► [Stage 2] ──► [Stage 3] ──► Done
特点: 高吞吐量,充分利用并行性
适用: 批量处理、流式处理
*/
Barrier 模式
typescript
// Barrier: 等待所有并行任务完成后继续
const results = await parallel([
() => agent("任务 A"),
() => agent("任务 B"),
() => agent("任务 C")
]);
// 所有任务完成后才继续
/*
执行流程:
Task A: [============] ──┐
Task B: [================] ──┼──► 继续
Task C: [==========] ──┘
特点: 保证所有结果就绪
适用: 需要交叉引用结果的场景
*/
5. 协调策略
5.1 冲突解决
当多个智能体对同一资源或决策产生冲突时,需要协调机制:
投票机制(Voting)
typescript
async function resolveByVoting(
proposal: Proposal,
voters: Agent[],
threshold: number = 0.5
): Promise<VoteResult> {
// 并行收集投票
const votes = await parallel(
voters.map(voter => () =>
agent(`评估提案: ${proposal.description},投赞成或反对票`, {
schema: VoteSchema
})
)
);
const approvals = votes.filter(v => v?.approved).length;
const ratio = approvals / votes.length;
return {
approved: ratio >= threshold,
ratio,
votes
};
}
仲裁机制(Arbitration)
typescript
async function resolveByArbiter(
conflict: Conflict,
arbiter: Agent
): Promise<Resolution> {
// 收集各方立场
const positions = conflict.parties.map(p => ({
agent: p.agentId,
position: p.argument
}));
// 由仲裁者做出最终决策
const resolution = await agent(`
作为仲裁者,请基于以下各方立场做出公正裁决:
${JSON.stringify(positions, null, 2)}
考虑因素:
1. 技术可行性
2. 资源约束
3. 整体目标一致性
`, { schema: ResolutionSchema });
return resolution;
}
5.2 共识达成
多轮协商
typescript
async function multiRoundNegotiation(
participants: Agent[],
topic: string,
maxRounds: number = 3
): Promise<Consensus> {
let round = 0;
let proposals: Proposal[] = [];
while (round < maxRounds) {
// 每轮:提出建议 → 评估 → 修正
const evaluations = await parallel(
participants.map(p => () =>
agent(`第 ${round + 1} 轮:评估当前提案并提出修正建议`, {
context: { topic, currentProposals: proposals }
})
)
);
// 检查是否达成共识
const consensus = checkConsensus(evaluations);
if (consensus.reached) {
return consensus;
}
// 修正提案进入下一轮
proposals = refineProposals(proposals, evaluations);
round++;
}
// 超过最大轮次,强制决策
return forceDecision(proposals);
}
5.3 资源竞争处理
typescript
class ResourceManager {
private locks: Map<string, AgentId> = new Map();
private waitQueue: Map<string, WaitingAgent[]> = new Map();
async acquireResource(
resourceId: string,
agentId: AgentId
): Promise<ResourceHandle> {
// 尝试获取锁
if (!this.locks.has(resourceId)) {
this.locks.set(resourceId, agentId);
return this.createHandle(resourceId, agentId);
}
// 加入等待队列
return new Promise((resolve) => {
const queue = this.waitQueue.get(resourceId) || [];
queue.push({ agentId, resolve });
this.waitQueue.set(resourceId, queue);
});
}
releaseResource(resourceId: string, agentId: AgentId): void {
// 验证释放者是否是持有者
if (this.locks.get(resourceId) !== agentId) {
throw new Error('Unauthorized release');
}
// 唤醒下一个等待者
const queue = this.waitQueue.get(resourceId);
if (queue && queue.length > 0) {
const next = queue.shift()!;
this.locks.set(resourceId, next.agentId);
next.resolve(this.createHandle(resourceId, next.agentId));
} else {
this.locks.delete(resourceId);
}
}
}
6. 设计模式
6.1 对抗验证模式(Adversarial Verification)
防止看似合理但实际错误的结果通过验证:
typescript
async function adversarialVerify(
claim: Claim,
verifierCount: number = 3
): Promise<VerificationResult> {
// 生成多个独立的反驳者
const votes = await parallel(
Array.from({ length: verifierCount }, (_, i) => () =>
agent(`作为验证者 #${i + 1},尝试反驳以下声明。如果你无法找到反驳理由,请说明原因。`, {
claim,
instruction: '默认立场:已反驳(refuted=true),除非有充分证据支持',
schema: VerdictSchema
})
)
);
// 统计结果
const refuted = votes.filter(v => v?.refuted).length;
const survived = verifierCount - refuted;
return {
claim,
verified: survived >= Math.ceil(verifierCount / 2), // 需要多数支持
votes,
confidence: survived / verifierCount
};
}
6.2 多视角验证模式(Multi-Perspective Verification)
typescript
async function multiPerspectiveVerify(
finding: Finding
): Promise<VerificationResult> {
const perspectives = [
{ lens: 'correctness', prompt: '从正确性角度验证此发现' },
{ lens: 'security', prompt: '从安全性角度验证此发现' },
{ lens: 'performance', prompt: '从性能角度验证此发现' },
{ lens: 'reproducibility', prompt: '验证此发现是否可复现' }
];
// 并行从不同角度验证
const results = await parallel(
perspectives.map(p => () =>
agent(p.prompt, {
lens: p.lens,
finding,
schema: VerdictSchema
})
)
);
// 需要多数视角确认
const confirmed = results.filter(r => r?.confirmed).length;
return {
finding,
verified: confirmed >= 3, // 至少3个视角确认
perspectives: results
};
}
6.3 评审团模式(Judge Panel)
typescript
async function judgePanel<T>(
candidates: T[],
judgeCount: number = 3
): Promise<T> {
// 阶段1:独立生成候选方案(如果candidates为空)
if (candidates.length === 0) {
candidates = await parallel(
Array.from({ length: judgeCount }, (_, i) => () =>
agent(`从角度 ${i + 1} 生成解决方案`, { schema: SolutionSchema })
)
);
}
// 阶段2:独立评审
const scores = await parallel(
Array.from({ length: judgeCount }, (_, i) => () =>
agent(`作为评审员 #${i + 1},对以下候选方案打分`, {
candidates,
criteria: ['可行性', '创新性', '可维护性', '性能'],
schema: ScoreSchema
})
)
);
// 阶段3:汇总评分,选择最优
const aggregated = aggregateScores(scores);
const winner = selectWinner(aggregated);
return winner;
}
6.4 循环发现模式(Loop-Until-Dry)
typescript
async function loopUntilDry<T>(
finder: () => Promise<T[]>,
deduplication: (items: T[]) => T[],
maxEmptyRounds: number = 2
): Promise<T[]> {
const seen = new Set<string>();
const allFound: T[] = [];
let emptyRounds = 0;
while (emptyRounds < maxEmptyRounds) {
// 发现新项目
const found = await finder();
// 去重
const fresh = deduplication(found).filter(item => {
const key = getItemKey(item);
if (seen.has(key)) return false;
seen.add(key);
return true;
});
if (fresh.length === 0) {
emptyRounds++;
continue;
}
// 重置空轮计数
emptyRounds = 0;
allFound.push(...fresh);
}
return allFound;
}
6.5 自修复模式(Self-Repair Loop)
typescript
async function selfRepairLoop(
task: Task,
maxAttempts: number = 3
): Promise<TaskResult> {
let attempt = 0;
let lastError: Error | null = null;
while (attempt < maxAttempts) {
try {
// 执行任务
const result = await executeTask(task);
// 验证结果
const validation = await validateResult(result);
if (validation.valid) {
return result;
}
// 分析失败原因并调整策略
const diagnosis = await diagnoseFailure(validation.errors);
task = adjustTask(task, diagnosis);
} catch (error) {
lastError = error as Error;
}
attempt++;
}
throw new TaskFailedError(task, lastError, attempt);
}
7. 工程实践
7.1 错误处理策略
typescript
class AgentErrorHandler {
// 重试策略
async withRetry<T>(
operation: () => Promise<T>,
options: RetryOptions = {}
): Promise<T> {
const {
maxAttempts = 3,
backoff = 'exponential',
initialDelay = 1000,
maxDelay = 30000,
retryableErrors = [TimeoutError, RateLimitError]
} = options;
let attempt = 0;
let delay = initialDelay;
while (attempt < maxAttempts) {
try {
return await operation();
} catch (error) {
if (!this.isRetryable(error, retryableErrors)) {
throw error;
}
attempt++;
if (attempt >= maxAttempts) throw error;
await this.sleep(delay);
delay = backoff === 'exponential'
? Math.min(delay * 2, maxDelay)
: delay;
}
}
throw new MaxRetriesExceededError();
}
// 降级策略
async withFallback<T>(
primary: () => Promise<T>,
fallback: () => Promise<T>
): Promise<T> {
try {
return await primary();
} catch (error) {
console.warn('Primary operation failed, using fallback:', error);
return await fallback();
}
}
// 熔断策略
private circuitBreaker = new CircuitBreaker({
failureThreshold: 5,
resetTimeout: 60000,
halfOpenRequests: 3
});
async withCircuitBreaker<T>(operation: () => Promise<T>): Promise<T> {
return this.circuitBreaker.execute(operation);
}
}
7.2 监控与可观测性
typescript
interface AgentMetrics {
// 性能指标
taskCount: number;
successRate: number;
avgLatency: number;
p99Latency: number;
// 资源指标
tokenUsage: TokenUsage;
memoryUsage: number;
activeAgents: number;
// 质量指标
accuracy: number;
userSatisfaction: number;
errorRate: number;
}
class AgentMonitor {
private metrics: Map<string, AgentMetrics> = new Map();
// 记录智能体执行
async trackExecution(
agentId: string,
execution: () => Promise<AgentOutput>
): Promise<AgentOutput> {
const startTime = Date.now();
try {
const result = await execution();
this.recordSuccess(agentId, {
latency: Date.now() - startTime,
tokens: result.metadata.tokenUsage
});
return result;
} catch (error) {
this.recordFailure(agentId, error);
throw error;
}
}
// 生成健康报告
generateHealthReport(): HealthReport {
const reports: AgentHealth[] = [];
for (const [id, metrics] of this.metrics) {
reports.push({
agentId: id,
status: this.calculateStatus(metrics),
metrics,
recommendations: this.generateRecommendations(metrics)
});
}
return {
timestamp: Date.now(),
agents: reports,
overall: this.calculateOverallHealth(reports)
};
}
}
7.3 安全考虑
typescript
interface SecurityPolicy {
// 权限控制
permissions: {
fileAccess: 'read' | 'write' | 'none';
networkAccess: 'internal' | 'external' | 'none';
toolAccess: string[]; // 允许使用的工具列表
};
// 资源限制
limits: {
maxTokens: number;
maxExecutionTime: number; // 毫秒
maxConcurrentAgents: number;
maxMemoryMB: number;
};
// 内容过滤
contentFilter: {
blockedPatterns: RegExp[];
sensitiveDataDetection: boolean;
outputValidation: boolean;
};
}
class SecurityEnforcer {
private policy: SecurityPolicy;
// 执行前检查
async preExecutionCheck(
agent: Agent,
task: Task
): Promise<SecurityClearance> {
const checks = [
this.checkPermissions(agent, task),
this.checkResourceLimits(agent, task),
this.checkContentSafety(task)
];
const results = await Promise.all(checks);
const passed = results.every(r => r.passed);
return {
cleared: passed,
failures: results.filter(r => !r.passed),
timestamp: Date.now()
};
}
// 沙箱执行
async executeInSandbox<T>(
operation: () => Promise<T>,
sandbox: SandboxConfig
): Promise<T> {
// 创建隔离环境
const env = await this.createSandbox(sandbox);
try {
return await env.execute(operation);
} finally {
await env.cleanup();
}
}
}
7.4 最佳实践总结
┌─────────────────────────────────────────────────────────────┐
│ 多智能体系统设计原则 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 单一职责原则 │
│ 每个智能体专注一个明确的职责领域 │
│ │
│ 2. 最小权限原则 │
│ 智能体只获得完成任务所需的最小权限集 │
│ │
│ 3. 松耦合高内聚 │
│ 智能体间通过标准接口交互,内部实现独立 │
│ │
│ 4. 防御性编程 │
│ 假设任何智能体都可能失败,做好降级和恢复 │
│ │
│ 5. 可观测性 │
│ 全链路追踪,关键决策点留痕,便于调试和审计 │
│ │
│ 6. 渐进式复杂度 │
│ 从简单场景开始,逐步增加智能体数量和协作复杂度 │
│ │
│ 7. 人机协同 │
│ 关键决策保留人工审核环节,智能体辅助而非替代 │
│ │
└─────────────────────────────────────────────────────────────┘
附录
A. 术语表
| 术语 | 英文 | 定义 |
|---|---|---|
| 智能体 | Agent | 能自主感知、推理、决策和执行的计算实体 |
| 编排 | Orchestration | 协调多个智能体完成复杂任务的过程 |
| 任务分解 | Task Decomposition | 将复杂任务拆分为可管理的子任务 |
| 共识 | Consensus | 多个智能体就某决策达成一致 |
| 对抗验证 | Adversarial Verification | 通过主动反驳来验证结论的正确性 |
| 熔断器 | Circuit Breaker | 防止级联失败的保护机制 |