一个平台能运行,和一个平台能被商用,中间隔着一层用户永远看不见的工程。
这一天的提交,用户能感知到的是知识库开始支持图片检索、演示环境可以不用企业账号登录。感知不到的是:构建产物变得可重复、长任务的断流和假死被修掉、连接瞬断不再导致静默失败、跨租户越权点被逐个堵上。
两类工作的比例,大概是三七开:三成用户能看到,七成在看不见的地方。
一、知识库图片能力:从文本检索到视觉闭环
这是这一轮变化里最完整的一条功能线,按阶段连续推进:
第一阶段,PDF里的图片可以被提取成独立资产,单独入库、单独召回,不再被当作附属于文本块的噪声。
第二阶段,图片召回的结果可以直接出现在聊天气泡里,带权限控制的图片访问端点同步上线,不同租户不会看到不属于自己的图。
第三阶段,检索到的图片可以通过外部消息渠道直接发送给用户,不再仅限于网页端展示。
第四阶段,引入了视觉向量,知识库里的图片可以被以图搜图,商品图片检索有了语义层。
顺带修了一个持久化问题:刷新或重新执行任务时,图片资产路径会丢失,导致之前成功入库的图片下次找不到。
知识库从"文本检索"到 "图文混合检索+发图+视觉搜索" ,这条线算是完整闭环了。

二、访客演示:从临时入口到独立租户
演示场景一直是一个权衡:要让潜在客户快速看到系统能力,又不能让他们共享同一个会话状态,更不能因为演示请求影响到真实租户。
早期的做法是临时入口,所有访客共享一套环境。这次改成了 "每个访客独立租户" :访客登录后,系统为其分配一个独立的组织空间,有完整的管理员功能面,退出后空间销毁。
同时修了一处缓存问题:访客登录重定向的响应被下游缓存,导致后续访客拿到了上一个访客的会话凭证。加了缓存控制头之后,每次访客登录都重新走认证,不再复用旧状态。
五处跨租户越权点也在同一批提交里补上:访客演示能力落地,随即做了一轮权限加固,确保每个访客只能访问自己的数据。

三、发布构建:从能跑到可重复
构建链路的改动不产生新功能,但影响所有功能能否可靠地被部署出去。
这一轮治理的核心问题是:同样的代码,两次构建产物可能不一样。原因包括缓存命中判定不准确、符号链接处理有安全漏洞、前端未变更时强制重建等。
修复方向是让构建产物具备可重现性:校验基准改为基于代码快照哈希,前端零变更时允许复用已有产物打新标签,缓存目录初始化和清理纳入正式流程,并补了操作规范文档。
发版流程本身也加了两个检查点:发版前强制确认是否还有运行中的任务,避免滚动发版时请求被中途切断;构建证据保留,发版结果可回溯审计。

四、长任务稳定性:断流、假死、附件丢失
长任务有几个长期存在的脆弱点,这一天集中处理了:
模型返回流遇到瞬时断流时,之前会直接报错,整轮任务报废。现在加了重试中间件,断流后自动重建连接继续接收,不影响最终结果。
任务手动停止后,状态文案一直显示"任务处理超时",和实际情况不符。现在按实际的终止原因区分文案,手动停止就是手动停止。
任务恢复后,之前上传的附件有时会丢失上下文,模型表现为"不知道你发过附件"。修复后附件引用随任务状态一起恢复。
长连接在客户端断开后没有及时释放,累积到一定数量会触发频率限制,导致同一用户后续请求全部被拦。现在租约释放改成后台任务,客户端断开立即处理,不再等待超时。
同时补了一处对商业化很关键的改动:平台内置智能体的系统提示词对租户不可见,租户只能叠加自己的增量提示词,无法查看或覆盖平台基础配置。这不是技术问题,是产品能力可以作为竞争壁垒的前提条件。

这一天的提交,如果只看标题,会觉得是一堆修修补补。但把它们放在一起,做的是同一件事:把一个能演示的平台,往能商用的方向推了一段。
这,是第六十七天。
**《从0到1:企业级AI项目迭代日记》**记录一个企业级 AI 项目从创意、架构到落地的真实过程。不讲神话,只记录进化。
如果你也在做企业 AI 落地,欢迎留言来聊。或者,把这篇转发给一个正在踩同样坑的朋友。