AI TRADE · DEVELOPMENT GUIDE

服务区开发说明

业务能力 · 组件职责 · 六条核心流程 · 实现边界

服务区业务能力与流程开发说明

设计日期:2026-09-28。适用于 A、B、C、D……所有完整业务服务区。本文整理已确认的业务边界和建议实现顺序,供开发拆分模块与验收;不表示完整业务、WeKnora 或多机 Worker 已经上线。

查看业务架构地图 · 服务区组件图 · 数据库与企业共享

1. 一个服务区交付什么

服务区是承载一组企业完整业务的逻辑单元,可先运行在一台服务器,再扩展到多台。企业由中央分配,同一企业的成员进入同一区;同一用户加入多家企业时,可以随企业切换进入不同区。A/B/C/D……运行同等软件,承载的企业与数据不同。

用户看到的是完整 React 工作台,其中 AI 对话是一个业务入口。Spring Boot API、Worker、PG 数据库和 WeKnora 是支撑业务的组件,不能用组件清单代替业务功能清单。PG 指 PostgreSQL。

业务能力 用户操作与产出 主要归属及边界
AI 工作台 提问、引用知识、恢复历史、通过工具发起业务操作 会话关联企业和成员,正文持久保存到本区 WeKnora;工具仍走 Java 授权
企业知识库 上传和维护企业、产品资料;检索、阅读、AI 引用 每企业一个共享知识库;租户管理员默认管理,可委派成员
获客中心 配置市场与搜索条件、获取线索、筛选去重、导入客户 线索及导入结果存本区业务库;搜索等耗时任务由 Java Worker 执行
CRM 企业共享客户、联系人、分组、跟进及关联报告 本区 PG 是主数据来源,created_by 不把企业数据变成个人私有
客户背调 选择客户、分析背景、形成报告与机会评分 Worker 调用授权依赖,报告回写 CRM 并保留依据和时间
邮件业务 企业邮箱配置、模板、开发信草稿、发送、收信与客户沟通关联 业务配置、任务和关联在本区;邮箱存储及收发通道由公共邮件设施提供
任务中心 查看进度、结果、失败原因;按权限重试或取消 是持久任务的用户入口;任务结果是否共享取决于业务对象权限,不按创建者一律私有
企业业务设置与审计 模块配置、知识库管理员委派、操作追踪 模块授权在本区;企业创建、成员资格、租户角色和归区由中央管理

知识库共享不等于所有成员均可编辑。邮件设置共享不等于所有成员均可配置、发送或读取凭据。CRM 操作仍分别校验查看、修改、删除、导出等权限。AI 会话默认本人可见是建议值,成员间共享和管理员查看策略仍待确定。

2. 服务区组件及区外依赖

对应图:服务区组件与能力

组件 核心职责 持久状态与扩展边界
React + Vite 工作台 业务页面、AI 流式展示、任务进度、错误与重新登录导航 页面不作为业务数据或聊天历史的唯一存储;不持有服务密钥
Java 21 / Spring Boot API 验证企业成员与权限、业务事务、任务提交、WeKnora 和公共设施适配 初期按模块组织应用;每个业务模块不必独立部署为微服务
持久任务与调度 入队、领取、租约、重试、并发与执行状态 选择 PG 任务表或消息中间件后续确定;任务状态必须可恢复
Java Worker 池 执行获客、背调、邮件、导出等耗时任务 同机分进程或增加服务器;共用所属区业务库,按任务类型与企业限制并发
PostgreSQL 业务库 CRM、邮件配置、模块授权、任务、结果引用、审计及系统映射 每区独立,区内共享表以 tenant_id + 强制 RLS 隔离;不为 Worker 建 SQLite 主库
WeKnora 服务及处理组件 企业知识管理、解析索引、检索问答、会话与消息持久化 与 Java Worker 分开调度;多实例、外部业务工具桥接和会话接续按所选版本验证
WeKnora 专用数据库 本区知识索引、会话、消息与引用 由 WeKnora 管理内部表,Java 仅通过正式接口操作,不直接写表
区外依赖 提供什么 边界
中央与 SSO 登录、企业目录、成员资格、租户角色、企业归区 中央是身份与归区权威,浏览器获授权后直连节点,业务请求不必全部经中央代理
公共文件服务器 知识原文件、附件、图片、导出文件 所有区共用存储;每次上传、预览、下载仍检查企业和对象权限
公共邮件设施 邮箱存储、收信、外发及回执 每区保留自己的企业邮件业务;外发接受与最终投递成功是不同状态
模型与搜索供应商 模型推理、搜索和其他外部资料 仅服务端调用,控制凭据、超时、配额;外部内容不构成执行授权

