index.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import request from '@/config/axios'
  2. import { fetchEventSource } from '@microsoft/fetch-event-source'
  3. import { getAccessToken } from '@/utils/auth'
  4. import { config } from '@/config/axios/config'
  5. // 聊天VO
  6. export interface ChatMessageVO {
  7. id: number // 编号
  8. conversationId: number // 对话编号
  9. type: string // 消息类型
  10. userId: string // 用户编号
  11. roleId: string // 角色编号
  12. model: number // 模型标志
  13. modelId: number // 模型编号
  14. content: string // 聊天内容
  15. tokens: number // 消耗 Token 数量
  16. createTime: Date // 创建时间
  17. roleAvatar: string // 角色头像
  18. userAvatar: string // 创建时间
  19. }
  20. // AI chat 聊天
  21. export const ChatMessageApi = {
  22. // 消息列表
  23. getChatMessageListByConversationId: async (conversationId: number | null) => {
  24. return await request.get({
  25. url: `/ai/chat/message/list-by-conversation-id?conversationId=${conversationId}`
  26. })
  27. },
  28. // 发送 Stream 消息
  29. // 为什么不用 axios 呢?因为它不支持 SSE 调用
  30. sendStream: async (
  31. conversationId: number,
  32. content: string,
  33. ctrl,
  34. enableContext: boolean,
  35. onMessage,
  36. onError,
  37. onClose
  38. ) => {
  39. const token = getAccessToken()
  40. return fetchEventSource(`${config.base_url}/ai/chat/message/send-stream`, {
  41. method: 'post',
  42. headers: {
  43. 'Content-Type': 'application/json',
  44. Authorization: `Bearer ${token}`
  45. },
  46. openWhenHidden: true,
  47. body: JSON.stringify({
  48. conversationId,
  49. content,
  50. useContext: enableContext
  51. }),
  52. onmessage: onMessage,
  53. onerror: onError,
  54. onclose: onClose,
  55. signal: ctrl.signal
  56. })
  57. },
  58. // 删除消息
  59. delete: async (id: string) => {
  60. return await request.delete({ url: `/ai/chat/message/delete?id=${id}` })
  61. },
  62. // 删除消息 - 对话所有消息
  63. deleteByConversationId: async (conversationId: number) => {
  64. return await request.delete({
  65. url: `/ai/chat/message/delete-by-conversation-id?conversationId=${conversationId}`
  66. })
  67. },
  68. // 获得消息分页
  69. getChatMessagePage: async (params: any) => {
  70. return await request.get({ url: '/ai/chat/message/page', params })
  71. },
  72. // 管理员删除消息
  73. deleteChatMessageByAdmin: async (id: number) => {
  74. return await request.delete({ url: `/ai/chat/message/delete-by-admin?id=${id}` })
  75. }
  76. }