
一、AI 应用的核心架构
典型的 AI 应用分为四层:接入层负责接收用户请求,编排层负责拆解任务和调度智能体,能力层封装模型、工具和知识库,数据层管理记忆、日志和状态。编排层是核心,它决定了一个请求是交给单个智能体处理,还是拆给多个智能体协作。
一个可用的智能体至少应具备:目标理解、任务拆解、工具选择、结果评估和记忆更新。工具调用是智能体与外部世界交互的桥梁,记忆则保证多轮对话和任务状态的连续性。当任务复杂度上升时,单智能体容易顾此失彼,此时需要多智能体分工协作。
下面实现一个极简的多智能体系统。包含消息总线、基础智能体、两个具体角色:研究员和写作者。研究员负责收集信息,写作者负责整理成文,二者通过消息总线通信。
from abc import ABC, abstractmethod
from collections import defaultdict
from dataclasses import dataclass, field
from typing import Callable
@dataclass
class Message:
sender: str
receiver: str
content: str
class MessageBus:
def __init__(self):
self.queues = defaultdict(list)
self.subscribers = defaultdict(list)
def register(self, agent_name: str, handler: Callable):
self.subscribers[agent_name].append(handler)
def send(self, msg: Message):
self.queues[msg.receiver].append(msg)
for handler in self.subscribers[msg.receiver]:
handler(msg)
class BaseAgent(ABC):
def __init__(self, name: str, bus: MessageBus):
self.name = name
self.bus = bus
bus.register(name, self.receive)
def send(self, receiver: str, content: str):
self.bus.send(Message(self.name, receiver, content))
@abstractmethod
def receive(self, msg: Message):
pass
class Researcher(BaseAgent):
def receive(self, msg: Message):
topic = msg.content
print(f"[研究员] 收到主题:{topic},开始收集资料...")
findings = f"关于{topic}的关键事实:1. 定义;2. 现状;3. 趋势。"
self.send("writer", findings)
class Writer(BaseAgent):
def receive(self, msg: Message):
findings = msg.content
print(f"[写作者] 收到资料,开始撰写...")
article = f"基于以下资料成文:{findings}\n\n——文章完成。"
print(article)
# 运行
bus = MessageBus()
researcher = Researcher("researcher", bus)
writer = Writer("writer", bus)
bus.send(Message("user", "researcher", "AI 智能体发展趋势"))运行后,研究员收到主题,模拟收集资料,再发给写作者,写作者生成文章。这展示了智能体间通过消息总线解耦协作的基本模式。
真实智能体需要调用搜索、数据库、API 等工具。工具应统一接口,便于智能体选择。记忆可分为短期和长期:短期保存当前任务上下文,长期存入向量库供检索。下面是一个工具注册与调用的简化实现。
class Tool:
def __init__(self, name: str, func: Callable, description: str):
self.name = name
self.func = func
self.description = description
class ToolRegistry:
def __init__(self):
self.tools = {}
def register(self, tool: Tool):
self.tools[tool.name] = tool
def call(self, name: str, **kwargs):
if name not in self.tools:
raise ValueError(f"未知工具: {name}")
return self.tools[name].func(**kwargs)
registry = ToolRegistry()
registry.register(Tool("search", lambda q: f"搜索'{q}'的结果", "搜索网络信息"))
print(registry.call("search", q="AI Agent"))智能体在规划时,根据工具描述选择合适工具并传入参数。记忆则通过保存每轮对话和工具结果实现,必要时检索历史片段注入提示。
第一,边界控制。明确智能体权限,敏感操作必须人工确认。第二,可观测性。记录每一步的思考、行动和观察,便于排查。第三,成本控制。设置最大步数,缓存重复查询,简单任务用小模型。第四,安全防护。对输入输出做过滤,防止提示注入和越权调用。
AI 应用与智能体开发的核心在于编排:把模型、工具、记忆和多个角色组织成可靠的工作流。通过消息总线解耦、工具注册统一接口、记忆分层管理,可以构建出可扩展、可维护的智能体系统。随着模型能力提升,这套架构会逐渐成为 AI 应用的标准范式。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。