3. 数据与请求的共同规则

中央拥有企业成员与归区权威;本区拥有 CRM 等业务主数据和模块授权;WeKnora 拥有知识与会话正文;公共文件设施保存文件内容。通过明确的企业、成员、会话、任务、业务对象和文件标识关联,不通过跨库直接写表联动。

每个企业业务对象带 tenant_id,唯一约束和业务外键保留企业身份。API 和 Worker 使用非表所有者、非超级用户且无 BYPASSRLS 的账号,在同一事务内设置已验证的企业、成员与权限上下文,读写都受 RLS 约束。对象 ID、浏览器企业参数、任务载荷和模型生成的参数均不构成授权。

所有路径都要遵守成员撤权和企业归区变化;中央不可用不能当成授权成功。会话过期按现有强制重新登录流程处理;无操作权限显示拒绝,暂时服务故障显示可恢复错误,不把它们冒充会话过期。中央租户角色与本区模块授权共同决定操作能力。

持久任务不保存浏览器登录 Cookie。发起成员离开企业或失去操作权限后,不能继续以旧授权执行;未来若需要企业级自动任务,应另行定义受限机器身份及授权规则,不能借用永久用户权限。

4. 流程一:进入企业工作台

对应图:企业入口与授权

  1. 用户通过中央和 SSO 登录,中央确认账号、有效成员资格及所选企业归区。
  2. 中央为目标节点签发短期一次性票据;浏览器跳转该企业所属节点,节点向中央兑换并验证票据。
  3. 节点建立持久会话,加载本企业业务入口与有效权限;后续请求继续向中央复核,长流按现有机制周期复核。
  4. 切换企业时重新取得对应企业的入口与授权,清除前一企业的页面状态;不能复用前一企业权限或会话对象映射。

现有基础使用 45 秒一次性票据、mTLS 和短期机器凭据。中央拒绝或不可用时不得访问业务数据;会话过期重新登录,明确撤权拒绝业务请求。导航可见性不替代 API 授权。

5. 流程二:普通业务读写

对应图:业务请求与数据事务

以新增客户或修改企业邮件设置为例:页面提交操作 → API 校验节点会话、中央成员资格和本区模块权限 → 校验对象企业归属与业务参数 → PG 事务设置局部上下文 → RLS 下读写并记录审计 → 提交后返回结果。

建议创建类操作使用幂等标识,避免重复点击创建多条业务记录;共享记录的更新需要检测并发修改,冲突时提示刷新或合并,不能静默覆盖其他成员修改。外部文件或邮件调用不放在长时间占用的数据库事务中。

事务失败则返回明确错误,不显示已保存。若操作需要调用多个外部系统,应记录阶段与关联标识以便补偿或重试;本区 PG 与 WeKnora 之间不存在天然跨库原子事务。

6. 流程三:耗时任务与任务中心

对应图:Worker 横向扩展

页面或 AI 工具发起获客、背调、邮件等操作 → API 授权并保存持久任务 → 返回 job_id 与排队状态 → Worker 互斥领取并取得租约 → 重新验证权限 → 执行外部调用及业务计算 → 提交前复核权限与租约 → 保存结果和审计 → 页面通过 API 查询或订阅进度。

建议任务状态为排队、执行中、成功、失败、取消、权限拒绝,并用重试次数和下一次执行时间表示可重试过程;具体枚举名不作为现有数据库契约。领取、心跳和完成必须绑定同一次租约,超时旧 Worker 不得覆盖新执行结果。

重试针对同一业务意图保持幂等。取消排队任务可阻止执行,取消运行任务需协作检查;已经完成的外部副作用不能靠取消撤回。邮件执行结果不确定时先核对供应商结果,不能把 Worker 中断直接当成发送失败并重发。

同区 Worker 使用相同业务库并按任务类型分配能力,不随扩容复制企业业务数据。Java 任务和 WeKnora 知识任务分别调度,任务中心可以通过适配展示两类状态,但不得混领队列。

7. 流程四:企业知识入库

对应图:企业知识入库与使用

