ai_scheduler/internal/services/advice/advicer_test.go

154 lines
8.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package advice
import (
"ai_scheduler/internal/biz"
"ai_scheduler/internal/biz/llm_service/third_party"
"ai_scheduler/internal/config"
"ai_scheduler/internal/data/impl"
"ai_scheduler/internal/data/mongo_model"
"ai_scheduler/internal/pkg"
"ai_scheduler/utils"
"context"
"encoding/json"
"os"
"testing"
"github.com/gofiber/fiber/v2"
"github.com/valyala/fasthttp"
)
func Test_WordAna(t *testing.T) {
Run(context.Background(), nil)
ana, err := file.WordAnat("https://attachment-public.oss-cn-hangzhou.aliyuncs.com/ai-scheduler/data-analytics/word/content2.docx")
t.Log(ana, err)
}
func Test_AdvicerInit(t *testing.T) {
reqBody := `{"advicer_id": 124, "name": "张三111", "birth": "1990-01-01", "gender": 1, "working_years": 10}`
Run(context.Background(), []byte(reqBody))
err := advicer.AdvicerUpdate(fiberCtx)
t.Log(err)
}
func Test_AdvicerVersionAdd(t *testing.T) {
reqBody := `{"advicerId":124,"versionDesc":"第三个版本","dialectFeatures":{"region":"四川成都话","intensity":0.6,"KeyWords":null},"personalityTags":["耐心细致","专业务实","经验丰富","善于引导"],"sentencePatterns":{"openingMode":["我给你介绍一下","我们先来看一下","这边请"],"explanationMode":["是这样的","我跟你讲","你发现没得","说白了"],"confirmationMode":["对吧?","是不是嘛?","你晓得不?","明白了噻?","对不对?"],"summaryMode":["所以说","简单说就是","其实"],"transitionMode":["然后的话","再其次","还有一点","另外"]},"signatureDialogues":[{"context":"客户质疑地块大小","dialogue":"哥14亩确实不大但你要在成都2.5环内城买房这种是普遍现象。你看万景和绿城都是13亩中铁建只有8.8亩339那个帮泰只有11亩。我们虽然地小但楼间距开阔啊看过去都是200多米而且小小区人少安静圈层更纯粹"},{"context":"客户担心物业费高","dialogue":"姐我懂你意思我们也觉得物业费是有点贵。但招商物业是铂金服务有夜间送外卖、免费宠物喂养、年度保洁这些增值服务。而且前三年开发商补贴一块钱只需要交5块跟其他盘差不多好物业能让房子后期保值增值更多"},{"context":"客户犹豫价格","dialogue":"说实话这个地段的地价都比二八板块贵5000多但我们单价只贵3000。你看龙湖滨江云河颂套内单价都36000了我们才33000真的性价比高现在不买以后这个板块可能就买不起了。"},{"context":"客户担心小区小不保值","dialogue":"哥你不用担心小地块不保值东大街的九龙仓擎天半岛只有两栋楼现在二手房还能卖3万左右是当年的豪宅项目。还有望江名门、仁和春天29号院都是小地块但照样是高端保值盘。核心还是地段我们在槐树店这个成华区最贵的板块保值根本没问题"}],"toneTags":{"enthusiasm":0.8,"patience":0.9,"confidence":0.85,"friendliness":0.8,"persuasion":0.75}}`
Run(context.Background(), []byte(reqBody))
err := advicer.AdvicerVersionAdd(fiberCtx)
t.Log(err)
}
func Test_AdvicerVersionUpdate(t *testing.T) {
reqBody := `{"id":"69804b5a6532131383aeda3a","advicerId":124,"versionDesc":"第三个版本","dialectFeatures":{"region":"四川成都话","intensity":0.6,"KeyWords":null},"personalityTags":["耐心细致","专业务实","经验丰富","善于引导"],"sentencePatterns":{"openingMode":["我给你介绍一下","我们先来看一下","这边请"],"explanationMode":["是这样的","我跟你讲","你发现没得","说白了"],"confirmationMode":["对吧?","是不是嘛?","你晓得不?","明白了噻?","对不对?"],"summaryMode":["所以说","简单说就是","其实"],"transitionMode":["然后的话","再其次","还有一点","另外"]},"signatureDialogues":[{"context":"客户质疑地块大小","dialogue":"哥14亩确实不大但你要在成都2.5环内城买房这种是普遍现象。你看万景和绿城都是13亩中铁建只有8.8亩339那个帮泰只有11亩。我们虽然地小但楼间距开阔啊看过去都是200多米而且小小区人少安静圈层更纯粹"},{"context":"客户担心物业费高","dialogue":"姐我懂你意思我们也觉得物业费是有点贵。但招商物业是铂金服务有夜间送外卖、免费宠物喂养、年度保洁这些增值服务。而且前三年开发商补贴一块钱只需要交5块跟其他盘差不多好物业能让房子后期保值增值更多"},{"context":"客户犹豫价格","dialogue":"说实话这个地段的地价都比二八板块贵5000多但我们单价只贵3000。你看龙湖滨江云河颂套内单价都36000了我们才33000真的性价比高现在不买以后这个板块可能就买不起了。"},{"context":"客户担心小区小不保值","dialogue":"哥你不用担心小地块不保值东大街的九龙仓擎天半岛只有两栋楼现在二手房还能卖3万左右是当年的豪宅项目。还有望江名门、仁和春天29号院都是小地块但照样是高端保值盘。核心还是地段我们在槐树店这个成华区最贵的板块保值根本没问题"}],"toneTags":{"enthusiasm":0.8,"patience":0.9,"confidence":0.85,"friendliness":0.8,"persuasion":0.75}}`
Run(context.Background(), []byte(reqBody))
err := advicer.AdvicerVersionUpdate(fiberCtx)
t.Log(err)
}
func Test_VersionList(t *testing.T) {
reqBody := `{"id":"69804060c17976e5e21858a8"}`
Run(context.Background(), []byte(reqBody))
err := advicer.AdvicerVersionList(fiberCtx)
t.Log(err)
}
func Test_AdvicerVersionDel(t *testing.T) {
reqBody := `{"id":"698056073059550befc4f0da"}`
Run(context.Background(), []byte(reqBody))
err := advicer.AdvicerVersionDel(fiberCtx)
t.Log(err)
}
func Test_Json(t *testing.T) {
responseByte, err := os.ReadFile("./res.json")
if err != nil {
panic(err)
}
var (
result map[string]interface{}
res = make(map[string]mongo_model.AdviceData)
)
if err = json.Unmarshal(responseByte, &result); err != nil {
panic(err)
}
for k, v := range result {
if _, ok := dataMap[k]; !ok {
continue
}
var vbyte []byte
if vbyte, err = json.Marshal(v); err != nil {
panic(err)
}
newData := dataMap[k].Copy()
if err = json.Unmarshal(vbyte, newData); err != nil {
panic(err)
}
res[k] = newData
}
t.Log(result)
}
var (
file *FileService
advicer *AdvicerService
configConfig *config.Config
fiberCtx *fiber.Ctx
)
// run 函数是程序的入口函数,负责初始化和配置各个组件
func Run(ctx context.Context, reqBody []byte) {
if reqBody != nil {
app := fiber.New()
fctx := &fasthttp.RequestCtx{}
fctx.Request.Header.SetMethod("POST")
fctx.Request.SetBody(reqBody)
fctx.Request.Header.SetContentType("application/json")
fiberCtx = app.AcquireCtx(fctx)
}
configConfig, _ = config.LoadConfigWithEnv()
// 初始化数据库连接
db, _ := utils.NewGormDb(configConfig)
rdb := utils.NewRdb(configConfig)
advicerImpl := impl.NewAdviceAdvicerImpl(db)
advicerVersionMongo := mongo_model.NewAdvicerVersionMongo()
advicerTalkSkillMongo := mongo_model.NewAdvicerTalkSkillMongo()
advicerClientMongo := mongo_model.NewAdvicerClientMongo()
advicerProjectMongo := mongo_model.NewAdvicerProjectMongo()
hsyq := third_party.NewHsyq()
advicerfilebiz := biz.NewAdviceFileBiz(hsyq)
mongo, _ := pkg.NewMongoDb(ctx, configConfig)
adviceAdvicerBiz := biz.NewAdviceAdvicerBiz(advicerImpl, advicerVersionMongo, mongo)
skillBiz := biz.NewAdviceSkillBiz(advicerTalkSkillMongo, mongo)
clientBiz := biz.NewAdviceClientBiz(advicerClientMongo, mongo)
projectBiz := biz.NewAdviceProjectBiz(advicerProjectMongo, mongo)
chatBiz := biz.NewAdviceChatBiz(hsyq, rdb)
file = NewFileService(advicerfilebiz, configConfig)
advicer = NewAdvicerService(adviceAdvicerBiz, configConfig)
skill = NewTalkSkillService(skillBiz, configConfig)
client = NewClientService(clientBiz, configConfig)
project = NewProjectService(projectBiz, configConfig)
chat = NewChatService(chatBiz, clientBiz, adviceAdvicerBiz, projectBiz, skillBiz, configConfig)
}
var dataMap = map[string]mongo_model.AdviceData{
"DialectFeatures": &mongo_model.DialectFeatures{},
"SentencePatterns": &mongo_model.SentencePatterns{},
"PersonalityTags": &mongo_model.PersonalityTags{},
"ToneTags": &mongo_model.ToneTags{},
"SignatureDialogues": &mongo_model.SignatureDialogues{},
"RegionValue": &mongo_model.RegionValue{},
"CompetitionComparison": &mongo_model.CompetitionComparison{},
"CoreSellingPoints": &mongo_model.CoreSellingPoints{},
"SupportingFacilities": &mongo_model.SupportingFacilities{},
"DeveloperBacking": &mongo_model.DeveloperBacking{},
"NeedsMining": &mongo_model.NeedsMining{},
"PainPointResponse": &mongo_model.PainPointResponse{},
"ValueBuilding": &mongo_model.ValueBuilding{},
"ClosingTechniques": &mongo_model.ClosingTechniques{},
"CommunicationRhythm": &mongo_model.CommunicationRhythm{},
}