Unity 智能语音助手

Unity智能语音聊天机器人

在本篇文章中,使用了百度的语音识别、语音合成、智能对话Unit的功能,制作成了一款简易的聊天机器人,在开始做之前呢,需要确定需要实现的核心功能,有以下几点:
(1)实现人机文字聊天
(2)实现人机语音聊天
(3)语音聊天记录播放
(4)文字聊天与语音聊天切换

创建UI界面

在这里插入图片描述

核心代码

一、人机文字聊天

chatDialog.onEndEdit.AddListener(delegate{if (chatDialog != null){if (chatDialog.text.Equals("")){return;}chat.AddChatMessage( ChatUI.enumChatMessageType.MessageRight, chatDialog.text);//自己的聊天UI界面Unit_NLP(chatDialog.text);JsonDecode(result);}});
 /// <summary>/// NLP的人工智能对话功能/// </summary>/// <param name="mysay"></param>/// <param name="session_id"></param>/// <param name="action_id"></param>public void Unit_NLP(string mysay, string session_id = "", string action_id = ""){string token = accessToken;string host = "https://aip.baidubce.com/rpc/2.0/unit/service/chat?access_token=" + token;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);request.Method = "post";request.ContentType = "application/json";request.KeepAlive = true;JsonData send = new JsonData();send["version"] = "2.0";send["service_id"] = "S27034";send["log_id"] = "home";send["session_id"] = "home";send["action_id"] = "1017002";send["request"] = new JsonData();send["request"]["user_id"] = "88888";send["request"]["query"] = mysay;send["request"]["query_info"] = new JsonData();send["request"]["query_info"]["type"] = "TEXT";JsonData bot_session = new JsonData();bot_session["session_id"] = "";send["bot_session"] = JsonMapper.ToJson(bot_session);string sendStr = JsonMapper.ToJson(send);byte[] buffer = Encoding.UTF8.GetBytes(sendStr);request.ContentLength = buffer.Length;request.GetRequestStream().Write(buffer, 0, buffer.Length);HttpWebResponse response = (HttpWebResponse)request.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);result = reader.ReadToEnd();}
 /// <summary>/// 对NLP的回复进行Json解析/// </summary>/// <param name="js"></param>/// <returns></returns>public List<string> JsonDecode(string js){List<string> Says = new List<string>();var json = SimpleJson.SimpleJson.DeserializeObject<SimpleJson.JsonObject>(js);if (json.ContainsKey("result")){var result = (SimpleJson.JsonObject)json["result"];if (result.ContainsKey("response_list")){var resArray = (SimpleJson.JsonArray)result["response_list"];var res = (SimpleJson.JsonObject)resArray[0];if (res.ContainsKey("action_list")){var actArray = (SimpleJson.JsonArray)res["action_list"];var act = (SimpleJson.JsonObject)actArray[0];if (act.ContainsKey("say")){var say = (string)act["say"];if (!isChooseSpeech){chat.AddChatMessage(ChatUI.enumChatMessageType.MessageLeft,say);}else{StartCoroutine(StratTTS(say, s =>{robotclipDic.Add(robotindex,s.clip);robotindex++;chat.AddChatMessage(ChatUI.enumChatMessageType.MessageLeft);tts_source.clip = s.clip;tts_source.Play();}));}Says.Add(say);}}}}return Says;}

二、人机语音聊天

/// <summary>/// 开始录音/// </summary>public void StartRecord(){saveAudioClip = Microphone.Start(currentDeviceName, false, recordMaxTime, recordFrequency);}/// <summary>/// 结束录音/// </summary>public void EndRecord(){Microphone.End(currentDeviceName);myclipDic.Add(myindex, saveAudioClip);myindex++;//source.PlayOneShot(saveAudioClip);StartCoroutine(RequestASR());//请求语音识别}/// <summary>/// 请求语音识别/// </summary>/// <returns></returns>public IEnumerator RequestASR(){if (string.IsNullOrEmpty(accessToken)){yield return _GetAccessToken();}resulrStr = string.Empty;//处理当前录音数据为PCM16float[] samples = new float[recordFrequency * 10 * saveAudioClip.channels];saveAudioClip.GetData(samples, 0);var samplesShort = new short[samples.Length];for (var index = 0; index < samples.Length; index++){samplesShort[index] = (short)(samples[index] * short.MaxValue);}byte[] datas = new byte[samplesShort.Length * 2];Buffer.BlockCopy(samplesShort, 0, datas, 0, datas.Length);string url = string.Format("{0}?cuid={1}&token={2}", "https://vop.baidu.com/server_api", SystemInfo.deviceUniqueIdentifier, accessToken);WWWForm wwwForm = new WWWForm();wwwForm.AddBinaryData("audio", datas);UnityWebRequest unityWebRequest = UnityWebRequest.Post(url, wwwForm);unityWebRequest.SetRequestHeader("Content-Type", "audio/pcm;rate=" + recordFrequency);yield return unityWebRequest.SendWebRequest();if (string.IsNullOrEmpty(unityWebRequest.error)){resulrStr = unityWebRequest.downloadHandler.text;if (Regex.IsMatch(resulrStr, @"err_msg.:.success")){Match match = Regex.Match(resulrStr, "result.:..(.*?)..]");if (match.Success){resulrStr = match.Groups[1].ToString();//语音识别的结果Unit_NLP(resulrStr);JsonDecode(result);}}else{resulrStr = "识别结果为空";}}}/// <summary>/// 返回的语音合成结果/// </summary>[System.Serializable]public class TtsResponse{public int error_index;public string error_msg;public string sn;public int idx;public bool Success{get { return error_index == 0; }}public AudioClip clip;}/// <summary>/// 请求语音合成/// </summary>/// <param name="text"></param>/// <param name="callback"></param>/// <returns></returns>public IEnumerator StratTTS(string text, Action<TtsResponse> callback){var url = "http://tsn.baidu.com/text2audio";var param = new Dictionary<string, string>();param.Add("tex", text);param.Add("tok", accessToken);param.Add("cuid", SystemInfo.deviceUniqueIdentifier);param.Add("ctp", "1");param.Add("lan", "zh");param.Add("spd", "5");param.Add("pit", "5");param.Add("vol", "10");param.Add("per", "1");
#if UNITY_STANDALONE || UNITY_EDITOR || UNITY_UWPparam.Add("aue", "6"); //Windows设置为wav格式,移动端需要mp3格式
#endifint i = 0;foreach (var p in param){url += i != 0 ? "&" : "?";url += p.Key + "=" + p.Value;i++;}
#if UNITY_STANDALONE || UNITY_EDITOR || UNITY_UWP  //根据不同平台,获取不同类型的音频格式var www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.WAV);
#elsevar www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.MPEG);
#endifDebug.Log("[WitBaiduAip]" + www.url);yield return www.SendWebRequest();if (www.isHttpError || www.isNetworkError)Debug.LogError(www.error);else{var type = www.GetResponseHeader("Content-Type");Debug.Log("[WitBaiduAip]response type: " + type);if (type.Contains("audio")){var response = new TtsResponse { clip = DownloadHandlerAudioClip.GetContent(www) };callback(response);}else{var textBytes = www.downloadHandler.data;var errorText = Encoding.UTF8.GetString(textBytes);}}}

三、语音聊天记录播放

//发送录音保存字典public int myindex=0;public Dictionary<int, AudioClip> myclipDic = new Dictionary<int, AudioClip>();//收到录音保存字典public int robotindex = 0;public Dictionary<int, AudioClip> robotclipDic = new Dictionary<int, AudioClip>();
oid Start(){index = UnitManager.instance.myindex;source = GameObject.Find("Canvas/robot").GetComponent<AudioSource>();Litsen_btn = transform.GetComponent<Button>();Litsen_btn.onClick.AddListener(() => {if (MessageType.Equals("myself")){GetValueByKey(UnitManager.instance.myclipDic, index - 1);}else if (MessageType.Equals("robot")){GetValueByKey(UnitManager.instance.robotclipDic, index - 1);}});}public void GetValueByKey(Dictionary<int, AudioClip> dic, int key){AudioClip clip = null;dic.TryGetValue(key, out clip);source.clip = clip;source.Play();}

通篇代码

using LitJson;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class UnitManager : MonoBehaviour
{public static UnitManager instance;private void Awake(){instance = this;}public string api_key;public string secret_key;string accessToken = string.Empty;InputField chatDialog;Button speechToggle; //选择当前发送信息的类型(语音或者文字)public ChatUI chat; //聊天界面public bool isChooseSpeech = false; //判断当前的发送信息类型状态//语音识别模块string resulrStr = string.Empty;int recordFrequency = 8000;AudioClip saveAudioClip; //存储语音string currentDeviceName = string.Empty; //当前录音设备名称AudioSource source;int recordMaxTime=20;public Sprite[] _sp;public GameObject speechButton;//NLPAudioSource tts_source;string result=string.Empty;//发送录音保存字典public int myindex=0;public Dictionary<int, AudioClip> myclipDic = new Dictionary<int, AudioClip>();//收到录音保存字典public int robotindex = 0;public Dictionary<int, AudioClip> robotclipDic = new Dictionary<int, AudioClip>();void Start(){StartCoroutine(_GetAccessToken());chat = GameObject.Find("Canvas/ChatUI").GetComponent<ChatUI>();chatDialog = GameObject.Find("Canvas/ChatUI/InputArea/InputField").GetComponent<InputField>();speechToggle= GameObject.Find("Canvas/ChatUI/speechToggle").GetComponent<Button>();tts_source = GameObject.Find("Canvas/ChatUI/speechToggle").GetComponent<AudioSource>();source = transform.GetComponent<AudioSource>();chatDialog.onEndEdit.AddListener(delegate{if (chatDialog != null){if (chatDialog.text.Equals("")){return;}chat.AddChatMessage( ChatUI.enumChatMessageType.MessageRight, chatDialog.text);//自己的聊天UI界面Unit_NLP(chatDialog.text);JsonDecode(result);}});speechToggle.onClick.AddListener(ToChangeSpeechToggle);}/// <summary>/// 当前处于发语音还是文字,如果是语音则AI回复语音,如果是文字则AI回复文字/// </summary>void ToChangeSpeechToggle(){if (!this.isChooseSpeech){this.isChooseSpeech = true;speechToggle.GetComponent<Image>().sprite = _sp[0];speechButton.SetActive(true);}else{this.isChooseSpeech = false;speechToggle.GetComponent<Image>().sprite = _sp[1];speechButton.SetActive(false);}}/// <summary>/// 开始录音/// </summary>public void StartRecord(){saveAudioClip = Microphone.Start(currentDeviceName, false, recordMaxTime, recordFrequency);}/// <summary>/// 结束录音/// </summary>public void EndRecord(){Microphone.End(currentDeviceName);myclipDic.Add(myindex, saveAudioClip);myindex++;//source.PlayOneShot(saveAudioClip);StartCoroutine(RequestASR());//请求语音识别}/// <summary>/// 请求语音识别/// </summary>/// <returns></returns>public IEnumerator RequestASR(){if (string.IsNullOrEmpty(accessToken)){yield return _GetAccessToken();}resulrStr = string.Empty;//处理当前录音数据为PCM16float[] samples = new float[recordFrequency * 10 * saveAudioClip.channels];saveAudioClip.GetData(samples, 0);var samplesShort = new short[samples.Length];for (var index = 0; index < samples.Length; index++){samplesShort[index] = (short)(samples[index] * short.MaxValue);}byte[] datas = new byte[samplesShort.Length * 2];Buffer.BlockCopy(samplesShort, 0, datas, 0, datas.Length);string url = string.Format("{0}?cuid={1}&token={2}", "https://vop.baidu.com/server_api", SystemInfo.deviceUniqueIdentifier, accessToken);WWWForm wwwForm = new WWWForm();wwwForm.AddBinaryData("audio", datas);UnityWebRequest unityWebRequest = UnityWebRequest.Post(url, wwwForm);unityWebRequest.SetRequestHeader("Content-Type", "audio/pcm;rate=" + recordFrequency);yield return unityWebRequest.SendWebRequest();if (string.IsNullOrEmpty(unityWebRequest.error)){resulrStr = unityWebRequest.downloadHandler.text;if (Regex.IsMatch(resulrStr, @"err_msg.:.success")){Match match = Regex.Match(resulrStr, "result.:..(.*?)..]");if (match.Success){resulrStr = match.Groups[1].ToString();//语音识别的结果Unit_NLP(resulrStr);JsonDecode(result);}}else{resulrStr = "识别结果为空";}}}/// <summary>/// 返回的语音合成结果/// </summary>[System.Serializable]public class TtsResponse{public int error_index;public string error_msg;public string sn;public int idx;public bool Success{get { return error_index == 0; }}public AudioClip clip;}/// <summary>/// 请求语音合成/// </summary>/// <param name="text"></param>/// <param name="callback"></param>/// <returns></returns>public IEnumerator StratTTS(string text, Action<TtsResponse> callback){var url = "http://tsn.baidu.com/text2audio";var param = new Dictionary<string, string>();param.Add("tex", text);param.Add("tok", accessToken);param.Add("cuid", SystemInfo.deviceUniqueIdentifier);param.Add("ctp", "1");param.Add("lan", "zh");param.Add("spd", "5");param.Add("pit", "5");param.Add("vol", "10");param.Add("per", "1");
#if UNITY_STANDALONE || UNITY_EDITOR || UNITY_UWPparam.Add("aue", "6"); //Windows设置为wav格式,移动端需要mp3格式
#endifint i = 0;foreach (var p in param){url += i != 0 ? "&" : "?";url += p.Key + "=" + p.Value;i++;}
#if UNITY_STANDALONE || UNITY_EDITOR || UNITY_UWP  //根据不同平台,获取不同类型的音频格式var www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.WAV);
#elsevar www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.MPEG);
#endifDebug.Log("[WitBaiduAip]" + www.url);yield return www.SendWebRequest();if (www.isHttpError || www.isNetworkError)Debug.LogError(www.error);else{var type = www.GetResponseHeader("Content-Type");Debug.Log("[WitBaiduAip]response type: " + type);if (type.Contains("audio")){var response = new TtsResponse { clip = DownloadHandlerAudioClip.GetContent(www) };callback(response);}else{var textBytes = www.downloadHandler.data;var errorText = Encoding.UTF8.GetString(textBytes);}}}/// <summary>/// NLP的人工智能对话功能/// </summary>/// <param name="mysay"></param>/// <param name="session_id"></param>/// <param name="action_id"></param>public void Unit_NLP(string mysay, string session_id = "", string action_id = ""){string token = accessToken;string host = "https://aip.baidubce.com/rpc/2.0/unit/service/chat?access_token=" + token;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);request.Method = "post";request.ContentType = "application/json";request.KeepAlive = true;JsonData send = new JsonData();send["version"] = "2.0";send["service_id"] = "S27034";send["log_id"] = "home";send["session_id"] = "home";send["action_id"] = "1017002";send["request"] = new JsonData();send["request"]["user_id"] = "88888";send["request"]["query"] = mysay;send["request"]["query_info"] = new JsonData();send["request"]["query_info"]["type"] = "TEXT";JsonData bot_session = new JsonData();bot_session["session_id"] = "";send["bot_session"] = JsonMapper.ToJson(bot_session);string sendStr = JsonMapper.ToJson(send);byte[] buffer = Encoding.UTF8.GetBytes(sendStr);request.ContentLength = buffer.Length;request.GetRequestStream().Write(buffer, 0, buffer.Length);HttpWebResponse response = (HttpWebResponse)request.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);result = reader.ReadToEnd();}/// <summary>/// 对NLP的回复进行Json解析/// </summary>/// <param name="js"></param>/// <returns></returns>public List<string> JsonDecode(string js){List<string> Says = new List<string>();var json = SimpleJson.SimpleJson.DeserializeObject<SimpleJson.JsonObject>(js);if (json.ContainsKey("result")){var result = (SimpleJson.JsonObject)json["result"];if (result.ContainsKey("response_list")){var resArray = (SimpleJson.JsonArray)result["response_list"];var res = (SimpleJson.JsonObject)resArray[0];if (res.ContainsKey("action_list")){var actArray = (SimpleJson.JsonArray)res["action_list"];var act = (SimpleJson.JsonObject)actArray[0];if (act.ContainsKey("say")){var say = (string)act["say"];if (!isChooseSpeech){chat.AddChatMessage(ChatUI.enumChatMessageType.MessageLeft,say);}else{StartCoroutine(StratTTS(say, s =>{robotclipDic.Add(robotindex,s.clip);robotindex++;chat.AddChatMessage(ChatUI.enumChatMessageType.MessageLeft);tts_source.clip = s.clip;tts_source.Play();}));}Says.Add(say);}}}}return Says;}/// <summary>/// 获取accessToken请求令牌/// </summary>/// <returns></returns>IEnumerator _GetAccessToken(){var uri =string.Format("https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id={0}&client_secret={1}",api_key, secret_key);UnityWebRequest unityWebRequest = UnityWebRequest.Get(uri);yield return unityWebRequest.SendWebRequest();if (unityWebRequest.isDone){Match match = Regex.Match(unityWebRequest.downloadHandler.text, @"access_token.:.(.*?).,");if (match.Success){Debug.Log("Token已经匹配");accessToken = match.Groups[1].ToString();}else{Debug.Log("验证错误,获取AccessToken失败!!!");}}}
}

演示效果

发送文字:
在这里插入图片描述
发送语音:
(因为语音播放演示不了,所以就打个样吧)
在这里插入图片描述
结尾,希望能与对这方面感兴趣的兄弟姐妹一起探讨,有需要源码做项目的也可以私聊。技术有限,现在是在Windows平台上实现了简易智能语音聊天机器人的基本功能,各方面的细节还有待优化,本篇结束啦,希望明天会更好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34857.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PointNetGPD代码复现

0、安装分析 ps.应该安装pcl1.9tk8.1。这个导致后面python-pcl改了配置 Ubuntu版本pcl版本vtk版本18.041.9.18.2.0 1、pcl1.9安装 1.1 安装依赖 sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get install cmake cmake-gui su…

【goframe】(2)实现上下文原理,在chatgpt中,经过折腾研究,要做好上下文需要把之前的信息都存储上,再一起发送过去就可以了

目录 前言1&#xff0c;关于chatgpt api 接口2&#xff0c;增加上下文方法3&#xff0c;总结 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/129846766 未经博主允许不得转载。 博主CSDN地址是&#xff1a;https://blog.csdn.net/freewebsys 博主…

chatgpt赋能python:Python中的with语句:简化上下文管理器的使用

Python中的with语句&#xff1a;简化上下文管理器的使用 在Python中&#xff0c;上下文管理器&#xff08;context managers&#xff09;用于处理在程序执行中打开和关闭文件、线程锁、数据库连接等资源的操作。一个上下文管理器需要定义__enter__和__exit__两个方法&#xff…

chatgpt赋能python:Python爬虫获取商品数据的方法

Python爬虫获取商品数据的方法 在当今的电商时代&#xff0c;获取商品数据是非常重要的一项工作。而使用Python编写爬虫程序则是实现这一目标的有效手段之一。 什么是Python爬虫&#xff1f; 简而言之&#xff0c;Python爬虫是指利用Python编写程序&#xff0c;对特定网站进…

chatgpt赋能python:Python爬取聊天记录:如何轻松获取数据并进行分析?

Python爬取聊天记录&#xff1a;如何轻松获取数据并进行分析&#xff1f; 在当今数字化时代&#xff0c;人们越来越依赖于网络交流。社交媒体和通讯应用程序如今非常流行&#xff0c;它们让人们随时随地与家人、朋友和同事保持联系。这些应用程序产生了大量聊天记录数据&#…

最新53家央企数字化转型路线图发布

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 中央企业是我国经济高质量发展的主力军、实体经济的顶梁柱&#xff0c;在推进两化融合和数字化转型中发挥着战略性支撑作用。 信…

甲醇,中国新能源汽车的另一种可能

贾浩楠 发自 凹非寺量子位 | 公众号 QbitAI 滚滚浓烟、刺鼻气味…煤化工产业给你的印象是这样吗&#xff1f; 颠覆认知的是&#xff0c;如今煤化工企业&#xff0c;不但可以做到低排放&#xff0c;废气还能重新产出新的能源。 焦化炉出来的废气&#xff0c;直接送进这些设备&am…

英伟达,不止于GPU

光子盒研究院 2013年至2023年这十年&#xff0c;有一家公司的市值翻了115倍、一跃成为美国股市回报率最高的公司——这就是英伟达。 黄仁勋出生于中国台湾&#xff0c;四岁随父母移民美国。1984年大学毕业&#xff0c;获得俄勒冈州立大学和斯坦福大学工程学位。 1993年&#xf…

TCP/IP IP地址概念与应用

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.什么是IP地址 二.IP地址的组成 三.IP地址分类 A类IP地址 …

精仿某信即时通讯聊天安卓苹果双端APP源码11月更新版

源码介绍&#xff1a; 此源码之前发布过&#xff0c;现在更新了很多细节。更新如下&#xff1a; 手机端使用uniapp实现&#xff0c;目前最新支持 端安卓、 iOS端和H5端&#xff0c; 后期会继续适配小程序端、桌面端&#xff08;windows、mac&#xff09;和web端。 前端使用…

IOS模型和TCP/IP参考模型

一、OSI参考模型---开放系统互连参考模式OSI/RM ISO---国际标准化组织 &#xff08;1&#xff09;产生背景 各大厂商之间的设备是不兼容的&#xff1b; 各大厂商都有自己的协议&#xff1b; 用户购买、维护设备的成本过高 应用层&#xff1a; 为应用程序提供网络服务 表示…

【IP Phone】网络杂谈(5)之什么是IP Phone?

涉及知识点 什么是 IP Phone&#xff0c;IP Phone简介&#xff0c;网络电话&#xff0c;IP电话的理解&#xff0c; IP Phone的基本原理。深入了解IP Phone关键技术。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多内容可去其主页关注下哈&#xff0c;不胜感…

IP数据包(详解版)

1.IP数据包详解图 2&#xff0c;使用Wireshark抓包 &#xff08;1&#xff09;版本——占4位&#xff0c;指IP协议的版本目前的IP协议版本号为4&#xff08;即IPv4&#xff09;。 &#xff08;2&#xff09;首部长度——占4位&#xff0c;这里的值为20Bytes。 &#xff08;3&am…

即时通讯开发之TCP/IP基本概念

在世界上各地&#xff0c;各种各样的电脑运行着各自不同的操作系统为大家服务&#xff0c;这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱 了各地人的口音&#xff0c;让他们无法合作一样。计算机使用者意识到&#xff0c;计算机只是单兵作战并不…

zg-ipchat 点对点聊天工具 1.00.05 已发布

pchat 点对点聊天工具 1.00.05 已发布。 zg-ipchat 是一款聊天工具。可实现简单的文本信息传输&#xff0c;无加密。 点对点直接通讯&#xff0c;无需中间服务器&#xff0c;支持 Pv6/IPv4 网络。 基于已公开的 IP Messenger 协议。使用"朋友清单"来区分好友与陌生人…

文心一言和new bing chat哪个强

我用夸克网盘分享了「fiddler汉化」&#xff0c;点击链接即可保存。 链接&#xff1a;https://pan.quark.cn/s/115f1b81c029 【AIGC专栏】 https://fzqxk86ywz.feishu.cn/sheets/GugIsI9zKhNaEwtJscbcgKFCn6b 【测试资料1.0】 https://fzqxk86ywz.feishu.cn/share/base/view/…

一文谈谈文心一言对比ChatGPT4.0的差距

对于想体验文心一言的朋友,可以进行申请尝试,快速入口 如果想体验ChatGPT的朋友,可以自行fq注册;但是由于现在限制注册并且不稳定,对于不会用梯子不想注册的朋友可以使用这个进行访问,快速入口 关于ChatGPT对我们的帮助,可以参考我往期博客 看到一篇国金证券的研报,…

和ChatGPT关于Swing music的一场对话(上篇)

什么是 Swing Music &#xff1f; Swing Music 是一款漂亮的自托管音乐播放器&#xff0c;适用于您的本地音频文件。就像一个更酷的 Spotify …但带上你自己的音乐。 第一次在 reddit 上看到 Swing Music&#xff0c;就被其 UI 吸引了 但源码站点的releases 中只有 windows 和 …

chatgpt赋能python:Python怎么搜索文献

Python怎么搜索文献 Python 是一种流行的编程语言&#xff0c;因其便捷易用、拥有丰富的自然语言处理工具、以及大量可靠的第三方包而闻名。Python不仅在数据分析、机器学习和Web开发等领域都具有广泛的应用&#xff0c;而且也在学术界和研究领域受到欢迎。本文将告诉你Python…

chatgpt赋能python:Introduction

Introduction 在机器学习中&#xff0c;模型的训练是非常重要的步骤之一。模型训练意味着为数据拟合合适的参数&#xff0c;以便能够准确地预测未来的值。Python是一种功能强大的编程语言&#xff0c;提供许多库和框架来训练机器学习模型。在本文中&#xff0c;我们将探讨如何…