分享一个基于GPT-3.5 Turbo的开源项目,界面简洁大气,反应速度快

Posted didiplus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享一个基于GPT-3.5 Turbo的开源项目,界面简洁大气,反应速度快相关的知识,希望对你有一定的参考价值。

今天在github又发现一个国内的大神开源的chatGPT项目。先看看整体的效果如何吧。

这个项目是基于OpenAI GPT-3.5 Turbo APIdemo

本地部署

环境准备

  • 安装node

由于该项目是使用node开发,所以,在部署之前先要安装好node环境。检查您的开发环境和部署环境是否都使用Node v18或更高版本。你可以使用nvm管理本地多个node版本。可以使用下面的命令查看node的版本

node -v
  • 安装pnpm

推荐使用pnpm来管理依赖,如果你从来没有安装过pnpm,可以使用下面的命令安装:

 npm i -g pnpm
  • 申请OPENAI_API_KEY

运行此应用程序之前,您需要从 OpenAI 获取 API 密钥。您可以在https://beta.openai.com/signup注册 API 密钥。

  • 克隆项目

通过以下命令把项目克隆到本地任意的目录下,代码如下:

git clone 项目地址

项目地址关注公众号,回复chatgpt_demo即可获取到。

  • 安装依赖

下载好项目,进入项目跟目录,打开终端,输入如下命令安装依赖:

pnpm install
  • 修改配置

复制.env.example文件,重命名为.env,并添加你的OpenAI API key.env文件中

OPENAI_API_KEY=sk-xxx...
  • 运行应用

输入如下命令运行应用,成功运行后,通过访问http://localhost:3000/即可访问项目。

 pnpm run dev

部署到Netlify

::: block-1

什么是Netlify

Netlify 是一家提供静态网站托管的云平台,支持从 Github, GitLab, Bitbucket 等代码仓库中自动拉取代码 然后进行项目打包和部署等功能。
:::

  1. Fork此项目,前往https://app.netlify.com/start新建站点,选择你fork完成的项目,将其与GitHub帐户连接。

  2. 选择要部署的分支,选择main分支, 在项目设置中配置环境变量,环境变量配置参考下文。

  3. 选择默认的构建命令和输出目录,单击Deploy Site按钮开始部署站点。

环境变量

名称描述默认
OPENAI_API_KEY你的 OpenAI API Keynull
HTTPS_PROXY为 OpenAI API 提供代理. e.g. http://127.0.0.1:7890null
OPENAI_API_BASE_URL请求 OpenAI API 的自定义 Base URL.https://api.openai.com
HEAD_SCRIPTS在页面的 </head> 之前注入分析或其他脚本null
SECRET_KEY项目的秘密字符串。用于生成 API 调用的签名null
SITE_PASSWORD为网站设置密码。如果未设置,则该网站将是公开的null
OPENAI_API_MODEL使用的 OpenAI 模型. 模型列表gpt-3.5-turbo

总结

该项目也是通过调用Chatgpt的接口实现的。整体的页面也相对简洁。也支持上下文对话。如果,大家在部署过程中遇到什么问题,欢迎留言咨询。

[经验分享]gpt-3.5-Turbo|unity中实现http接口调用gpt新接口以及信息处理的实现案例分享

最近openAI发布了目前chatGPT所使用的模型gpt-3.5-Turbo,之前使用了text-davinci-003模型做了一个galgame的AI女友对话的demo。这次趁着新接口的发布,对这个demo也同步更新了模型调用的代码。本篇文章将分享一下,如何在unity里使用UnityWebRequest实现与openAI的接口调用以及信息处理的示例,希望能够帮助到有需要的朋友。

一、gpt-3.5-Turbo官方示例分析


①首先我们需要知道turbo接口api的调用地址,从官方文档中查询,找到了调用连接,如下:

api调用地址https://api.openai.com/v1/chat/completions

②调用api所需要发送的报文

1)Header:

①ContentType:application/json

②Authorization:Bearer 你的apikey

2)发送的报文主体

从openAI官方网站查询了一下Turbo的调用示例,官方展示了一个Python的代码示例:

# Note: you need to be using OpenAI Python v0.27.0 for the code below to work
import openai
 
openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        "role": "system", "content": "You are a helpful assistant.",
        "role": "user", "content": "Who won the world series in 2020?",
        "role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020.",
        "role": "user", "content": "Where was it played?"
    ]
)

从官方示例可以发现,我们需要发送的报文,应该包含model的名称以及需要发送的messages,实际上从官方文档里看,可以发送的字段会更多,需要的话请大家自行查询吧。

我们可以发现,发送的报文里,包含有role角色定义,以及角色所发送的消息。

这里我们注意一下,role的可选值,必须是

口 system:在初始化的时候,设置AI的角色设定,可以理解为是人设。

口 user:我们发送的信息,放在这里

口 assistant:模型返回的信息,放在这里

需要注意的是,观察官方示例,可以发现,所有发送的信息以及反馈信息均被放置在报文里,这样可以让模型回答的时候,关联前文。

3)返回的报文

模型返回的报文格式如下所示,返回的信息以Json格式反馈。


    "id": "chatcmpl-6pWU3qzNuTBLU7U0tUw6Nqa0oQhWbHF",
    "object": "chat.completion",
    "created": 1677737615,
    "model": "gpt-3.5-turbo-0301",
    "usage": 
        "prompt_tokens": 39,
        "completion_tokens": 35,
        "total_tokens": 74
    ,
    "choices": [
        
            "message": 
                "role": "assistant",
                "content": "你好,我是AI助手!"
            ,
            "finish_reason": "stop",
            "index": 0
        
    ]

