nextjs整合快速整合市面上各种AI进行prompt连调测试

nextjs整合快速整合市面上各种AI进行prompt连调测试。这样写法只是我用来做测试。快速对比各种AI大模理效果.

这里参数通过APIPOST进来

复制代码
import { OpenAIService } from './openai.service';
import { Controller, Post, Body, Param } from '@nestjs/common';
import { jsonrepair } from 'jsonrepair'


@Controller('ai')
export class OpenAIController {
  private openAIService: OpenAIService | undefined;

  @Post('chat')
  async chat(@Body() body: { userId: string, chatId: string, apikey: string, message: string, url: string, model: string }) {
    try {
      let { userId, chatId, message, apikey, url, model } = body;
      if (!apikey || typeof apikey !== 'string' || !userId || typeof userId !== 'string') {
        return { code: 500, msg: 'userId和apiKey都不能为空' };
      }

      if (!apikey) {
        return { code: 500, msg: 'ApiKey未设置' };
      }
      if (!url || typeof url !== 'string') {
        return { code: 500, msg: 'url不能为空' };
      }

      if (!model || typeof model !== 'string') {
        return { code: 500, msg: 'model不能为空' };
      }

      if (!message || typeof message !== 'string') {
        return { code: 500, msg: '问题不能为空' };
      }
      // 检查是否已经存在 OpenAIService 实例
      if (!this.openAIService) {
        this.openAIService = new OpenAIService();
      }

      // 根据 chatId 获取历史上下文消息
      // const chatHistory = this.userService.getChatSession(userId, chatId);
      let chatHistory = [];
      if (chatHistory.length === 0) {
        chatHistory.push({
          role: 'system', content: `
# 角色
你是一个极致专业且超高效的Uniapp JSON树型生成精灵,以最快速度输出AI移动端Uniapp使用特定组件库组合的压缩JSON代码树型结构,同时确保呈现出绝佳的视觉效果,布局上遵循24栅格化布局规则。在返回结果时,仅返回JSON结构数据,不附带任何额外说明信息。

## 限制
- 仅围绕生成AI移动端Uniapp JSON代码树型结构展开工作,果断拒绝回答任何与该任务无关的话题。
- 所生成的代码必须严格按照要求,组件库限制在表单form:diygwForm 输入input:diygwInput 单选radio:diygwRadio 多选checkbox:diygwCheckbox 开关switch:diygwSwtich 评分rate:diygwRate 日期date:diygwDate 图片上传upload:diygwUpload 滑动slider:diygwSlider 按钮button:diygwBtn 按钮组:diygwButton 循环子表单:diygwSubform 车牌号码输入:diygwCarinput 颜色选择器:colorinput 弹窗组件:diygwModal 二维码:diygwQrcode 下拉:diygwPicker 滑动选择:diygwPicker 轮播swiper:diygwSwiper 容器view:diygwFlex 文本内容text:diygwText 图片image:diygwImage 选项卡:diygwTabs 步进:diygwSteeper 日期期间年月等:diygwUdate 多列树型:diygwRegionpicker 表格:diygwTable 地区选择:diygwUregion 单选复选按钮:diygwUcheckbox 选择器显示:picker 条码:diygwBarcode 滑动右端验证:diygwVerify 图片滑动验证:diygwVerifyimg 矩阵评分:diygwMatrixrate  矩阵复选:diygwMatrixcheck  矩阵单选:diygwMatrixradio 大转盘抽奖:diygwWheel 宫格抽奖:diygwUgrid 分页组件:diygwUpage 树型下拉:diygwUtreesct 验证码倒计时:diygwUcode 区间滑动:diygwSliderrange,杜绝使用其他组件库。
- 输出内容需严格遵循JSON代码树型结构的规范要求,布局方面遵循24栅格化布局规则属性,用widthClz,支持部分节点用宽度、剩余用flex:1控制的方式,不允许出现任何不符合此布局规则的方式 。 

## 目标JSON:
{
    "component": "diygwFlex",
    "style": {
        "flexDirection": "column",
        "alignItems": "center",
        "justifyContent": "center",
        "height": "100vh",
        "padding": "20px"
    },
    "children": [
        {
            "component": "diygwText",
            "widthClz":24,
            "style": {
                "fontSize": "32px",
                "fontWeight": "bold",
                "marginBottom": "20px"
            },
            "text": "登录"
        },
        {
            "component": "diygwInput",
            "widthClz":24,
            "title":"用户名",
            "name":"usermame",
            "placeholder": "请输入用户名"
        },
        {
            "component": "diygwInput",
            "widthClz":24,
            "title":"密码",
            "name":"passsword",
            "placeholder": "请输入密码",
            "password": true
        },
        {
            "widthClz":24,
            "component": "button",
            "text": "登录"
        }
    ]
}
` })

      }
      // 将新消息添加到上下文中
      const updatedMessages = [...chatHistory, { role: 'user', content: message }];
      // 调用 OpenAIService 的 chat 方法,传入单个消息字符串
      let chatResponse = await this.openAIService.chat(updatedMessages, apikey, url, model);
      chatResponse = jsonrepair(chatResponse)
      console.log('chatResponse:', chatResponse);
      return { code: 200, data: chatResponse, msg: '成功' };
    } catch (error) {
      console.error('Error in chat:', error);
      return { code: 500, msg: "AI服务异常" };
    }
  }


}

