c84870b968
- 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.
151 lines
5.6 KiB
Go
151 lines
5.6 KiB
Go
package builders
|
|
|
|
import (
|
|
"cs-agent/internal/models"
|
|
"cs-agent/internal/pkg/dto/response"
|
|
"cs-agent/internal/pkg/enums"
|
|
"encoding/json"
|
|
)
|
|
|
|
func BuildKnowledgeBase(item *models.KnowledgeBase) response.KnowledgeBaseResponse {
|
|
return response.KnowledgeBaseResponse{
|
|
ID: item.ID,
|
|
Name: item.Name,
|
|
Description: item.Description,
|
|
KnowledgeType: item.KnowledgeType,
|
|
KnowledgeTypeName: enums.GetKnowledgeBaseTypeLabel(enums.KnowledgeBaseType(item.KnowledgeType)),
|
|
Status: item.Status,
|
|
StatusName: enums.GetStatusLabel(item.Status),
|
|
DefaultTopK: item.DefaultTopK,
|
|
DefaultScoreThreshold: item.DefaultScoreThreshold,
|
|
DefaultRerankLimit: item.DefaultRerankLimit,
|
|
ChunkProvider: item.ChunkProvider,
|
|
ChunkTargetTokens: item.ChunkTargetTokens,
|
|
ChunkMaxTokens: item.ChunkMaxTokens,
|
|
ChunkOverlapTokens: item.ChunkOverlapTokens,
|
|
AnswerMode: item.AnswerMode,
|
|
AnswerModeName: enums.GetKnowledgeAnswerModeLabel(enums.KnowledgeAnswerMode(item.AnswerMode)),
|
|
Remark: item.Remark,
|
|
CreatedAt: item.CreatedAt,
|
|
UpdatedAt: item.UpdatedAt,
|
|
CreateUserName: item.CreateUserName,
|
|
UpdateUserName: item.UpdateUserName,
|
|
}
|
|
}
|
|
|
|
func BuildKnowledgeDocument(item *models.KnowledgeDocument) response.KnowledgeDocumentResponse {
|
|
return response.KnowledgeDocumentResponse{
|
|
ID: item.ID,
|
|
KnowledgeBaseID: item.KnowledgeBaseID,
|
|
Title: item.Title,
|
|
Status: item.Status,
|
|
StatusName: enums.GetStatusLabel(item.Status),
|
|
IndexStatus: item.IndexStatus,
|
|
IndexStatusName: enums.GetKnowledgeDocumentIndexStatusLabel(item.IndexStatus),
|
|
IndexedAt: item.IndexedAt,
|
|
IndexError: item.IndexError,
|
|
ContentHash: item.ContentHash,
|
|
ContentType: item.ContentType,
|
|
Content: item.Content,
|
|
CreatedAt: item.CreatedAt,
|
|
UpdatedAt: item.UpdatedAt,
|
|
CreateUserName: item.CreateUserName,
|
|
UpdateUserName: item.UpdateUserName,
|
|
}
|
|
}
|
|
|
|
func BuildKnowledgeFAQ(item *models.KnowledgeFAQ) response.KnowledgeFAQResponse {
|
|
return response.KnowledgeFAQResponse{
|
|
ID: item.ID,
|
|
KnowledgeBaseID: item.KnowledgeBaseID,
|
|
Question: item.Question,
|
|
Answer: item.Answer,
|
|
SimilarQuestions: parseSimilarQuestions(item.SimilarQuestions),
|
|
Status: item.Status,
|
|
StatusName: enums.GetStatusLabel(item.Status),
|
|
IndexStatus: item.IndexStatus,
|
|
IndexStatusName: enums.GetKnowledgeDocumentIndexStatusLabel(item.IndexStatus),
|
|
IndexedAt: item.IndexedAt,
|
|
IndexError: item.IndexError,
|
|
Remark: item.Remark,
|
|
CreatedAt: item.CreatedAt,
|
|
UpdatedAt: item.UpdatedAt,
|
|
CreateUserName: item.CreateUserName,
|
|
UpdateUserName: item.UpdateUserName,
|
|
}
|
|
}
|
|
|
|
func BuildKnowledgeRetrieveLog(item *models.KnowledgeRetrieveLog) response.KnowledgeRetrieveLogResponse {
|
|
return response.KnowledgeRetrieveLogResponse{
|
|
ID: item.ID,
|
|
KnowledgeBaseID: item.KnowledgeBaseID,
|
|
Channel: item.Channel,
|
|
ChannelName: enums.GetKnowledgeRetrieveChannelLabel(enums.KnowledgeRetrieveChannel(item.Channel)),
|
|
Scene: item.Scene,
|
|
SceneName: enums.GetKnowledgeRetrieveSceneLabel(enums.KnowledgeRetrieveScene(item.Scene)),
|
|
SessionID: item.SessionID,
|
|
ConversationID: item.ConversationID,
|
|
RequestID: item.RequestID,
|
|
Question: item.Question,
|
|
RewriteQuestion: item.RewriteQuestion,
|
|
Answer: item.Answer,
|
|
AnswerStatus: item.AnswerStatus,
|
|
AnswerStatusName: enums.GetKnowledgeAnswerStatusLabel(enums.KnowledgeAnswerStatus(item.AnswerStatus)),
|
|
HitCount: item.HitCount,
|
|
TopScore: item.TopScore,
|
|
ChunkProvider: item.ChunkProvider,
|
|
ChunkTargetTokens: item.ChunkTargetTokens,
|
|
ChunkMaxTokens: item.ChunkMaxTokens,
|
|
ChunkOverlapTokens: item.ChunkOverlapTokens,
|
|
RerankEnabled: item.RerankEnabled,
|
|
RerankLimit: item.RerankLimit,
|
|
CitationCount: item.CitationCount,
|
|
UsedChunkCount: item.UsedChunkCount,
|
|
LatencyMs: item.LatencyMs,
|
|
RetrieveMs: item.RetrieveMs,
|
|
GenerateMs: item.GenerateMs,
|
|
PromptTokens: item.PromptTokens,
|
|
CompletionTokens: item.CompletionTokens,
|
|
ModelName: item.ModelName,
|
|
TraceData: item.TraceData,
|
|
CreatedAt: item.CreatedAt,
|
|
}
|
|
}
|
|
|
|
func BuildKnowledgeRetrieveHitResponse(item *models.KnowledgeRetrieveHit) response.KnowledgeRetrieveHitResponse {
|
|
return response.KnowledgeRetrieveHitResponse{
|
|
ID: item.ID,
|
|
RetrieveLogID: item.RetrieveLogID,
|
|
KnowledgeBaseID: item.KnowledgeBaseID,
|
|
ChunkID: item.ChunkID,
|
|
DocumentID: item.DocumentID,
|
|
DocumentTitle: item.DocumentTitle,
|
|
FaqID: item.FaqID,
|
|
FaqQuestion: item.FaqQuestion,
|
|
ChunkNo: item.ChunkNo,
|
|
Title: item.Title,
|
|
SectionPath: item.SectionPath,
|
|
ChunkType: item.ChunkType,
|
|
ChunkTypeName: enums.GetKnowledgeChunkTypeLabel(enums.KnowledgeChunkType(item.ChunkType)),
|
|
Provider: item.Provider,
|
|
RankNo: item.RankNo,
|
|
Score: item.Score,
|
|
RerankScore: item.RerankScore,
|
|
UsedInAnswer: item.UsedInAnswer,
|
|
IsCitation: item.IsCitation,
|
|
Snippet: item.Snippet,
|
|
CreatedAt: item.CreatedAt,
|
|
}
|
|
}
|
|
|
|
func parseSimilarQuestions(raw string) []string {
|
|
if raw == "" {
|
|
return []string{}
|
|
}
|
|
var items []string
|
|
if err := json.Unmarshal([]byte(raw), &items); err != nil {
|
|
return []string{}
|
|
}
|
|
return items
|
|
}
|