ticket/README.md
yumoqing 54f2f2d597 feat: 工单管理模块初版——客户提问→agent预处理→人工运维→转派,接入平台待办
- 3表: tk_tickets(状态机+受理角色/人+agent锁)/tk_messages(客户可见/内部备注)/tk_transfers(append-only流水)
- core.py: 8态13迁移状态机全乐观锁; 转派候选动态查owner角色+'0'机构用户(不硬编码);
  默认受理角色params可配(ticket_default_role=owner.maintainer)
- agent.py: 异步poller(bid_flow范式), RAG检索'0'机构KB+历史工单, llm_call(org_id=0)
  LLM裁决能否回答(严格JSON), 硬门禁reply<20字符转人工, 故障≠答不了(fail_rounds>=3转人工),
  stale回收10min; 追问回流(agent_processing+owner空)立即拾取不等stale
- todos.py: 平台待办provider, 状态派生(客户待确认/角色池待认领/受理人待处理)
- init.py: load_ticket注册env+provider+poller(PIPELINE_MODE=web不启动)
- wwwroot: 客户我的工单页+建单表单, 运维工单管理页(队列切换), 详情弹窗(正文与操作同屏,按视角出按钮)
- load_path.py: logined全部API(业务权限服务端按current_role动态校验)+管理页壳owner三角色
- init/data.json: 7组码表+owner.maintainer角色种子(app_audit先例)
2026-09-10 16:17:58 +08:00

48 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ticket — 平台工单管理模块
客户提出问题 → 登记工单 → agent 先处理(检索'0'机构知识库+历史工单,能答直接回复客户)
→ 答不了转人工运维owner.maintainerparams 可配)→ 人工回复客户 → 关闭;
人工处理不了可转派 owner 组织类型下任意角色或具体用户。
## 关键设计(详见 pipeline-app/docs 或设计文档 ticket-module-design.md
- **状态机**8 态 13 迁移全部乐观锁UPDATE...WHERE status=前置态 + SELECT 验证,
照 pipeline_service agent_loop 的 claim 范式),并发冲突返回明确错误码。
- **平台待办集成**(用户定夺 2026-09-10工单不建独立通知表通过
`register_todo_provider` 钩子接入平台待办通道pipeline-service 聚合,
todo_badge 角标 + my_todos 弹窗异步通知到人)。待办由工单状态派生:
客户回复待确认 / 运维角色池待认领 / 受理人待处理——状态流转待办自动消失,
天然满足「同一事项只发一次」。
- **角色不硬编码**:默认受理角色存 paramsticket_default_role兜底 owner.maintainer
转派候选实时查 role 表 owner 组织类型全部角色 + '0' 机构用户role/orgtypes 运行时可动态增删)。
- **agent**:异步 poller照 bid_flow 范式PIPELINE_MODE=web 不启动),
RAG 检索走 rag HTTP APIdapi Bearer key平台账号='0'机构 → 只见 org_id='0' 的 KB
LLM 走 pipeline_service.llm_bridge.llm_call内部 token+门禁链+记账org_id='0')。
「能否回答」由 LLM 裁决(语义判断铁律,禁关键词匹配),严格 JSON 输出;
硬门禁reply 空/短于20字符一律转人工。基础设施故障LLM/RAG异常≠答不了
fail_rounds+1 回退重试≥3 轮转人工reason=agent服务不可用
## 数据表3张tk_ 前缀)
| 表 | 说明 |
|---|------|
| tk_tickets | 工单主表(状态机+当前受理角色/人+agent处理锁 |
| tk_messages | 往来消息visibility: customer客户可见/internal内部备注 |
| tk_transfers | 转派流水append-only每次受理方变更必留痕 |
## 参数params 表,运行时可改)
| 参数 | 默认 | 说明 |
|------|------|------|
| ticket_default_role | owner.maintainer | agent 转人工的默认受理角色 |
| ticket_followup_max | 2 | agent 回复后客户追问上限,超限自动转人工 |
| ticket_agent_fail_max | 3 | agent 基础设施连续失败轮数上限,超限转人工 |
| ticket_agent_username | admin | agent 检索知识库用的平台账号('0'机构) |
## 安装
宿主 build.sh 四处清单 + `load_ticket()`(见宿主集成)。模块注册:
- env.create_ticket / ticket_detail / ticket_followup / ... dspy 消费)
- register_todo_provider(list_ticket_todos)(平台待办聚合)
- start_poller()agent 后台处理)