feat: 百科rag
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package plant
|
||||
|
||||
import (
|
||||
"sundynix-go/global"
|
||||
plantModel "sundynix-go/model/plant"
|
||||
)
|
||||
|
||||
type AiChatHistoryService struct{}
|
||||
|
||||
// SaveHistory 保存一条问答记录
|
||||
func (s *AiChatHistoryService) SaveHistory(userId, question, answer string) error {
|
||||
record := plantModel.AiChatHistory{
|
||||
UserId: userId,
|
||||
Question: question,
|
||||
Answer: answer,
|
||||
}
|
||||
return global.DB.Create(&record).Error
|
||||
}
|
||||
|
||||
// GetHistoryList 获取用户问答历史(分页,最新在前)
|
||||
func (s *AiChatHistoryService) GetHistoryList(userId string, current, pageSize int) ([]plantModel.AiChatHistory, int64, error) {
|
||||
var list []plantModel.AiChatHistory
|
||||
var total int64
|
||||
|
||||
db := global.DB.Model(&plantModel.AiChatHistory{}).Where("user_id = ?", userId)
|
||||
db.Count(&total)
|
||||
|
||||
if current <= 0 {
|
||||
current = 1
|
||||
}
|
||||
if pageSize <= 0 || pageSize > 50 {
|
||||
pageSize = 20
|
||||
}
|
||||
offset := (current - 1) * pageSize
|
||||
|
||||
err := db.Order("created_at DESC").Offset(offset).Limit(pageSize).Find(&list).Error
|
||||
return list, total, err
|
||||
}
|
||||
|
||||
// DeleteHistory 删除单条记录
|
||||
func (s *AiChatHistoryService) DeleteHistory(userId, id string) error {
|
||||
return global.DB.Where("id = ? AND user_id = ?", id, userId).Delete(&plantModel.AiChatHistory{}).Error
|
||||
}
|
||||
|
||||
// ClearHistory 清空用户所有历史
|
||||
func (s *AiChatHistoryService) ClearHistory(userId string) error {
|
||||
return global.DB.Where("user_id = ?", userId).Delete(&plantModel.AiChatHistory{}).Error
|
||||
}
|
||||
@@ -357,7 +357,7 @@ func (s *AiRagService) PlantChatStreamRAG(ctx context.Context, userQuery string,
|
||||
global.Logger.Warn("Qdrant connect failed, skipping RAG", zap.Error(connErr))
|
||||
}
|
||||
|
||||
systemPrompt := "你是一个专业的植物百科助手,请基于以下知识库信息回答用户问题。如果知识库无相关信息,结合你的通用知识作答。\n"
|
||||
systemPrompt := "你是一个专业的植物百科助手。回答规则:1.基于知识库信息回答,不够则结合通用知识。2.严禁使用Markdown语法(不要用#、*、-、```等符号)。3.用纯文本回答,段落之间空一行。4.分类用「一、二、三」或emoji开头,重点内容直接加书名号《》或【】强调。5.回答简洁专业、条理清晰。\n"
|
||||
if contextText != "" {
|
||||
systemPrompt += "--- 知识库 ---\n" + contextText + "\n--------------\n"
|
||||
}
|
||||
|
||||
@@ -13,4 +13,5 @@ type ServiceGroup struct {
|
||||
CallbackService
|
||||
ExchangeService
|
||||
AiRagService
|
||||
AiChatHistoryService
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user