Procházet zdrojové kódy

feat: agent 测试接口

huangzhichao před 2 dny
rodič
revize
baa723741d

+ 3 - 1
src/app.module.ts

@@ -2,6 +2,7 @@ import { Module } from '@nestjs/common'
 
 
 import { AgentListModule } from '@/module/agent-list/agent-list.module'
 import { AgentListModule } from '@/module/agent-list/agent-list.module'
 import { AgentServerModule } from '@/module/agent-server/agent-server.module'
 import { AgentServerModule } from '@/module/agent-server/agent-server.module'
+import { AgentTestModule } from '@/module/agent-test-management/agent-test.module'
 import { ChatManagementModule } from '@/module/chat-management/chat-management.module'
 import { ChatManagementModule } from '@/module/chat-management/chat-management.module'
 import { SqlAgentModule } from '@/module/sql-agent/sql-agent.module'
 import { SqlAgentModule } from '@/module/sql-agent/sql-agent.module'
 import { TencentCloudModule } from '@/module/tencent-cloud/tencent-cloud.module'
 import { TencentCloudModule } from '@/module/tencent-cloud/tencent-cloud.module'
@@ -12,7 +13,8 @@ import { TencentCloudModule } from '@/module/tencent-cloud/tencent-cloud.module'
     TencentCloudModule,
     TencentCloudModule,
     AgentServerModule,
     AgentServerModule,
     ChatManagementModule,
     ChatManagementModule,
-    AgentListModule
+    AgentListModule,
+    AgentTestModule
   ]
   ]
 })
 })
 export class AppModule {}
 export class AppModule {}

+ 51 - 0
src/dto/agent-test.ts

@@ -0,0 +1,51 @@
+import { IsString, IsNotEmpty, IsNumber } from 'class-validator'
+
+export class CreateTestTaskDto {
+  @IsNumber()
+  @IsNotEmpty({ message: 'agentId不能为空' })
+  agentId: number
+
+  @IsString()
+  @IsNotEmpty({ message: 'moduleId不能为空' })
+  moduleId: string
+
+  @IsNumber()
+  @IsNotEmpty({ message: 'evaluate不能为空' })
+  evaluate: number
+}
+
+export class GetTestTaskListDto {
+  @IsNumber()
+  @IsNotEmpty({ message: 'pageNum不能为空' })
+  pageNum: number
+
+  @IsNumber()
+  @IsNotEmpty({ message: 'pageSize不能为空' })
+  pageSize: number
+}
+
+export class StopTestTaskDto {
+  @IsNumber()
+  @IsNotEmpty({ message: 'taskId不能为空' })
+  taskId: number
+}
+
+export class ResumeTestTaskDto {
+  @IsNumber()
+  @IsNotEmpty({ message: 'taskId不能为空' })
+  taskId: number
+}
+
+export class GetTestTaskConversationsDto {
+  @IsNumber()
+  @IsNotEmpty({ message: 'taskId不能为空' })
+  taskId: number
+
+  @IsNumber()
+  @IsNotEmpty({ message: 'pageNum不能为空' })
+  pageNum: number
+
+  @IsNumber()
+  @IsNotEmpty({ message: 'pageSize不能为空' })
+  pageSize: number
+}

+ 18 - 0
src/interface/agent-test.interface.ts

