第四次作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Class56-Grade2024-CS/ |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Class56-Grade2024-CS/homework/16760 |
| 这个作业的目标 | 零搭建一个最小可行智能Agent系统 |
| 学号 | 杨旭东(3124004109) 李兆希(3124004099) |
仓库地址: https://github.com/Greatdom/agent/tree/master
一、需求描述
本次项目目标是从零搭建一个最小可行智能Agent系统(MVP),验证「消息总线+工具调用+会话管理」的基础Agent运行范式,同时预留可扩展的技能库、多通道接入能力,为后续接入大模型、扩展更多能力打下架构基础。
核心需求点:
- 支持命令行方式与用户实时交互
- 具备基础工具调用能力:文件读取、文件写入、系统命令执行
- 支持多轮会话,自动留存历史问答记录
- 采用模块化、可插拔架构,工具与通道均可通过注册制扩展
- 全链路基于异步编程实现,保障并发处理能力
项目前期我们输出了完整的设计文档,包括数据流图、E-R实体关系图、用例图与UML类图,为代码实现提供了清晰的蓝图。
二、业务流描述
整个Agent系统围绕「消息总线」形成闭环,执行链路如下:
用户通过CLI通道输入指令,消息经由通道封装后进入全局消息总线
消息总线以发布-订阅模式将用户指令推送至Agent主循环
Agent拉取当前会话的历史记录,结合工作空间信息组装完整上下文
Agent根据上下文判断执行逻辑,调用对应工具(读文件/写文件/执行命令)并获取执行结果
执行结果返回消息总线,通过出站路由模块分发回对应的用户通道
本次问答对存入会话管理器,用于支撑后续多轮交互
整体形成「输入-分发-处理-返回-记录」的完整循环,支持用户持续交互,同时各模块通过消息总线解耦,互不干扰。
三、实现说明
整体架构
项目采用分层模块化设计,从上到下分为四层:
- 通道层:对接不同交互渠道,目前实现CLI通道,基于BaseChannel抽象类可快速扩展Web、API等通道
- 消息总线层:全局消息中枢,实现模块间的异步收发与路由,彻底解耦各模块
- Agent核心层:包含主循环、上下文构建、会话管理,是Agent的决策与调度中枢
- 工具层:可插拔的工具注册机制,提供各类具体执行能力
核心模块说明
| 模块 | 职责 |
|---|---|
| AgentLoop | Agent主循环 |
| SessionManager | 会话管理器 |
| ContextBuilder | 上下文构建器组装上下文 |
| ToolRegistry | 工具注册中心,工具查询与调用入口 |
| MessageBus | 全局消息总线,解耦各模块依赖 |
| ExecTool/ReadFileTool/WriteFileTool/... | 基础工具 |
主程序入口核心代码
启动程序完成工作空间初始化、所有组件装配与并行启动,核心逻辑如下:
# ── 主程序 ───────────────────────────────────────────
async def run_gateway():
init_workspace()
bus = MessageBus()
# 注册工具
tools = ToolRegistry()
tools.register(ExecTool())
tools.register(ReadFileTool())
tools.register(WriteFileTool())
ctx = ContextBuilder(WORKSPACE)
sessions = SessionManager(WORKSPACE)
agent = AgentLoop(bus, tools, ctx, sessions)
# 启用 Channels
channels: dict[str, BaseChannel] = {"cli": CLIChannel(bus)}
print(f"Gateway started. Channels: {list(channels.keys())}\n")
# 并行运行所有组件
await asyncio.gather(
agent.run(),
route_outbound(bus, channels),
*[ch.start() for ch in channels.values()],
)
四、使用示例
运行gateway.py,控制台输出启动信息代表服务正常运行:
Gateway started. Channels: ['cli']



浙公网安备 33010602011771号