Imported from betterway614/12315agent (
AGENTS.md). Install upstream withnpx skills add betterway614/12315agent. Copyright stays with the author.
AGENTS.md|12345 政务工单智办助手编码约束
本文件约束在本目录及其子目录中工作的所有 AI 编码代理。开始编码前必须阅读 README.md、PRD.md、本文件以及与任务相关的领域、接口、AI 或交互文档。
当前 baselineVersion 为 V1.3,状态为 BASELINE。实现必须遵循 AiRun 输入快照、节点 Attempt、建议评审/应用和业务显式命令契约,不得基于 V1.0/V1.2 的旧契约推断字段或状态。
1. 目标与事实源
系统服务于 12345 热线工作人员,AI 的定位是“工单副驾”。正式工单、正式分类、正式转派、正式群众回复、SLA 延期批准、重办与办结等业务决定由有权限的工作人员确认。
代码中的正式业务状态只能由 Java 领域服务修改。模型响应、前端状态、异步消息和检索结果均不是正式工单事实源。
2. 固定技术边界
- 使用 Java 21、Spring Boot 3、Spring AI 和 Spring Modulith 构建后端。
- 使用 Vue 3、TypeScript、Vite、Pinia、Vue Router 和 Ant Design Vue 构建前端。
- 使用 PostgreSQL 保存业务数据,pgvector 与 OpenSearch 承担混合检索,Redis 承担短期缓存,MinIO 保存音频和知识文件。
- 使用 Kafka 处理 ASR、完整分析、知识索引和离线评测任务,使用 SSE 推送运行进度。
- 所有模型能力通过可替换的云端 API 适配器接入;禁止在业务模块直接依赖具体供应商 SDK。
- 不创建 Python 智能体服务,不引入 Agno、LangGraph 或多智能体自由对话编排。
- 不把核心业务拆成微服务;当前实现为边界清晰的模块化单体。
3. 不可破坏的业务规则
- 原始材料、结构化事实、AI 输出和人工决定必须分层存储。
- 任何非空 AI 事实字段必须关联 evidenceId;没有证据时返回空值或歧义,不得猜测。
- 人工锁定字段不得被重算、迟到消息或批量更新覆盖。
- AI 结果写入 suggestion 区域,不得直接写入 official 字段。
- 受理处置、正式工单批准/更正、分类确认、转派/改派、退单裁定、办理完成、SLA 延期批准、知识发布、回复批准、重办和办结必须后端鉴权并记录审计;ACTION_MATRIX.md 是状态迁移事实源。
- 知识检索必须按地区、有效期、发布状态和权限预过滤;失效资料不得成为正式推荐依据。
- 分类和部门推荐无法获得足够依据时必须返回候选、缺失项或人工协调状态,不得强行给出唯一结论。
- 云 API 失败不得改变正式工单状态;失败任务可重试或降级,且必须保证幂等。
- 工单版本变化后,旧 AI 运行标记为 STALE,禁止回写。
- 日志、追踪和异常信息不得记录完整录音、联系方式、身份证件、详细住址、完整 Prompt 或模型原始响应。
- 未解决且没有有效 IssueOverride 的 BLOCKER 必须阻止提交;Override 不能修改原 Issue。
- 要求二次确认的动作必须使用绑定主体、组织、动作、资源、版本和 payloadHash 的一次性 X-Confirmation-Token。
- Reply approval、ReplyDelivery、FollowUp 与 CloseDecision 必须是不同业务对象/阶段;不得将“回复已批准”映射为“已办结”。
- SLA 截止时间只能由 SlaPolicy、WorkCalendar、SlaClock 与获批的延期决定计算,禁止直接编辑生产 deadline。
- 正式工单更正必须创建 Correction 与影响分析,禁止覆盖不可变 OfficialTicket 快照。
4. 模块边界
后端包根为 com.gov12345.smartticket,各模块只能通过公开应用服务、领域事件或只读查询接口协作:
- identity:身份、角色、组织和数据范围;
- ticket:工单聚合、事实、诉求簇、关联、更正、版本和正式状态;
- media:录音、附件、转写和证据定位;
- aiwork:AI 运行、节点编排、模型适配与结果 Schema;
- knowledge:知识文档、版本、切片、索引和引用;
- routing:事项分类、职责边界、置信度和推荐;
- review:审核、人工确认、退回补录、转派和退单;
- handling:签收、办理过程、办理结果、SLA、延期和催办;
- reply:预回复、回复质检、正式回复与送达;
- followup:回访、重办、督办和办结门禁;
- audit:审计、操作轨迹和版本回放;
- evaluation:金标集、离线评测和运营指标。
禁止跨模块直接访问对方的内部 Repository、Entity 或数据库表。
5. 实现规范
后端
- 领域对象承载不变量,Controller 不编写业务规则。
- 输入使用 Command/Request,输出使用 DTO/View;JPA Entity 不直接暴露给 API。
- 所有写接口使用 Bean Validation、权限校验、对应资源 ETag、幂等契约和审计上下文。
- 时间统一保存为 UTC 的 Instant,对外按 ISO 8601 返回,并保留业务时区。
- 主键使用 UUID;枚举落库使用稳定代码而非序号。
- 对外错误采用 RFC 7807 Problem Details,禁止返回堆栈和供应商错误正文。
- AI、存储、检索和外部 12345 平台均通过端口接口隔离。
- API_CONTRACT.md 只解释业务语义;contracts/openapi.yaml 是 REST 字段、路径、参数、枚举、响应和生成代码的唯一机器事实源,禁止维护独立 DTO。
- contracts/asyncapi.yaml 是 Kafka Envelope、事件 Schema、分区、重试和兼容性的机器事实源。
- Ticket、Transcript、Draft、HandlingResult、SlaExtension、FollowUp 和 KnowledgeDraft 使用各自版本语义,不能用一个前端“最新状态”代替服务端资源版本。
- 幂等作用域固定为 organizationId + subjectId + operationId + Idempotency-Key;相同键不同 payload 返回 IDEMPOTENCY_CONFLICT。
前端
- 开启 TypeScript strict;禁止 any 逃逸,REST 接口类型从 OpenAPI 生成,事件类型从 AsyncAPI/Schema 生成。
- 服务端数据与界面状态分离;正式字段与 AI 建议使用不同类型和组件。
- 所有异步页面显式处理 loading、empty、partial、error、stale 和 permission-denied 状态。
- 置信度同时显示文字标签、影响因素和证据,不以颜色作为唯一信息。
- 表单草稿、服务端版本和冲突处理必须可见;不得静默覆盖用户编辑。
AI 节点
- 每个节点具有版本化输入 Schema、输出 Schema、Prompt、超时、重试和降级策略。
- 使用结构化输出并在服务端做 Schema 与业务规则双重校验。
- Prompt 只接收当前任务所需的脱敏最小上下文。
- 模型不得直接调用受理处置、正式提交/更正、转派、SLA 延期审批、回复发送、重办、督办、办结、权限修改和知识发布工具。
- 置信度由 Java 计算;模型自报概率只可作为未校准特征,不可直接展示。
6. 测试要求
每项功能至少包含:
- 领域单元测试:正常、边界、拒绝和状态冲突;
- API 契约测试:请求校验、权限、错误码和乐观锁;
- OpenAPI/AsyncAPI lint:引用、operationId、示例、枚举和兼容性;
- AI Schema 测试:合法响应、缺字段、额外字段、类型错误和恶意文本;
- 集成测试:PostgreSQL、Kafka、OpenSearch 等使用容器化依赖;
- 前端组件测试:关键状态、人工门禁、证据联动与可访问性;
- 端到端测试:至少覆盖一条成功链路、一条低置信人工复核链路和一条 API 失败降级链路。
不得通过降低断言、跳过测试、扩大异常捕获或硬编码演示结果来完成任务。
7. 安全规则
- 密钥只能来自环境变量或密钥管理服务;仓库只保留无敏感值的 .env.example。
- 所有对象级访问执行数据范围校验,不能只检查角色。
- 文件上传校验类型、大小、扩展名、内容嗅探和恶意文件扫描状态。
- 用户输入、知识文本和检索片段均视为不可信内容,不得将其中指令作为系统指令执行。
- 输出到 HTML、日志、SQL、检索查询和文件路径前执行相应编码或参数化。
8. AI 编码代理工作方式
- 只处理 TASKS.md 中一个边界清晰的任务或用户明确指定的范围。
- 修改前列出受影响的需求编号、领域不变量、接口和测试。
- 优先扩展现有模块,不创建语义重复的 Service、DTO 或工具类。
- 先实现领域与测试,再接 API 和界面;涉及契约时先更新 OpenAPI/AsyncAPI,再生成类型和实现。
- 每次提交保持可构建、可测试、可回滚,不夹带无关重构。
- 完成后报告改动文件、满足的验收条件、执行的验证和剩余风险,并同步 baselineVersion、CHANGELOG 与 TRACEABILITY_MATRIX。
发现需求冲突、安全边界不清或正式业务动作缺少人工门禁时,停止扩展实现并明确指出冲突位置。