Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
WorldEpcho
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ford
WorldEpcho
Commits
d3c206b4
Commit
d3c206b4
authored
Oct 29, 2024
by
Ford
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加了用户画像的创建和查询相关世界的用户画像
parent
fb5e23a9
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
87 additions
and
34 deletions
+87
-34
config.json
+1
-1
src/controllers/NpcController.go
+30
-25
src/main.go
+4
-5
src/models/NPCRole.go
+22
-1
src/service/WorldChat_HighConcurrency.go
+30
-2
src/service/WorldChat_HighConcurrency.go_bak
+0
-0
No files found.
config.json
View file @
d3c206b4
...
@@ -211,7 +211,7 @@
...
@@ -211,7 +211,7 @@
},
},
"npc_role_detail_translations"
:
{
"npc_role_detail_translations"
:
{
"roleName"
:
"角色名
称
"
,
"roleName"
:
"角色名"
,
"introduction"
:
"简介"
,
"introduction"
:
"简介"
,
"consumptionExpectations"
:
"消费心理预期"
,
"consumptionExpectations"
:
"消费心理预期"
,
"psychologicalTraits"
:
"心理特征"
,
"psychologicalTraits"
:
"心理特征"
,
...
...
src/controllers/NpcController.go
View file @
d3c206b4
package
controllers
package
controllers
import
(
import
(
"WorldEpcho/src/config"
"WorldEpcho/src/config/e"
"WorldEpcho/src/config/e"
database
"WorldEpcho/src/datasource"
database
"WorldEpcho/src/datasource"
"WorldEpcho/src/models"
"WorldEpcho/src/models"
"WorldEpcho/src/service"
"WorldEpcho/src/service"
"WorldEpcho/src/utils"
"encoding/json"
"encoding/json"
"fmt"
"fmt"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin"
...
@@ -34,7 +36,7 @@ import (
...
@@ -34,7 +36,7 @@ import (
//创建角色画像的请求体
//创建角色画像的请求体
type
NpcRoleRequest
struct
{
type
NpcRoleRequest
struct
{
Name
string
`json:"name"`
// 名称
Name
string
`json:"name"`
// 名称
Details
Details
`json:"details"`
//详情
Details
models
.
Details
`json:"details"`
//详情
Gender
string
`json:"gender"`
//性别
Gender
string
`json:"gender"`
//性别
Tags
string
`json:"tags"`
//世界标签集
Tags
string
`json:"tags"`
//世界标签集
RelatedWorlds
string
`json:"relatedWorlds"`
//相关世界
RelatedWorlds
string
`json:"relatedWorlds"`
//相关世界
...
@@ -44,27 +46,6 @@ type NpcRoleRequest struct {
...
@@ -44,27 +46,6 @@ type NpcRoleRequest struct {
}
}
// Detail 用于解析详细信息中的 JSON 字符串
type
Details
struct
{
RoleName
string
`json:"roleName"`
//角色名称
Introduction
Introduction
`json:"introduction"`
//简介
ConsumptionExpectations
[]
string
`json:"consumptionExpectations"`
//消费心理预期
PsychologicalTraits
[]
string
`json:"psychologicalTraits"`
//心理特征
Appearance
string
`json:"appearance"`
//外观
Personality
string
`json:"personality"`
//性格
DecisionMakingStyle
string
`json:"decisionMakingStyle"`
//决策风格
RiskPreference
string
`json:"riskPreference"`
//风险偏好
AttitudeTowardsUsers
string
`json:"attitudeTowardsUsers"`
//对用户的态度
}
//个人传记 Personal profile
type
Introduction
struct
{
EducationLevel
string
`json:"educationLevel"`
//教育水平
ProfessionalBackground
string
`json:"professionalBackground"`
//职业背景
Purpose
string
`json:"purpose"`
//目的性
KnownInformation
string
`json:"knownInformation"`
//已知信息
}
//创建Npc用户画像的接口
//创建Npc用户画像的接口
func
CreateNpcUserPortrait
(
ctx
*
gin
.
Context
)
{
func
CreateNpcUserPortrait
(
ctx
*
gin
.
Context
)
{
...
@@ -138,7 +119,6 @@ func CreateNpcUserPortrait(ctx *gin.Context) {
...
@@ -138,7 +119,6 @@ func CreateNpcUserPortrait(ctx *gin.Context) {
/* configData 英文键转换为中文 */
/* configData 英文键转换为中文 */
/*
var
data
map
[
string
]
interface
{}
var
data
map
[
string
]
interface
{}
if
err
:=
json
.
Unmarshal
([]
byte
(
string
(
detailsJSON
)),
&
data
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
([]
byte
(
string
(
detailsJSON
)),
&
data
);
err
!=
nil
{
ctx
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"code"
:
e
.
ParamParseError
,
"data"
:
nil
,
"message"
:
"解析用户画像详细信息数据出错"
})
ctx
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"code"
:
e
.
ParamParseError
,
"data"
:
nil
,
"message"
:
"解析用户画像详细信息数据出错"
})
...
@@ -155,7 +135,6 @@ func CreateNpcUserPortrait(ctx *gin.Context) {
...
@@ -155,7 +135,6 @@ func CreateNpcUserPortrait(ctx *gin.Context) {
return
return
}
}
fmt
.
Println
(
" Details translatedJSON ==> "
,
string
(
translatedJSON
))
fmt
.
Println
(
" Details translatedJSON ==> "
,
string
(
translatedJSON
))
*/
// 创建一个空切片存储相关世界
// 创建一个空切片存储相关世界
relatedWorldIds
:=
[]
int64
{}
relatedWorldIds
:=
[]
int64
{}
...
@@ -178,16 +157,18 @@ func CreateNpcUserPortrait(ctx *gin.Context) {
...
@@ -178,16 +157,18 @@ func CreateNpcUserPortrait(ctx *gin.Context) {
}
}
//用户画像详情信息
//用户画像详情信息
/*
// 将Details结构体转换为 JSON
// 将Details结构体转换为 JSON
jsonData, err := json.Marshal(NpcRequest.Details)
jsonData, err := json.Marshal(NpcRequest.Details)
if err != nil {
if err != nil {
fmt.Println("Error:", err)
fmt.Println("Error:", err)
return
return
}
}
*/
npcUserRole
:=
&
models
.
NpcRole
{
npcUserRole
:=
&
models
.
NpcRole
{
Name
:
NpcRequest
.
Name
,
Name
:
NpcRequest
.
Name
,
Details
:
string
(
jsonData
),
Details
:
string
(
translatedJSON
),
Gender
:
NpcRequest
.
Gender
,
Gender
:
NpcRequest
.
Gender
,
Tags
:
matchingTags
,
Tags
:
matchingTags
,
RelatedWorlds
:
relatedWorldIds
,
RelatedWorlds
:
relatedWorldIds
,
...
@@ -296,6 +277,30 @@ func QueryNpcRoleInfo(ctx *gin.Context) {
...
@@ -296,6 +277,30 @@ func QueryNpcRoleInfo(ctx *gin.Context) {
fmt
.
Println
(
"根据相关世界ID查询用户画像信息出错"
)
fmt
.
Println
(
"根据相关世界ID查询用户画像信息出错"
)
return
return
}
}
/*
转换世界配置信息中的英文字段
*/
var
data
map
[
string
]
interface
{}
for
i
,
npcRole
:=
range
npcRoles
{
if
err
:=
json
.
Unmarshal
([]
byte
(
npcRole
.
Details
),
&
data
);
err
!=
nil
{
ctx
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"code"
:
e
.
ParamParseError
,
"data"
:
nil
,
"message"
:
"解析用户画像详情信息数据出错"
})
return
}
// 转换键名
// 中文转英文
ReverseTranslations
:=
config
.
Conf
.
NpcRoleDetailReverseTranslations
translatedData
:=
utils
.
TranslateKeysChineseToEnglish
(
ReverseTranslations
,
data
)
translatedJSON
,
err
:=
json
.
MarshalIndent
(
translatedData
,
""
,
" "
)
if
err
!=
nil
{
fmt
.
Println
(
"Error marshalling JSON:"
,
err
)
ctx
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"code"
:
e
.
ParamParseError
,
"data"
:
nil
,
"message"
:
"解析用户画像详情信息数据出错"
})
return
}
npcRoles
[
i
]
.
Details
=
string
(
translatedJSON
)
fmt
.
Println
(
" configData translatedJSON ==> "
,
string
(
translatedJSON
))
}
//提交事务
//提交事务
err
=
session
.
Commit
()
err
=
session
.
Commit
()
if
err
!=
nil
{
if
err
!=
nil
{
...
...
src/main.go
View file @
d3c206b4
...
@@ -4,7 +4,6 @@ import (
...
@@ -4,7 +4,6 @@ import (
"WorldEpcho/src/config"
"WorldEpcho/src/config"
"WorldEpcho/src/datasource"
"WorldEpcho/src/datasource"
"WorldEpcho/src/https_auth"
"WorldEpcho/src/https_auth"
"WorldEpcho/src/models"
"WorldEpcho/src/routers"
"WorldEpcho/src/routers"
"WorldEpcho/src/service"
"WorldEpcho/src/service"
"WorldEpcho/src/utils"
"WorldEpcho/src/utils"
...
@@ -25,10 +24,10 @@ func main() {
...
@@ -25,10 +24,10 @@ func main() {
config
.
RandInit
()
config
.
RandInit
()
datasource
.
InitMysql
()
datasource
.
InitMysql
()
// 同步结构体与数据库表
// 同步结构体与数据库表
err
:=
datasource
.
Engine
.
Sync2
(
new
(
models
.
NpcRole
))
//
err := datasource.Engine.Sync2(new(models.NpcRole))
if
err
!=
nil
{
//
if err != nil {
fmt
.
Printf
(
"创建表失败:"
,
err
)
//
fmt.Printf("创建表失败:", err)
}
//
}
//生成一个9位的邀请码
//生成一个9位的邀请码
//println("生成一个9位的邀请码: ", utils.GenerateInviteCode(1))
//println("生成一个9位的邀请码: ", utils.GenerateInviteCode(1))
...
...
src/models/NPCRole.go
View file @
d3c206b4
...
@@ -20,6 +20,27 @@ type NpcRole struct {
...
@@ -20,6 +20,27 @@ type NpcRole struct {
ServiceProviderId
string
`xorm:"-" json:"authId,omitempty"`
// ServiceProviderId 在数据库中忽略
ServiceProviderId
string
`xorm:"-" json:"authId,omitempty"`
// ServiceProviderId 在数据库中忽略
}
}
// Detail 用于解析详细信息中的 JSON 字符串
type
Details
struct
{
RoleName
string
`json:"roleName"`
//角色名称
Introduction
Introduction
`json:"introduction"`
//简介
ConsumptionExpectations
[]
string
`json:"consumptionExpectations"`
//消费心理预期
PsychologicalTraits
[]
string
`json:"psychologicalTraits"`
//心理特征
Appearance
string
`json:"appearance"`
//外观
Personality
string
`json:"personality"`
//性格
DecisionMakingStyle
string
`json:"decisionMakingStyle"`
//决策风格
RiskPreference
string
`json:"riskPreference"`
//风险偏好
AttitudeTowardsUsers
string
`json:"attitudeTowardsUsers"`
//对用户的态度
}
//个人传记 Personal profile
type
Introduction
struct
{
EducationLevel
string
`json:"educationLevel"`
//教育水平
ProfessionalBackground
string
`json:"professionalBackground"`
//职业背景
Purpose
string
`json:"purpose"`
//目的性
KnownInformation
string
`json:"knownInformation"`
//已知信息
}
// 增加一个新的 NPC 角色
// 增加一个新的 NPC 角色
func
CreateNpcRole
(
session
*
xorm
.
Session
,
npcRole
*
NpcRole
)
(
*
NpcRole
,
error
)
{
func
CreateNpcRole
(
session
*
xorm
.
Session
,
npcRole
*
NpcRole
)
(
*
NpcRole
,
error
)
{
_
,
err
:=
session
.
Insert
(
npcRole
)
_
,
err
:=
session
.
Insert
(
npcRole
)
...
@@ -62,7 +83,7 @@ func UpdateNpcRole(npcRole *NpcRole) error {
...
@@ -62,7 +83,7 @@ func UpdateNpcRole(npcRole *NpcRole) error {
}
}
// 根据 ID 查询单个 NPC 角色
// 根据 ID 查询单个 NPC 角色
func
GetNpcRoleByID
(
id
int
)
(
*
NpcRole
,
error
)
{
func
GetNpcRoleByID
(
id
int
64
)
(
*
NpcRole
,
error
)
{
npcRole
:=
new
(
NpcRole
)
npcRole
:=
new
(
NpcRole
)
has
,
err
:=
datasource
.
Engine
.
ID
(
id
)
.
Get
(
npcRole
)
has
,
err
:=
datasource
.
Engine
.
ID
(
id
)
.
Get
(
npcRole
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
src/service/WorldChat_HighConcurrency.go
View file @
d3c206b4
...
@@ -127,6 +127,7 @@ type WorldErrorMessage struct {
...
@@ -127,6 +127,7 @@ type WorldErrorMessage struct {
// Wrapper 结构体仅包含一个字符串字段,用于存储 JSON 字符串
// Wrapper 结构体仅包含一个字符串字段,用于存储 JSON 字符串
type
Wrapper
struct
{
type
Wrapper
struct
{
ConfigData
map
[
string
]
interface
{}
`json:"ConfigData"`
ConfigData
map
[
string
]
interface
{}
`json:"ConfigData"`
EmbeddingNpcs
[]
map
[
string
]
interface
{}
`json:"EmbeddingNpcs" `
}
}
//世界websocket控制器
//世界websocket控制器
...
@@ -245,6 +246,7 @@ func WorldWsHandler(ctx *gin.Context) {
...
@@ -245,6 +246,7 @@ func WorldWsHandler(ctx *gin.Context) {
world_Id
:=
ctx
.
Query
(
"worldId"
)
world_Id
:=
ctx
.
Query
(
"worldId"
)
var
world
*
models
.
WorldInfo
var
world
*
models
.
WorldInfo
var
userInfo
string
var
userInfo
string
var
roleInfo
*
models
.
NpcRole
if
worldName
!=
""
{
if
worldName
!=
""
{
world
,
err
=
models
.
GetWorldInfoByName
(
worldName
)
world
,
err
=
models
.
GetWorldInfoByName
(
worldName
)
...
@@ -279,6 +281,20 @@ func WorldWsHandler(ctx *gin.Context) {
...
@@ -279,6 +281,20 @@ func WorldWsHandler(ctx *gin.Context) {
ctx
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"code"
:
e
.
NotFound
,
"data"
:
nil
,
"message"
:
"世界名称不存在"
})
ctx
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"code"
:
e
.
NotFound
,
"data"
:
nil
,
"message"
:
"世界名称不存在"
})
return
return
}
}
NpcRoleId
:=
ctx
.
Query
(
"NpcRoleId"
)
if
NpcRoleId
!=
""
{
NpcRole_Id
,
err
:=
strconv
.
ParseInt
(
NpcRoleId
,
10
,
64
)
if
err
!=
nil
{
ctx
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"code"
:
0
,
"message"
:
"用户画像ID类型转换出错"
})
return
}
roleInfo
,
err
=
models
.
GetNpcRoleByID
(
NpcRole_Id
)
if
err
!=
nil
{
ctx
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"code"
:
0
,
"message"
:
"根据用户画像ID查询画像信息出错"
})
return
}
}
if
b
||
SP
!=
nil
{
if
b
||
SP
!=
nil
{
fmt
.
Println
(
"ServiceProvider ===> "
,
SP
)
fmt
.
Println
(
"ServiceProvider ===> "
,
SP
)
...
@@ -287,6 +303,7 @@ func WorldWsHandler(ctx *gin.Context) {
...
@@ -287,6 +303,7 @@ func WorldWsHandler(ctx *gin.Context) {
if
user_info
!=
""
{
if
user_info
!=
""
{
userInfo
=
user_info
userInfo
=
user_info
}
}
//拼接会话主题
//拼接会话主题
//ConversationTitle = "用户Id为" + user_Id + "的用户和数字人" + strings.Join(DpNames, "和") + "开始会话"
//ConversationTitle = "用户Id为" + user_Id + "的用户和数字人" + strings.Join(DpNames, "和") + "开始会话"
//fmt.Println("ConversationTitle: ", ConversationTitle)
//fmt.Println("ConversationTitle: ", ConversationTitle)
...
@@ -295,10 +312,22 @@ func WorldWsHandler(ctx *gin.Context) {
...
@@ -295,10 +312,22 @@ func WorldWsHandler(ctx *gin.Context) {
BgInfo
=
world
.
Background
BgInfo
=
world
.
Background
}
}
if
user_info
==
""
{
if
user_info
==
""
{
// 创建 Wrapper 实例并将 JSON 字符串封装
//var details models.Details
//若用户画像存在
// 创建 Wrapper 实例并将 JSON 字符串封装
wrapper
:=
Wrapper
{
ConfigData
:
make
(
map
[
string
]
interface
{})}
wrapper
:=
Wrapper
{
ConfigData
:
make
(
map
[
string
]
interface
{})}
fmt
.
Println
(
"world.ConfigData ==> "
,
world
.
ConfigData
)
if
roleInfo
!=
nil
{
var
npcMap
map
[
string
]
interface
{}
err
=
json
.
Unmarshal
([]
byte
(
roleInfo
.
Details
),
&
npcMap
)
if
err
!=
nil
{
log
.
Fatalf
(
"Error unmarshalling JSON: %v"
,
err
)
}
wrapper
.
EmbeddingNpcs
=
append
(
wrapper
.
EmbeddingNpcs
,
npcMap
)
}
// 将 JSON 字符串解析为 map[string]interface{}
// 将 JSON 字符串解析为 map[string]interface{}
//err := json.Unmarshal([]byte(world.ConfigData), &wrapper.ConfigData)
err
:=
json
.
Unmarshal
([]
byte
(
world
.
ConfigData
),
&
wrapper
.
ConfigData
)
err
:=
json
.
Unmarshal
([]
byte
(
world
.
ConfigData
),
&
wrapper
.
ConfigData
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Printf
(
"Error parsing JSON: %v"
,
err
)
log
.
Printf
(
"Error parsing JSON: %v"
,
err
)
...
@@ -307,7 +336,6 @@ func WorldWsHandler(ctx *gin.Context) {
...
@@ -307,7 +336,6 @@ func WorldWsHandler(ctx *gin.Context) {
// 打印解析后的数据
// 打印解析后的数据
//fmt.Printf("Wrapper ConfigData: %+v\n", wrapper.ConfigData)
//fmt.Printf("Wrapper ConfigData: %+v\n", wrapper.ConfigData)
// 序列化 Wrapper 实例以生成所需的最终 JSON 输出
// 序列化 Wrapper 实例以生成所需的最终 JSON 输出
finalJSON
,
err
:=
json
.
Marshal
(
wrapper
)
finalJSON
,
err
:=
json
.
Marshal
(
wrapper
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
src/service/WorldChat_HighConcurrency.go_bak
0 → 100644
View file @
d3c206b4
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment