Unity接入ChatGPT实现NPC聊天

这篇具有很好参考价值的文章主要介绍了Unity接入ChatGPT实现NPC聊天。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现要求

1、能向OpenAI官网发送消息

        API官网:https://api.openai.com/v1/chat/completions

2、拥有自己的APIKey

实现步骤

1、明确发送消息的格式

            // 定义对话历史
            string conversation = "[{\"role\": \"system\", \"content\": \"You are a helpful assistant.\"}," +//确定是跟哪个对话窗口发送消息
                                  "{\"role\": \"user\", \"content\": \""+ message+"\"}]";//发送的消息

            // 构建请求体
            string requestBody = "{\"messages\": " + conversation + ", \"max_tokens\": 1024, " +//max_tokens 是收到消息的字节长度 一个token是四个字节 maxtoken越长收到的消息就越长
                                 "\"model\": \"gpt-3.5-turbo\"}";  // 设置使用的模型引擎按照你自己Key的模型这个是3.5的模型

2、明确收取消息的格式

{
  "id": "Key来源账户的ID",
  "object": "chat.completion",
  "created": 1691993667,
  "model": "gpt-3.5-turbo-0613",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "收到的消息类型"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 19,
    "completion_tokens": 18,
    "total_tokens": 37            //消息消耗的Token数量
  }
}


转化成对象类

public class ChatGPTJsonObjec
{
    public string id;
    public string @object;
    public string created;
    public string model;
    public Choices[] choices;
    public Usage usage;
}
[System.Serializable]
public class Choices
{
    public float index;
    public Message message;//消息放在这个类里下面有解释
    public string finish_reason;
}
[System.Serializable]
public class Message
{
    public string role;
    public string content;//收到的回复消息只要这个就行其他的都是一些用户信息没啥用
}
[System.Serializable]
public class Usage
{
    public int prompt_tokens;
    public int completion_tokens;
    public int total_tokens;//这条消息消耗的Token 一个token等于四个字节
}

实现脚本

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using System.Text;
/// <summary>
/// 脚本功能:ChatGTP发送消息
/// </summary>
	public class BebornMemoryChatGPT : MonoBehaviour
	{
        //去API官网弄,有小白弄不来的私信我我告诉你哪里有
		public string apiKey = "key";
		private string apiUrl = "https://api.openai.com/v1/chat/completions";
        public Button button;
        public InputField inputField;
        private void Awake()
        {
            SendMessageToChatGPT("你好");//发送你好,里面的内容是啥都行
        }
        public void ToJson()
        {
            ChatGPTJsonObjec chatGPTJsonObjec = new ChatGPTJsonObjec();
            string json = JsonUtility.ToJson(chatGPTJsonObjec, true);
            Debug.Log(json);
        }
        /// <summary>
        /// 携程收发消息
        /// </summary>
        /// <param name="message">发送的消息</param>

        private void SendMessageToChatGPT(string message)
        {
            // 定义对话历史
            string conversation = "[{\"role\": \"system\", \"content\": \"You are a helpful assistant.\"}," +//确定是跟哪个对话窗口发送消息
                                  "{\"role\": \"user\", \"content\": \""+ message+"\"}]";//发送的消息

            // 构建请求体
            string requestBody = "{\"messages\": " + conversation + ", \"max_tokens\": 1024, " +//max_tokens 是收到消息的字节长度 一个token是四个字节 maxtoken越长收到的消息就越长
                                 "\"model\": \"gpt-3.5-turbo\"}";  // 设置使用的模型引擎

            StartCoroutine(AsyncSendMessageToChatGPT(requestBody));
            Debug.Log("发送:"+ message);
        }

		private IEnumerator AsyncSendMessageToChatGPT(string message)
        {
            byte[] data = Encoding.UTF8.GetBytes(message);
            using(UnityWebRequest www = new UnityWebRequest(apiUrl, "POST"))
            {
                www.uploadHandler = new UploadHandlerRaw(data);//设置上传的数据是字符数组
                www.downloadHandler = new DownloadHandlerBuffer();
                www.SetRequestHeader("Content-Type", "application/json");
                www.SetRequestHeader("Authorization", "Bearer " + apiKey);

                yield return www.SendWebRequest();
                if (www.result != UnityWebRequest.Result.Success)
                {
                    Debug.LogError("Protocol Error: " + www.error);
                    Debug.LogError("Error Response: " + www.downloadHandler.text);
                    Debug.LogError("发送的消息失败,请重新创建链接,需要全局科学上网哦"+ www.result);
                }
                else
                {
                    string receive = www.downloadHandler.text;
                    Debug.Log(receive);//输出收到的所有Json信息
                    ChatGPTJsonObjec chatGPTJsonObjec = JsonUtility.FromJson<ChatGPTJsonObjec>(receive);
                    //chatGPTJsonObjec.choices[0].message.content  这个就是你收到的回复
                    Debug.Log("收到的回复:"+chatGPTJsonObjec.choices[0].message.content);
                }
            }
            
        }

    }
