|
@@ -6,9 +6,11 @@ import (
|
|
|
"github.com/suyuan32/simple-admin-common/msg/errormsg"
|
|
|
"github.com/suyuan32/simple-admin-core/rpc/types/core"
|
|
|
"github.com/zeromicro/go-zero/core/errorx"
|
|
|
+ "go.mongodb.org/mongo-driver/bson/primitive"
|
|
|
"time"
|
|
|
"wechat-api/internal/svc"
|
|
|
"wechat-api/internal/types"
|
|
|
+ apps "wechat-api/mongo_model/apps"
|
|
|
team_members "wechat-api/mongo_model/team_members"
|
|
|
teams "wechat-api/mongo_model/teams"
|
|
|
users "wechat-api/mongo_model/users"
|
|
@@ -92,5 +94,261 @@ func (l *CreateDepartmentLogic) CreateDepartment(req *types.DepartmentInfo) (res
|
|
|
return nil, errorx.NewInvalidArgumentError("fastgpt create failed " + err.Error())
|
|
|
}
|
|
|
|
|
|
+ // 创建默认智能体
|
|
|
+ apps_info := &apps.Apps{
|
|
|
+ ParentID: nil,
|
|
|
+ TeamID: teams_info.ID,
|
|
|
+ TmbID: team_members_info.ID,
|
|
|
+ Name: "默认智能体",
|
|
|
+ Type: "simple",
|
|
|
+ Version: "v2",
|
|
|
+ Avatar: "/imgs/app/avatar/simple.svg",
|
|
|
+ Intro: "",
|
|
|
+ TeamTags: []string{},
|
|
|
+ Modules: []apps.AppModule{
|
|
|
+ {
|
|
|
+ NodeID: "userGuide",
|
|
|
+ Name: "系统配置",
|
|
|
+ Intro: "",
|
|
|
+ FlowNodeType: "userGuide",
|
|
|
+ Position: apps.Position{
|
|
|
+ X: 531.242273606555,
|
|
|
+ Y: -486.761172954975,
|
|
|
+ },
|
|
|
+ Version: "481",
|
|
|
+ Inputs: []apps.AppInput{},
|
|
|
+ Outputs: []apps.AppOutput{},
|
|
|
+ },
|
|
|
+ {
|
|
|
+ NodeID: "workflowStartNodeId",
|
|
|
+ Name: "流程开始",
|
|
|
+ Intro: "",
|
|
|
+ Avatar: "core/workflow/template/workflowStart",
|
|
|
+ FlowNodeType: "workflowStart",
|
|
|
+ Position: apps.Position{
|
|
|
+ X: 558.40823764155,
|
|
|
+ Y: 123.723874291941,
|
|
|
+ },
|
|
|
+ Version: "481",
|
|
|
+ Inputs: []apps.AppInput{
|
|
|
+ {
|
|
|
+ Key: "userChatInput",
|
|
|
+ RenderTypeList: []string{"reference", "textarea"},
|
|
|
+ ValueType: "string",
|
|
|
+ Label: "workflow:user_question",
|
|
|
+ ToolDescription: "workflow:user_question",
|
|
|
+ Required: true,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ Outputs: []apps.AppOutput{
|
|
|
+ {
|
|
|
+ ID: "userChatInput",
|
|
|
+ Key: "userChatInput",
|
|
|
+ Label: "common:core.module.input.label.user question",
|
|
|
+ Type: "static",
|
|
|
+ ValueType: "string",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ ID: "userFiles",
|
|
|
+ Key: "userFiles",
|
|
|
+ Label: "app:workflow.user_file_input",
|
|
|
+ Description: "app:workflow.user_file_input_desc",
|
|
|
+ Type: "static",
|
|
|
+ ValueType: "arrayString",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ NodeID: "7BdojPlukIQw",
|
|
|
+ Name: "AI 对话",
|
|
|
+ Intro: "AI 大模型对话",
|
|
|
+ Avatar: "core/workflow/template/aiChat",
|
|
|
+ FlowNodeType: "chatNode",
|
|
|
+ ShowStatus: true,
|
|
|
+ Position: apps.Position{
|
|
|
+ X: 1106.32383879608,
|
|
|
+ Y: -350.603067468347,
|
|
|
+ },
|
|
|
+ Version: "4813",
|
|
|
+ Inputs: []apps.AppInput{
|
|
|
+ {
|
|
|
+ Key: "model",
|
|
|
+ RenderTypeList: []string{"settingLLMModel", "reference"},
|
|
|
+ ValueType: "string",
|
|
|
+ Value: "DeepSeek-V3",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "temperature",
|
|
|
+ RenderTypeList: []string{"hidden"},
|
|
|
+ ValueType: "number",
|
|
|
+ Value: int32(0),
|
|
|
+ Min: getInt32(0),
|
|
|
+ Max: getInt32(10),
|
|
|
+ Step: getInt32(1),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "maxToken",
|
|
|
+ RenderTypeList: []string{"hidden"},
|
|
|
+ ValueType: "number",
|
|
|
+ Value: int32(2000),
|
|
|
+ Min: getInt32(100),
|
|
|
+ Max: getInt32(4000),
|
|
|
+ Step: getInt32(50),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "isResponseAnswerText",
|
|
|
+ RenderTypeList: []string{"hidden"},
|
|
|
+ ValueType: "boolean",
|
|
|
+ Value: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "aiChatQuoteRole",
|
|
|
+ RenderTypeList: []string{"hidden"},
|
|
|
+ ValueType: "string",
|
|
|
+ Value: "system",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "quoteTemplate",
|
|
|
+ RenderTypeList: []string{"hidden"},
|
|
|
+ ValueType: "string",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "quotePrompt",
|
|
|
+ RenderTypeList: []string{"hidden"},
|
|
|
+ ValueType: "string",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "systemPrompt",
|
|
|
+ RenderTypeList: []string{"textarea", "reference"},
|
|
|
+ Max: getInt32(3000),
|
|
|
+ ValueType: "string",
|
|
|
+ Label: "core.ai.Prompt",
|
|
|
+ Description: "core.app.tip.systemPromptTip",
|
|
|
+ Placeholder: "core.app.tip.chatNodeSystemPromptTip",
|
|
|
+ Value: "",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "history",
|
|
|
+ RenderTypeList: []string{"numberInput", "reference"},
|
|
|
+ ValueType: "chatHistory",
|
|
|
+ Label: "core.module.input.label.chat history",
|
|
|
+ Required: true,
|
|
|
+ Min: getInt32(0),
|
|
|
+ Max: getInt32(30),
|
|
|
+ Value: int32(6),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "userChatInput",
|
|
|
+ RenderTypeList: []string{"reference", "textarea"},
|
|
|
+ ValueType: "string",
|
|
|
+ Label: "common:core.module.input.label.user question",
|
|
|
+ Required: true,
|
|
|
+ ToolDescription: "common:core.module.input.label.user question",
|
|
|
+ Value: []interface{}{"workflowStartNodeId", "userChatInput"},
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "quoteQA",
|
|
|
+ RenderTypeList: []string{"settingDatasetQuotePrompt"},
|
|
|
+ Label: "",
|
|
|
+ DebugLabel: "common:core.module.Dataset quote.label",
|
|
|
+ Description: "",
|
|
|
+ ValueType: "datasetQuote",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "fileUrlList",
|
|
|
+ RenderTypeList: []string{"reference", "input"},
|
|
|
+ Label: "app:file_quote_link",
|
|
|
+ DebugLabel: "app:file_quote_link",
|
|
|
+ ValueType: "arrayString",
|
|
|
+ Value: [][]interface{}{{"workflowStartNodeId", "userFiles"}},
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Key: "aiChatVision",
|
|
|
+ RenderTypeList: []string{"hidden"},
|
|
|
+ ValueType: "boolean",
|
|
|
+ Value: true,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ Outputs: []apps.AppOutput{
|
|
|
+ {
|
|
|
+ ID: "history",
|
|
|
+ Key: "history",
|
|
|
+ Required: true,
|
|
|
+ Label: "common:core.module.output.label.New context",
|
|
|
+ Description: "common:core.module.output.description.New context",
|
|
|
+ ValueType: "chatHistory",
|
|
|
+ ValueDesc: "{\n obj: System | Human | AI;\n value: string;\n}[]",
|
|
|
+ Type: "static",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ ID: "answerText",
|
|
|
+ Key: "answerText",
|
|
|
+ Required: true,
|
|
|
+ Label: "common:core.module.output.label.Ai response content",
|
|
|
+ Description: "common:core.module.output.description.Ai response content",
|
|
|
+ ValueType: "string",
|
|
|
+ Type: "static",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ Edges: []apps.Edge{
|
|
|
+ {
|
|
|
+ Source: "workflowStartNodeId",
|
|
|
+ Target: "7BdojPlukIQw",
|
|
|
+ SourceHandle: "workflowStartNodeId-source-right",
|
|
|
+ TargetHandle: "7BdojPlukIQw-target-left",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ PluginData: apps.PluginData{
|
|
|
+ ID: mustParseObjectID("67da46b29667c5bf21203554"),
|
|
|
+ NodeVersion: "67da46d29667c5bf2120361a",
|
|
|
+ },
|
|
|
+ InheritPermission: true,
|
|
|
+ VersionNumber: int32(0),
|
|
|
+ ChatConfig: apps.ChatConfig{
|
|
|
+ WelcomeText: "",
|
|
|
+ Variables: []interface{}{},
|
|
|
+ QuestionGuide: false,
|
|
|
+ TTSConfig: apps.TTSConfig{
|
|
|
+ Type: "web",
|
|
|
+ },
|
|
|
+ WhisperConfig: apps.WhisperConfig{
|
|
|
+ Open: false,
|
|
|
+ AutoSend: false,
|
|
|
+ AutoTTSResponse: false,
|
|
|
+ },
|
|
|
+ ScheduledTriggerConfig: nil,
|
|
|
+ ChatInputGuide: apps.ChatInputGuide{
|
|
|
+ Open: false,
|
|
|
+ TextList: []string{},
|
|
|
+ CustomUrl: "",
|
|
|
+ },
|
|
|
+ Instruction: "",
|
|
|
+ ID: mustParseObjectID("67da46d29667c5bf2120361d"),
|
|
|
+ },
|
|
|
+ UpdateTime: time.Date(2025, 3, 19, 4, 24, 4, 394000000, time.UTC),
|
|
|
+ ScheduledTriggerConfig: nil,
|
|
|
+ ScheduledTriggerNextTime: nil,
|
|
|
+ }
|
|
|
+
|
|
|
+ err = l.svcCtx.MongoModel.AppsModel.Insert(context.TODO(), apps_info)
|
|
|
+ if err != nil {
|
|
|
+ return nil, errorx.NewInvalidArgumentError("fastgpt create failed " + err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
return &types.BaseMsgResp{Msg: errormsg.Success}, nil
|
|
|
}
|
|
|
+
|
|
|
+func mustParseObjectID(hex string) primitive.ObjectID {
|
|
|
+ id, err := primitive.ObjectIDFromHex(hex)
|
|
|
+ if err != nil {
|
|
|
+ panic(err) // 或者根据需要处理错误
|
|
|
+ }
|
|
|
+ return id
|
|
|
+}
|
|
|
+
|
|
|
+func getInt32(n int32) *int32 {
|
|
|
+ num := int32(n)
|
|
|
+ return &num
|
|
|
+}
|