feat: add fallback mode for AI agents and update knowledge base handling
- Introduced AIAgentFallbackMode with options for NoAnswer and SuggestRetry. - Updated AI agent edit component to include fallback mode selection. - Modified API types and payloads to accommodate fallback mode. - Removed deprecated KnowledgeFallbackMode and related logic from knowledge base. - Adjusted knowledge retrieval and response handling to utilize new fallback logic. - Updated tests to reflect changes in fallback mode handling for AI agents.
This commit is contained in:
@@ -112,15 +112,7 @@ func (s *answer) DebugAnswer(ctx context.Context, req request.KnowledgeAnswerReq
|
||||
}
|
||||
}
|
||||
|
||||
fallbackMode := enums.KnowledgeFallbackMode(req.FallbackMode)
|
||||
if fallbackMode == 0 {
|
||||
if knowledgeBase != nil {
|
||||
fallbackMode = enums.KnowledgeFallbackMode(knowledgeBase.FallbackMode)
|
||||
}
|
||||
if fallbackMode == 0 {
|
||||
fallbackMode = enums.KnowledgeFallbackModeNoAnswer
|
||||
}
|
||||
}
|
||||
fallbackMode := enums.AIAgentFallbackModeNoAnswer
|
||||
|
||||
answerStatus := enums.KnowledgeAnswerStatusNormal
|
||||
answer := ""
|
||||
@@ -391,12 +383,10 @@ func buildAnswerSystemPrompt(answerMode enums.KnowledgeAnswerMode) string {
|
||||
return "你是严格的客服知识库助手。只能依据提供的知识片段回答;如果资料不足,请明确说明知识库暂无明确信息。"
|
||||
}
|
||||
|
||||
func buildFallbackAnswer(fallbackMode enums.KnowledgeFallbackMode) string {
|
||||
func buildFallbackAnswer(fallbackMode enums.AIAgentFallbackMode) string {
|
||||
switch fallbackMode {
|
||||
case enums.KnowledgeFallbackModeSuggestRetry:
|
||||
case enums.AIAgentFallbackModeSuggestRetry:
|
||||
return "当前知识库里没有找到足够明确的信息,你可以换个更具体的问法再试一次。"
|
||||
case enums.KnowledgeFallbackModeTransferHuman:
|
||||
return "当前知识库里没有找到足够明确的信息,建议转人工进一步处理。"
|
||||
default:
|
||||
return "当前知识库暂无明确信息。"
|
||||
}
|
||||
|
||||
@@ -11,24 +11,19 @@ import (
|
||||
func TestBuildFallbackAnswer(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
mode enums.KnowledgeFallbackMode
|
||||
mode enums.AIAgentFallbackMode
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "no answer",
|
||||
mode: enums.KnowledgeFallbackModeNoAnswer,
|
||||
mode: enums.AIAgentFallbackModeNoAnswer,
|
||||
expected: "当前知识库暂无明确信息。",
|
||||
},
|
||||
{
|
||||
name: "suggest retry",
|
||||
mode: enums.KnowledgeFallbackModeSuggestRetry,
|
||||
mode: enums.AIAgentFallbackModeSuggestRetry,
|
||||
expected: "当前知识库里没有找到足够明确的信息,你可以换个更具体的问法再试一次。",
|
||||
},
|
||||
{
|
||||
name: "transfer human",
|
||||
mode: enums.KnowledgeFallbackModeTransferHuman,
|
||||
expected: "当前知识库里没有找到足够明确的信息,建议转人工进一步处理。",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
|
||||
@@ -19,7 +19,7 @@ func buildKnowledgeGuardDecision(aiAgent models.AIAgent, retrieveResult *retriev
|
||||
if retrieveResult == nil || len(retrieveResult.KnowledgeBaseIDs) == 0 {
|
||||
return knowledgeGuardDecision{}
|
||||
}
|
||||
fallbackReply := resolveKnowledgeFallbackReply(aiAgent, retrieveResult.FallbackMode)
|
||||
fallbackReply := resolveKnowledgeFallbackReply(aiAgent)
|
||||
if len(retrieveResult.Hits) == 0 {
|
||||
return knowledgeGuardDecision{FallbackReply: fallbackReply}
|
||||
}
|
||||
@@ -32,15 +32,13 @@ func buildKnowledgeGuardDecision(aiAgent models.AIAgent, retrieveResult *retriev
|
||||
}
|
||||
}
|
||||
|
||||
func resolveKnowledgeFallbackReply(aiAgent models.AIAgent, fallbackMode enums.KnowledgeFallbackMode) string {
|
||||
func resolveKnowledgeFallbackReply(aiAgent models.AIAgent) string {
|
||||
if reply := strings.TrimSpace(aiAgent.FallbackMessage); reply != "" {
|
||||
return reply
|
||||
}
|
||||
switch fallbackMode {
|
||||
case enums.KnowledgeFallbackModeSuggestRetry:
|
||||
switch aiAgent.FallbackMode {
|
||||
case enums.AIAgentFallbackModeSuggestRetry:
|
||||
return "当前知识库里没有找到足够明确的信息,你可以换个更具体的问法再试一次。"
|
||||
case enums.KnowledgeFallbackModeTransferHuman:
|
||||
return "当前知识库里没有找到足够明确的信息,建议转人工进一步处理。"
|
||||
default:
|
||||
return "当前知识库暂无明确信息。"
|
||||
}
|
||||
|
||||
@@ -12,9 +12,9 @@ import (
|
||||
|
||||
func TestBuildKnowledgeGuardDecisionFallsBackWhenKnowledgeMisses(t *testing.T) {
|
||||
agent := newKnowledgeGuardAgentFixture()
|
||||
agent.FallbackMode = enums.AIAgentFallbackModeSuggestRetry
|
||||
decision := buildKnowledgeGuardDecision(agent, &retrievers.KnowledgeRetrieveResult{
|
||||
KnowledgeBaseIDs: []int64{1},
|
||||
FallbackMode: enums.KnowledgeFallbackModeSuggestRetry,
|
||||
})
|
||||
|
||||
if decision.FallbackReply != "当前知识库里没有找到足够明确的信息,你可以换个更具体的问法再试一次。" {
|
||||
@@ -30,7 +30,6 @@ func TestBuildKnowledgeGuardDecisionUsesAgentFallbackMessage(t *testing.T) {
|
||||
agent.FallbackMessage = "请联系人工客服"
|
||||
decision := buildKnowledgeGuardDecision(agent, &retrievers.KnowledgeRetrieveResult{
|
||||
KnowledgeBaseIDs: []int64{1},
|
||||
FallbackMode: enums.KnowledgeFallbackModeNoAnswer,
|
||||
})
|
||||
|
||||
if decision.FallbackReply != "请联系人工客服" {
|
||||
@@ -45,8 +44,7 @@ func TestBuildKnowledgeGuardDecisionInjectsStrictInstructionOnHit(t *testing.T)
|
||||
Hits: []rag.RetrieveResult{
|
||||
{KnowledgeBaseID: 1, Score: 0.88},
|
||||
},
|
||||
AnswerMode: enums.KnowledgeAnswerModeStrict,
|
||||
FallbackMode: enums.KnowledgeFallbackModeNoAnswer,
|
||||
AnswerMode: enums.KnowledgeAnswerModeStrict,
|
||||
})
|
||||
|
||||
if decision.FallbackReply != "" {
|
||||
@@ -65,5 +63,7 @@ func TestBuildKnowledgeGuardDecisionInjectsStrictInstructionOnHit(t *testing.T)
|
||||
}
|
||||
|
||||
func newKnowledgeGuardAgentFixture() models.AIAgent {
|
||||
return models.AIAgent{}
|
||||
return models.AIAgent{
|
||||
FallbackMode: enums.AIAgentFallbackModeNoAnswer,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,6 @@ type KnowledgeRetrieveResult struct {
|
||||
ContextText string
|
||||
TopScore float64
|
||||
AnswerMode enums.KnowledgeAnswerMode
|
||||
FallbackMode enums.KnowledgeFallbackMode
|
||||
Trace *rag.RetrieveTrace
|
||||
TraceItems []callbacks.RetrieverTraceItem
|
||||
TraceSummary callbacks.RetrieverTraceSummary
|
||||
@@ -127,7 +126,7 @@ func (r *KnowledgeRetriever) RetrieveContextByOptions(ctx context.Context, opts
|
||||
ret.ContextResults = limitContextResults(ret.ContextResults, maxContextItems)
|
||||
ret.ContextText = strings.TrimSpace(buildContextText(ret.ContextResults))
|
||||
ret.TopScore = resolveTopScore(results)
|
||||
ret.AnswerMode, ret.FallbackMode = resolveRuntimeAnswerSettings(knowledgeBaseIDs, results)
|
||||
ret.AnswerMode = resolveRuntimeAnswerMode(knowledgeBaseIDs, results)
|
||||
ret.TraceItems = buildRetrieverTraceItems(queryPreview, results, trace)
|
||||
ret.TraceSummary = buildRetrieverTraceSummary(ret.Options, ret.Policies, ret.ContextResults, results, trace)
|
||||
return ret, nil
|
||||
@@ -188,34 +187,30 @@ func (r *KnowledgeRetriever) resolvePolicies(knowledgeBaseIDs []int64, opts Know
|
||||
return ret
|
||||
}
|
||||
|
||||
func resolveRuntimeAnswerSettings(knowledgeBaseIDs []int64, results []rag.RetrieveResult) (enums.KnowledgeAnswerMode, enums.KnowledgeFallbackMode) {
|
||||
func resolveRuntimeAnswerMode(knowledgeBaseIDs []int64, results []rag.RetrieveResult) enums.KnowledgeAnswerMode {
|
||||
knowledgeBases := loadRuntimeKnowledgeBases(knowledgeBaseIDs)
|
||||
if len(knowledgeBases) == 0 {
|
||||
return enums.KnowledgeAnswerModeStrict, enums.KnowledgeFallbackModeNoAnswer
|
||||
return enums.KnowledgeAnswerModeStrict
|
||||
}
|
||||
if len(results) > 0 {
|
||||
if knowledgeBase, ok := knowledgeBases[results[0].KnowledgeBaseID]; ok {
|
||||
return normalizeRuntimeAnswerSettings(knowledgeBase)
|
||||
return normalizeRuntimeAnswerMode(knowledgeBase)
|
||||
}
|
||||
}
|
||||
for _, knowledgeBaseID := range knowledgeBaseIDs {
|
||||
if knowledgeBase, ok := knowledgeBases[knowledgeBaseID]; ok {
|
||||
return normalizeRuntimeAnswerSettings(knowledgeBase)
|
||||
return normalizeRuntimeAnswerMode(knowledgeBase)
|
||||
}
|
||||
}
|
||||
return enums.KnowledgeAnswerModeStrict, enums.KnowledgeFallbackModeNoAnswer
|
||||
return enums.KnowledgeAnswerModeStrict
|
||||
}
|
||||
|
||||
func normalizeRuntimeAnswerSettings(knowledgeBase models.KnowledgeBase) (enums.KnowledgeAnswerMode, enums.KnowledgeFallbackMode) {
|
||||
func normalizeRuntimeAnswerMode(knowledgeBase models.KnowledgeBase) enums.KnowledgeAnswerMode {
|
||||
answerMode := enums.KnowledgeAnswerMode(knowledgeBase.AnswerMode)
|
||||
if answerMode == 0 {
|
||||
answerMode = enums.KnowledgeAnswerModeStrict
|
||||
}
|
||||
fallbackMode := enums.KnowledgeFallbackMode(knowledgeBase.FallbackMode)
|
||||
if fallbackMode == 0 {
|
||||
fallbackMode = enums.KnowledgeFallbackModeNoAnswer
|
||||
}
|
||||
return answerMode, fallbackMode
|
||||
return answerMode
|
||||
}
|
||||
|
||||
func loadRuntimeKnowledgeBases(ids []int64) map[int64]models.KnowledgeBase {
|
||||
|
||||
@@ -25,8 +25,6 @@ func BuildKnowledgeBase(item *models.KnowledgeBase) response.KnowledgeBaseRespon
|
||||
ChunkOverlapTokens: item.ChunkOverlapTokens,
|
||||
AnswerMode: item.AnswerMode,
|
||||
AnswerModeName: enums.GetKnowledgeAnswerModeLabel(enums.KnowledgeAnswerMode(item.AnswerMode)),
|
||||
FallbackMode: item.FallbackMode,
|
||||
FallbackModeName: enums.GetKnowledgeFallbackModeLabel(enums.KnowledgeFallbackMode(item.FallbackMode)),
|
||||
Remark: item.Remark,
|
||||
CreatedAt: item.CreatedAt,
|
||||
UpdatedAt: item.UpdatedAt,
|
||||
|
||||
@@ -124,6 +124,8 @@ func buildAIAgentResponse(item *models.AIAgent) response.AIAgentResponse {
|
||||
ReplyTimeoutSeconds: item.ReplyTimeoutSeconds,
|
||||
HandoffMode: item.HandoffMode,
|
||||
HandoffModeName: enums.GetAIAgentHandoffModeLabel(item.HandoffMode),
|
||||
FallbackMode: item.FallbackMode,
|
||||
FallbackModeName: enums.GetAIAgentFallbackModeLabel(item.FallbackMode),
|
||||
FallbackMessage: item.FallbackMessage,
|
||||
KnowledgeIDs: utils.SplitInt64s(item.KnowledgeIDs),
|
||||
SkillIDs: utils.SplitInt64s(item.SkillIDs),
|
||||
|
||||
@@ -509,6 +509,7 @@ type AIAgent struct {
|
||||
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 为兜底回复文案。
|
||||
KnowledgeIDs string `gorm:"type:varchar(500);not null;default:''"` // KnowledgeIDs 为绑定的知识库ID列表,按顺序表示优先级。
|
||||
SkillIDs string `gorm:"type:varchar(500);not null;default:''"` // SkillIDs 为绑定的技能ID列表,按顺序表示允许路由的范围。
|
||||
@@ -775,7 +776,6 @@ type KnowledgeBase struct {
|
||||
ChunkMaxTokens int `gorm:"type:int;not null;default:400"` // ChunkMaxTokens 为单 chunk 最大 token 数。
|
||||
ChunkOverlapTokens int `gorm:"type:int;not null;default:40"` // ChunkOverlapTokens 为相邻 chunk 重叠 token 数。
|
||||
AnswerMode int `gorm:"type:int;not null;default:1"` // AnswerMode 为回答模式:1严格知识库模式 2辅助解释模式。
|
||||
FallbackMode int `gorm:"type:int;not null;default:1"` // FallbackMode 为兜底模式:1声明无答案 2引导换问法 3转人工。
|
||||
SortNo int `gorm:"type:int;not null;default:0;index"` // SortNo 为排序号,用于后台展示和知识库的人工排序管理。
|
||||
Remark string `gorm:"type:text"` // Remark 为备注。
|
||||
AuditFields
|
||||
|
||||
@@ -52,6 +52,7 @@ type CreateAIAgentRequest struct {
|
||||
ReplyTimeoutSeconds int `json:"replyTimeoutSeconds"`
|
||||
TeamIDs []int64 `json:"teamIds"`
|
||||
HandoffMode enums.AIAgentHandoffMode `json:"handoffMode"`
|
||||
FallbackMode enums.AIAgentFallbackMode `json:"fallbackMode"`
|
||||
FallbackMessage string `json:"fallbackMessage"`
|
||||
KnowledgeIDs []int64 `json:"knowledgeIds"`
|
||||
SkillIDs []int64 `json:"skillIds"`
|
||||
|
||||
@@ -14,7 +14,6 @@ type CreateKnowledgeBaseRequest struct {
|
||||
ChunkMaxTokens int `json:"chunkMaxTokens"`
|
||||
ChunkOverlapTokens int `json:"chunkOverlapTokens"`
|
||||
AnswerMode int `json:"answerMode"`
|
||||
FallbackMode int `json:"fallbackMode"`
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
@@ -71,7 +70,6 @@ type KnowledgeAnswerRequest struct {
|
||||
SessionID string `json:"sessionId"`
|
||||
ConversationID int64 `json:"conversationId"`
|
||||
AnswerMode int `json:"answerMode"`
|
||||
FallbackMode int `json:"fallbackMode"`
|
||||
}
|
||||
|
||||
type CreateKnowledgeFeedbackRequest struct {
|
||||
|
||||
@@ -83,6 +83,8 @@ type AIAgentResponse struct {
|
||||
Teams []AIAgentTeamResponse `json:"teams"`
|
||||
HandoffMode enums.AIAgentHandoffMode `json:"handoffMode"`
|
||||
HandoffModeName string `json:"handoffModeName"`
|
||||
FallbackMode enums.AIAgentFallbackMode `json:"fallbackMode"`
|
||||
FallbackModeName string `json:"fallbackModeName"`
|
||||
FallbackMessage string `json:"fallbackMessage"`
|
||||
KnowledgeIDs []int64 `json:"knowledgeIds"`
|
||||
KnowledgeBaseNames []string `json:"knowledgeBaseNames"`
|
||||
|
||||
@@ -22,8 +22,6 @@ type KnowledgeBaseResponse struct {
|
||||
ChunkOverlapTokens int `json:"chunkOverlapTokens"`
|
||||
AnswerMode int `json:"answerMode"`
|
||||
AnswerModeName string `json:"answerModeName"`
|
||||
FallbackMode int `json:"fallbackMode"`
|
||||
FallbackModeName string `json:"fallbackModeName"`
|
||||
DocumentCount int64 `json:"documentCount"`
|
||||
FAQCount int64 `json:"faqCount"`
|
||||
Remark string `json:"remark"`
|
||||
|
||||
@@ -215,6 +215,27 @@ func GetAIAgentHandoffModeLabel(mode AIAgentHandoffMode) string {
|
||||
return aiAgentHandoffModeLabelMap[mode]
|
||||
}
|
||||
|
||||
type AIAgentFallbackMode int
|
||||
|
||||
const (
|
||||
AIAgentFallbackModeNoAnswer AIAgentFallbackMode = 1
|
||||
AIAgentFallbackModeSuggestRetry AIAgentFallbackMode = 2
|
||||
)
|
||||
|
||||
var AIAgentFallbackModeValues = []AIAgentFallbackMode{
|
||||
AIAgentFallbackModeNoAnswer,
|
||||
AIAgentFallbackModeSuggestRetry,
|
||||
}
|
||||
|
||||
var aiAgentFallbackModeLabelMap = map[AIAgentFallbackMode]string{
|
||||
AIAgentFallbackModeNoAnswer: "直接声明无答案",
|
||||
AIAgentFallbackModeSuggestRetry: "建议补充信息",
|
||||
}
|
||||
|
||||
func GetAIAgentFallbackModeLabel(mode AIAgentFallbackMode) string {
|
||||
return aiAgentFallbackModeLabelMap[mode]
|
||||
}
|
||||
|
||||
const (
|
||||
IMRealtimeEventConnected = "connected"
|
||||
IMRealtimeEventPong = "pong"
|
||||
|
||||
@@ -214,21 +214,3 @@ var knowledgeAnswerModeLabelMap = map[KnowledgeAnswerMode]string{
|
||||
func GetKnowledgeAnswerModeLabel(mode KnowledgeAnswerMode) string {
|
||||
return knowledgeAnswerModeLabelMap[mode]
|
||||
}
|
||||
|
||||
type KnowledgeFallbackMode int
|
||||
|
||||
const (
|
||||
KnowledgeFallbackModeNoAnswer KnowledgeFallbackMode = 1
|
||||
KnowledgeFallbackModeSuggestRetry KnowledgeFallbackMode = 2
|
||||
KnowledgeFallbackModeTransferHuman KnowledgeFallbackMode = 3
|
||||
)
|
||||
|
||||
var knowledgeFallbackModeLabelMap = map[KnowledgeFallbackMode]string{
|
||||
KnowledgeFallbackModeNoAnswer: "直接声明无答案",
|
||||
KnowledgeFallbackModeSuggestRetry: "建议重试",
|
||||
KnowledgeFallbackModeTransferHuman: "转人工",
|
||||
}
|
||||
|
||||
func GetKnowledgeFallbackModeLabel(mode KnowledgeFallbackMode) string {
|
||||
return knowledgeFallbackModeLabelMap[mode]
|
||||
}
|
||||
|
||||
@@ -101,6 +101,7 @@ func (s *aIAgentService) UpdateAIAgent(req request.UpdateAIAgentRequest, operato
|
||||
"reply_timeout_seconds": item.ReplyTimeoutSeconds,
|
||||
"team_ids": item.TeamIDs,
|
||||
"handoff_mode": item.HandoffMode,
|
||||
"fallback_mode": item.FallbackMode,
|
||||
"fallback_message": item.FallbackMessage,
|
||||
"knowledge_ids": item.KnowledgeIDs,
|
||||
"skill_ids": item.SkillIDs,
|
||||
@@ -157,6 +158,12 @@ func (s *aIAgentService) buildAIAgentModel(id int64, req request.CreateAIAgentRe
|
||||
if !slices.Contains(enums.AIAgentHandoffModeValues, enums.AIAgentHandoffMode(req.HandoffMode)) {
|
||||
return nil, errorsx.InvalidParam("转人工模式不合法")
|
||||
}
|
||||
if req.FallbackMode == 0 {
|
||||
req.FallbackMode = enums.AIAgentFallbackModeNoAnswer
|
||||
}
|
||||
if !slices.Contains(enums.AIAgentFallbackModeValues, enums.AIAgentFallbackMode(req.FallbackMode)) {
|
||||
return nil, errorsx.InvalidParam("兜底策略不合法")
|
||||
}
|
||||
if enums.AIAgentHandoffMode(req.HandoffMode) == enums.AIAgentHandoffModeDefaultTeamPool && len(teamIDs) == 0 {
|
||||
return nil, errorsx.InvalidParam("默认客服组待接入池模式必须至少选择一个客服组")
|
||||
}
|
||||
@@ -209,6 +216,7 @@ func (s *aIAgentService) buildAIAgentModel(id int64, req request.CreateAIAgentRe
|
||||
ReplyTimeoutSeconds: req.ReplyTimeoutSeconds,
|
||||
TeamIDs: utils.JoinInt64s(teamIDs),
|
||||
HandoffMode: req.HandoffMode,
|
||||
FallbackMode: req.FallbackMode,
|
||||
FallbackMessage: strings.TrimSpace(req.FallbackMessage),
|
||||
KnowledgeIDs: utils.JoinInt64s(knowledgeIDs),
|
||||
SkillIDs: utils.JoinInt64s(skillIDs),
|
||||
|
||||
@@ -112,7 +112,6 @@ func (s *knowledgeBaseService) UpdateKnowledgeBase(req request.UpdateKnowledgeBa
|
||||
"chunk_max_tokens": item.ChunkMaxTokens,
|
||||
"chunk_overlap_tokens": item.ChunkOverlapTokens,
|
||||
"answer_mode": item.AnswerMode,
|
||||
"fallback_mode": item.FallbackMode,
|
||||
"remark": item.Remark,
|
||||
"update_user_id": operator.UserID,
|
||||
"update_user_name": operator.Username,
|
||||
@@ -161,7 +160,6 @@ func (s *knowledgeBaseService) buildKnowledgeBaseModel(req request.CreateKnowled
|
||||
ChunkMaxTokens: req.ChunkMaxTokens,
|
||||
ChunkOverlapTokens: req.ChunkOverlapTokens,
|
||||
AnswerMode: req.AnswerMode,
|
||||
FallbackMode: req.FallbackMode,
|
||||
Remark: req.Remark,
|
||||
}
|
||||
if item.DefaultTopK == 0 {
|
||||
@@ -208,9 +206,6 @@ func (s *knowledgeBaseService) buildKnowledgeBaseModel(req request.CreateKnowled
|
||||
if item.AnswerMode == 0 {
|
||||
item.AnswerMode = 1
|
||||
}
|
||||
if item.FallbackMode == 0 {
|
||||
item.FallbackMode = 1
|
||||
}
|
||||
return item, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user