二、unity发送的报文格式


因为我们需要使用unity来访问api,所以需要修改一下报文主体。这里我们将需要发送的报文写成Json格式:


    "model":"gpt-3.5-turbo",
    "messages":[
        "role": "system", "content": "你是一个经验丰富的AI助手,能帮我处理很多计算机事务",
        "role": "user", "content": "你好",
        "role": "assistant", "content": "你好,我是一个语言模型AI"
    ]

三、Unity中调用api的代码示例

本节内容将介绍一下如何使用UnityWebRequest实现调用gpt-3.5-Turbo的代码实现。

1)首先定义一下数据发送的类,用作保存待发送的报文信息。

  [Serializable]public class PostData
    
        public string model;
        public List<SendData> messages;
    

    [Serializable]
    public class SendData
    
        public string role;
        public string content;
        public SendData()  
        public SendData(string _role,string _content) 
            role = _role;
            content = _content;
        
    

2)定义一下返回数据的类,用于保存模型返回的数据信息

 [Serializable]
    public class MessageBack
    
        public string id;
        public string created;
        public string model;
        public List<MessageBody> choices;
    
    [Serializable]
    public class MessageBody
    
        public Message message;
        public string finish_reason;
        public string index;
    
    [Serializable]
    public class Message
    
        public string role;
        public string content;
    

3)unity使用UnityWebRequest调用api的代码示例

调用api的功能写成一个方法,输入的参数包含待发送的文本、openAI的密钥以及回调函数,方法里需要用的一些变量,我放在脚本里做了定义。

以下是完整的代码示例:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class GptTurboScript : MonoBehaviour

    /// <summary>
    /// api地址
    /// </summary>
    public string m_ApiUrl = "https://api.openai.com/v1/chat/completions";
    /// <summary>
    /// gpt-3.5-turbo
    /// </summary>
    public string m_gptModel = "gpt-3.5-turbo";
    /// <summary>
    /// 缓存对话
    /// </summary>
    [SerializeField]public List<SendData> m_DataList = new List<SendData>();
    /// <summary>
    /// AI人设
    /// </summary>
    public string Prompt;

    private void Start()
    
        //运行时,添加人设
        m_DataList.Add(new SendData("system", Prompt));
    
    /// <summary>
    /// 调用接口
    /// </summary>
    /// <param name="_postWord"></param>
    /// <param name="_openAI_Key"></param>
    /// <param name="_callback"></param>
    /// <returns></returns>
    public IEnumerator GetPostData(string _postWord,string _openAI_Key, System.Action<string> _callback)
    
        //缓存发送的信息列表
        m_DataList.Add(new SendData("user", _postWord));

        using (UnityWebRequest request = new UnityWebRequest(m_ApiUrl, "POST"))
        
            PostData _postData = new PostData
            
                model = m_gptModel,
                messages = m_DataList
            ;

            string _jsonText = JsonUtility.ToJson(_postData);
            byte[] data = System.Text.Encoding.UTF8.GetBytes(_jsonText);
            request.uploadHandler = (UploadHandler)new UploadHandlerRaw(data);
            request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();

            request.SetRequestHeader("Content-Type", "application/json");
            request.SetRequestHeader("Authorization", string.Format("Bearer 0", _openAI_Key));

            yield return request.SendWebRequest();

            if (request.responseCode == 200)
            
                string _msg = request.downloadHandler.text;
                MessageBack _textback = JsonUtility.FromJson<MessageBack>(_msg);
                if (_textback != null && _textback.choices.Count > 0)
                

                    string _backMsg = _textback.choices[0].message.content;
                    //添加记录
                    m_DataList.Add(new SendData("assistant", _backMsg));
                    _callback(_backMsg);
                

            
        
    

    #region 数据包

    [Serializable]public class PostData
    
        public string model;
        public List<SendData> messages;
    

    [Serializable]
    public class SendData
    
        public string role;
        public string content;
        public SendData()  
        public SendData(string _role,string _content) 
            role = _role;
            content = _content;
        

    
    [Serializable]
    public class MessageBack
    
        public string id;
        public string created;
        public string model;
        public List<MessageBody> choices;
    
    [Serializable]
    public class MessageBody
    
        public Message message;
        public string finish_reason;
        public string index;
    
    [Serializable]
    public class Message
    
        public string role;
        public string content;
    

    #endregion

本文的代码示例是基于我前段时间做的一个使用chatGPT实现的二次元AI女友galgame的demo提取的,源码包提供了text-davinci-003以及gpt-3.5-Turbo两个模型的demo示例,源码已经发布在Gitee上,需要使用的朋友,可以自行下载参考。

Gitee地址:chatGPTAIGirlFrienchatGPTAIGirlFriendSample: 使用chatGPT+unity+Azure+VRoid制作的简单的AI女友(老婆)对话机器人的demo。

以上是关于分享一个基于GPT-3.5 Turbo的开源项目,界面简洁大气,反应速度快的主要内容,如果未能解决你的问题,请参考以下文章

ChatGpt聊天API使用

ChatGPT(GPT3.5) OpenAI官方API正式发布

如何间接调用 Chat GPT 3.5,这里有一个简单的方案,基于 SpringBoot ,部署方便

ChatGPT开放API,上来就干到最低价,可以人手一个ChatGPT了

chatGPT model说明

ChatGPT:基于GPT-3.5架构的强大语言模型