index.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. segmentIds?: number[] // 段落编号
  17. segments?: {
  18. id: number // 段落编号
  19. content: string // 段落内容
  20. documentId: number // 文档编号
  21. documentName: string // 文档名称
  22. }[]
  23. createTime: Date // 创建时间
  24. roleAvatar: string // 角色头像
  25. userAvatar: string // 用户头像
  26. tenantId: Number // 租户id
  27. }
  28. // AI chat 聊天
  29. export const ChatMessageApi = {
  30. // 消息列表
  31. getChatMessageListByConversationId: async (conversationId: number | null) => {
  32. return await request.get({
  33. url: `/ai/chat/message/list-by-conversation-id?conversationId=${conversationId}`
  34. })
  35. },
  36. // 发送 Stream 消息
  37. // 为什么不用 axios 呢?因为它不支持 SSE 调用
  38. sendChatMessageStream: async (
  39. conversationId: number,
  40. content: string,
  41. ctrl,
  42. enableContext: boolean,
  43. onMessage,
  44. onError,
  45. onClose
  46. ) => {
  47. const token = getAccessToken()
  48. return fetchEventSource(`${config.base_url}/ai/chat/message/send-stream`, {
  49. method: 'post',
  50. headers: {
  51. 'Content-Type': 'application/json',
  52. Authorization: `Bearer ${token}`
  53. },
  54. openWhenHidden: true,
  55. body: JSON.stringify({
  56. conversationId,
  57. content,
  58. useContext: enableContext
  59. }),
  60. onmessage: onMessage,
  61. onerror: onError,
  62. onclose: onClose,
  63. signal: ctrl.signal
  64. })
  65. },
  66. // 删除消息
  67. deleteChatMessage: async (id: string) => {
  68. return await request.delete({ url: `/ai/chat/message/delete?id=${id}` })
  69. },
  70. // 删除指定对话的消息
  71. deleteByConversationId: async (conversationId: number) => {
  72. return await request.delete({
  73. url: `/ai/chat/message/delete-by-conversation-id?conversationId=${conversationId}`
  74. })
  75. },
  76. // 获得消息分页
  77. getChatMessagePage: async (params: any) => {
  78. return await request.get({ url: '/ai/chat/message/page', params })
  79. },
  80. // 管理员删除消息
  81. deleteChatMessageByAdmin: async (id: number) => {
  82. return await request.delete({ url: `/ai/chat/message/delete-by-admin?id=${id}` })
  83. }
  84. }