60 lines
1.5 KiB
Go
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
|
|
}
|