#region JsonData
public class ChatGPTJsonObjec
{
    public string id;
    public string @object;
    public string created;
    public string model;
    public Choices[] choices;
    public Usage usage;
}
[System.Serializable]
public class Choices
{
    public float index;
    public Message message;
    public string finish_reason;
}
[System.Serializable]
public class Message
{
    public string role;
    public string content;
}
[System.Serializable]
public class Usage
{
    public int prompt_tokens;
    public int completion_tokens;
    public int total_tokens;
}
#endregion

实现效果

unity中如何实现chatgpt聊天机器人,chatgpt

 

小结

能一本正经地回答一些呆瓜问题,挺好玩的,聊得越多越了解你,经过一定训练能当游戏的NPC。文章来源地址https://www.toymoban.com/news/detail-831832.html

到了这里,关于Unity接入ChatGPT实现NPC聊天的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何实现一款接入chatGPT的智能音箱

    现有的一些“智能音箱”如某度和某猫精灵,跟现在的chatGPT比显得智障。如果能有一款接入chatGPT的智能音箱,它的交互性就好多啦。有gpt加持的智能音箱绝对会很强,以下提供探讨下实现思路。 目前智能音箱在语音交互层面依然不够成熟,正如雷科技此前撰写《ChatGPT该给语

    2024年02月01日
    浏览(42)
  • 在unity中如何使用chatGPT让虚拟IP动起来

    1、导入chatGpt 解决AI智能回答 请根据上一篇文章进行导入:如何使用ChatGPT在unity中进行低代码快速开发?_向视科技,让您看见未来(nbhctec)的博客-CSDN博客 2、文本也有转换工具 可导入unity 插件-RT-Voice PRO  2.2 其他三方的 TTS 技术方案: 微软 Azure 文本转语音: 文本转语音 –

    2024年02月09日
    浏览(24)
  • Unity+chatgpt+webgl实现声音录制+语音识别

            AI二次元女友这个项目持续更新,在window端的语音识别和语音合成的功能,在上一篇博文里已经详细说明了微软Azure语音服务的代码实现。也是为了实现一次代码,多端复用这样的诉求,所以全部的代码实现都改成了web api的方式。然而在实测发布到webgl的时候,就发现

    2024年02月16日
    浏览(46)
  • Unity之如何接入google cardboard-xr-plugin实现android手机VR

    我们提到VR,总是会想到Oculus,HTC Vive,Pico等头戴VR设备,但是别忘了,最早Google就通过再手机端实现VR了,而且还推出过Cardboard手机盒子,让我们可以用最低的成本体验到VR效果。 先说明一下,Unity在1028版本之前,支持过GoogleVR,但是后来因为统一OpenXR标准之后,放弃了对G

    2024年02月07日
    浏览(41)
  • 基于Springboot+Openai SDK搭建属于自己的ChatGPT3.5 Ai聊天知识库,已接入Stable Diffusion绘图Api

    花费二个多月查阅资料与前后端开发,终于完成了我的开源项目HugAi聊天知识库。项目是基于Springboot+vue2集成了OpenAi SDK开发的一套智能AI知识库,已接入ChatGpt3.5接口以及openai的绘图接口,前后端代码都开源。 支持上下文功能 会话记录持久化 sse流式响应 后台可配置的场景对话

    2024年02月05日
    浏览(48)
  • Python如何接入ChatGPT

    ChatGPT现在越来越火,许多小伙伴都不知道如何去使用,或者没有梯子/国外手机号注册,Pycharm中可以安装nexchatgpt来使用,给有需要的小伙伴门做参考。 ChatGPT是一种基于GPT模型的聊天机器人,可以与人类进行自然语言交互,回答问题或通过对话提供有用的信息。它使用深度学

    2023年04月09日
    浏览(34)
  • 如何与ChatGPT愉快地聊天

    原文链接:https://mp.weixin.qq.com/s/ui-O4CnT_W51_zqW4krtcQ 人工智能的发展已经走到了一个新的阶段,在这个阶段,人工智能可以像人一样与我们进行深度的文本交互。其中,OpenAI的ChatGPT是一个具有代表性的模型。然而,要实现愉快有效地与ChatGPT交互,我们需要理解在人机交互与人际

    2024年02月12日
    浏览(27)
  • ChatGPT 微信机器人原理解析(一):如何接入 ChatGPT API

    本文在 3 月 29 日首发于我的“职场圈”知识星球: 本文是 ChatGPT 微信机器人的第三篇付费文章。之前的两篇付费文章为: 手把手带你搭建 ChatGPT 微信机器人! 把 ChatGPT 微信机器人一键部署到免费服务器! 后续的付费文章包括但不限于: ChatGPT 微信机器人背后的原理解析

    2024年02月11日
    浏览(61)
  • ChatGPT聊天机器人如何发图片????

    问题一、怎么让聊天机器人ChatGPT回复你一张图片? 有问题可以在评论区留言。

    2024年02月11日
    浏览(52)
  • OpenAI最新官方ChatGPT聊天插件接口《接入插件快速开始》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(二)(附源码)

    ChatGPT正在经历着一次革命性的改变,随着越来越多的小程序和第三方插件的引入,ChatGPT将变得更加强大、灵活和自由。这些插件不仅能够让用户实现更多更复杂的AI任务和目标,还会带来类似国内微信小程序般的疯狂,为用户和开发者带来更多惊喜和创新。 想象一下,当您

    2024年02月04日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包