refactor: update AIAgent handoff and fallback modes terminology for clarity
This commit is contained in:
@@ -518,9 +518,9 @@ type AIAgent struct {
|
||||
WelcomeMessage string `gorm:"type:text"` // WelcomeMessage 为该 Agent 的欢迎语或首响模板。
|
||||
ReplyTimeoutSeconds int `gorm:"type:int;not null;default:180"` // ReplyTimeoutSeconds 为异步自动回复超时秒数。
|
||||
TeamIDs string `gorm:"type:varchar(500);not null;default:''"` // TeamIDs 为转人工时可路由的客服组ID列表,多个之间使用逗号分隔。
|
||||
HandoffMode enums.AIAgentHandoffMode `gorm:"type:int;not null;default:1"` // HandoffMode 为转人工模式,如进入待接入池、进入默认客服组待接入池。
|
||||
FallbackMode enums.AIAgentFallbackMode `gorm:"type:int;not null;default:1"` // FallbackMode 为知识库未命中时的兜底策略。
|
||||
FallbackMessage string `gorm:"type:text"` // FallbackMessage 为兜底回复文案。
|
||||
HandoffMode enums.AIAgentHandoffMode `gorm:"type:int;not null;default:1"` // HandoffMode 为转人工执行方式,如进入待接入池、进入默认客服组待接入池。
|
||||
FallbackMode enums.AIAgentFallbackMode `gorm:"type:int;not null;default:1"` // FallbackMode 为知识不足时的回复策略。
|
||||
FallbackMessage string `gorm:"type:text"` // FallbackMessage 为知识不足回复文案。
|
||||
KnowledgeIDs string `gorm:"type:varchar(500);not null;default:''"` // KnowledgeIDs 为绑定的知识库ID列表,按顺序表示优先级。
|
||||
SkillIDs string `gorm:"type:varchar(500);not null;default:''"` // SkillIDs 为绑定的技能ID列表,按顺序表示允许路由的范围。
|
||||
AllowedMCPTools string `gorm:"type:text"` // AllowedMCPTools 为允许 direct tool 路由的 MCP 工具白名单配置JSON。
|
||||
|
||||
@@ -208,7 +208,7 @@ var AIAgentHandoffModeValues = []AIAgentHandoffMode{
|
||||
var aiAgentHandoffModeLabelMap = map[AIAgentHandoffMode]string{
|
||||
AIAgentHandoffModeWaitPool: "进入待接入池",
|
||||
AIAgentHandoffModeDefaultTeamPool: "进入默认客服组待接入池",
|
||||
AIAgentHandoffModeAIHoldAndNotify: "AI托底并提醒人工",
|
||||
AIAgentHandoffModeAIHoldAndNotify: "AI继续接待并提醒人工",
|
||||
}
|
||||
|
||||
func GetAIAgentHandoffModeLabel(mode AIAgentHandoffMode) string {
|
||||
@@ -228,8 +228,8 @@ var AIAgentFallbackModeValues = []AIAgentFallbackMode{
|
||||
}
|
||||
|
||||
var aiAgentFallbackModeLabelMap = map[AIAgentFallbackMode]string{
|
||||
AIAgentFallbackModeNoAnswer: "直接声明无答案",
|
||||
AIAgentFallbackModeSuggestRetry: "建议补充信息",
|
||||
AIAgentFallbackModeNoAnswer: "直接说明知识不足",
|
||||
AIAgentFallbackModeSuggestRetry: "引导用户补充信息",
|
||||
}
|
||||
|
||||
func GetAIAgentFallbackModeLabel(mode AIAgentFallbackMode) string {
|
||||
|
||||
@@ -119,7 +119,7 @@ error.e0119: "会话已关闭"
|
||||
error.e0120: "会话未分配客服,暂不允许发送消息"
|
||||
error.e0121: "会话筛选项不合法"
|
||||
error.e0122: "供应商不能为空"
|
||||
error.e0123: "兜底策略不合法"
|
||||
error.e0123: "知识不足回复策略不合法"
|
||||
error.e0124: "公司不存在"
|
||||
error.e0125: "公司名称不能为空"
|
||||
error.e0126: "公司名称已存在"
|
||||
@@ -332,7 +332,7 @@ error.e0332: "请选择要移动的FAQ"
|
||||
error.e0333: "请选择要移动的文档"
|
||||
error.e0334: "负责人不存在"
|
||||
error.path.invalid: "路径参数错误"
|
||||
error.e0336: "转人工模式不合法"
|
||||
error.e0336: "转人工执行方式不合法"
|
||||
error.e0337: "通知不存在"
|
||||
error.e0338: "邮箱已存在"
|
||||
error.e0339: "配置名称不能为空"
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
import assert from "node:assert/strict"
|
||||
import test from "node:test"
|
||||
import { readFile } from "node:fs/promises"
|
||||
|
||||
const configWorkbenchSource = await readFile(new URL("./config-workbench.tsx", import.meta.url), "utf8")
|
||||
const zhMessagesSource = await readFile(new URL("../../../../messages/zh-CN.json", import.meta.url), "utf8")
|
||||
|
||||
test("AI Agent workflow-era policy copy separates handoff execution from knowledge fallback", () => {
|
||||
const combinedSource = `${configWorkbenchSource}\n${zhMessagesSource}`
|
||||
|
||||
assert.match(combinedSource, /转人工执行方式/)
|
||||
assert.match(combinedSource, /知识不足回复策略/)
|
||||
assert.match(combinedSource, /知识不足回复文案/)
|
||||
assert.match(combinedSource, /AI继续接待并提醒人工/)
|
||||
assert.match(combinedSource, /直接说明知识不足/)
|
||||
assert.match(combinedSource, /引导用户补充信息/)
|
||||
|
||||
assert.doesNotMatch(configWorkbenchSource, /转人工模式/)
|
||||
assert.doesNotMatch(configWorkbenchSource, /兜底策略/)
|
||||
assert.doesNotMatch(configWorkbenchSource, /兜底文案/)
|
||||
})
|
||||
@@ -278,14 +278,14 @@ export function AIAgentConfigWorkbench({
|
||||
() => [
|
||||
{ value: String(AIAgentHandoffMode.WaitPool), label: "进入待接入池" },
|
||||
{ value: String(AIAgentHandoffMode.DefaultTeamPool), label: "进入默认客服组待接入池" },
|
||||
{ value: String(AIAgentHandoffMode.AIHoldAndNotify), label: "AI托底并提醒人工" },
|
||||
{ value: String(AIAgentHandoffMode.AIHoldAndNotify), label: "AI继续接待并提醒人工" },
|
||||
],
|
||||
[]
|
||||
)
|
||||
const fallbackModeOptions = useMemo(
|
||||
() => [
|
||||
{ value: String(AIAgentFallbackMode.NoAnswer), label: "直接声明无答案" },
|
||||
{ value: String(AIAgentFallbackMode.SuggestRetry), label: "建议补充信息" },
|
||||
{ value: String(AIAgentFallbackMode.NoAnswer), label: "直接说明知识不足" },
|
||||
{ value: String(AIAgentFallbackMode.SuggestRetry), label: "引导用户补充信息" },
|
||||
],
|
||||
[]
|
||||
)
|
||||
@@ -652,11 +652,11 @@ export function AIAgentConfigWorkbench({
|
||||
{activeSection === "basic" ? (
|
||||
<ConfigSection>
|
||||
<div className="grid grid-cols-1 gap-4 lg:grid-cols-2">
|
||||
<FieldBlock label="转人工模式">
|
||||
<OptionCombobox value={handoffMode} options={handoffModeOptions} placeholder="选择转人工模式" onChange={setHandoffMode} />
|
||||
<FieldBlock label="转人工执行方式">
|
||||
<OptionCombobox value={handoffMode} options={handoffModeOptions} placeholder="选择转人工执行方式" onChange={setHandoffMode} />
|
||||
</FieldBlock>
|
||||
<FieldBlock label="兜底策略">
|
||||
<OptionCombobox value={fallbackMode} options={fallbackModeOptions} placeholder="选择兜底策略" onChange={setFallbackMode} />
|
||||
<FieldBlock label="知识不足回复策略">
|
||||
<OptionCombobox value={fallbackMode} options={fallbackModeOptions} placeholder="选择知识不足回复策略" onChange={setFallbackMode} />
|
||||
</FieldBlock>
|
||||
</div>
|
||||
<AddRow
|
||||
@@ -674,7 +674,7 @@ export function AIAgentConfigWorkbench({
|
||||
items={selectedTeamOptions}
|
||||
onRemove={(id) => setSelectedTeamIds((current) => current.filter((item) => item !== id))}
|
||||
/>
|
||||
<FieldBlock label="兜底文案">
|
||||
<FieldBlock label="知识不足回复文案">
|
||||
<Textarea rows={5} value={fallbackMessage} onChange={(event) => setFallbackMessage(event.target.value)} />
|
||||
</FieldBlock>
|
||||
<FieldBlock label="描述">
|
||||
|
||||
@@ -5,8 +5,8 @@ export enum AIAgentFallbackMode {
|
||||
SuggestRetry = 2,
|
||||
}
|
||||
export const AIAgentFallbackModeLabels: Record<AIAgentFallbackMode, string> = {
|
||||
[AIAgentFallbackMode.NoAnswer]: "直接声明无答案",
|
||||
[AIAgentFallbackMode.SuggestRetry]: "建议补充信息",
|
||||
[AIAgentFallbackMode.NoAnswer]: "直接说明知识不足",
|
||||
[AIAgentFallbackMode.SuggestRetry]: "引导用户补充信息",
|
||||
}
|
||||
|
||||
export enum AIAgentHandoffMode {
|
||||
@@ -17,7 +17,7 @@ export enum AIAgentHandoffMode {
|
||||
export const AIAgentHandoffModeLabels: Record<AIAgentHandoffMode, string> = {
|
||||
[AIAgentHandoffMode.WaitPool]: "进入待接入池",
|
||||
[AIAgentHandoffMode.DefaultTeamPool]: "进入默认客服组待接入池",
|
||||
[AIAgentHandoffMode.AIHoldAndNotify]: "AI托底并提醒人工",
|
||||
[AIAgentHandoffMode.AIHoldAndNotify]: "AI继续接待并提醒人工",
|
||||
}
|
||||
|
||||
export enum AIModelType {
|
||||
|
||||
+16
-16
@@ -1034,15 +1034,15 @@
|
||||
"serviceAiFirst": "AI 优先",
|
||||
"handoffWaitPool": "进入待接入池",
|
||||
"handoffDefaultTeamPool": "进入默认客服组待接入池",
|
||||
"handoffAiHoldAndNotify": "AI托底并提醒人工",
|
||||
"fallbackNoAnswer": "直接声明无答案",
|
||||
"fallbackSuggestRetry": "建议补充信息",
|
||||
"handoffAiHoldAndNotify": "AI继续接待并提醒人工",
|
||||
"fallbackNoAnswer": "直接说明知识不足",
|
||||
"fallbackSuggestRetry": "引导用户补充信息",
|
||||
"nameRequired": "名称不能为空",
|
||||
"aiConfigRequired": "请选择 AI 配置",
|
||||
"serviceModeRequired": "请选择服务模式",
|
||||
"replyTimeoutInvalid": "回复超时秒数必须是大于等于 0 的整数",
|
||||
"handoffModeRequired": "请选择转人工模式",
|
||||
"fallbackModeRequired": "请选择兜底策略",
|
||||
"handoffModeRequired": "请选择转人工执行方式",
|
||||
"fallbackModeRequired": "请选择知识不足回复策略",
|
||||
"loadDetailFailed": "加载 AI Agent 详情失败",
|
||||
"loadAiConfigFailed": "加载 AI 配置失败",
|
||||
"loadTeamsFailed": "加载客服组失败",
|
||||
@@ -1071,14 +1071,14 @@
|
||||
"welcomeMessage": "欢迎语",
|
||||
"systemPrompt": "系统提示词",
|
||||
"sectionStrategy": "服务策略",
|
||||
"handoffMode": "转人工模式",
|
||||
"selectHandoffMode": "请选择转人工模式",
|
||||
"searchHandoffMode": "搜索转人工模式",
|
||||
"emptyHandoffMode": "未找到转人工模式",
|
||||
"handoffMode": "转人工执行方式",
|
||||
"selectHandoffMode": "请选择转人工执行方式",
|
||||
"searchHandoffMode": "搜索转人工执行方式",
|
||||
"emptyHandoffMode": "未找到转人工执行方式",
|
||||
"replyTimeoutSeconds": "回复超时秒数",
|
||||
"replyTimeoutHelp": "AI 自动回复的异步执行超时时间。填 0 时使用系统默认值 180 秒。",
|
||||
"teams": "客服组",
|
||||
"currentHandoffMode": "当前转人工模式:{mode}",
|
||||
"currentHandoffMode": "当前转人工执行方式:{mode}",
|
||||
"handoffNeedsTeam": "。该模式要求至少配置一个客服组。",
|
||||
"handoffOnlyWhenNeeded": "。仅在涉及转人工时生效。",
|
||||
"selectTeam": "请选择客服组",
|
||||
@@ -1097,12 +1097,12 @@
|
||||
"emptyKnowledge": "没有可添加的知识库",
|
||||
"add": "添加",
|
||||
"knowledgeRequired": "请至少选择一个知识库",
|
||||
"fallbackMode": "兜底策略",
|
||||
"selectFallbackMode": "请选择兜底策略",
|
||||
"searchFallbackMode": "搜索兜底策略",
|
||||
"emptyFallbackMode": "未找到兜底策略",
|
||||
"fallbackMessage": "兜底文案",
|
||||
"fallbackMessageHint": "知识库未命中或命中证据不足时,会按这里的策略和文案进行兜底回复。",
|
||||
"fallbackMode": "知识不足回复策略",
|
||||
"selectFallbackMode": "请选择知识不足回复策略",
|
||||
"searchFallbackMode": "搜索知识不足回复策略",
|
||||
"emptyFallbackMode": "未找到知识不足回复策略",
|
||||
"fallbackMessage": "知识不足回复文案",
|
||||
"fallbackMessageHint": "知识库未命中或命中证据不足时,会按这里的策略和文案回复;是否转人工由会话流程决定。",
|
||||
"skillsHint": "用于固定业务流程和多步任务编排。",
|
||||
"selectSkill": "选择并添加 Skill",
|
||||
"searchSkill": "搜索 Skill",
|
||||
|
||||
Reference in New Issue
Block a user