租户管理员或受委派的知识库管理员上传资料 → Java API 校验当前企业及知识管理权限 → 原文件保存到公共文件设施并记录归属 → 经 WeKnora 接口提交到企业唯一知识库 → WeKnora 解析、切分和索引 → API 获取处理状态 → 完成后企业成员可以检索、阅读及 AI 引用。

上传成功与索引就绪是不同状态,解析失败应展示失败原因与可重试入口,不把尚未索引的文件标为可检索。文档更新和删除需同步知识索引与文件引用,具体版本和清理策略后续确定;删除前也要验证知识管理权限。

文件、WeKnora 入库与业务映射分属不同系统,建议以可重试阶段和幂等关联标识处理部分失败,不宣称全链路由单个 PG 事务保证。检索前验证有效成员与企业知识库绑定,公共文件路径不能代替授权。

8. 流程五:AI 对话、工具与历史

对应图:AI 会话与业务工具

建议采用单一会话权威:WeKnora 管理会话、消息、知识检索和对话运行;Java 负责企业身份适配与全部业务工具的授权执行。工作台经 Java 进入 WeKnora,不能让现有 ChatService 与 WeKnora 分别维护两套正式会话历史。

  1. 工作台提交当前企业、会话标识和本次消息;Java 重新授权并验证会话所属企业与成员映射,不信任浏览器拼接的完整历史。
  2. 经 WeKnora 接口创建或恢复会话,持久记录本轮输入,再进行检索、模型推理与回答。纯对话、知识问答和业务工具可在同一会话中衔接。
  3. 模型需要业务操作时,使用待验证的工具桥接调用 Java。服务端绑定企业、成员、会话和调用标识,并校验工具白名单、参数、对象归属、当前权限及所需确认;模型不得自行选择其他企业身份。
  4. 短操作通过相应业务模块返回结果;耗时操作创建本区持久任务并返回 job_id。排队回执必须显示任务未完成,不能被 AI 描述为执行成功。
  5. 工具调用与结果关联同一会话;任务完成后页面可展示任务结果。是否自动唤醒模型生成后续总结单独验证,不能假定已有异步回调续聊能力。
  6. 流式回答完成后以持久结果为准;重新进入时从 WeKnora 读取同一会话历史。断流或存储失败要记录可恢复状态,不把未保存的回答标为已保存,也不重复执行已有副作用。
AI 操作类别 建议交互规则
查询 CRM、检索企业知识等只读操作 具备读取权限后直接执行,记录关联标识
创建、修改客户或提交批量任务 展示对象范围与关键参数,按明确业务意图执行;模糊或批量变更先确认
发邮件、删除、批量覆盖等外部或破坏性操作 展示具体收件人、内容、对象与范围,确认绑定本次参数和业务意图,执行前再授权

上述是工具交互建议,具体动作清单与确认策略在实现前确定;用户在页面明确点击发送本身可构成该次发送确认,不要求机械地重复确认。

接入验收必须验证所选 WeKnora 版本能否完成 Java 业务工具桥接、原生会话持久化、流中断恢复及 API/网页历史归属映射。不能把普通知识查询接口当成任意对话导入接口,也不能把一个企业 API Key 当成成员身份。若接口能力不足,先明确适配或扩展方案并验证,再接入正式会话路径;不能通过直接写其内部表或悄悄丢弃历史绕过。

现有 Java 多模型与只读工具实现可作为协议和工具适配参考;未来普通聊天、知识问答及工具调用的统一路径需要实际验证,本文的编排方案是建议,不宣称 WeKnora 已支持现有全部模型协议或业务工具。

9. 流程六:外贸业务闭环

对应图:服务区内业务协作

准备企业与产品知识 → 配置目标市场并发起获客 → 筛选去重并沉淀 CRM → 选择客户做背调 → 报告和评分回写 CRM → 结合企业知识生成邮件草稿 → 有发送权限的成员确认发送 → 公共邮件设施投递、收信及回执 → 本区记录沟通并关联客户 → 更新跟进状态,进入下一轮开发。

AI 是这条业务链的另一操作入口,页面和 AI 必须调用相同业务模块与权限逻辑,不能维护两套客户或发送流程。背调和草稿都应保留引用依据;生成草稿不等于发出邮件,供应商接受不等于最终送达。

