Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
赵月辉
/
fastgpt-migrated
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Unverified
Commit
f5460683
authored
Jul 17, 2023
by
archer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
app template
parent
ed42bb6c
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
533 additions
and
230 deletions
+533
-230
client/public/imgs/module/db.png
+0
-0
client/public/imgs/module/db.png:Zone.Identifier
+3
-0
client/src/components/ChatBox/index.tsx
+4
-6
client/src/components/Select/index.tsx
+8
-5
client/src/constants/app.ts
+474
-205
client/src/constants/flow/ModuleTemplate.ts
+5
-5
client/src/pages/api/admin/initv4.ts
+28
-0
client/src/pages/api/openapi/modules/agent/recognizeIntention.ts
+3
-3
client/src/pages/app/detail/components/Settings.tsx
+2
-2
client/src/pages/app/detail/components/edit/index.tsx
+2
-2
client/src/pages/app/list/component/CreateModal.tsx
+4
-2
No files found.
client/public/imgs/module/db.png
View file @
f5460683
1.44 KB
|
W:
|
H:
1.46 KB
|
W:
|
H:
2-up
Swipe
Onion skin
client/public/imgs/module/db.png:Zone.Identifier
0 → 100644
View file @
f5460683
[ZoneTransfer]
ZoneId=3
HostUrl=about:internet
client/src/components/ChatBox/index.tsx
View file @
f5460683
...
@@ -89,6 +89,7 @@ const ChatBox = (
...
@@ -89,6 +89,7 @@ const ChatBox = (
const
TextareaDom
=
useRef
<
HTMLTextAreaElement
>
(
null
);
const
TextareaDom
=
useRef
<
HTMLTextAreaElement
>
(
null
);
const
controller
=
useRef
(
new
AbortController
());
const
controller
=
useRef
(
new
AbortController
());
const
[
refresh
,
setRefresh
]
=
useState
(
false
);
const
[
variables
,
setVariables
]
=
useState
<
Record
<
string
,
any
>>
({});
const
[
variables
,
setVariables
]
=
useState
<
Record
<
string
,
any
>>
({});
const
[
chatHistory
,
setChatHistory
]
=
useState
<
ChatSiteItemType
[]
>
([]);
const
[
chatHistory
,
setChatHistory
]
=
useState
<
ChatSiteItemType
[]
>
([]);
...
@@ -111,7 +112,7 @@ const ChatBox = (
...
@@ -111,7 +112,7 @@ const ChatBox = (
const
isLargeWidth
=
ChatBoxRef
?.
current
?.
clientWidth
&&
ChatBoxRef
?.
current
?.
clientWidth
>=
900
;
const
isLargeWidth
=
ChatBoxRef
?.
current
?.
clientWidth
&&
ChatBoxRef
?.
current
?.
clientWidth
>=
900
;
const
{
register
,
reset
,
setValue
,
handleSubmit
}
=
useForm
<
Record
<
string
,
any
>>
({
const
{
register
,
reset
,
getValues
,
setValue
,
handleSubmit
}
=
useForm
<
Record
<
string
,
any
>>
({
defaultValues
:
variables
defaultValues
:
variables
});
});
...
@@ -370,12 +371,10 @@ const ChatBox = (
...
@@ -370,12 +371,10 @@ const ChatBox = (
label
:
item
.
value
,
label
:
item
.
value
,
value
:
item
.
value
value
:
item
.
value
}))
}
}))
}
{
...
register
(
item
.
key
,
{
value=
{
getValues
(
item
.
key
)
}
required
:
item
.
required
})}
onchange=
{
(
e
)
=>
{
onchange=
{
(
e
)
=>
{
setValue
(
item
.
key
,
e
);
setValue
(
item
.
key
,
e
);
// setRefresh((state) => !state
);
setRefresh
(
!
refresh
);
}
}
}
}
/>
/>
)
}
)
}
...
@@ -401,7 +400,6 @@ const ChatBox = (
...
@@ -401,7 +400,6 @@ const ChatBox = (
</
Flex
>
</
Flex
>
</
Flex
>
</
Flex
>
)
}
)
}
{
/* empty guide */
}
{
/* chat history */
}
{
/* chat history */
}
<
Box
id=
{
'history'
}
pb=
{
[
8
,
2
]
}
>
<
Box
id=
{
'history'
}
pb=
{
[
8
,
2
]
}
>
...
...
client/src/components/Select/index.tsx
View file @
f5460683
import
React
,
{
useRef
}
from
'react'
;
import
React
,
{
useRef
,
forwardRef
}
from
'react'
;
import
{
import
{
Menu
,
Menu
,
Box
,
Box
,
...
@@ -20,9 +20,12 @@ interface Props extends ButtonProps {
...
@@ -20,9 +20,12 @@ interface Props extends ButtonProps {
onchange
?:
(
val
:
string
)
=>
void
;
onchange
?:
(
val
:
string
)
=>
void
;
}
}
const
MySelect
=
({
placeholder
,
value
,
width
=
'auto'
,
list
,
onchange
,
...
props
}:
Props
)
=>
{
const
MySelect
=
(
const
ref
=
useRef
<
HTMLDivElement
>
(
null
);
{
placeholder
,
value
,
width
=
'auto'
,
list
,
onchange
,
...
props
}:
Props
,
const
SelectRef
=
useRef
(
null
);
selectRef
:
any
)
=>
{
const
ref
=
useRef
<
HTMLButtonElement
>
(
null
);
const
SelectRef
=
useRef
<
HTMLDivElement
>
(
null
);
const
menuItemStyles
=
{
const
menuItemStyles
=
{
borderRadius
:
'sm'
,
borderRadius
:
'sm'
,
py
:
2
,
py
:
2
,
...
@@ -116,4 +119,4 @@ const MySelect = ({ placeholder, value, width = 'auto', list, onchange, ...props
...
@@ -116,4 +119,4 @@ const MySelect = ({ placeholder, value, width = 'auto', list, onchange, ...props
);
);
};
};
export
default
React
.
memo
(
MySelect
);
export
default
React
.
memo
(
forwardRef
(
MySelect
)
);
client/src/constants/app.ts
View file @
f5460683
...
@@ -53,85 +53,42 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -53,85 +53,42 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
type
:
'source'
,
type
:
'source'
,
targets
:
[
targets
:
[
{
{
moduleId
:
'
3n49vn
'
,
moduleId
:
'
7pacf0
'
,
key
:
'userChatInput'
key
:
'userChatInput'
}
}
]
]
}
}
],
],
position
:
{
position
:
{
x
:
481.4684021933373
,
x
:
477.9074315528994
,
y
:
741.252592445572
y
:
1604.2106242223683
},
moduleId
:
'xzj0oo'
},
{
logo
:
'/imgs/module/history.png'
,
name
:
'聊天记录'
,
intro
:
'用户输入的内容。该模块通常作为应用的入口,用户在发送消息后会首先执行该模块。'
,
type
:
'initInput'
,
flowType
:
'historyNode'
,
url
:
'/openapi/modules/init/history'
,
inputs
:
[
{
key
:
'maxContext'
,
type
:
'numberInput'
,
label
:
'最长记录数'
,
value
:
4
,
min
:
0
,
max
:
50
,
connected
:
false
},
{
key
:
'history'
,
type
:
'hidden'
,
label
:
'聊天记录'
,
connected
:
false
}
],
outputs
:
[
{
key
:
'history'
,
label
:
'聊天记录'
,
type
:
'source'
,
targets
:
[
{
moduleId
:
'3n49vn'
,
key
:
'history'
}
]
}
],
position
:
{
x
:
405.6002299937601
,
y
:
374.16606887857023
},
},
moduleId
:
'
hh6of9
'
moduleId
:
'
7z5g5h
'
},
},
{
{
logo
:
'/imgs/module/AI.png'
,
logo
:
'/imgs/module/AI.png'
,
name
:
'AI 对话'
,
name
:
'AI 对话'
,
intro
:
'
OpenAI GPT 大模型对话。
'
,
intro
:
'
AI 大模型对话
'
,
flowType
:
'chatNode'
,
flowType
:
'chatNode'
,
type
:
'http'
,
type
:
'http'
,
url
:
'/openapi/modules/chat/gpt'
,
url
:
'/openapi/modules/chat/gpt'
,
inputs
:
[
inputs
:
[
{
{
key
:
'model'
,
key
:
'model'
,
type
:
'
select
'
,
type
:
'
custom
'
,
label
:
'对话模型'
,
label
:
'对话模型'
,
value
:
'gpt-3.5-turbo-16k'
,
value
:
'gpt-3.5-turbo-16k'
,
list
:
[
list
:
[
{
{
label
:
'Gpt35-16k'
,
value
:
'gpt-3.5-turbo-16k'
},
{
label
:
'Gpt35-4k'
,
label
:
'Gpt35-4k'
,
value
:
'gpt-3.5-turbo'
value
:
'gpt-3.5-turbo'
},
},
{
{
label
:
'Gpt4-8k'
,
label
:
'Gpt35-16k'
,
value
:
'gpt-3.5-turbo-16k'
},
{
label
:
'Gpt4'
,
value
:
'gpt-4'
value
:
'gpt-4'
}
}
],
],
...
@@ -161,9 +118,9 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -161,9 +118,9 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
key
:
'maxToken'
,
key
:
'maxToken'
,
type
:
'slider'
,
type
:
'slider'
,
label
:
'回复上限'
,
label
:
'回复上限'
,
value
:
3
000
,
value
:
8
000
,
min
:
0
,
min
:
0
,
max
:
4
000
,
max
:
16
000
,
step
:
50
,
step
:
50
,
markList
:
[
markList
:
[
{
{
...
@@ -171,8 +128,8 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -171,8 +128,8 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
value
:
0
value
:
0
},
},
{
{
label
:
'
4
000'
,
label
:
'
16
000'
,
value
:
4
000
value
:
16
000
}
}
],
],
connected
:
false
connected
:
false
...
@@ -234,10 +191,53 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -234,10 +191,53 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
}
}
],
],
position
:
{
position
:
{
x
:
9
65.5863241865428
,
x
:
9
81.9682828103937
,
y
:
-
29.569293606933797
y
:
890.014595014464
},
},
moduleId
:
'3n49vn'
moduleId
:
'7pacf0'
},
{
logo
:
'/imgs/module/history.png'
,
name
:
'聊天记录'
,
intro
:
'用户输入的内容。该模块通常作为应用的入口,用户在发送消息后会首先执行该模块。'
,
type
:
'initInput'
,
flowType
:
'historyNode'
,
url
:
'/openapi/modules/init/history'
,
inputs
:
[
{
key
:
'maxContext'
,
type
:
'numberInput'
,
label
:
'最长记录数'
,
value
:
4
,
min
:
0
,
max
:
50
,
connected
:
false
},
{
key
:
'history'
,
type
:
'hidden'
,
label
:
'聊天记录'
,
connected
:
false
}
],
outputs
:
[
{
key
:
'history'
,
label
:
'聊天记录'
,
type
:
'source'
,
targets
:
[
{
moduleId
:
'7pacf0'
,
key
:
'history'
}
]
}
],
position
:
{
x
:
452.5466249541586
,
y
:
1276.3930310334215
},
moduleId
:
'xj0c9p'
}
}
]
]
},
},
...
@@ -269,21 +269,21 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -269,21 +269,21 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
type
:
'source'
,
type
:
'source'
,
targets
:
[
targets
:
[
{
{
moduleId
:
'
3n49vn
'
,
moduleId
:
'
q9v14m
'
,
key
:
'userChatInput'
key
:
'userChatInput'
},
},
{
{
moduleId
:
'
zid0fj
'
,
moduleId
:
'
qbf8td
'
,
key
:
'userChatInput'
key
:
'userChatInput'
}
}
]
]
}
}
],
],
position
:
{
position
:
{
x
:
447.016578446221
3
,
x
:
-
210.2481710925384
3
,
y
:
748.7421193471189
y
:
665.7922967022607
},
},
moduleId
:
'
xzj0oo
'
moduleId
:
'
v0nc1s
'
},
},
{
{
logo
:
'/imgs/module/history.png'
,
logo
:
'/imgs/module/history.png'
,
...
@@ -316,42 +316,42 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -316,42 +316,42 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
type
:
'source'
,
type
:
'source'
,
targets
:
[
targets
:
[
{
{
moduleId
:
'
3n49vn
'
,
moduleId
:
'
qbf8td
'
,
key
:
'history'
key
:
'history'
}
}
]
]
}
}
],
],
position
:
{
position
:
{
x
:
1182.3679138395933
,
x
:
211.58250540918442
,
y
:
882.21575235563
y
:
611.8700401034965
},
},
moduleId
:
'
hh6of9
'
moduleId
:
'
k9y3jm
'
},
},
{
{
logo
:
'/imgs/module/AI.png'
,
logo
:
'/imgs/module/AI.png'
,
name
:
'AI 对话'
,
name
:
'AI 对话'
,
intro
:
'
OpenAI GPT 大模型对话。
'
,
intro
:
'
AI 大模型对话
'
,
flowType
:
'chatNode'
,
flowType
:
'chatNode'
,
type
:
'http'
,
type
:
'http'
,
url
:
'/openapi/modules/chat/gpt'
,
url
:
'/openapi/modules/chat/gpt'
,
inputs
:
[
inputs
:
[
{
{
key
:
'model'
,
key
:
'model'
,
type
:
'
select
'
,
type
:
'
custom
'
,
label
:
'对话模型'
,
label
:
'对话模型'
,
value
:
'gpt-3.5-turbo-16k'
,
value
:
'gpt-3.5-turbo-16k'
,
list
:
[
list
:
[
{
{
label
:
'Gpt35-16k'
,
value
:
'gpt-3.5-turbo-16k'
},
{
label
:
'Gpt35-4k'
,
label
:
'Gpt35-4k'
,
value
:
'gpt-3.5-turbo'
value
:
'gpt-3.5-turbo'
},
},
{
{
label
:
'Gpt4-8k'
,
label
:
'Gpt35-16k'
,
value
:
'gpt-3.5-turbo-16k'
},
{
label
:
'Gpt4'
,
value
:
'gpt-4'
value
:
'gpt-4'
}
}
],
],
...
@@ -381,9 +381,9 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -381,9 +381,9 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
key
:
'maxToken'
,
key
:
'maxToken'
,
type
:
'slider'
,
type
:
'slider'
,
label
:
'回复上限'
,
label
:
'回复上限'
,
value
:
3
000
,
value
:
8
000
,
min
:
0
,
min
:
0
,
max
:
4
000
,
max
:
16
000
,
step
:
50
,
step
:
50
,
markList
:
[
markList
:
[
{
{
...
@@ -391,8 +391,8 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -391,8 +391,8 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
value
:
0
value
:
0
},
},
{
{
label
:
'
4
000'
,
label
:
'
16
000'
,
value
:
4
000
value
:
16
000
}
}
],
],
connected
:
false
connected
:
false
...
@@ -416,14 +416,14 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -416,14 +416,14 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
'限定模型对话范围,会被放置在本次提问前,拥有强引导和限定性。例如:\n1. 知识库是关于 Laf 的介绍,参考知识库回答问题,与 "Laf" 无关内容,直接回复: "我不知道"。\n2. 你仅回答关于 "xxx" 的问题,其他问题回复: "xxxx"'
,
'限定模型对话范围,会被放置在本次提问前,拥有强引导和限定性。例如:\n1. 知识库是关于 Laf 的介绍,参考知识库回答问题,与 "Laf" 无关内容,直接回复: "我不知道"。\n2. 你仅回答关于 "xxx" 的问题,其他问题回复: "xxxx"'
,
placeholder
:
placeholder
:
'限定模型对话范围,会被放置在本次提问前,拥有强引导和限定性。例如:\n1. 知识库是关于 Laf 的介绍,参考知识库回答问题,与 "Laf" 无关内容,直接回复: "我不知道"。\n2. 你仅回答关于 "xxx" 的问题,其他问题回复: "xxxx"'
,
'限定模型对话范围,会被放置在本次提问前,拥有强引导和限定性。例如:\n1. 知识库是关于 Laf 的介绍,参考知识库回答问题,与 "Laf" 无关内容,直接回复: "我不知道"。\n2. 你仅回答关于 "xxx" 的问题,其他问题回复: "xxxx"'
,
value
:
''
,
value
:
'
知识库是关于 Laf 的内容,参考知识库回答我的问题。
'
,
connected
:
false
connected
:
false
},
},
{
{
key
:
'switch'
,
key
:
'switch'
,
type
:
'target'
,
type
:
'target'
,
label
:
'触发器'
,
label
:
'触发器'
,
connected
:
fals
e
connected
:
tru
e
},
},
{
{
key
:
'quotePrompt'
,
key
:
'quotePrompt'
,
...
@@ -454,10 +454,10 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -454,10 +454,10 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
}
}
],
],
position
:
{
position
:
{
x
:
1611.18354309989
,
x
:
830.725790038998
,
y
:
-
56.531590452502826
y
:
201.0790739617387
},
},
moduleId
:
'
3n49vn
'
moduleId
:
'
qbf8td
'
},
},
{
{
logo
:
'/imgs/module/db.png'
,
logo
:
'/imgs/module/db.png'
,
...
@@ -519,7 +519,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -519,7 +519,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
key
:
'switch'
,
key
:
'switch'
,
type
:
'target'
,
type
:
'target'
,
label
:
'触发器'
,
label
:
'触发器'
,
connected
:
fals
e
connected
:
tru
e
},
},
{
{
key
:
'userChatInput'
,
key
:
'userChatInput'
,
...
@@ -542,7 +542,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -542,7 +542,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
type
:
'source'
,
type
:
'source'
,
targets
:
[
targets
:
[
{
{
moduleId
:
'
gbnzif
'
,
moduleId
:
'
w8av9y
'
,
key
:
'switch'
key
:
'switch'
}
}
]
]
...
@@ -554,17 +554,17 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -554,17 +554,17 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
type
:
'source'
,
type
:
'source'
,
targets
:
[
targets
:
[
{
{
moduleId
:
'
3n49vn
'
,
moduleId
:
'
qbf8td
'
,
key
:
'quotePrompt'
key
:
'quotePrompt'
}
}
]
]
}
}
],
],
position
:
{
position
:
{
x
:
718.7528704477357
,
x
:
101.2612930583856
,
y
:
112.64438442321625
y
:
-
31.342317423453437
},
},
moduleId
:
'
zid0fj
'
moduleId
:
'
q9v14m
'
},
},
{
{
logo
:
'/imgs/module/reply.png'
,
logo
:
'/imgs/module/reply.png'
,
...
@@ -581,7 +581,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -581,7 +581,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
},
},
{
{
key
:
'answerText'
,
key
:
'answerText'
,
value
:
'对不起,
你的问题不在知识库中。
'
,
value
:
'对不起,
我没有找到你的问题
'
,
type
:
'input'
,
type
:
'input'
,
label
:
'回复的内容'
,
label
:
'回复的内容'
,
connected
:
false
connected
:
false
...
@@ -589,19 +589,288 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -589,19 +589,288 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
],
],
outputs
:
[],
outputs
:
[],
position
:
{
position
:
{
x
:
1171.1202953011716
,
x
:
827.8570503787319
,
y
:
213.00404490394536
y
:
-
63.837994077710675
},
},
moduleId
:
'
gbnzif
'
moduleId
:
'
w8av9y
'
}
}
]
]
},
},
{
{
id
:
'chatGuide'
,
id
:
'chatGuide'
,
avatar
:
'/imgs/module/
db
.png'
,
avatar
:
'/imgs/module/
userGuide
.png'
,
name
:
'
问答
前引导'
,
name
:
'
对话
前引导'
,
intro
:
'可以在每次对话开始前提示用户填写一些内容,作为本次对话的永久内容'
,
intro
:
'可以在每次对话开始前提示用户填写一些内容,作为本次对话的永久内容'
,
modules
:
[]
modules
:
[
{
logo
:
'/imgs/module/userChatInput.png'
,
name
:
'用户问题'
,
intro
:
'用户输入的内容。该模块通常作为应用的入口,用户在发送消息后会首先执行该模块。'
,
type
:
'initInput'
,
flowType
:
'questionInput'
,
url
:
'/openapi/modules/init/userChatInput'
,
inputs
:
[
{
key
:
'userChatInput'
,
type
:
'systemInput'
,
label
:
'用户问题'
,
connected
:
false
}
],
outputs
:
[
{
key
:
'userChatInput'
,
label
:
'用户问题'
,
type
:
'source'
,
targets
:
[
{
moduleId
:
'7pacf0'
,
key
:
'userChatInput'
}
]
}
],
position
:
{
x
:
485.8457451202796
,
y
:
1601.0352987954163
},
moduleId
:
'7z5g5h'
},
{
logo
:
'/imgs/module/AI.png'
,
name
:
'AI 对话'
,
intro
:
'OpenAI GPT 大模型对话。'
,
flowType
:
'chatNode'
,
type
:
'http'
,
url
:
'/openapi/modules/chat/gpt'
,
inputs
:
[
{
key
:
'model'
,
type
:
'custom'
,
label
:
'对话模型'
,
value
:
'gpt-3.5-turbo-16k'
,
list
:
[
{
label
:
'Gpt35-4k'
,
value
:
'gpt-3.5-turbo'
},
{
label
:
'Gpt35-16k'
,
value
:
'gpt-3.5-turbo-16k'
},
{
label
:
'Gpt4'
,
value
:
'gpt-4'
}
],
connected
:
false
},
{
key
:
'temperature'
,
type
:
'slider'
,
label
:
'温度'
,
value
:
0
,
min
:
0
,
max
:
10
,
step
:
1
,
markList
:
[
{
label
:
'严谨'
,
value
:
0
},
{
label
:
'发散'
,
value
:
10
}
],
connected
:
false
},
{
key
:
'maxToken'
,
type
:
'slider'
,
label
:
'回复上限'
,
value
:
8000
,
min
:
0
,
max
:
16000
,
step
:
50
,
markList
:
[
{
label
:
'0'
,
value
:
0
},
{
label
:
'16000'
,
value
:
16000
}
],
connected
:
false
},
{
key
:
'systemPrompt'
,
type
:
'textarea'
,
label
:
'系统提示词'
,
description
:
'模型固定的引导词,通过调整该内容,可以引导模型聊天方向。该内容会被固定在上下文的开头。'
,
placeholder
:
'模型固定的引导词,通过调整该内容,可以引导模型聊天方向。该内容会被固定在上下文的开头。'
,
value
:
'将我发送的任何内容,直接翻译成{{test}}'
,
connected
:
false
},
{
key
:
'limitPrompt'
,
type
:
'textarea'
,
label
:
'限定词'
,
description
:
'限定模型对话范围,会被放置在本次提问前,拥有强引导和限定性。例如:\n1. 知识库是关于 Laf 的介绍,参考知识库回答问题,与 "Laf" 无关内容,直接回复: "我不知道"。\n2. 你仅回答关于 "xxx" 的问题,其他问题回复: "xxxx"'
,
placeholder
:
'限定模型对话范围,会被放置在本次提问前,拥有强引导和限定性。例如:\n1. 知识库是关于 Laf 的介绍,参考知识库回答问题,与 "Laf" 无关内容,直接回复: "我不知道"。\n2. 你仅回答关于 "xxx" 的问题,其他问题回复: "xxxx"'
,
value
:
'将我发送的任何内容,直接翻译成{{language}}'
,
connected
:
false
},
{
key
:
'switch'
,
type
:
'target'
,
label
:
'触发器'
,
connected
:
false
},
{
key
:
'quotePrompt'
,
type
:
'target'
,
label
:
'引用内容'
,
connected
:
false
},
{
key
:
'history'
,
type
:
'target'
,
label
:
'聊天记录'
,
connected
:
true
},
{
key
:
'userChatInput'
,
type
:
'target'
,
label
:
'用户问题'
,
connected
:
true
}
],
outputs
:
[
{
key
:
'answerText'
,
label
:
'模型回复'
,
description
:
'直接响应,无需配置'
,
type
:
'hidden'
,
targets
:
[]
}
],
position
:
{
x
:
981.9682828103937
,
y
:
890.014595014464
},
moduleId
:
'7pacf0'
},
{
logo
:
'/imgs/module/history.png'
,
name
:
'聊天记录'
,
intro
:
'用户输入的内容。该模块通常作为应用的入口,用户在发送消息后会首先执行该模块。'
,
type
:
'initInput'
,
flowType
:
'historyNode'
,
url
:
'/openapi/modules/init/history'
,
inputs
:
[
{
key
:
'maxContext'
,
type
:
'numberInput'
,
label
:
'最长记录数'
,
value
:
4
,
min
:
0
,
max
:
50
,
connected
:
false
},
{
key
:
'history'
,
type
:
'hidden'
,
label
:
'聊天记录'
,
connected
:
false
}
],
outputs
:
[
{
key
:
'history'
,
label
:
'聊天记录'
,
type
:
'source'
,
targets
:
[
{
moduleId
:
'7pacf0'
,
key
:
'history'
}
]
}
],
position
:
{
x
:
446.2698477029736
,
y
:
1281.1006139718102
},
moduleId
:
'xj0c9p'
},
{
logo
:
'/imgs/module/userGuide.png'
,
name
:
'开场引导'
,
intro
:
'可以在每个新对话开始前,给用户发送一段开场白,或要求用户填写一些内容作为本轮对话的变量。'
,
type
:
'userGuide'
,
flowType
:
'userGuide'
,
inputs
:
[
{
key
:
'welcomeText'
,
type
:
'input'
,
label
:
'开场白'
,
value
:
'你好,我是翻译助手,可以帮你翻译任何语言,请告诉我,你需要翻译成什么语言?'
,
connected
:
false
},
{
key
:
'variables'
,
type
:
'systemInput'
,
label
:
'变量输入'
,
value
:
[
{
id
:
'z3bs2f'
,
key
:
'language'
,
label
:
'目标语言'
,
type
:
'input'
,
required
:
true
,
maxLen
:
50
,
enums
:
[
{
value
:
''
}
]
},
{
id
:
'lg4p31'
,
key
:
'test'
,
label
:
'单选测试'
,
type
:
'select'
,
required
:
false
,
maxLen
:
50
,
enums
:
[
{
value
:
'英语'
},
{
value
:
'法语'
}
]
}
],
connected
:
false
}
],
outputs
:
[],
position
:
{
x
:
421.82048705763134
,
y
:
879.3868698959807
},
moduleId
:
'7blchb'
}
]
},
},
{
{
id
:
'CQ'
,
id
:
'CQ'
,
...
@@ -635,19 +904,19 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -635,19 +904,19 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
key
:
'userChatInput'
key
:
'userChatInput'
},
},
{
{
moduleId
:
'
zid0fj
'
,
moduleId
:
'
s7qnhf
'
,
key
:
'userChatInput'
key
:
'userChatInput'
},
},
{
{
moduleId
:
'
gm15of
'
,
moduleId
:
'
15c9bv
'
,
key
:
'userChatInput'
key
:
'userChatInput'
}
}
]
]
}
}
],
],
position
:
{
position
:
{
x
:
-
33.8667379299743
2
,
x
:
-
216.0881906697691
2
,
y
:
874.685676808633
y
:
585.9302721518841
},
},
moduleId
:
'xzj0oo'
moduleId
:
'xzj0oo'
},
},
...
@@ -689,8 +958,8 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -689,8 +958,8 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
}
}
],
],
position
:
{
position
:
{
x
:
1
388.8842960266352
,
x
:
1
146.0216647621794
,
y
:
854.1553026226809
y
:
236.92269104756855
},
},
moduleId
:
'hh6of9'
moduleId
:
'hh6of9'
},
},
...
@@ -706,7 +975,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -706,7 +975,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
key
:
'model'
,
key
:
'model'
,
type
:
'select'
,
type
:
'select'
,
label
:
'对话模型'
,
label
:
'对话模型'
,
value
:
'gpt-3.5-turbo
-16k
'
,
value
:
'gpt-3.5-turbo'
,
list
:
[
list
:
[
{
{
label
:
'Gpt35-16k'
,
label
:
'Gpt35-16k'
,
...
@@ -771,7 +1040,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -771,7 +1040,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
'模型固定的引导词,通过调整该内容,可以引导模型聊天方向。该内容会被固定在上下文的开头。'
,
'模型固定的引导词,通过调整该内容,可以引导模型聊天方向。该内容会被固定在上下文的开头。'
,
placeholder
:
placeholder
:
'模型固定的引导词,通过调整该内容,可以引导模型聊天方向。该内容会被固定在上下文的开头。'
,
'模型固定的引导词,通过调整该内容,可以引导模型聊天方向。该内容会被固定在上下文的开头。'
,
value
:
'
知识库是关于 Laf 的介绍,根据知识库内容回答
问题。'
,
value
:
'
你是 Laf 助手,可以回答 Laf 相关
问题。'
,
connected
:
false
connected
:
false
},
},
{
{
...
@@ -782,7 +1051,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -782,7 +1051,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
'限定模型对话范围,会被放置在本次提问前,拥有强引导和限定性。例如:\n1. 知识库是关于 Laf 的介绍,参考知识库回答问题,与 "Laf" 无关内容,直接回复: "我不知道"。\n2. 你仅回答关于 "xxx" 的问题,其他问题回复: "xxxx"'
,
'限定模型对话范围,会被放置在本次提问前,拥有强引导和限定性。例如:\n1. 知识库是关于 Laf 的介绍,参考知识库回答问题,与 "Laf" 无关内容,直接回复: "我不知道"。\n2. 你仅回答关于 "xxx" 的问题,其他问题回复: "xxxx"'
,
placeholder
:
placeholder
:
'限定模型对话范围,会被放置在本次提问前,拥有强引导和限定性。例如:\n1. 知识库是关于 Laf 的介绍,参考知识库回答问题,与 "Laf" 无关内容,直接回复: "我不知道"。\n2. 你仅回答关于 "xxx" 的问题,其他问题回复: "xxxx"'
,
'限定模型对话范围,会被放置在本次提问前,拥有强引导和限定性。例如:\n1. 知识库是关于 Laf 的介绍,参考知识库回答问题,与 "Laf" 无关内容,直接回复: "我不知道"。\n2. 你仅回答关于 "xxx" 的问题,其他问题回复: "xxxx"'
,
value
:
''
,
value
:
'
知识库是 Laf 的内容,参考知识库回答问题。
'
,
connected
:
false
connected
:
false
},
},
{
{
...
@@ -820,8 +1089,8 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -820,8 +1089,8 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
}
}
],
],
position
:
{
position
:
{
x
:
1
827.0428559231655
,
x
:
1
494.4843114348841
,
y
:
446.8058354748067
y
:
-
13.57201521210618
},
},
moduleId
:
'3n49vn'
moduleId
:
'3n49vn'
},
},
...
@@ -908,7 +1177,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -908,7 +1177,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
type
:
'source'
,
type
:
'source'
,
targets
:
[
targets
:
[
{
{
moduleId
:
'
gbnzif
'
,
moduleId
:
'
phwr0u
'
,
key
:
'switch'
key
:
'switch'
}
}
]
]
...
@@ -927,10 +1196,53 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -927,10 +1196,53 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
}
}
],
],
position
:
{
position
:
{
x
:
850.3203039824494
,
x
:
690.1930900957847
,
y
:
919.7043887997417
y
:
102.10119978743109
},
},
moduleId
:
'zid0fj'
moduleId
:
's7qnhf'
},
{
logo
:
'/imgs/module/history.png'
,
name
:
'聊天记录'
,
intro
:
'用户输入的内容。该模块通常作为应用的入口,用户在发送消息后会首先执行该模块。'
,
type
:
'initInput'
,
flowType
:
'historyNode'
,
url
:
'/openapi/modules/init/history'
,
inputs
:
[
{
key
:
'maxContext'
,
type
:
'numberInput'
,
label
:
'最长记录数'
,
value
:
2
,
min
:
0
,
max
:
50
,
connected
:
false
},
{
key
:
'history'
,
type
:
'hidden'
,
label
:
'聊天记录'
,
connected
:
false
}
],
outputs
:
[
{
key
:
'history'
,
label
:
'聊天记录'
,
type
:
'source'
,
targets
:
[
{
moduleId
:
'15c9bv'
,
key
:
'history'
}
]
}
],
position
:
{
x
:
-
274.2362185453961
,
y
:
152.19755525696058
},
moduleId
:
'qiwrjt'
},
},
{
{
logo
:
'/imgs/module/reply.png'
,
logo
:
'/imgs/module/reply.png'
,
...
@@ -947,7 +1259,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -947,7 +1259,7 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
},
},
{
{
key
:
'answerText'
,
key
:
'answerText'
,
value
:
'
对不起,我找不到你的问题。
'
,
value
:
'
你好,我是 Laf 助手,有什么可以帮助你的么?
'
,
type
:
'input'
,
type
:
'input'
,
label
:
'回复的内容'
,
label
:
'回复的内容'
,
connected
:
false
connected
:
false
...
@@ -955,10 +1267,38 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -955,10 +1267,38 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
],
],
outputs
:
[],
outputs
:
[],
position
:
{
position
:
{
x
:
1392.0649222586217
,
x
:
686.1260929408212
,
y
:
553.0130337399224
y
:
-
142.16731465682332
},
},
moduleId
:
'gbnzif'
moduleId
:
'l4e36k'
},
{
logo
:
'/imgs/module/reply.png'
,
name
:
'指定回复'
,
intro
:
'该模块可以直接回复一段指定的内容。常用于引导、提示。'
,
type
:
'answer'
,
flowType
:
'answerNode'
,
inputs
:
[
{
key
:
'switch'
,
type
:
'target'
,
label
:
'触发器'
,
connected
:
true
},
{
key
:
'answerText'
,
value
:
'对不起,我无法回答你的问题,请问有什么关于 Laf 的问题么?'
,
type
:
'input'
,
label
:
'回复的内容'
,
connected
:
false
}
],
outputs
:
[],
position
:
{
x
:
1469.3636235179692
,
y
:
937.5555811306511
},
moduleId
:
'phwr0u'
},
},
{
{
logo
:
'/imgs/module/cq.png'
,
logo
:
'/imgs/module/cq.png'
,
...
@@ -976,14 +1316,14 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -976,14 +1316,14 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
'你可以添加一些特定内容的介绍,从而更好的识别用户的问题类型。这个内容通常是给模型介绍一个它不知道的内容。'
,
'你可以添加一些特定内容的介绍,从而更好的识别用户的问题类型。这个内容通常是给模型介绍一个它不知道的内容。'
,
placeholder
:
'例如: \n1. Laf 是一个云函数开发平台……\n2. Sealos 是一个集群操作系统'
,
placeholder
:
'例如: \n1. Laf 是一个云函数开发平台……\n2. Sealos 是一个集群操作系统'
,
value
:
value
:
'
Laf 一个云函数开发平台,提供了基于 Node 的 serveless 的快速开发和部署。是一个集「函数计算」、「数据库」、「对象存储」等于一身的一站式开发平台。支持云函数、云数据库、在线编程 IDE、触发器、云存储和静态网站托管等功能。
'
,
'
laf 是什么\nlaf 是云开发平台,可以快速的开发应用\nlaf 是一个开源的 BaaS 开发平台(Backend as a Service)\nlaf 是一个开箱即用的 serverless 开发平台\nlaf 是一个集「函数计算」、「数据库」、「对象存储」等于一身的一站式开发平台\nlaf 可以是开源版的腾讯云开发、开源版的 Google Firebase、开源版的 UniCloud\nlaf 让每个开发团队都可以随时拥有一个自己的云开发平台!
'
,
connected
:
false
connected
:
false
},
},
{
{
key
:
'history'
,
key
:
'history'
,
type
:
'target'
,
type
:
'target'
,
label
:
'聊天记录'
,
label
:
'聊天记录'
,
connected
:
fals
e
connected
:
tru
e
},
},
{
{
key
:
'userChatInput'
,
key
:
'userChatInput'
,
...
@@ -997,20 +1337,16 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -997,20 +1337,16 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
label
:
''
,
label
:
''
,
value
:
[
value
:
[
{
{
value
:
'打招呼、问候
、身份询问等问题
'
,
value
:
'打招呼、问候
等
'
,
key
:
'
a
'
key
:
'
fasw
'
},
},
{
{
value
:
'
商务类、联系方式
问题'
,
value
:
'
关于 laf 云函数的
问题'
,
key
:
'
b
'
key
:
'
fqsw
'
},
},
{
{
value
:
'其他问题'
,
value
:
'其他问题'
,
key
:
'ek3f'
key
:
'q73b'
},
{
value
:
'关于 Laf 云函数问题'
,
key
:
'psau'
}
}
],
],
connected
:
false
connected
:
false
...
@@ -1018,111 +1354,44 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
...
@@ -1018,111 +1354,44 @@ export const appTemplates: (AppItemType & { avatar: string; intro: string })[] =
],
],
outputs
:
[
outputs
:
[
{
{
key
:
'
a
'
,
key
:
'
fasw
'
,
label
:
''
,
label
:
''
,
type
:
'hidden'
,
type
:
'hidden'
,
targets
:
[
targets
:
[
{
{
moduleId
:
'
6jnrp5
'
,
moduleId
:
'
l4e36k
'
,
key
:
'switch'
key
:
'switch'
}
}
]
]
},
},
{
{
key
:
'
b
'
,
key
:
'
fqsw
'
,
label
:
''
,
label
:
''
,
type
:
'hidden'
,
type
:
'hidden'
,
targets
:
[
targets
:
[
{
{
moduleId
:
'
g13ipe
'
,
moduleId
:
'
s7qnhf
'
,
key
:
'switch'
key
:
'switch'
}
}
]
]
},
},
{
{
key
:
'
ek3f
'
,
key
:
'
q73b
'
,
label
:
''
,
label
:
''
,
type
:
'hidden'
,
type
:
'hidden'
,
targets
:
[
targets
:
[
{
{
moduleId
:
'gbnzif'
,
moduleId
:
'phwr0u'
,
key
:
'switch'
}
]
},
{
key
:
'psau'
,
label
:
''
,
type
:
'hidden'
,
targets
:
[
{
moduleId
:
'zid0fj'
,
key
:
'switch'
key
:
'switch'
}
}
]
]
}
}
],
],
position
:
{
position
:
{
x
:
366.0894497581114
,
x
:
154.9724540917009
,
y
:
250.81741383805945
y
:
-
37.48714632270105
},
moduleId
:
'gm15of'
},
{
logo
:
'/imgs/module/reply.png'
,
name
:
'指定回复'
,
intro
:
'该模块可以直接回复一段指定的内容。常用于引导、提示。'
,
type
:
'answer'
,
flowType
:
'answerNode'
,
inputs
:
[
{
key
:
'switch'
,
type
:
'target'
,
label
:
'触发器'
,
connected
:
true
},
{
key
:
'answerText'
,
value
:
'你好,我是 Laf 助手,可以回答你 Laf 相关问题。'
,
type
:
'input'
,
label
:
'回复的内容'
,
connected
:
false
}
],
outputs
:
[],
position
:
{
x
:
855.9439119466947
,
y
:
15.463108315267931
},
moduleId
:
'6jnrp5'
},
{
logo
:
'/imgs/module/reply.png'
,
name
:
'指定回复'
,
intro
:
'该模块可以直接回复一段指定的内容。常用于引导、提示。'
,
type
:
'answer'
,
flowType
:
'answerNode'
,
inputs
:
[
{
key
:
'switch'
,
type
:
'target'
,
label
:
'触发器'
,
connected
:
true
},
{
key
:
'answerText'
,
value
:
'联系方式:xxxxx'
,
type
:
'input'
,
label
:
'回复的内容'
,
connected
:
false
}
],
outputs
:
[],
position
:
{
x
:
854.0492662385566
,
y
:
320.5010673254856
},
},
moduleId
:
'
g13ipe
'
moduleId
:
'
15c9bv
'
}
}
]
]
}
}
...
...
client/src/constants/flow/ModuleTemplate.ts
View file @
f5460683
...
@@ -88,7 +88,7 @@ const defaultModel = chatModelList[0];
...
@@ -88,7 +88,7 @@ const defaultModel = chatModelList[0];
export
const
ChatModule
:
AppModuleTemplateItemType
=
{
export
const
ChatModule
:
AppModuleTemplateItemType
=
{
logo
:
'/imgs/module/AI.png'
,
logo
:
'/imgs/module/AI.png'
,
name
:
'AI 对话'
,
name
:
'AI 对话'
,
intro
:
'
OpenAI GPT 大模型对话。
'
,
intro
:
'
AI 大模型对话
'
,
flowType
:
FlowModuleTypeEnum
.
chatNode
,
flowType
:
FlowModuleTypeEnum
.
chatNode
,
type
:
AppModuleItemTypeEnum
.
http
,
type
:
AppModuleItemTypeEnum
.
http
,
url
:
'/openapi/modules/chat/gpt'
,
url
:
'/openapi/modules/chat/gpt'
,
...
@@ -308,24 +308,24 @@ export const RecognizeIntentionModule: AppModuleTemplateItemType = {
...
@@ -308,24 +308,24 @@ export const RecognizeIntentionModule: AppModuleTemplateItemType = {
value: [
value: [
{
{
value: '',
value: '',
key: '
a
'
key: '
fasw
'
},
},
{
{
value: '',
value: '',
key: '
b
'
key: '
fqsw
'
}
}
]
]
}
}
],
],
outputs: [
outputs: [
{
{
key: '
a
',
key: '
fasw
',
label: '',
label: '',
type: FlowOutputItemTypeEnum.hidden,
type: FlowOutputItemTypeEnum.hidden,
targets: []
targets: []
},
},
{
{
key: '
b
',
key: '
fqsw
',
label: '',
label: '',
type: FlowOutputItemTypeEnum.hidden,
type: FlowOutputItemTypeEnum.hidden,
targets: []
targets: []
...
...
client/src/pages/api/admin/initv4.ts
0 → 100644
View file @
f5460683
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
import
type
{
NextApiRequest
,
NextApiResponse
}
from
'next'
;
import
{
jsonRes
}
from
'@/service/response'
;
import
{
authUser
}
from
'@/service/utils/auth'
;
import
{
connectToDatabase
,
TrainingData
,
User
,
promotionRecord
}
from
'@/service/mongo'
;
import
{
TrainingModeEnum
}
from
'@/constants/plugin'
;
import
mongoose
from
'mongoose'
;
export
default
async
function
handler
(
req
:
NextApiRequest
,
res
:
NextApiResponse
)
{
try
{
await
authUser
({
req
,
authRoot
:
true
});
const
{
amount
,
userId
,
type
}
=
req
.
body
as
{
amount
:
number
;
userId
:
number
;
type
:
'withdraw'
;
};
await
connectToDatabase
();
jsonRes
(
res
,
{
data
:
''
});
}
catch
(
error
)
{
jsonRes
(
res
,
{
code
:
500
,
error
});
}
}
client/src/pages/api/openapi/modules/agent/recognizeIntention.ts
View file @
f5460683
...
@@ -18,7 +18,7 @@ export type Props = {
...
@@ -18,7 +18,7 @@ export type Props = {
};
};
export
type
Response
=
{
history
:
ChatItemType
[]
};
export
type
Response
=
{
history
:
ChatItemType
[]
};
const
agentModel
=
'gpt-3.5-turbo'
;
const
agentModel
=
'gpt-3.5-turbo
-16k
'
;
const
agentFunName
=
'agent_user_question'
;
const
agentFunName
=
'agent_user_question'
;
export
default
async
function
handler
(
req
:
NextApiRequest
,
res
:
NextApiResponse
)
{
export
default
async
function
handler
(
req
:
NextApiRequest
,
res
:
NextApiResponse
)
{
...
@@ -75,13 +75,13 @@ export async function classifyQuestion({
...
@@ -75,13 +75,13 @@ export async function classifyQuestion({
// function body
// function body
const
agentFunction
=
{
const
agentFunction
=
{
name
:
agentFunName
,
name
:
agentFunName
,
description
:
'
严格判断用户问题的类型
'
,
description
:
'
判断用户问题的类型,并返回不同的值
'
,
parameters
:
{
parameters
:
{
type
:
'object'
,
type
:
'object'
,
properties
:
{
properties
:
{
type
:
{
type
:
{
type
:
'string'
,
type
:
'string'
,
description
:
agents
.
map
((
item
)
=>
`
${
item
.
value
}
,返回: '
${
item
.
key
}
'`
).
join
(
'
;
'
),
description
:
agents
.
map
((
item
)
=>
`
${
item
.
value
}
,返回: '
${
item
.
key
}
'`
).
join
(
'
\n
'
),
enum
:
agents
.
map
((
item
)
=>
item
.
key
)
enum
:
agents
.
map
((
item
)
=>
item
.
key
)
}
}
},
},
...
...
client/src/pages/app/detail/components/Settings.tsx
View file @
f5460683
...
@@ -73,11 +73,11 @@ const Settings = ({ appId }: { appId: string }) => {
...
@@ -73,11 +73,11 @@ const Settings = ({ appId }: { appId: string }) => {
概览
概览
</
Box
>
</
Box
>
<
Box
<
Box
border=
{
theme
.
borders
.
sm
}
border=
{
theme
.
borders
.
base
}
borderRadius=
{
'lg'
}
borderRadius=
{
'lg'
}
px=
{
5
}
px=
{
5
}
py=
{
4
}
py=
{
4
}
bg=
{
'
rgba(235,245,255,0.4)
'
}
bg=
{
'
myBlue.100
'
}
position=
{
'relative'
}
position=
{
'relative'
}
>
>
<
Flex
alignItems=
{
'center'
}
py=
{
2
}
>
<
Flex
alignItems=
{
'center'
}
py=
{
2
}
>
...
...
client/src/pages/app/detail/components/edit/index.tsx
View file @
f5460683
...
@@ -227,6 +227,8 @@ const AppEdit = ({ app, fullScreen, onFullScreen }: Props) => {
...
@@ -227,6 +227,8 @@ const AppEdit = ({ app, fullScreen, onFullScreen }: Props) => {
const
{
mutate
:
onclickSave
,
isLoading
}
=
useRequest
({
const
{
mutate
:
onclickSave
,
isLoading
}
=
useRequest
({
mutationFn
:
()
=>
{
mutationFn
:
()
=>
{
console
.
log
(
flow2Modules
());
return
putAppById
(
app
.
_id
,
{
return
putAppById
(
app
.
_id
,
{
modules
:
flow2Modules
()
modules
:
flow2Modules
()
});
});
...
@@ -240,8 +242,6 @@ const AppEdit = ({ app, fullScreen, onFullScreen }: Props) => {
...
@@ -240,8 +242,6 @@ const AppEdit = ({ app, fullScreen, onFullScreen }: Props) => {
const
initData
=
useCallback
(
const
initData
=
useCallback
(
(
app
:
AppSchema
)
=>
{
(
app
:
AppSchema
)
=>
{
console
.
log
(
'init'
);
const
edges
=
appModule2FlowEdge
({
const
edges
=
appModule2FlowEdge
({
modules
:
app
.
modules
,
modules
:
app
.
modules
,
onDelete
:
onDelConnect
onDelete
:
onDelConnect
...
...
client/src/pages/app/list/component/CreateModal.tsx
View file @
f5460683
...
@@ -105,7 +105,9 @@ const CreateModal = ({ onClose, onSuccess }: { onClose: () => void; onSuccess: (
...
@@ -105,7 +105,9 @@ const CreateModal = ({ onClose, onSuccess }: { onClose: () => void; onSuccess: (
<
ModalContent
w=
{
'700px'
}
maxW=
{
'90vw'
}
>
<
ModalContent
w=
{
'700px'
}
maxW=
{
'90vw'
}
>
<
ModalHeader
fontSize=
{
'2xl'
}
>
开始创建你的 AI 应用
</
ModalHeader
>
<
ModalHeader
fontSize=
{
'2xl'
}
>
开始创建你的 AI 应用
</
ModalHeader
>
<
ModalBody
>
<
ModalBody
>
<
Box
color=
{
'myGray.800'
}
>
取个响亮的名字
</
Box
>
<
Box
color=
{
'myGray.800'
}
fontWeight=
{
'bold'
}
>
取个响亮的名字
</
Box
>
<
Flex
mt=
{
3
}
alignItems=
{
'center'
}
>
<
Flex
mt=
{
3
}
alignItems=
{
'center'
}
>
<
Avatar
<
Avatar
src=
{
getValues
(
'avatar'
)
}
src=
{
getValues
(
'avatar'
)
}
...
@@ -124,7 +126,7 @@ const CreateModal = ({ onClose, onSuccess }: { onClose: () => void; onSuccess: (
...
@@ -124,7 +126,7 @@ const CreateModal = ({ onClose, onSuccess }: { onClose: () => void; onSuccess: (
})}
})}
/>
/>
</
Flex
>
</
Flex
>
<
Box
mt=
{
7
}
mb=
{
3
}
color=
{
'myGray.800'
}
>
<
Box
mt=
{
7
}
mb=
{
3
}
color=
{
'myGray.800'
}
fontWeight=
{
'bold'
}
>
从模板中选择
从模板中选择
</
Box
>
</
Box
>
<
Grid
<
Grid
...
...
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