agent-server.service.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. import { Injectable } from '@nestjs/common'
  2. import { RunPromptDto } from '@/dto/agent-server'
  3. import { IAgentServerService } from '@/interface/agent-server.interface'
  4. import { ServiceResponse } from '@/response/response.interface'
  5. import { BusinessCode, HttpStatusCode } from '@/response/status-code.enum'
  6. import { AgentServerHttpService } from './agent-server-http.service'
  7. @Injectable()
  8. export class AgentServerService implements IAgentServerService {
  9. constructor(private readonly httpService: AgentServerHttpService) {}
  10. async listStaffs(): Promise<ServiceResponse<StaffsType[]>> {
  11. const { code, data, msg } = await this.httpService.listStaffs()
  12. if (code !== HttpStatusCode.OK) {
  13. return {
  14. code: BusinessCode.BAD_REQUEST,
  15. msg: msg || '获取客服列表失败',
  16. data: null
  17. }
  18. }
  19. return {
  20. code: BusinessCode.SUCCESS,
  21. msg: '获取客服列表成功',
  22. data: data
  23. }
  24. }
  25. async listScenes(): Promise<ServiceResponse<Scene[]>> {
  26. const { code, data, msg } = await this.httpService.listScenes()
  27. if (code !== HttpStatusCode.OK) {
  28. return {
  29. code: BusinessCode.BAD_REQUEST,
  30. msg: msg || '获取场景列表失败',
  31. data: null
  32. }
  33. }
  34. return {
  35. code: BusinessCode.SUCCESS,
  36. msg: '获取场景列表成功',
  37. data: data
  38. }
  39. }
  40. async listModels(): Promise<ServiceResponse<Model[]>> {
  41. const { code, data, msg } = await this.httpService.listModels()
  42. if (code !== HttpStatusCode.OK) {
  43. return {
  44. code: BusinessCode.BAD_REQUEST,
  45. msg: msg || '获取模型列表失败',
  46. data: null
  47. }
  48. }
  49. return {
  50. code: BusinessCode.SUCCESS,
  51. msg: '获取模型列表成功',
  52. data: data
  53. }
  54. }
  55. async getBasePrompt(scene: string): Promise<ServiceResponse<string>> {
  56. const { code, data, msg } = await this.httpService.getBasePrompt(scene)
  57. if (code !== HttpStatusCode.OK) {
  58. return {
  59. code: BusinessCode.BAD_REQUEST,
  60. msg: msg || '获取基础提示词失败',
  61. data: null
  62. }
  63. }
  64. return {
  65. code: BusinessCode.SUCCESS,
  66. msg: '获取基础提示词成功',
  67. data: data
  68. }
  69. }
  70. async getDialogueHistory(
  71. staffId: string,
  72. userName: string,
  73. unionId: string,
  74. recentMinutes: string
  75. ): Promise<ServiceResponse<UserInfo[]>> {
  76. const user = await this.httpServiceListUsers(userName, unionId)
  77. if (user.length === 0) {
  78. return {
  79. code: BusinessCode.BAD_REQUEST,
  80. msg: '用户不存在',
  81. data: null
  82. }
  83. }
  84. const dialogueHistory = await Promise.all(
  85. user.map(async (user) => {
  86. const res = await this.getDialogueHistoryByUserId(
  87. staffId,
  88. user,
  89. recentMinutes
  90. )
  91. return res
  92. })
  93. )
  94. return {
  95. code: BusinessCode.SUCCESS,
  96. msg: '获取对话历史成功',
  97. data: dialogueHistory
  98. }
  99. }
  100. async httpServiceListUsers(
  101. userName: string,
  102. unionId: string
  103. ): Promise<UserProfile[]> {
  104. const res = await this.httpService.listUsers(userName, unionId)
  105. if (res.code !== HttpStatusCode.OK) {
  106. return []
  107. }
  108. return res.data
  109. }
  110. async getDialogueHistoryByUserId(
  111. staffId: string,
  112. user: UserProfile,
  113. recentMinutes: string
  114. ): Promise<UserInfo> {
  115. const res = await this.httpService.getDialogueHistory(
  116. staffId,
  117. user.third_party_user_id,
  118. recentMinutes
  119. )
  120. const userInfo: UserInfo = {
  121. ...user,
  122. history: res.data || []
  123. }
  124. return userInfo
  125. }
  126. async getUserProfile(userId: string): Promise<ServiceResponse<UserProfile>> {
  127. const { code, data, msg } = await this.httpService.getUserProfile(userId)
  128. if (code !== HttpStatusCode.OK) {
  129. return {
  130. code: BusinessCode.BAD_REQUEST,
  131. msg: msg || '获取用户信息失败',
  132. data: null
  133. }
  134. }
  135. return {
  136. code: BusinessCode.SUCCESS,
  137. msg: '获取用户信息成功',
  138. data: data
  139. }
  140. }
  141. async getStaffProfile(
  142. staffId: string
  143. ): Promise<ServiceResponse<StaffProfile>> {
  144. const { code, data, msg } = await this.httpService.getStaffProfile(staffId)
  145. if (code !== HttpStatusCode.OK) {
  146. return {
  147. code: BusinessCode.BAD_REQUEST,
  148. msg: msg || '获取客服信息失败',
  149. data: null
  150. }
  151. }
  152. return {
  153. code: BusinessCode.SUCCESS,
  154. msg: '获取客服信息成功',
  155. data: data
  156. }
  157. }
  158. async runPrompt(query: RunPromptDto): Promise<ServiceResponse<string>> {
  159. const { code, data, msg } = await this.httpService.runPrompt({
  160. scene: query.scene,
  161. prompt: query.prompt,
  162. staff_profile: query.staffProfile,
  163. user_profile: query.userProfile,
  164. dialogue_history: query.dialogueHistory,
  165. model_name: query.modelName,
  166. current_timestamp: query.currentTimestamp
  167. })
  168. console.log(code, data, msg)
  169. if (code !== HttpStatusCode.OK) {
  170. return {
  171. code: BusinessCode.BAD_REQUEST,
  172. msg: msg || '运行提示词失败',
  173. data: null
  174. }
  175. }
  176. return {
  177. code: BusinessCode.SUCCESS,
  178. msg: '运行提示词成功',
  179. data: data
  180. }
  181. }
  182. async listUsers(
  183. userName: string,
  184. unionId: string
  185. ): Promise<ServiceResponse<UserProfile[]>> {
  186. const { code, data, msg } = await this.httpService.listUsers(
  187. userName,
  188. unionId
  189. )
  190. if (code !== HttpStatusCode.OK) {
  191. return {
  192. code: BusinessCode.BAD_REQUEST,
  193. msg: msg || '获取用户列表失败',
  194. data: null
  195. }
  196. }
  197. return {
  198. code: BusinessCode.SUCCESS,
  199. msg: '获取用户列表成功',
  200. data: data
  201. }
  202. }
  203. }