不同的服务器可以使用不同协议,但协议本身不会决定服务器的类型
类型 | 特点 |
---|---|
物理服务器 | 真实的计算机(如 Dell、HP 服务器) |
虚拟服务器 | 运行在云计算平台上的 VM(如 AWS EC2、阿里云 ECS) |
容器化服务器 | 通过 Docker / Kubernetes 运行多个轻量级服务 |
不同协议可以在同一服务器上运行,或者分布在不同服务器上:
协议 | 用途 | 常见服务器 |
---|---|---|
HTTP / HTTPS | Web 访问 | Nginx、Apache、IIS |
FTP / SFTP | 文件传输 | vsftpd、FileZilla Server |
SMTP / IMAP / POP3 | 邮件通信 | Postfix、Dovecot |
SSH | 远程登录 | OpenSSH |
WebSocket | 实时通信 | Socket.IO、SignalR |
服务器类型 | 作用 | 常见软件 |
---|---|---|
Web 服务器 | 处理 HTTP/HTTPS 请求,提供网页 | Nginx、Apache、IIS |
数据库服务器 | 存储和管理数据 | MySQL、PostgreSQL、MongoDB |
应用服务器 | 运行业务逻辑,如 API | Tomcat、Node.js、Django |
文件服务器 | 提供文件存储和访问 | Samba、FTP 服务器 |
邮件服务器 | 发送和接收邮件 | Postfix、Exim、Microsoft Exchange |
- HTTP(不加密)和 HTTPS(加密)都是基于 TCP/IP 的 应用层协议
- Web 服务器(如 Nginx、Apache、IIS)可以同时支持 HTTP 和 HTTPS
- 如果服务器配置了 SSL 证书,就可以使用 HTTPS
- 如果没有 SSL 证书,只能使用 HTTP
http
自定义handler类,自己在里面处理数据
texture也是一样的
这里的File子类型就是直接下载文件,不用再转成二进制数组来使用
DownloadHandler存在多个可以不同处理返回的数据的子类封装
- 有
await
→async Task
- 没有
await
→ 直接Task
写法 | 用法 | 是否推荐 |
---|---|---|
public Task<int> GetNumber() { return Task.FromResult(42); } | 直接返回 Task | ✅ 推荐(更高效) |
public async Task<int> GetNumberAsync() { await Task.Delay(1000); return 42; } | 需要 await 异步等待 | ✅ 推荐 |
public async Task<int> GetNumber() { return Task.FromResult(42); } | async 没发挥作用 | 🚨 不推荐 |
async
让方法可以使用 await
关键字
async
本身不会让方法变异步,它只是告诉编译器:
- 这个方法 可能 包含异步操作
- 这个方法的返回值 一定要是
Task
/Task<T>
或void
类型 | 返回值类型 | await 作用 | 示例 |
---|---|---|---|
Task | 无返回值 | 等待任务完成 | await SomeMethodAsync(); |
Task<T> | 返回 T | 等待任务完成,并获取 T 结果 | string result = await SomeMethodAsync(); |
ValueTask<T> | 返回 T | 比 Task<T> 轻量 | int value = await GetValueAsync(); |
在 C# 中,await
只能用于 Task
或 Task<T>
类型,因为 await
的作用是等待一个异步任务完成,然后获取返回值。
一段很错误的代码
async Task<IEnumerator> GetGPTStreamResponse(string userInput)
IEnumerator
和 async
方法 不能直接混用
async
方法不能返回 IEnumerator
,Coroutine
只支持 IEnumerator
async Task<IEnumerator>
并不符合 Unity 的 Coroutine
要求
--------------
await
确保 HTTP 请求完成(但不会等待完整响应体)。HttpCompletionOption.ResponseHeadersRead
让HttpClient
只等 HTTP 头部,而不是整个响应(适用于流式数据)。
普通 PostAsync()
不会 立即返回数据,而是等服务器完全返回后才解析:
HttpResponseMessage response = await client.PostAsync(apiUrl, new StringContent(jsonData, Encoding.UTF8, "application/json"));
string responseBody = await response.Content.ReadAsStringAsync(); // ❌ 这里会卡住直到整个响应完成
关于请求体里的message
必须写的请求体
字段 | 作用 | 示例值 |
---|---|---|
model | 指定使用的 GPT 模型 | "gpt-4" |
messages | 聊天上下文(数组) | [{"role": "user", "content": "Hello"}] |
但在JSON 内写的数组的顺序是重要的:
{
"messages": [
{"role": "user", "content": "Hello"},
{"role": "assistant", "content": "Hi! How can I help you?"}
]
}
{
"messages": [
{"role": "assistant", "content": "Hi! How can I help you?"},
{"role": "user", "content": "Hello"}
]
}
❌ 这两个请求是不同的! OpenAI API 会按照数组的顺序解析 messages,所以调换 user 和 assistant 的顺序会影响对话上下文。
——————
HTTP 请求体(Body)或请求头(Headers)里,字段的前后顺序通常不影响请求的识别,
服务器是按字段名读取的,顺序无关(一些低级 HTTP 代理或老旧的 Web 服务器可能对 Headers 顺序敏感。,但极其少见)
API既会规定请求体里的内容,也会规定请求头里的内容
——
newtonsoft的匿名类写法实际上是借助c#的特殊写法,达到更直观的效果,处理成json字符串
——————
如果 HttpClient 发送的数据格式不对,比如:
少了 Content-Type: application/json
少了 Authorization: Bearer API_KEY
JSON 结构错误
OpenAI 服务器会返回:
{
"error": {
"message": "Invalid JSON",
"type": "invalid_request_error",
"code": 400
}
}
——————
如何保证 HttpClient 发送的格式是正确的?
✅ 1. 通过 OpenAI API 文档 确定请求格式
在 OpenAI API 文档里,规定了正确的请求格式:
{
"model": "gpt-4",
"messages": [{"role": "user", "content": "Hello"}],
"temperature": 0.7
}
你需要 自己确保 你的 JSON 完全符合这个格式,否则 OpenAI 服务器会返回错误。
---
✅ 2. 使用 Newtonsoft.Json 确保 JSON 序列化正确
C# 原始字符串拼接 JSON 容易出错,所以推荐用 Newtonsoft.Json 进行 序列化:
using Newtonsoft.Json;
var requestData = new
{
model = "gpt-4",
messages = new object[]
{
new { role = "user", content = "Hello!" }
},
temperature = 0.7
};
string jsonData = JsonConvert.SerializeObject(requestData);
这样生成的 JSON 一定是符合 OpenAI API 规则的,不会因为手动写错 JSON 而导致格式错误
——————
HttpClient 不会验证你构造的 JSON 是否符合 OpenAI API 的要求,它只是:
封装 HTTP 请求(处理 TCP 连接、HTTP 头、数据流)
发送你写的 JSON 数据
接收服务器的响应
The C# keyword readonly is used to declare fields that can only be assigned in the constructor or at declaration.
Example:
class Example
{
public readonly int MyValue; // Can only be set in the constructor
public Example(int value)
{
MyValue = value;
}
}
Impact: Used for immutability to prevent changes after initialization.
requireComponent
本来觉得ai toolbox是非常重要的插件,没有血亏,现在看来也就那样了
解析器(Parser)?
解析器(Parser)是一个将 JSON 格式的字符串转换为编程语言中的数据结构的程序或库(newtonsoftJson就是)。
解析的基本过程
- 原始 JSON 字符串(通常是从文件、网络请求或数据库中读取的):
"{ \"name\": \"Alice\", \"age\": 25, \"skills\": [\"C++\", \"Python\"] }"
解析器的作用
解析器会把 JSON 字符串解析成编程语言可用的数据结构,这样程序可以方便地访问、修改、存储这些数据。
语言 | 解析器库 | 解析后数据类型 |
---|---|---|
C# | Newtonsoft.Json ,System.Text.Json | Dictionary<string, object> ,List<T> ,自定义类 |
JavaScript | JSON.parse() | Object ,Array |
Python | json.loads() | dict ,list |
Java | Gson ,Jackson | Map<String, Object> ,自定义类 |
Go | encoding/json | map[string]interface{} ,结构体 |
using Newtonsoft.Json;
using System;
using System.Collections.Generic;class Program
{static void Main(){string json = "{ \"name\": \"Alice\", \"age\": 25 }";// 解析 JSON 字符串为 DictionaryDictionary<string, object> data = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);Console.WriteLine(data["name"]); // 输出: AliceConsole.WriteLine(data["age"]); // 输出: 25}
}
解析后,JSON 变成了 C# 的
Dictionary<string, object>
,可以随时访问 name、age 这些字段。
解析器是如何存储数据的?
解析器不会缓存 JSON,而是仅仅具有这种 JSON 转换为编程语言的内存数据结构(如对象、字典、列表等)的能力,没有被结构接下,则无用。
解析后的数据通常存储在:
- 内存(RAM) 中的 对象、字典、数组,可以随时访问。
- 缓存(Cache):如果手动存入 Redis、文件、数据库等,就可以缓存起来,方便后续读取。
示例:
// 解析 JSON 成 C# 类
class Person
{public string Name { get; set; }public int Age { get; set; }
}string json = "{ \"name\": \"Alice\", \"age\": 25 }";// 解析成 Person 对象
Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.Name); // Alice
Console.WriteLine(person.Age); // 25
这里
person
存在于 C# 内存,你可以随时访问person.Name
和person.Age
。默认情况下,
Newtonsoft.Json
解析 JSON 时,使用 大小写不敏感 的匹配规则。
-----
什么是达摩 ASR?
达摩 ASR 是阿里巴巴 达摩院 开发的一款 批量离线语音识别(ASR,Automatic Speech Recognition)工具,专门用于 高效、精准地转换音频到文本,特别适用于 中文语音 的大规模处理场景。
0a-UVR5 人声伴奏分离 & 去混响去延迟工具
1. 为什么叫 0a-UVR5?
这个名称主要来源于 UVR5(Ultimate Vocal Remover 5),它是一款开源的 人声伴奏分离工具。
- “0a” 可能是该工具的某个特殊版本或开发者的命名方式,但主功能仍然基于 UVR5 的 神经网络模型,用于从混音中提取人声或伴奏。
2. 混响是什么?为什么要去混响?
混响(Reverb) 是声音在封闭空间传播时,经过墙壁、地面、天花板等表面反射后产生的回声效果。
- 例如,在 浴室、体育馆、音乐厅 说话时,声音会持续一段时间,不会立即消失,这就是混响。
- 去混响(De-Reverb) 在 AI 语音处理中很重要,因为:
- 提高清晰度:消除不必要的回声,使声音更干净。
- 提升模型识别率:混响会干扰 TTS、语音识别(ASR)、变声 等 AI 任务,使其更难识别语音。
- 改善语音合成:让克隆出来的声音更自然、真实,而不是“带着房间回音”。
3. 为什么要去延迟?
在音频处理中,延迟(Latency) 通常指的是音频信号传输或处理过程中产生的时间滞后。
- 去延迟(De-Delay) 主要用于:
- 消除录音中的音频延迟:有些录音会因为麦克风或网络传输问题导致声音和原音轨不同步。
- 优化 AI 变声、TTS 处理:减少因 音频滞后 导致的发音不自然或不同步问题。
- 修复音频回声:如果声音经过多次反射,可能会有类似 回音(Echo) 的效果,去延迟可以减少这种影响。
SoVITS 由开源社区开发,在 Bilibili、GitHub 社区 非常流行,特别适用于 AI VTuber、AI 歌声合成。
AI 语音合成通常分为 两个主要部分:
- 文本 → 声学特征(文本分析 + 语音建模)
- 声学特征 → 波形(波形合成)
- 文本分析 → 解析语法,标记重音、韵律、停顿
- 音素转换 → 将文字转换成音素(如 "hello" → /hɛˈloʊ/)
- 语调、韵律预测 → 预测语音的起伏(高低音)
- 时长预测 → 计算每个音素的持续时间
AI 能模仿声音,是因为 人类的语音可以被数学化描述,主要涉及以下几个关键参数:
参数 | 作用 |
---|---|
音素 (Phoneme) | 语音的最小单位,比如英语的 /a/, /s/ |
语调 (Prosody, Pitch, F0) | 控制说话的高低起伏 |
音长 (Duration) | 语音的时长(慢速、快速) |
音色 (Timbre, Spectral Features) | 声音的独特性,决定声音是男、女、孩子 |
共振峰 (Formants) | 语音中的频谱特征,影响口音 |
语速 (Speaking Rate) | 说话的快慢 |
情感 (Emotion) | 控制语音的情感(开心、悲伤、愤怒等) |
现代 AI 语音合成 主要使用 音频采样 + 机器学习 来获取这些参数,并用 深度神经网络 生成新的语音。
要想想做完这个之后,我要做什么,,做完这些就去百度网盘里觅食,挑出重要的东西加深印象
现代 AI 语音合成(如 GPT-4 TTS、VITS、Tacotron、WaveNet)主要依赖 深度学习 和 信号处理,让计算机模仿人类的语音。
GPT接入unity中
是命名空间没有管理,所以出现了有冲突名的情况
----搞错了,是之前DeepseekAPI里我就已经生成了一次这些json接收类,冲突了我没注意
类型化后,取出Json格式下的Content
使用 Newtonsoft.Json
(推荐,适用于复杂JSON)
安装步骤
-
安装
Newtonsoft.Json
(JSON.NET)- Unity 2021+ 版本 已自带 Newtonsoft.Json,你可以直接
using Newtonsoft.Json;
- 如果没有,可以用 NuGet 或从 GitHub 下载 DLL。
- Unity 2021+ 版本 已自带 Newtonsoft.Json,你可以直接
JsonUtility
只能解析 简单的 JSON 结构,但 OpenAI API 的返回数据是 嵌套的 JSON,所以你需要创建多个 C# 类。
主要关心的是 choices[0].message.content
,这个字段里包含 GPT 的回复内容
终于连上了
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using System.Text;public class OpenAIClient : MonoBehaviour
{private string apiKey = "your-api-key"; // 你的 OpenAI API Keyprivate string apiUrl = "https://api.openai.com/v1/chat/completions";public void SendMessageToGPT(string userMessage){StartCoroutine(SendRequest(userMessage));}private IEnumerator SendRequest(string message){// 构造 JSON 请求体string requestBody = "{\"model\": \"gpt-4\", \"messages\": [{\"role\": \"user\", \"content\": \"" + message + "\"}]}";byte[] requestData = Encoding.UTF8.GetBytes(requestBody);// 创建 UnityWebRequestusing (UnityWebRequest request = new UnityWebRequest(apiUrl, "POST")){request.uploadHandler = new UploadHandlerRaw(requestData);request.downloadHandler = new DownloadHandlerBuffer();request.SetRequestHeader("Content-Type", "application/json");request.SetRequestHeader("Authorization", "Bearer " + apiKey);// 发送请求并等待响应yield return request.SendWebRequest();if (request.result == UnityWebRequest.Result.Success){Debug.Log("Response: " + request.downloadHandler.text);}else{Debug.LogError("Error: " + request.error);}}}
}
已经给GPT的API冲10美刀了,但问题还在(钱都冲了,今天不搞懂不行,damn)
如何关注unity store的打折信息
订阅Unity官方邮件
访问Unity Asset Store。
在页面底部找到“Subscribe”或“Newsletter”选项,输入邮箱订阅,及时收到促销信息。
Unity官方社交媒体
关注Unity的Twitter、Facebook等平台,官方会发布打折信息。
定期查看Asset Store
经常访问Asset Store,首页通常会展示打折活动。
第三方折扣追踪网站
使用第三方网站或论坛,如Reddit的Unity3D板块,获取打折信息。
https://www.youtube.com/watch?v=BLwcEMXtuGI了解一下素材购买
Asset deal for unity Asset Deals for Unity
--------
q,,原来野卡里可以买openAI的API
Ollama 是一个专注于提供本地化 AI 模型部署和管理的平台。它允许用户在本地环境中运行和自定义大型语言模型(LLMs),如 DeepSeek 和其他先进的 AI 模型。以下是 Ollama 的一些主要功能和用途:
-
本地部署:Ollama 支持在本地计算机上部署 AI 模型,这意味着用户可以在不依赖互联网连接的情况下使用这些模型。
-
隐私保护:由于模型和数据都在本地运行,Ollama 提供了更高的隐私和安全性,确保敏感信息不会被上传到云端。
-
自定义和扩展:用户可以根据自己的需求对模型进行自定义和扩展,例如添加特定的知识库或调整模型参数。
-
多模型支持:Ollama 支持多种 AI 模型,用户可以根据不同的任务选择最适合的模型。
-
开发者友好:Ollama 提供了丰富的 API 和工具,方便开发者集成和使用这些模型。
-
离线使用:通过 Ollama,用户可以在没有互联网连接的环境中继续使用 AI 模型,这对于某些特定场景(如远程工作或保密项目)非常有用。
扩展名为 Open I,由 Kingleo 开发。它的功能是在 VS Code 编辑器内打开一个 URL。安装这个扩展后,你可以直接在 VS Code 中打开并查看网页,而不需要切换到浏览器
在 DeepSeek 官网:这是DeepSeek官方提供的服务,运行在DeepSeek的服务器上,用户可以直接通过网页与我交互。
通过API Key调用的我:如果你使用自己的API Key调用我,这意味着你可能通过DeepSeek提供的API服务将我集成到你的应用程序或工具(如VSCode)中。这种情况下,请求会发送到DeepSeek的API服务器,但具体的实现方式(如响应速度、可用功能等)可能会根据API的配置和权限有所不同。
内置到VSCode的我:如果你通过插件或扩展将我集成到VSCode中,这可能是通过API调用实现的,也可能是本地化的部署(取决于插件的实现方式)。如果是通过API调用,那么请求仍然会发送到DeepSeek的服务器;如果是本地部署,则可能运行在你的本地环境中。
-
Top_p(Nucleus Sampling):
-
较低的值(如 0.1 到 0.5):生成文本会更加集中和确定,适合需要准确和一致输出的场景。
-
较高的值(如 0.7 到 1.0):生成文本会更加多样化和创造性,适合需要创意和变化的场景。
-
-
Top_k:
-
较低的值(如 10 到 50):生成文本会更加集中,模型只考虑概率最高的几个 token。
-
较高的值(如 100 到 500):生成文本会更加多样化,模型会考虑更多的 token。
-
-
Frequency_penalty:
-
较低的值(如 0.0 到 0.5):允许更多的重复,适合需要一致性和连贯性的文本。
-
较高的值(如 1.0 到 2.0):减少重复,使文本更加多样化,适合需要避免重复的场景。
-
DeepSeek API 中,Temperature 参数用于控制生成文本的随机性和创造性。这个参数的值范围通常在 0 到 2 之间,具体作用如下:
-
低温度值(接近 0):生成的文本会更加确定性和保守。模型倾向于选择概率最高的词,结果通常更加一致和可预测。适用于需要准确和确定性输出的场景。
-
高温度值(接近 2):生成的文本会更加随机和多样化。模型会更倾向于选择概率较低的词,结果可能更加创造性和不可预测。适用于需要创意和多样性的场景。
DeepSeek 的三个模型(Deepseek-Chat、Deepseek-Coder、Deepseek-Reasoner)是为了不同的应用场景和任务而设计的。每个模型都有其特定的功能和优势:
-
Deepseek-Chat:专注于自然语言对话和交互。它适用于需要高质量对话体验的场景,如客服、虚拟助手等。
-
Deepseek-Coder:专门用于代码生成和理解。它可以帮助开发者编写、调试和优化代码,适用于编程辅助工具和开发环境。
-
Deepseek-Reasoner:专注于逻辑推理和问题解决。它适用于需要复杂推理和分析的任务,如数学问题求解、逻辑谜题等。
想调用GPT,,果然还是太麻烦了,,效率太低了
-
生成式 AI
这是一类令人兴奋的新工具,可帮助您生成新内容。您可以用它快速制作艺术作品的变体、创建角色对话等等。
-
AI / ML 集成
这些集成充当 Unity 与 Open AI 等流行 AI 系统之间的中间桥梁。通过 SDK 访问不断增加的助手和工作流程加速器目录。
-
行为 AI
This is a group of tools to help you build simulated behavior for in-game non-player elements like characters and vehicles.
Deepseek回答里值得注意的一些工具,可以了解的
Unity生态系统中常用的AI工具和插件。
1.Unity自己的ML-Agents肯定是重点,用于机器学习和训练智能体。
2.第三方插件,比如A* Pathfinding Project,用于路径规划,虽然不是严格意义上的AI,但常被用于AI移动。
3.行为树插件,比如Behavior Designer,这在游戏AI中很常见。
4.对话系统,比如SALSA和Dialogue System for Unity,这些可能整合了AI生成对话的功能,特别是现在有生成式AI的兴起,可能会有集成ChatGPT之类的插件。
5.一些语音识别和处理的插件,比如CROSStalk,可能属于AI范畴。另外,Unity的Sentience插件,虽然不确定现在是否还在维护。可能还有第三方服务,比如OpenAI的API集成,用户自己写的插件或者Asset Store上的资源。
需要检查是否有新的插件出现,比如最近Unity和Meta的合作是否带来了一些新工具。还有,比如Replica Voice或者Inworld AI,这些专注于语音生成或NPC行为的插件。另外,像DeepSeek之类的AI创作工具是否支持Unity。
还要注意区分AI的不同应用,比如机器学习、路径寻找、自然语言处理、语音合成、行为树等,每个类别可能有不同的插件。同时,用户可能想知道是否有支持生成式AI的工具,比如集成GPT-3或Stable Diffusion的插件。
需要确认一些插件的名称是否正确,比如A* Pathfinding Project确实存在,Behavior Designer也是常用的。另外,Unity的Sentience可能已经被其他工具取代,或者是否还在活跃开发中。可能还需要提到一些云端AI服务,如AWS或Google AI的集成,但用户可能更关注Unity Asset Store中的插件。
总结一下,应该分几个类别:机器学习框架、路径寻找、行为树、对话与NPC、语音处理、生成式AI集成、第三方服务集成。每个类别下列举几个主要插件,并简要说明其用途和特点。同时提醒用户注意插件的兼容性和版本,因为Unity更新频繁,有些插件可能不支持最新版本。最后,建议用户根据具体需求选择合适的插件,并查看Asset Store的评价和文档。
---
现在再填充一些关于AI相关的功能应用,了解一些前沿的知识点,看看可不可以填进对话项目里
---
一种很好的提问方法,问具体的信息不一定可以精准快速地回复