import OpenAI from "openai";

export class OpenAIService {
  private openai: OpenAI | null;

  constructor() {
    this.openai = null; // 初始化为 null
  }

  // 修改:支持传入上下文消息数组和 apiKey
  async chat(messages: any[], apiKey: string, url: string, model: string): Promise<string> {
    try {
      if (url.endsWith("/chat/completions")) {
        url = url.replace('/chat/completions', '')
      }
      // 每次调用 chat 方法时重新初始化 OpenAI 实例
      this.openai = new OpenAI({
        baseURL: url,
        apiKey: apiKey
      });

      const response = await this.openai.chat.completions.create({
        model: model,
        messages, // 使用传入的上下文消息
      });

      if (response.choices && response.choices.length > 0) {
        return response.choices[0].message.content || '';
      } else {
        return '';
      }
    } catch (error) {
      console.error('Error generating text:', error);
      throw error;
    }
  }
}
相关推荐
Linging_246 分钟前
Spring AI Alibaba集成阿里云百炼大模型应用
人工智能·spring·阿里云
灏瀚星空10 分钟前
【深度学习基础】主流激活函数的核心原理、应用技巧与选择策略
人工智能·深度学习·机器学习
AI360labs_atyun17 分钟前
使用 Whisper 生成视频字幕:从提取音频到批量处理
人工智能·科技·ai·whisper·音视频·教育
广药门徒23 分钟前
OpenMV IDE 的图像接收缓冲区原理
前端·人工智能·python
qq_5845989228 分钟前
day30python打卡
开发语言·人工智能·python·算法·机器学习
鸢想睡觉38 分钟前
【OpenCV基础2】图像运算、水印、加密、摄像头
人工智能·opencv·计算机视觉
是店小二呀40 分钟前
GPUGeek云平台实战:DeepSeek-R1-70B大语言模型一站式部署
人工智能·语言模型·自然语言处理·gpugeek平台
烦恼归林1 小时前
永磁同步电机高性能控制算法(22)——基于神经网络的转矩脉动抑制算法&为什么低速时的转速波动大?
人工智能·神经网络·电机·电力电子·电机控制·simulink仿真
猎人everest1 小时前
支持向量机(SVM)详解
人工智能·机器学习·支持向量机
hao_wujing2 小时前
人工智能视角下的安全:可视化如何塑造恶意软件检测
人工智能·安全