ai_scheduler/internal/services/advice/advicer_test.go

163 lines
9.6 KiB
Go
Raw 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 := fileService.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 := advicerService.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 := advicerService.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 := advicerService.AdvicerVersionUpdate(fiberCtx)
t.Log(err)
}
func Test_VersionList(t *testing.T) {
reqBody := `{"id":"69804060c17976e5e21858a8"}`
Run(context.Background(), []byte(reqBody))
err := advicerService.AdvicerVersionList(fiberCtx)
t.Log(err)
}
func Test_AdvicerVersionDel(t *testing.T) {
reqBody := `{"id":"698056073059550befc4f0da"}`
Run(context.Background(), []byte(reqBody))
err := advicerService.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 (
fileService *FileService
advicerService *AdvicerService
adviceChatService *ChatService
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()
advicerChatHisMongo := mongo_model.NewAdvicerChatHisMongo()
aiAdviceModelSupImpl := impl.NewAiAdviceModelSupImpl(db)
aiAdviceSessionImpl := impl.NewAiAdviceSessionImpl(db)
advicerTalkSkillMongo := mongo_model.NewAdvicerTalkSkillMongo()
advicerClientMongo := mongo_model.NewAdvicerClientMongo()
advicerProjectMongo := mongo_model.NewAdvicerProjectMongo()
openai := third_party.NewOpenAi()
adviceProjectImpl := impl.NewAdviceProjectImpl(db)
mongo, _ := pkg.NewMongoDb(ctx, configConfig)
adviceAdvicerBiz := biz.NewAdviceAdvicerBiz(advicerImpl, advicerVersionMongo, mongo)
adviceChatBiz := biz.NewAdviceChatBiz(openai, rdb, aiAdviceSessionImpl, aiAdviceModelSupImpl, advicerChatHisMongo, mongo)
skillBiz := biz.NewAdviceSkillBiz(advicerTalkSkillMongo, mongo)
clientBiz := biz.NewAdviceClientBiz(advicerClientMongo, mongo)
adviceFileBiz := biz.NewAdviceFileBiz(openai)
adviceProjectBiz := biz.NewAdviceProjectBiz(advicerProjectMongo, adviceProjectImpl, aiAdviceModelSupImpl, mongo)
adviceClientBiz := biz.NewAdviceClientBiz(advicerClientMongo, mongo)
adviceSkillBiz := biz.NewAdviceSkillBiz(advicerTalkSkillMongo, mongo)
fileService = NewFileService(adviceFileBiz, configConfig, adviceProjectBiz)
advicerService = NewAdvicerService(adviceAdvicerBiz, configConfig)
skill = NewTalkSkillService(skillBiz, configConfig)
client = NewClientService(clientBiz, configConfig)
project = NewProjectService(adviceProjectBiz, configConfig)
adviceChatService = NewChatService(adviceChatBiz, adviceClientBiz, adviceAdvicerBiz, adviceProjectBiz, adviceSkillBiz, 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{},
}