对话档案 D05 · 服务器任务盘点与门户架构统一(10-20)
一句话:把两个月里散落的三个站(词汇站、概率论游戏、新建笔记站)收进一个门户主页并接管 natapp 穿透入口,随后把笔记站做成"md 存库 + DeepSeek 自动提取关键词/摘要/评价 + 双路检索"的完整系统;跨 22 天,24 条真实指令、2006 次工具调用、2.64 亿 token,是两个月里最重的一段。
一、这段对话怎么走的
| 阶段 | 用户要求 | 产出 | 卡点 |
|---|---|---|---|
| 1. 盘点(10-20) | 「统计我目前创建的服务器任务。」随后追问「你不能访问其他任务的内容吗?」 | 一份服务器任务清单,并明确"跨会话内容不可见"的边界 | 会话隔离导致模型看不到其它任务产物,只能靠用户复述 |
| 2. 门户统一 | 回顾词汇站与概率论游戏,新建一个主页,设网页目录,两站挂靠,并以此页作为 natapp 穿透主页 | portal 站点(列表 + 入口 + 反向跳转),natapp 指向门户 | 两站端口不同,门户只能做链接跳转,做不了同域路由 |
| 3. 笔记站立项 | 「参考考研英语网站,制作一个新的网站」:md 原文存本地库;导入时调 DeepSeek 提取关键词/标题/概括/评价;AI 把查询转关键词做快速检索,同时保留全文检索 | notes 站点:导入管线、元数据表、双路检索 | 元数据是异步生成的,导入后立刻搜会搜不到 |
| 4. 公式与适配 | 「你做的新网站对$$包裹的公式没有适配。」;随后要求手机端与黑夜模式 | remark-math + rehype-katex 接入,响应式与主题 | 旧笔记里的 $$$$ 与转义残留仍需归一 |
| 5. 视觉重构 | 「有些按钮,尤其是浏览和打开的按钮做的太小而且没有美感…结合黄金比例等美术设计原理…背景用一些简约大气的纹理和渐变」 | 全站按钮规格统一、版式重排、背景纹理 | 一次重构牵动所有页面,回归面很大 |
| 6. 自由板面与收尾 | 最多四篇笔记同屏、可调大小与顺序、边缘粘附、窗口化;贴纸可置底、可逐层调高度;信息关联模块移到左侧可收起;重启器静默启动 | 多窗布局、贴纸层级、侧栏折叠、静默启动脚本 | 多窗 + 拖拽 + 层级,状态组合爆炸 |
时间线:2026-10-20 19:34 起,2026-11-10 08:43 结束,跨 22 天。单段会话,1 个 jsonl。118 条用户消息里,89 条是后台命令的完成/失败通知,5 条是自动摘要,真实指令 24 条。另需说明:10-20 当天在词汇站目录下还有 16 段短会话(合计约 913 万 token),属并行独立会话,未并入本段统计。
二、用户的关键原话
原话:「你不能访问其他任务的内容吗?」
这句追问发生在盘点之后,是整段对话的分水岭。它逼出了一个诚实答案:新会话看不到旧会话的产物,只能看文件系统。此后用户的策略明显变了——不再要求"你去回顾一下",而是自己复述要点、自己指定路径,把模型当执行器而不是记忆体。
原话:「你将复习单词网站和之前的概率论游戏网站进行回顾,然后生成一个新的网站,要求界面明确,以此网页为主页,设置一个网页目录,让两个网站挂靠在这个主页上,然后让这个主页区作为natapp穿透的主页。」
一句话定义了门户的三个职责:目录、入口、穿透首页。它没有说"用 iframe 还是跳转",也没说端口怎么登记,于是门户最终做成"卡片 + 新窗口打开"。这种模糊在架构层可接受,但在体验层留下"点进去就离开门户"的割裂。
原话:「参考考研英语网站,制作一个新的网站,要求如下: 1. 这是一个"笔记"网站. 2. 笔记的原文本以md格式存储在本地数据库中. 3. 每部笔记导入时,自动调用deepseek api,统计其关键词/标题/概括/评价等信息…4. ai检索功能1-ai关键字转化处理…5. 本地检索…」
五条编号把笔记站的数据流讲清了:md 原文入库、导入时提取元数据、查询时先转关键词再检索、全文兜底。"参考考研英语网站"这五个字省掉了大量界面描述——用一个已存在的站当参照物,比写十句形容词有效。
原话:「能不能让上面的重启服务器的代码静默启动,不要影响电脑正常工作?」
这句暴露了前序方案的粗糙:重启器是以可见窗口方式跑的,会弹窗、会占前台。用户要的不是"能重启",而是"重启时别打扰我"。这类"能用但不合用"的反馈,往往比功能缺失更能推动方案收敛。
原话:「问题:402 Insufficient Balance…没事了,是我的api额度被dsh吃光了,记录问题以备以后检查方便」
一次典型的误判排查:402 看起来像代码 bug,实际是账户余额。用户查清后要求"记录问题",这是把环境类故障沉淀成检查项的好习惯。
三、成本与效率
| 指标 | 数值 |
|---|---|
| token 总量 | 2.64 亿(26417 万) |
| 其中输入 / 输出 | 2.63 亿 / 118 万 |
| 用户消息数 | 118 条(统计口径;真实指令 24 条,后台通知 89 条,摘要 5 条) |
| 工具调用 | 2006 次 |
| API 调用 | 1786 次 |
| 每条消息平均 token | 224 万(真实指令口径 1101 万) |
| 平均每次工具调用 token | 13.2 万 |
模型在 fast-model 与 deepseek-v4.1-flash 之间切换。2.64 亿 token 占五段合计(约 4.18 亿)的 63%。输入输出比 223:1,说明成本几乎全在"把项目上下文反复送回"——这正是长会话的固有税:同一个 2000 行的文件,改第 30 个功能时仍要整份进上下文。真实指令只有 24 条,平均一条烧掉 1101 万 token,是 D01 的 3.4 倍。
四、曲折点与评判
next build反复失败,最后靠循环重试。 日志里出现大量for i in 1 2 3 4 5; do NODE_OPTIONS= npx next build …,说明构建本身不稳定(缓存脏、内存峰值、.next残留),而处置方式是"重试到成功"。根因是工具链:没有先固定"清.next+ 固定 NODE_OPTIONS + 读前 20 行错误"的排障顺序。- 门户启动失败多轮。
portal/server.js连续多次 failed,与 D03 的npm run start失败同源:端口占用与进程残留。同一个坑在两段对话里各踩一遍,说明没有沉淀成检查项。 - 公式适配在笔记站重演。 D04 修了三轮的
$$/$$$$,到笔记站又出现一次「对$$包裹的公式没有适配」。根因是知识没有跨会话传递——新会话从零开始,旧会话的教训留在旧会话里。 - 视觉重构范围失控。 一次"按钮太小、要按黄金比例重排"牵动全站,回归面覆盖所有页面。根因是需求演进叠加缺少设计基线:没有先定一套按钮/间距/配色的 token,只能整站改。
曲折度:★★★★★(同一类问题跨会话重演,且有构建层面的循环重试)
五、提示词与流程改进
-
反例:「统计我目前创建的服务器任务。」 正例:「先说明你能看到什么(本会话、本 cwd、文件系统);然后按 portal 里登记的路由表逐项核对端口、进程、可访问性,看不到的标"待补"。」 先划边界再干活,能省掉后面"你能不能看到"的往返。
-
反例:
npx next build失败就再跑一次,最多跑五轮。 正例:「构建失败时按序执行:删.next→ 固定NODE_OPTIONS→ 只读错误前 20 行定位文件 → 修完再构建一次;连续两次同错则停下来报告,不要循环重试。」 重试是掩盖,定位才是修复。 -
反例:一条消息塞五个检索与交互需求(点词、选词、后台生成、消息列表、笔记层级)。 正例:「先只做检索链路:查询→AI 转关键词→元数据表命中→全文兜底,四步各自可单独验证;链路通了再加点词与选词的交互。」 先通链路再加交互,能避免"功能都在、就是搜不准"。
六、可复用结论
- 多站统一门户,第一步是建"路由表 + 端口登记",门户只做目录与跳转,不要试图同域代理;否则每加一个站就要改一次网关。
- 长会话到一定体量必须开新会话承接,但承接时要显式交接"已知坑位"(端口占用、公式归一、构建缓存),否则同类问题会跨会话重演。
- 构建类失败先清缓存、固定环境变量、读前 20 行错误;循环重试只会把偶发失败变成习惯。