分享一个基于GPT-3.5 Turbo的开源项目,界面简洁大气,反应速度快
Posted didiplus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享一个基于GPT-3.5 Turbo的开源项目,界面简洁大气,反应速度快相关的知识,希望对你有一定的参考价值。
今天在
github
又发现一个国内的大神开源的chatGPT
项目。先看看整体的效果如何吧。
这个项目是基于OpenAI GPT-3.5 Turbo API
的demo
。
本地部署
环境准备
- 安装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 等代码仓库中自动拉取代码 然后进行项目打包和部署等功能。
:::
-
Fork
此项目,前往https://app.netlify.com/start
新建站点,选择你fork
完成的项目,将其与GitHub
帐户连接。
-
选择要部署的分支,选择
main
分支, 在项目设置中配置环境变量,环境变量配置参考下文。
-
选择默认的构建命令和输出目录,单击
Deploy Site
按钮开始部署站点。
环境变量
名称 | 描述 | 默认 |
---|---|---|
OPENAI_API_KEY | 你的 OpenAI API Key | null |
HTTPS_PROXY | 为 OpenAI API 提供代理. e.g. http://127.0.0.1:7890 | null |
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(GPT3.5) OpenAI官方API正式发布
如何间接调用 Chat GPT 3.5,这里有一个简单的方案,基于 SpringBoot ,部署方便