@@ -0,0 +1,18 @@
+import { ServiceResponse } from '../response/response.interface'
+
+export interface IAgentTestService {
+  createTestTask(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<TestTaskType>>
+  getEvaluteType(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<EvaluteType>>
+  getTestTaskList(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<TestTaskListType>>
+  stopTestTask(params: Record<string, any>): Promise<ServiceResponse<any>>
+  resumeTestTask(params: Record<string, any>): Promise<ServiceResponse<any>>
+  getTestTaskConversations(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<TaskConversationsType>>
+}

+ 54 - 0
src/module/agent-test-management/agent-test.controller.ts

@@ -0,0 +1,54 @@
+import { Controller, Get, Query, Post, Body } from '@nestjs/common'
+import { ApiOperation, ApiTags } from '@nestjs/swagger'
+
+import {
+  CreateTestTaskDto,
+  GetTestTaskListDto,
+  StopTestTaskDto,
+  ResumeTestTaskDto,
+  GetTestTaskConversationsDto
+} from '@/dto/agent-test'
+
+import { AgentTestService } from './service/agent-test.service'
+
+@ApiTags('agent-test')
+@Controller('agent-test')
+export class AgentTestController {
+  constructor(private readonly agentTestService: AgentTestService) {}
+
+  @Post('create-test-task')
+  @ApiOperation({ summary: '创建测试任务' })
+  async createTestTask(@Body() body: CreateTestTaskDto) {
+    return this.agentTestService.createTestTask(body)
+  }
+
+  @Get('get-evalute-type')
+  @ApiOperation({ summary: '获取评估类型' })
+  async getEvaluteType() {
+    return this.agentTestService.getEvaluteType()
+  }
+
+  @Get('get-test-task-list')
+  @ApiOperation({ summary: '获取测试任务列表' })
+  async getTestTaskList(@Query() query: GetTestTaskListDto) {
+    return this.agentTestService.getTestTaskList(query)
+  }
+
+  @Post('stop-test-task')
+  @ApiOperation({ summary: '停止测试任务' })
+  async stopTestTask(@Body() body: StopTestTaskDto) {
+    return this.agentTestService.stopTestTask(body)
+  }
+
+  @Post('resume-test-task')
+  @ApiOperation({ summary: '恢复测试任务' })
+  async resumeTestTask(@Body() body: ResumeTestTaskDto) {
+    return this.agentTestService.resumeTestTask(body)
+  }
+
+  @Get('get-test-task-conversations')
+  @ApiOperation({ summary: '获取测试任务会话列表' })
+  async getTestTaskConversations(@Query() query: GetTestTaskConversationsDto) {
+    return this.agentTestService.getTestTaskConversations(query)
+  }
+}

+ 14 - 0
src/module/agent-test-management/agent-test.module.ts

@@ -0,0 +1,14 @@
+import { Module } from '@nestjs/common'
+
+import { HttpClientModule } from '@/shared/http-client/http-client.module'
+
+import { AgentTestController } from './agent-test.controller'
+import { AgentTestHttpService } from './service/agent-test-http.service'
+import { AgentTestService } from './service/agent-test.service'
+
+@Module({
+  imports: [HttpClientModule],
+  controllers: [AgentTestController],
+  providers: [AgentTestHttpService, AgentTestService]
+})
+export class AgentTestModule {}

+ 64 - 0
src/module/agent-test-management/service/agent-test-http.service.ts

@@ -0,0 +1,64 @@
+import { Injectable } from '@nestjs/common'
+
+import { ServiceResponse } from '@/response/response.interface'
+import { HttpClientService } from '@/shared/http-client/http-client.service'
+
+@Injectable()
+export class AgentTestHttpService {
+  private readonly baseUrl = 'http://192.168.206.189:8083/api'
+
+  constructor(private readonly httpClientService: HttpClientService) {}
+
+  private async makeRequest<T>(
+    endpoint: string,
+    params?: Record<string, any>
+  ): Promise<ServiceResponse<T>> {
+    const url = `${this.baseUrl}/${endpoint}`
+    return this.httpClientService.get<T>(url, params)
+  }
+
+  async makeRequestPost<T>(
+    endpoint: string,
+    params?: Record<string, any>
+  ): Promise<ServiceResponse<T>> {
+    const url = `${this.baseUrl}/${endpoint}`
+    return this.httpClientService.post<T>(url, params)
+  }
+
+  async createTestTask(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<TestTaskType>> {
+    return this.makeRequestPost<TestTaskType>('createTestTask', params)
+  }
+
+  async getEvaluteType(): Promise<ServiceResponse<EvaluteType>> {
+    return this.makeRequestPost<EvaluteType>('getEvaluteType')
+  }
+
+  async getTestTaskList(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<TestTaskListType>> {
+    return this.makeRequestPost<TestTaskListType>('getTestTaskList', params)
+  }
+
+  async stopTestTask(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<any>> {
+    return this.makeRequestPost<any>('stopTestTask', params)
+  }
+
+  async resumeTestTask(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<any>> {
+    return this.makeRequestPost<any>('resumeTestTask', params)
+  }
+
+  async getTestTaskConversations(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<TaskConversationsType>> {
+    return this.makeRequest<TaskConversationsType>(
+      'getTestTaskConversations',
+      params
+    )
+  }
+}

+ 119 - 0
src/module/agent-test-management/service/agent-test.service.ts

@@ -0,0 +1,119 @@
+import { Injectable } from '@nestjs/common'
+
+import { IAgentTestService } from '@/interface/agent-test.interface'
+import { ServiceResponse } from '@/response/response.interface'
+import { BusinessCode, HttpStatusCode } from '@/response/status-code.enum'
+
+import { AgentTestHttpService } from './agent-test-http.service'
+
+@Injectable()
+export class AgentTestService implements IAgentTestService {
+  constructor(private readonly httpService: AgentTestHttpService) {}
+
+  async createTestTask(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<TestTaskType>> {
+    const { code, data, msg } = await this.httpService.createTestTask(params)
+    if (code !== HttpStatusCode.OK) {
+      return {
+        code: BusinessCode.BAD_REQUEST,
+        msg: msg || '创建测试任务失败',
+        data: null
+      }
+    }
+    return {
+      code: BusinessCode.SUCCESS,
+      data,
+      msg: msg || '创建测试任务成功'
+    }
+  }
+
+  async getEvaluteType(): Promise<ServiceResponse<EvaluteType>> {
+    const { code, data, msg } = await this.httpService.getEvaluteType()
+    if (code !== HttpStatusCode.OK) {
+      return {
+        code: BusinessCode.BAD_REQUEST,
+        msg: msg || '获取评估类型失败',
+        data: null
+      }
+    }
+    return {
+      code: BusinessCode.SUCCESS,
+      data,
+      msg: msg || '获取评估类型成功'
+    }
+  }
+
+  async getTestTaskList(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<TestTaskListType>> {
+    const { code, data, msg } = await this.httpService.getTestTaskList(params)
+    if (code !== HttpStatusCode.OK) {
+      return {
+        code: BusinessCode.BAD_REQUEST,
+        msg: msg || '获取测试任务列表失败',
+        data: null
+      }
+    }
+    return {
+      code: BusinessCode.SUCCESS,
+      data,
+      msg: msg || '获取测试任务列表成功'
+    }
+  }
+
+  async getTestTaskConversations(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<TaskConversationsType>> {
+    const { code, data, msg } =
+      await this.httpService.getTestTaskConversations(params)
+    if (code !== HttpStatusCode.OK) {
+      return {
+        code: BusinessCode.BAD_REQUEST,
+        msg: msg || '获取测试任务会话列表失败',
+        data: null
+      }
+    }
+    return {
+      code: BusinessCode.SUCCESS,
+      data,
+      msg: msg || '获取测试任务会话列表成功'
+    }
+  }
+
+  async stopTestTask(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<any>> {
+    const { code, data, msg } = await this.httpService.stopTestTask(params)
+    if (code !== HttpStatusCode.OK) {
+      return {
+        code: BusinessCode.BAD_REQUEST,
+        msg: msg || '停止测试任务失败',
+        data: null
+      }
+    }
+    return {
+      code: BusinessCode.SUCCESS,
+      data,
+      msg: msg || '停止测试任务成功'
+    }
+  }
+
+  async resumeTestTask(
+    params: Record<string, any>
+  ): Promise<ServiceResponse<any>> {
+    const { code, data, msg } = await this.httpService.resumeTestTask(params)
+    if (code !== HttpStatusCode.OK) {
+      return {
+        code: BusinessCode.BAD_REQUEST,
+        msg: msg || '恢复测试任务失败',
+        data: null
+      }
+    }
+    return {
+      code: BusinessCode.SUCCESS,
+      data,
+      msg: msg || '恢复测试任务成功'
+    }
+  }
+}

+ 60 - 0
src/module/agent-test-management/type.d.ts

@@ -0,0 +1,60 @@
+type TestTaskType = {
+  code: number
+  msg: string
+}
+
+type EvaluteType = {
+  code: number
+  msg: string
+  data: {
+    list: {
+      type: number
+      desc: string
+    }[]
+  }
+}
+
+type TestTaskListType = {
+  code: number
+  msg: string
+  data: TestTaskListData
+}
+
+type TestTaskListData = {
+  currentPage: number
+  pageSize: number
+  totalSize: number
+  total: number
+  list: {
+    id: number
+    agentName: string
+    createUser: string
+    updateUser: string
+    statusName: string
+    createTime: string
+    updateTime: string
+  }[]
+}
+
+type TaskConversationsType = {
+  code: number
+  msg: string
+  data: TaskConversationsData
+}
+
+type TaskConversationsData = {
+  currentPage: number
+  pageSize: number
+  totalSize: number
+  total: number
+  list: {
+    id: number
+    agentName: string
+    input: string
+    output: string
+    score: string
+    statusName: string
+    createTime: string
+    updateTime: string
+  }[]
+}