收信或回执可能来自周期同步或事件回调,具体方式后续确定;接入必须认证来源、定位企业邮箱并去重,不能通过任意浏览器提交的邮箱或客户 ID 归属消息。无法可靠匹配客户的邮件保留待关联状态,不能猜测归属到其他企业。

10. 建议的模块边界与开发顺序

建议 Java 模块按 CRM、获客、背调、邮件、知识适配、AI 工具、任务调度、业务设置和审计组织,共享经验证的企业上下文。API 与 Worker 是不同执行职责,业务规则复用,避免各自实现不同权限和状态机;这不是立即拆分多个微服务的要求。

顺序 开发内容 主要验收产出
1 明确模块授权和数据契约,保留已有认证路由及 RLS 两企业隔离、同企业共享、撤权与连接池上下文测试
2 验证 WeKnora 身份映射、唯一知识库、会话持久化和 Java 工具桥接 跨企业拒绝、授权编辑、历史恢复和工具调用证据;尽早发现接口缺口
3 建立持久任务契约、任务中心及独立 Java Worker 执行入口 多实例互斥、租约恢复、权限复核、幂等及取消边界
4 迁入 CRM 与获客,再接背调、邮件和跟进 数据保留、共享权限与完整业务闭环
5 将已验收业务模块接入 AI 工具并验证区内扩展 页面与 AI 行为一致,副作用确认、任务关联与重入不重复执行

顺序允许并行准备,但不能在会话持久化或企业隔离未经验证时宣称接入完成。约 120 人是 8 核 16GB、22Mbps 服务区的容量目标,不代表已验证 120 个重任务同时运行;Worker 扩展、数据库和供应商配额需要分别评估。

11. 当前源码基础与待实现范围

证据位置 目前可复用的基础 不能据此认定已完成
backend/.../NodeBrowserAccess.java 与 NodeBrowserController.java 中央票据兑换、节点持久会话及授权 完整业务模块和新模块权限模型
backend/.../NodeStore.java 与 migrations/node/001_business.sql 企业事务上下文、RLS、基础记录及导出任务 本文 CRM、邮件等完整业务表
backend/.../NodeJobWorker.java 受限连接池、导出任务领取及执行前后中央复核 独立多机 Worker 发布、完整心跳治理及所有业务任务类型
backend/.../NodeChatController.java、ChatService.java、ChatTools.java 多模型流式聊天、时间与报价两个只读工具 WeKnora 接入、企业业务工具和服务端持久会话
frontend-react/src/main.jsx 流式展示、工具状态与当前页面历史 当前历史随请求传入,不是正式持久历史库

以上为本次源码核对范围,不是新的生产验收。WeKnora、多机 Worker、获客/CRM/背调/邮件重构和公共设施接入均需逐项实施。旧 /root/dev 仅作已阅读的业务参考,不重新引入旧 Vue、Python 业务服务或 SQLite 主库。

12. 待确定事项与验收边界

待确定:WeKnora 版本及工具桥接方式、会话成员共享/管理员查看策略、具体模块权限矩阵、任务队列技术、收信同步方式、文档版本与删除策略、模型供应商能力和配额、备份 RPO/RTO 与高可用部署。

开发验证至少覆盖:不同企业相同对象 ID 不串数据;同企业成员共享业务但受操作权限限制;离职或撤权后 API、工具、Worker、知识及文件访问均拒绝;重复提交和租约超时不重复产生业务副作用;知识索引失败可重试;会话刷新恢复、断流和异步任务状态真实;邮件发送与回执正确区分。

业务变更按 AGENTS.md 和 docs/spring-boot.md 执行 Java、前端及独立数据库集成测试。本文与地图的验收只证明文档和可视化发布,不代表对应业务已实现,也不授权清空或覆盖生产数据。

2026-10-08 知识资料删除实现补充(已发布,验收见 knowledge-delete-release-20261008.md)

知识资料删除采用节点持久任务与独立 WeKnora API 协议,详见 可靠删除协议。受理时锁定资料并标记删除中,阻止预览、编辑、共享审批及解析回写;Worker 领取租约后复核中央权限和知识库绑定,经 API 清理原件、解析内容与向量,核对操作身份及完成证据后提交。失败持久保留、退避重试,旧租约不能完成新任务。两端数据库不共享事务、不直接跨库写表。共享文件保留至最后有效引用释放,备份和历史审计不属于在线资料清理范围。