Intent.java
2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.xly.agent;
import java.util.ArrayList;
import java.util.List;
/**
* 第 0 阶段「意图 + 实体」抽取结果(架构 §5 的 intent gate)。
*
* <p>由 {@code IntentService} 用受约束 JSON 一次得出:把一句自然语言压成
* {意图, 单据/实体类型, 带业务角色的实体清单, 还缺什么}。下游据此做**确定性路由**,
* 而不是让弱模型在全部 9 个工具里盲选——这是治理「理解错/选错工具」的核心。
*/
public class Intent {
/** 操作意图。 */
public static final String QUERY = "查询";
public static final String CREATE = "新增";
public static final String UPDATE = "修改";
public static final String DELETE = "删除";
public static final String EXAMINE = "审核";
public static final String CHAT = "闲聊";
public static final String UNCLEAR = "不清楚";
public static class Entity {
public String value;
public String role; // 客户/产品/物料/供应商/数量/尺寸/日期/金额/其他/未知
public Entity() {}
public Entity(String value, String role) { this.value = value; this.role = role; }
}
/** 写操作(修改/删除/审核)的专用槽位:比通用 entities 更贴合 propose* 工具的入参。 */
public static class WriteSlots {
public String entityType = ""; // 记录所属实体:客户/供应商/物料/产品/单据…
public String record = ""; // 要操作的记录名(公司名/物料名/单号)
public String field = ""; // 要修改的字段中文名(删除/审核留空)
public String newValue = ""; // 修改后的新值(删除/审核留空)
}
public String intent = UNCLEAR;
public String danju = ""; // 单据/实体类型,如 报价/客户/物料/销售订单
public List<Entity> entities = new ArrayList<>();
public List<String> missing = new ArrayList<>(); // 完成该意图还缺的关键信息
/** 取某业务角色的第一个实体值(如「客户」「产品」),没有则返回 null。 */
public String firstValueByRole(String role) {
for (Entity e : entities) {
if (e != null && role.equals(e.role) && e.value != null && !e.value.isBlank()) {
return e.value.trim();
}
}
return null;
}
/** 所有实体值拼接(用于给下游 agent 做 grounding 描述)。 */
public String describeEntities() {
StringBuilder sb = new StringBuilder();
for (Entity e : entities) {
if (e == null || e.value == null || e.value.isBlank()) continue;
if (sb.length() > 0) sb.append(",");
sb.append(e.value).append("(").append(e.role == null ? "未知" : e.role).append(")");
}
return sb.toString();
}
}