一个无副作用、可审计的工单决策内核。外部系统负责读取工单、查询日志、调用接口、查询数据库以及执行工单操作;本项目只负责:
- 根据当前事实判断还缺少哪些信息;
- 将缺失事实转换成固定采集指令及其查询参数;
- 根据采集结果匹配版本化规则;
- 返回结构化决策,不直接执行任何外部操作。
工单/采集 CLI
│ 初始 facts
▼
ticket-decision-core
│ collection_requests
▼
日志/API/数据库外部适配器
│ 新 facts
▼
ticket-decision-core
│ actionable/no_match/manual_review/...
▼
工单处理 CLI
本项目不会:
- 执行 shell、SQL 或 HTTP 请求;
- 保存数据库凭据或 API Token;
- 自由生成查询指令;
- 读写工单;
- 把技术错误解释成
no_match。
instruction 是外部系统注册的稳定标识,例如 logs.search-order-errors,不是可直接执行的命令文本。
要求 Go 1.26 或更高版本。
git clone https://github.com/zaurakworks/ticket-decision-core.git
cd ticket-decision-core
go test ./...验证策略文件:
go run ./cmd/ticket-decision validate --rules demo/policy.json使用初始工单事实执行第一轮判断:
go run ./cmd/ticket-decision evaluate `
--rules demo/policy.json `
--input demo/round-1-ticket.json结果为 need_more_info,并包含三个参数已经绑定的采集请求:日志、API 和数据库。
使用外部采集后的事实执行第二轮判断:
go run ./cmd/ticket-decision evaluate `
--rules demo/policy.json `
--input demo/round-2-collected.json结果为 actionable,并返回外部处理器可以消费的 directive。
连续查看两轮流程:
go run ./cmd/decision-demo输入是一次不可变的事实快照:
{
"run_id": "ticket-9001/revision-1",
"facts": {
"ticket": {
"request_id": "req-7f91",
"order_id": "order-2048"
}
}
}规则通过点路径访问事实,例如:
ticket.request_id
evidence.logs.error_count
evidence.api.order_status
evidence.database.pending_jobs
机器契约见 schemas/input.schema.json。
第一轮可能要求外部采集:
{
"outcome": "need_more_info",
"missing_facts": [
"evidence.api.order_status",
"evidence.database.pending_jobs",
"evidence.logs.error_count"
],
"collection_requests": [
{
"collector_id": "order-status-api",
"kind": "api",
"instruction": "api.get-order-status",
"parameters": {
"order_id": "order-2048"
},
"produces": [
"evidence.api.order_status"
]
}
]
}采集完成后可能得到可执行决策:
{
"outcome": "actionable",
"reason_code": "stuck_order_has_pending_job",
"matched_rule_ids": ["retry-stuck-order"],
"directive": {
"handler": "retry_order_pipeline"
}
}支持的结果:
| Outcome | 含义 | 责任方 |
|---|---|---|
actionable |
规则已给出操作指令 | 外部执行器 |
need_more_info |
缺少事实 | 外部采集器 |
no_match |
信息充分但无规则匹配 | 外部路由或人工 |
ambiguous |
同优先级规则冲突 | 人工或规则维护者 |
policy_denied |
策略明确禁止自动执行 | 外部审批流程 |
already_satisfied |
目标状态已经满足 | 外部回写工单 |
manual_review |
规则明确要求人工处理 | 人工队列 |
机器契约见 schemas/decision.schema.json。
| 退出码 | 含义 |
|---|---|
0 |
命令成功;no_match 也是成功的业务判断 |
2 |
命令参数错误 |
3 |
规则、输入或求值无效 |
4 |
输出失败 |
错误以 JSON 写入 stderr:
{
"error": {
"code": "invalid_ruleset",
"message": "..."
}
}cmd/ticket-decision/ 机器调用的 validate/evaluate CLI
cmd/decision-demo/ 两轮流程演示
decision/ 三值条件、优先级、采集计划与输出契约
demo/ 日志/API/数据库组合示例
schemas/ JSON Schema 机器契约
testdata/ 测试输入和规则