2024-11-16 02:38:34 +08:00

50 lines
1.1 KiB
Go

package web
import (
"catface/app/global/consts"
"catface/app/global/errcode"
"catface/app/global/variable"
"catface/app/model_es"
"catface/app/service/nlp"
"catface/app/utils/response"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
type Rag struct {
}
func (r *Rag) Chat(context *gin.Context) {
// 1. query embedding
query := context.GetString(consts.ValidatorPrefix + "query")
embedding, ok := nlp.GetEmbedding(query)
if !ok {
code := errcode.ErrPythonService
response.Fail(context, code, errcode.ErrMsg[code], "")
return
}
// 2. ES TopK
docs, err := model_es.CreateDocESFactory().TopK(embedding, 1)
if err != nil || len(docs) == 0 {
variable.ZapLog.Error("ES TopK error", zap.Error(err))
code := errcode.ErrNoDocFound
response.Fail(context, code, errcode.ErrMsg[code], errcode.ErrMsgForUser[code])
}
// 3. LLM answer
if answer, err := nlp.ChatKnoledgeRAG(docs[0].Content, query); err == nil {
response.Success(context, consts.CurdStatusOkMsg, gin.H{
"answer": answer,
})
} else {
response.Fail(context, consts.CurdStatusOkCode, consts.CurdStatusOkMsg, "")
}
}
func (r *Rag) HelpDetectCat(context *gin.Context) {
// TODO
}