recommender/internal/service/user/summary.go
2024-11-10 03:49:53 +08:00

60 lines
1.5 KiB
Go

package user
import (
"context"
entity2 "github.com/milvus-io/milvus-sdk-go/v2/entity"
"leafdev.top/Ecosystem/recommender/internal/entity"
"leafdev.top/Ecosystem/recommender/pkg/consts"
)
func (s *Service) SummaryUser(c context.Context, externalUserEntity *entity.ExternalUser, applicationEntity *entity.Application) error {
tags, err := s.GetHighScoreTags(c, externalUserEntity, applicationEntity)
if err != nil {
return err
}
if len(tags) == 0 {
return consts.ErrExternalUserDoesNotLikeAnyPost
}
var tagString = ""
for _, tag := range tags {
tagString += tag.Name + " "
}
// 裁剪 > s.config.OpenAI.EmbeddingDim
if len(tagString) > s.config.OpenAI.EmbeddingDim {
tagString = tagString[:s.config.OpenAI.EmbeddingDim]
}
if externalUserEntity.Summary != tagString {
_, err = s.dao.ExternalUser.Where(s.dao.ExternalUser.Id.Eq(externalUserEntity.Id.Uint())).Update(
s.dao.ExternalUser.Summary, tagString,
)
if err != nil {
return err
}
emb, err := s.embedding.TextEmbedding(c, []string{tagString})
if err != nil {
return err
}
var entityCols = []entity2.Column{
entity2.NewColumnFloatVector("vector", s.config.OpenAI.EmbeddingDim, emb),
entity2.NewColumnInt64("external_user_id", []int64{int64(externalUserEntity.Id)}),
entity2.NewColumnInt64("application_id", []int64{int64(applicationEntity.Id)}),
}
_, err = s.milvus.Upsert(c, s.config.Milvus.UserSummaryCollection, "", entityCols...)
if err != nil {
return err
}
}
return err
}