第四次作业

这个作业属于哪个课程 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运行范式,同时预留可扩展的技能库、多通道接入能力,为后续接入大模型、扩展更多能力打下架构基础。

核心需求点:

  1. 支持命令行方式与用户实时交互
  2. 具备基础工具调用能力:文件读取、文件写入、系统命令执行
  3. 支持多轮会话,自动留存历史问答记录
  4. 采用模块化、可插拔架构,工具与通道均可通过注册制扩展
  5. 全链路基于异步编程实现,保障并发处理能力

项目前期我们输出了完整的设计文档,包括数据流图、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']

5df1e957577ae00273269cca484effb9

1ac09b4af9e79f8131cb5148f6edc120

posted @ 2026-10-15 20:52  LZX2024  阅读(6)  评论(0)    收藏  举报