Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-book
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-book
Commits
e8fff8e5
提交
e8fff8e5
authored
1月 17, 2025
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
4ac31a11
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
26 行增加
和
91 行删除
+26
-91
ai.js
src/api/ai.js
+0
-16
AIChatDrawer.jsx
src/common/wangeditor-customer/menu/common/AIChatDrawer.jsx
+12
-5
component.js
src/config/component.js
+0
-0
useAI.js
src/hooks/useAI.js
+0
-58
useBaiduAI.js
src/hooks/useBaiduAI.js
+2
-2
useTiangongAI.js
src/hooks/useTiangongAI.js
+12
-10
没有找到文件。
src/api/ai.js
浏览文件 @
e8fff8e5
import
axios
from
'@/utils/axios'
import
fetchEventSource
from
'@/utils/fetchEventSource'
// 流式编辑接口
export
function
aiEdit
(
options
)
{
return
fetchEventSource
(
'/api/ai/sky3/edit'
,
options
)
}
// 流式对话接口
export
function
aiChat
(
data
)
{
return
axios
.
post
(
'/api/ai/sky3/chat'
,
data
)
}
// 文本生成图片接口
export
function
aiGenerateImage
(
data
)
{
return
axios
.
post
(
'/api/ai/sky3/generateImage'
,
data
)
}
// 百度聊天接口
export
function
baiduAIChat
(
data
)
{
...
...
src/common/wangeditor-customer/menu/common/AIChatDrawer.jsx
浏览文件 @
e8fff8e5
...
...
@@ -2,13 +2,13 @@ import { useState, useEffect } from 'react'
import
{
SendOutlined
}
from
'@ant-design/icons'
import
{
Drawer
,
Input
,
Button
,
message
}
from
'antd'
import
dayjs
from
'dayjs'
import
{
useAIChat
}
from
'
./useAIChat
'
import
{
useAIChat
}
from
'
@/hooks/useTiangongAI
'
import
normalAvatar
from
'@/assets/images/icon-normal-avatar.png'
import
'./AIChatDrawer.less'
const
AIChatDrawer
=
props
=>
{
const
AIChatDrawer
=
(
props
)
=>
{
const
selectText
=
props
.
editor
.
getSelectionText
()
const
[
open
,
setOpen
]
=
useState
(
true
)
...
...
@@ -58,7 +58,9 @@ const AIChatDrawer = props => {
{
messages
.
map
((
item
,
index
)
=>
{
return
(
<
div
className=
{
`chat-content-item`
}
key=
{
index
}
>
{
item
.
role_type
===
'user'
&&
<
div
className=
"time"
>
{
dayjs
(
item
.
time
).
format
(
'YYYY-MM-DD HH:mm'
)
}
</
div
>
}
{
item
.
role_type
===
'user'
&&
(
<
div
className=
"time"
>
{
dayjs
(
item
.
time
).
format
(
'YYYY-MM-DD HH:mm'
)
}
</
div
>
)
}
{
item
.
role_type
===
'ai'
&&
(
<
div
className=
"inside"
>
<
div
className=
"ai-in-content"
>
...
...
@@ -92,12 +94,17 @@ const AIChatDrawer = props => {
defaultValue=
{
value
}
allowClear
disabled=
{
isLoading
}
onChange=
{
e
=>
setValue
(
e
.
target
.
value
)
}
onChange=
{
(
e
)
=>
setValue
(
e
.
target
.
value
)
}
placeholder=
"请输入内容"
style=
{
{
height
:
'80px'
,
resize
:
'none'
}
}
></
Input
.
TextArea
>
</
div
>
<
div
className=
"button"
>
<
Button
type=
"primary"
icon=
{
<
SendOutlined
/>
}
loading=
{
isLoading
}
size=
"large"
onClick=
{
targetChat
}
></
Button
>
<
Button
type=
"primary"
icon=
{
<
SendOutlined
/>
}
loading=
{
isLoading
}
size=
"large"
onClick=
{
targetChat
}
></
Button
>
</
div
>
</
div
>
</
div
>
...
...
src/config/component.js
浏览文件 @
e8fff8e5
差异被折叠。
点击展开。
src/hooks/useAI.js
deleted
100644 → 0
浏览文件 @
4ac31a11
import
{
useState
}
from
'react'
import
{
aiEdit
,
aiChat
,
aiGenerateImage
}
from
'@/api/ai'
export
function
useAIEdit
()
{
const
[
messages
,
setMessages
]
=
useState
([])
const
[
isLoading
,
setIsLoading
]
=
useState
(
false
)
const
latestMessage
=
messages
[
messages
.
length
-
1
]
||
{}
const
{
text
=
''
}
=
latestMessage
const
fetch
=
async
params
=>
{
setIsLoading
(
true
)
try
{
const
res
=
await
aiEdit
({
body
:
JSON
.
stringify
({
params
}),
onmessage
:
res
=>
{
let
message
=
JSON
.
parse
(
res
.
data
)
message
=
{
...
message
.
data
,
request_id
:
message
.
request_id
}
setMessages
(
prevMessages
=>
{
const
messageIndex
=
prevMessages
.
findIndex
(
m
=>
m
.
request_id
===
message
.
request_id
)
if
(
messageIndex
===
-
1
)
{
return
[...
prevMessages
,
message
]
}
else
{
return
prevMessages
.
map
(
m
=>
(
m
.
request_id
===
message
.
request_id
?
message
:
m
))
}
})
}
})
}
catch
(
error
)
{
console
.
error
(
'Error fetching AI edit:'
,
error
)
}
finally
{
setIsLoading
(
false
)
}
}
return
{
messages
,
text
,
setMessages
,
fetch
,
isLoading
}
}
export
function
useAIChat
()
{
const
[
messages
,
setMessages
]
=
useState
([])
const
fetch
=
async
params
=>
{
const
res
=
await
aiChat
({
body
:
JSON
.
stringify
({
params
}),
onmessage
:
res
=>
{
const
message
=
JSON
.
parse
(
res
.
data
)
console
.
log
(
message
)
setMessages
(
messages
=>
[...
messages
,
message
])
}
})
}
}
export
function
useAIGenerateImage
()
{
const
[
messages
,
setMessages
]
=
useState
([])
const
fetch
=
async
params
=>
{
const
res
=
await
aiGenerateImage
(
params
)
setMessages
(
res
)
}
}
src/hooks/useBaiduAI.js
浏览文件 @
e8fff8e5
...
...
@@ -7,13 +7,13 @@ export function useAIEdit() {
const
latestMessage
=
messages
[
messages
.
length
-
1
]
||
{}
const
text
=
latestMessage
?.
content
||
''
const
fetch
=
useCallback
(
async
params
=>
{
const
fetch
=
useCallback
(
async
(
params
)
=>
{
setIsLoading
(
true
)
try
{
const
defaultParams
=
{
ernie_name
:
'ERNIE-4.0-8K-Preview'
,
stream
:
false
}
const
res
=
await
baiduAIChat
({
...
defaultParams
,
params
})
const
message
=
{
role
:
'assistant'
,
content
:
res
.
data
.
result
}
setMessages
(
prevMessages
=>
[...
prevMessages
,
message
])
setMessages
(
(
prevMessages
)
=>
[...
prevMessages
,
message
])
}
catch
(
error
)
{
console
.
error
(
'Error fetching data:'
,
error
)
}
finally
{
...
...
src/
common/wangeditor-customer/menu/common/useAIChat
.js
→
src/
hooks/useTiangongAI
.js
浏览文件 @
e8fff8e5
...
...
@@ -10,19 +10,21 @@ export function useAIChat() {
const
[
chatId
,
setChatId
]
=
useState
(
null
)
const
[
isLoading
,
setIsLoading
]
=
useState
(
false
)
const
addMessage
=
useCallback
(
message
=>
{
setMessages
(
prevMessages
=>
[...
prevMessages
,
message
])
const
addMessage
=
useCallback
(
(
message
)
=>
{
setMessages
(
(
prevMessages
)
=>
[...
prevMessages
,
message
])
},
[])
const
updateMessages
=
useCallback
(
newMessage
=>
{
setMessages
(
prevMessages
=>
{
const
existingMessage
=
prevMessages
.
find
(
msg
=>
msg
.
conversationId
===
newMessage
.
conversationId
)
const
updateMessages
=
useCallback
(
(
newMessage
)
=>
{
setMessages
(
(
prevMessages
)
=>
{
const
existingMessage
=
prevMessages
.
find
(
(
msg
)
=>
msg
.
conversationId
===
newMessage
.
conversationId
)
const
content
=
newMessage
.
content
===
'
\
n'
?
'<br/>'
:
newMessage
.
content
||
''
if
(
existingMessage
)
{
// 更新现有消息
return
prevMessages
.
map
(
msg
=>
(
msg
.
conversationId
===
newMessage
.
conversationId
?
{
...
msg
,
content
:
msg
.
content
+
content
}
:
msg
))
return
prevMessages
.
map
((
msg
)
=>
msg
.
conversationId
===
newMessage
.
conversationId
?
{
...
msg
,
content
:
msg
.
content
+
content
}
:
msg
)
}
else
{
// 新增消息
return
[...
prevMessages
,
{
...
newMessage
,
content
,
role_type
:
'ai'
,
time
:
Date
.
now
()
}]
...
...
@@ -31,7 +33,7 @@ export function useAIChat() {
},
[])
const
post
=
useCallback
(
async
data
=>
{
async
(
data
)
=>
{
const
timestamp
=
Date
.
now
()
const
sign
=
md5
(
`
${
authKey
}${
authSecret
}${
timestamp
}
`
)
...
...
@@ -40,7 +42,7 @@ export function useAIChat() {
role_type
:
'user'
,
content
:
data
.
userChatInput
,
conversationId
:
`user-
${
timestamp
}
`
,
// 生成一个唯一的 conversationId
time
:
Date
.
now
()
time
:
Date
.
now
()
,
})
setIsLoading
(
true
)
...
...
@@ -52,7 +54,7 @@ export function useAIChat() {
authKey
,
timestamp
,
sign
,
'Content-Type'
:
'application/json'
'Content-Type'
:
'application/json'
,
},
body
:
JSON
.
stringify
({
...
data
,
chatId
,
agentId
:
authKey
}),
onopen
(
response
)
{
...
...
@@ -70,7 +72,7 @@ export function useAIChat() {
},
onclose
()
{
setIsLoading
(
false
)
}
}
,
})
}
catch
(
error
)
{
console
.
error
(
'Post error:'
,
error
)
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论