团队项目第一次作业

锚:团队展示、选题报告与需求分析

项目 内容
作业所属课程 软件工程(https://edu.cnblogs.com/campus/gdgy/Class56-Grade2024-CS)
作业要求 团队项目第一次作业:团队展示、选题报告与需求分析
作业的目标 从真实使用场景里确定选题,把智能体嵌进一个打开就能用的软件,再用一套能重复的测试说明它到底做到了什么。
团队名称 对对队
团队成员学号-姓名 3124004179-王嵘烨、3124004170-李建鑫、3124004189-周微

一、团队展示

1.1 团队名称与项目名称

团队名称:对对队。

项目名称:锚

队名和项目名取的是"锚"的三件事,恰好也是这个产品的三件事。锚定:内核不在云上,就跑在你自己那台机器里,用的是你的文件、你的终端、你正登录着的那个浏览器。缆绳:一条隧道从机器牵出来,一头拴在它身上、一头在你手上,换设备、换网络、人在外地,拉住同一根绳就回到同一个会话。稳住:你走开的时候它不漂,定时任务、Webhook、代码评审该跑照跑,回来能看到跑到哪、成没成。

一句话说,锚是一个解压即用、跑在自己机器上的智能体工作台:本机是能力,隧道是入口,无人值守是它和别人不一样的地方。

端 地址 说明
本机工作台 http://10.21.76.30:4096/ 解压启动后的默认入口,会话、文件、终端、浏览器都在这里

1.2 项目规划

阶段 时间 目标
阶段一:起点 2026.09 实验室的机器管不过来,先做一个能在机器上干活的入口
阶段二:能离开这台机器 2026.09—10 人在实验室之外也能用
阶段三:能长期用 2026.10—11 从"能用"到"敢每天用"
阶段四:让它自己干 2026.11—11.10 人不在也能推进
阶段五:文档与答辩 2026.11.10—11.26 需求、验收、演示统一成一套说法
阶段六:期末前 11 月末—期末 按验收标准逐条复测

第三阶段是最不"好看"的一段:两个多月没加任何新功能,全在修启动耗时、终端卡死、运行互斥。真正让一个产品从 demo 变成工具的,就是这些没人看见的地方。

1.3 队员风采与分工

姓名 学号 项目角色 性格或特点 技术特长或本项目实践方向 兴趣爱好
王嵘烨 3124004179 内核与运行时 话少,遇到问题往底层挖,不满足于"先绕过" TypeScript / Bun 运行时、进程与并发、工具调度、多模型 Provider 乒乓球
李建鑫 3124004170 前端与浏览器中继 对细节敏感,愿意为一个交互改三版 Vue / TypeScript、SSE 流式渲染、扩展与 CDP 元素定位 跑步
周微 3124004189 平台适配、测试与文档 较真,会追着问"这条你怎么证明" 平台开放接口、包边界设计、测试设计、需求工程 篮球

1.4 团队首次合照

image

1.5 团队愿景

每个人自己那台机器上,都有一个真正能动手的智能体。它认识你的文件、会用你的浏览器、你关掉页面它也不会忘事;它不把你的资料传上云,也不要求你会配环境,下载、解压、双击就开始了。技术应该把能力交回个人手里,而不是把个人交到平台上。

二、选题报告

2.1 选题背景

实验室的机器管不过来,这是这个项目真正的起点。 我们要维护实验室里的几台机器。机器本身不贵,贵的是人得在跟前。想跑一次训练或编译,先 SSH 进去敲一长串命令,参数记错一个字就从头再来;几个人共用一台机器,谁在跑什么、占了多大内存没人说得清,直到进程互相踩死才发现;一个任务要跑一小时,人就得守一小时,中途走开就不知道跑到哪、有没有报错。

当时的具体疑问 形成的产品需求
人在宿舍,怎么确认实验室那台机器上的任务还在跑? 会话与任务状态可远程查看,SSE 实时推送
内网系统必须登录后才能填表,脚本怎么进去? 接管用户正在用的浏览器,不用无头浏览器
训练要跑两小时,我不能一直守着 定时与 Webhook 触发,无人值守执行,可回看运行历史
三个人共用一台机器,怎么不互相踩? 会话隔离、运行权互斥、资源生命周期管理
实验室网络没有公网 IP,怎么从外面进来? 内置隧道加密码鉴权,开启前强制设密

2.2 问题定义

这句话里有三个约束,也正是所有设计取舍的来源:

  • "在那台机器上"——内核必须跑本机,不能是云端容器。这一条直接否掉了"套一个云端智能体平台"的路线:扣子、Dify、GPTs 都跑在云上,碰不到实验室机器的磁盘和登录态浏览器。
  • "人不在这台机器跟前"——必须有一条能从外面进来的路,且不能裸奔。隧道开启前强制设密码,就是这个约束的直接产物。
  • "能看到它做了什么"——每一步工具调用都要留痕:读改了哪个文件、跑了哪条命令、浏览器点到了哪个元素,事后可回看、可复现。

2.3 产品定位与目标用户

用户群 典型场景 我们提供的价值
实验室 / 机房(第一优先,项目原点) 多台机器在固定场所,人常不在现场 每台机器一个入口,离开机房也能跑命令、看进度、进内网系统填表
独立开发者 / 学生 有代码仓库,需要 AI 协助改代码 真正读写文件系统与终端,不是把代码复制进对话框
异地 / 移动场景 出差、通勤、多设备切换 手机浏览器打开隧道地址,接着同一个会话继续
隐私敏感用户 医疗、法务、企业内部资料 会话、文件、密钥留在本地磁盘,云端只承担推理
小团队协作 需要 AI 参与代码评审 MR 触发评审并回帖,无需人盯

2.4 核心功能

编号 功能 说明
F01 会话与流式对话 会话绑定工作目录;推理、工具调用、正文按 part 增量推送,过程可折叠回看
F02 文件与终端操作 read / write / edit / glob / grep 与 bash;终端保留 scrollback,有超时与截断
F03 工具调用与权限审批 高风险动作先授权;跨项目默认拒绝;密钥不进上下文
F04 真实浏览器接管 经扩展中继驱动已登录的浏览器:定位、填写、提交、截图留证
F05 并发与资源治理 同一会话运行权互斥(busy 返回 409);中断可恢复;旧代次写入丢弃
F06 无人值守自动化 Webhook 与 cron 触发;运行历史可回看、可重放;投递用 outbox 保证幂等
F07 平台适配 MR 评审并回帖;飞书消息通道;平台能力独立成包,不耦合内核
F08 鉴权与隧道 密码换会话令牌(TTL 720 分钟);隧道一键开启,未设密码拒绝启动
F09 多模型与 MCP Provider 可插拔(Anthropic / OpenAI / Gemini / 自定义);MCP 支持 stdio 与远程 HTTP,热生效
F10 可观测性 请求量、工具耗时、失败率面板;每次运行有唯一编号可追

走一遍真实的任务

用户在会话里说一句话,系统拆成工具调用,一次一次做完,最后把过程折叠成一条可以展开的记录。下面用一次实际使用走一遍。

image

image

最下面这条是运行结束时它自己整理的结果——34 次调用、4 分 24 秒,README 的四部分写完了。

image

2.5 创新点

零依赖打包。 内置 Bun 运行时,下载解压就能跑,不需要装 Node、不需要包管理器、不需要 Docker,Windows、macOS(Apple Silicon)、Linux(x64/arm64) 四个平台开箱可用。这一条看着不"智能",但它决定了实验室那台没人维护的机器上能不能装得上。

2.6 技术方案与可行性

总体架构分四层,用户只碰到最上面一层:

image

接入层是浏览器、手机隧道、Webhook 和 MR 事件,负责"从哪进来";编排层管一次任务怎么调度;能力层是文件、终端、浏览器中继、平台包和 MCP;运行时层管进程、会话存储、租约和观测。分层的目的只有一个:换任何一层都不动其它三层。

环节 选型 为什么
运行时 Bun(随包内置) 打包成一个可执行文件,解压就能跑,用户不用装 Node
前端 Vue 3 + Vite 单页应用,构建产物随包分发,离线也能打开
通信 HTTP + SSE 一条长连接推增量,工具调用、推理、正文按序到达
存储 SQLite 会话、消息、outbox 都在本地一个文件里,备份就是复制文件
浏览器中继 浏览器扩展 + WebSocket 直接驱动用户已登录的浏览器,不需要无头环境
模型 Provider 抽象 四家加自定义 baseURL,换模型只改配置

可行性上,最难的三块都已经跑通:四平台预编译包有 CI 冒烟;隧道与密码鉴权在手机上验证过;浏览器中继能稳定完成一次填表提交。剩下的四个开放问题都是"能用但不稳",属于迭代范围,不影响答辩现场演示。

三、需求分析

以下按需求来源、功能结构、类图、功能描述、非功能、运行环境、验收组织,参考了两项软件文档国家标准。GB/T 9385—2008《计算机软件需求规格说明规范》 · GB/T 8567—2006《计算机软件文档编制规范》。完整文档另附,共 48 条功能需求(后端 31 条、前端 17 条)、20 条非功能需求、17 条验收标准。

3.1 系统功能结构

功能分为会话、工具、浏览器、自动化、访问与模型六块,落成四层。主流程依次经过会话绑定、上下文组装、工具调用、权限校验和结果回填。

image

下面这张表是用户侧行为与后端处理的对照。

编号 用户侧行为 后端或浏览器如何处理
F01 打开会话,说一句话,看到过程与结果 会话绑 cwd;按 part 增量推 SSE;工具调用、推理、正文按序出现
F02 让它读文件、改代码、跑命令 工具层执行 read/write/edit/bash;终端持久化,超时与截断有上限
F03 高风险操作被要求授权 调用前做权限与范围校验;跨项目默认拒绝;密钥不进上下文
F04 让它去网页填表、提交 中继连扩展;滚到视口取坐标、多选择器兜底、提交前比对、事后截图
F05 同一会话连发两条消息 运行权互斥,busy 返回 409;取消后释放租约;旧代次写入丢弃
F06 设"每天九点跑一次"或接 Webhook 触发一次完整运行;历史记输入、输出、耗时、失败原因;投递幂等
F07 提一个 MR,等它在下面回帖 MR 事件触发评审;拉 diff、跑检查、把结论发回;飞书走独立包
F08 手机上打开隧道地址并输密码 密码换令牌(TTL 720 分钟);未设密码拒绝启动;HTTP 提示可被截获
F09 换模型,或加一个 MCP 服务 Provider 可插拔,改配置即可;MCP 支持 stdio 与远程 HTTP,热生效
F10 看这一周的失败率和耗时 指标按窗口聚合;每次运行有唯一编号,可从面板追到会话

3.3 核心类图

image

类 / 模块 职责 关键成员
AgentRuntime 会话与运行权的中枢 createSession、acquireRun、releaseRun、cancel
Controller 一次运行的编排 assembleContext、dispatch
Session 会话状态与消息序列 cwd、state、messages、appendPart、snapshot
Message / Part 消息由 part 组成,按序增量推送 role、parts
Tool 工具接口 schema、execute、checkPermission
ToolRegistry 按代次解析工具,旧代次失效 register、resolve、isAlive
PlatformManager 平台包激活与回滚 activate、snapshotTools、commit、rollback
Provider 模型接入 protocol、baseURL、chat
Automation 定时与事件触发 kind、trigger

3.4 功能描述

F01 会话与流式对话

项 内容
输入 一条自然语言消息,可带附件;会话必须绑定一个工作目录
处理 创建或复用会话 → 组装上下文 → 调用模型 → 按 part 增量推送 → 工具调用折叠
输出 SSE 流:推理片段、工具调用与结果、正文、完成状态
异常 模型不可用时保留已输入内容;同一会话 busy 返回 409,不落库不覆盖

F04 真实浏览器接管

项 内容
输入 一句目标("去办事大厅把这个表填了")加当前浏览器已登录的会话
处理 中继建立 → 定位目标页 → 滚动取坐标 → 填写 → 提交前比对 → 截图 → 等回执
输出 每一步命中的元素、输入值、截图;失败时说明卡在哪一步
约束 不用无头浏览器;不代输密码;提交类动作前必须确认

F06 无人值守自动化

项 内容
输入 cron 表达式、Webhook(源加 secret)或 MR 事件
处理 触发 → 生成运行编号 → 执行完整任务 → 记录输入输出耗时 → 投递结果
输出 运行历史列表,可点开看单次详情,可重放
约束 重投必须幂等;失败可重试但有上限;同一任务实例不并发

F08 鉴权与隧道

项 内容
输入 访问密码;隧道服务选择(ngrok / NATAPP)
处理 密码换令牌 → 令牌随请求携带并校验 TTL → 隧道把本机端口映射到公网
输出 公网地址;未登录访问被拒绝
约束 未设密码拒绝启动隧道;密钥不得出现在 prompt、日志与前端响应里

接口需求

方法 路径 用途 鉴权
POST /api/auth/login 密码登录换取会话令牌 否
GET /api/projects 项目列表 是
POST /api/sessions 创建会话(绑定工作目录) 是
POST /api/session/{id}/message 发送消息,SSE 流式响应 是
GET /api/session/{id}/snapshot 消息与待办快照 是
PUT /api/settings/mcp 修改 MCP 配置(热生效) 是
GET /api/metrics?window= 指标查询 是
POST /webhooks/{sourceId}/ 外部触发入口 secret

外部集成有五项:Provider API 走 HTTPS,兼容 OpenAI 与 Anthropic,支持自定义 baseURL;MCP Server 支持 stdio 和远程 HTTP 加 OAuth;浏览器中继走 WebSocket,命令与租约绑定连接代次;GitLab 走 API 与 Webhook;公网访问走隧道服务的 HTTPS/WSS。

3.5 非功能需求

类别 要求
性能 冷启动到可交互以 1 秒内为目标;首字延迟在常规网络下快于同类桌面客户端
并发 同一会话互斥;多会话并行不互相阻塞;高频切换终端不丢输入
可靠性 工具失败可重试且不重复产生副作用;中断可恢复;投递幂等
安全 密钥不进上下文与日志;隧道未设密码拒绝启动;跨项目默认拒绝;令牌有 TTL
隐私 会话、文件、密钥留在本机磁盘,云端只承担推理
可移植 Windows / macOS(Apple Silicon) / Linux(x64, arm64);不依赖系统 Node
可维护 Provider、平台适配、工具各自成包,换一层不动其它层
可观测 请求量、工具耗时、失败率可查;每次运行有唯一编号

可观测这一条落成了统计页

image

3.6 运行环境

项 要求
客户端 现代浏览器(Chrome / Edge / Safari 移动端);接管浏览器需安装扩展
服务端 本机运行,内置 Bun 运行时,无需系统级 Node
操作系统 Windows 10 及以上 / macOS(Apple Silicon)/ Linux(x64、arm64)
外部依赖 模型 Provider(需自备 API Key)、MCP(可选)、隧道服务、GitLab(评审需要)
网络 本机使用不需要外网;隧道与云端模型需要外网

3.7 验收标准与实测结果

实测截图:高风险动作会先停下来要授权,拒绝之后命令不再执行

image

四、小结

现在能做到的是:解压即用跑在自己机器上,本机文件和终端真能操作,需要登录态的浏览器真能接管,人离开后定时与事件触发的任务真能跑完,回来能看到每一步做了什么。

接下来先收敛四个开放问题。这四条都在"能长期用"这条线上,不解决就没法说"敢每天用"。然后是指标口径:从按会话聚合改成按调用聚合,才能回答"慢在哪一步"。

感谢阅读。

posted @ 2026-11-08 17:22  lokijinjin  阅读(0)  评论(0)    收藏  举报