自由学习记录(42)

可能会出现到后面没有教程可以看,走不动,,但还是尝试吧

过程远比想象的要多

那连Live2d的这些脚本怎么控制的都要了解一下

------------

文件类型和扩展名 | 编辑手册 | Live2D Manuals & Tutorials

全部导入之后

在这下载SDK

Live2D Cubism SDK とは | Live2D Cubism

将 Live2D 模型导入 Unity

Live2D 模型通常包含以下文件:

  • .model3.json:模型的配置文件。

  • .moc3:模型的骨骼文件。

  • .texture:模型的纹理文件(通常是 .png)。

  • .physics3.json:物理配置文件(可选)。

  • .motion3.json:动画文件(可选)。

确保你下载的 Live2D 模型文件包含以上内容。

Cubism SDK 是什么?

Cubism SDK 是 Live2D 官方提供的开发工具包,包含以下内容:

  • Cubism Core:Live2D 的核心库,用于解析和渲染 Live2D 模型。

  • Cubism Native/Web Framework:用于在不同平台上集成 Live2D 模型的框架。

  • Cubism Unity SDK:专门为 Unity 开发者提供的工具包,用于在 Unity 中加载和运行 Live2D 模型。

Live2D示例数据集 (可免费下载) | Live2D Cubism

那意思是说还有一个“SDK”

-----------

  • 数据保护UnityWebRequest 封装了底层网络通信的细节,开发者不需要直接操作字节流或套接字。

  • 简化开发:通过 uploadHandler 和 downloadHandler,开发者可以更方便地设置请求体和处理响应。

  • 跨平台支持UnityWebRequest 在 Unity 支持的各个平台(如 Windows、macOS、Android、iOS 等)上都能正常工作。

UnityWebRequest 并不是直接发送给服务器的数据,而是一个包装器,它包含了以下核心组件:

  • uploadHandler:用于设置请求体(即发送给服务器的数据)。

  • downloadHandler:用于接收服务器返回的响应数据。

  • SetRequestHeader:用于设置请求头。

  • SendWebRequest:用于发送请求并等待响应。

服务器最终接收的是 UnityWebRequest 中封装的数据(如请求体、请求头等),而不是 UnityWebRequest 类本身。

UnityWebRequest 类在 Unity 中是一个封装了 HTTP 请求和响应的工具类,它的主要作用是对底层网络通信的抽象和封装,使得开发者可以更方便地发送 HTTP 请求和处理响应。

请求体:这里是要发送的内容,实际发给服务端的是Request,Request里装的内容,类型需要是byte数组(

所以后面有

这里是按照服务端的要求格式,定义了可以传的匿名类

里面的数据 按服务器格式来写

  • system:用于设置 AI 的行为或角色。例如,content 可以是 "You are a helpful assistant.",表示让 AI 扮演一个有帮助的助手。

  • user:用户输入的内容。例如,content 可以是 "Hello!",表示用户向 AI 打招呼。

  • assistant:AI 的回复。通常不需要在请求中手动设置,而是由 API 返回。

  • 如果设置为 true,API 会以流式传输的方式逐步返回响应(适用于需要实时显示结果的场景)。

  • 如果设置为 false,API 会一次性返回完整的响应(适用于不需要实时显示的场景)。

var requestData = new
        {
            model = "deepseek-chat",
            messages = new[]
            {
                new { role = "system", content = "" },
                new { role = "user", content = "" }
            },
            stream = false
        };

--------------

using System;
using Newtonsoft.Json;

[Serializable]
public class ChatCompletionResponse
{
    public string id;
    public string @object;
    public long created;
    public string model;
    public Choice[] choices;
    public Usage usage;
    public string system_fingerprint;
}

[Serializable]
public class Choice
{
    public int index;
    public Message message;
    public object logprobs; // 可以是 null
    public string finish_reason;
}

[Serializable]
public class Message
{
    public string role;
    public string content;
}

[Serializable]
public class Usage
{
    public int prompt_tokens;
    public int completion_tokens;
    public int total_tokens;
    public PromptTokensDetails prompt_tokens_details;
    public int prompt_cache_hit_tokens;
    public int prompt_cache_miss_tokens;
}

[Serializable]
public class PromptTokensDetails
{
    public int cached_tokens;
}

流程大致是知道了,传请求给了服务端了,然后需要有类来装信息

-----------

响应字段解析

  • id:请求的唯一标识符。

  • object:返回的对象类型,这里是 chat.completion

  • created:响应生成的时间戳。

  • model:使用的模型名称,这里是 deepseek-chat

  • choices:生成的回复内容。

    • index:回复的索引(通常为 0)。

    • message:回复的具体内容。

      • role:角色,这里是 assistant

      • content:回复的文本内容。

    • logprobs:日志概率(通常为 null)。

    • finish_reason:回复结束的原因,这里是 stop

  • usage:请求的 token 使用情况。

    • prompt_tokens:输入提示的 token 数量。

    • completion_tokens:生成回复的 token 数量。

    • total_tokens:总 token 数量。

    • prompt_tokens_details:输入提示的 token 详情。

      • cached_tokens:缓存的 token 数量。

    • prompt_cache_hit_tokens:缓存命中的 token 数量。

    • prompt_cache_miss_tokens:缓存未命中的 token 数量。

  • system_fingerprint:系统的唯一标识符。

装上了插件后,把这个脚本挂到游戏物体上,成功返回了结果打印

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using Newtonsoft.Json;
using System.Text;

public class DeepSeekAPI : MonoBehaviour
{
    // DeepSeek API 的 URL
    private string url = "https://api.deepseek.com/chat/completions";

    // 你的 DeepSeek API Key
    private string apiKey = "你的API KEY";

    void Start()
    {
        // 启动发送请求的协程
        StartCoroutine(SendRequest());
    }

    IEnumerator SendRequest()
    {
        // 请求的 JSON 数据
        var requestData = new
        {
            model = "deepseek-chat",
            messages = new[]
            {
                new { role = "system", content = "You are a helpful assistant." },
                new { role = "user", content = "Hello!" }
            },
            stream = false
        };

        // 使用 Newtonsoft.Json 序列化 JSON 数据
        string jsonContent = JsonConvert.SerializeObject(requestData);

        // 创建 UnityWebRequest
        using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
        {
            // 设置请求头
            request.SetRequestHeader("Content-Type", "application/json");
            request.SetRequestHeader("Authorization", $"Bearer {apiKey}");

            // 设置请求体
            byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonContent);
            request.uploadHandler = new UploadHandlerRaw(bodyRaw);
            request.downloadHandler = new DownloadHandlerBuffer();

            // 发送请求并等待响应
            yield return request.SendWebRequest();

            // 检查是否有错误
            if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError)
            {
                Debug.LogError("Error: " + request.error);
                Debug.LogError("Response: " + request.downloadHandler.text);
            }
            else
            {
                // 输出响应结果
                Debug.Log("Response: " + request.downloadHandler.text);
            }
        }
    }
}

Newtonsoft.Json(正确转数据格式)

手动下载并导入 Newtonsoft.Json.dll

步骤:
  1. 下载 Newtonsoft.Json.dll

    • 访问 Newtonsoft.Json NuGet 页面。

    • 下载最新版本的 .nupkg 文件(例如 Newtonsoft.Json.13.0.3.nupkg)。

    • 将 .nupkg 文件后缀改为 .zip,然后解压缩。

    • 在解压后的文件夹中找到 lib/netstandard2.0/Newtonsoft.Json.dll

  2. 将 DLL 文件导入 Unity:

    • 在 Unity 项目中,创建一个 Plugins 文件夹(如果不存在)。

    • 将 Newtonsoft.Json.dll 文件拖入 Plugins 文件夹中。

----------

API Key 安全性

不要在代码中硬编码 API Key,建议使用 Unity 的 PlayerPrefs 或从外部配置文件加载。

------------------

curl 是一个命令行工具,用于通过多种协议(如 HTTP、HTTPS、FTP 等)传输数据。它常用于发送 HTTP 请求并获取响应。

基本用法

GET 请求:默认情况下,curl 发送 GET 请求。

curl https://example.com

POST 请求:使用 -X POST 选项发送 POST 请求,并通过 -d 传递数据。

curl -X POST -d "param1=value1&param2=value2" https://example.com

设置请求头:使用 -H 选项添加请求头。

curl -H "Content-Type: application/json" https://example.com

用终端进行命令传输也可以,这个接口的服务请求

什么是API?DeepSeek技巧升级2.0~_哔哩哔哩_bilibili

接口

首次调用 API | DeepSeek API Docs

看国外的还是门槛太高了,又是政策限制,又是语言的描述,还有版本问题,,讨论的圈子小,,这哪顶得住

还是老实先拿deepseek实验一下吧

AICommand的Unity版本问题

解决方法,把报错的Post方法

换成 

    using var post = new UnityWebRequest(OpenAI.Api.Url, "POST");
    // 设置请求体
    var bodyRaw = System.Text.Encoding.UTF8.GetBytes(CreateChatRequestBody(prompt));
    post.uploadHandler = new UploadHandlerRaw(bodyRaw);
    post.downloadHandler = new DownloadHandlerBuffer();
    // 设置请求头
    post.SetRequestHeader("Content-Type", "application/json");
    post.SetRequestHeader("Authorization", "Bearer " + settings.apiKey);

 ---版本差异

2021
using var post = new UnityWebRequest(url, "POST");
var bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonData);
post.uploadHandler = new UploadHandlerRaw(bodyRaw);
post.downloadHandler = new DownloadHandlerBuffer();
post.SetRequestHeader("Content-Type", "application/json");
post.SetRequestHeader("Authorization", "Bearer " + apiKey);
2022
using var post = UnityWebRequest.Post(url, jsonData, "application/json");
post.SetRequestHeader("Authorization", "Bearer " + apiKey);

为什么Unity 2021需要更多步骤?

  • 历史原因:Unity 2021的UnityWebRequest API设计较早,功能较为基础,没有考虑到复杂的POST请求场景。

  • 灵活性:手动设置请求体和请求头虽然繁琐,但也提供了更大的灵活性,可以适应各种自定义需求。

  • 改进:Unity 2022对API进行了优化,使其更符合现代开发需求,减少了开发者的工作量。

请求体和请求头的设置差异

Unity 2021

在Unity 2021中,如果你需要发送JSON数据,必须手动完成以下步骤:

  1. 创建UnityWebRequest对象

    using var post = new UnityWebRequest(url, "POST");
  2. 设置请求体

    • 将JSON字符串转换为字节数组

    • 使用UploadHandlerRaw将字节数组设置为请求体

    var bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonData);
    post.uploadHandler = new UploadHandlerRaw(bodyRaw);
  3. 设置请求头

    • 手动设置Content-Typeapplication/json

    • 手动设置Authorization头(如果需要)。

    post.SetRequestHeader("Content-Type", "application/json");
    post.SetRequestHeader("Authorization", "Bearer " + apiKey);
  4. 设置下载处理器

    post.downloadHandler = new DownloadHandlerBuffer();
Unity 2022

在Unity 2022中,这些步骤被大大简化:

  1. 直接使用UnityWebRequest.Post

    using var post = UnityWebRequest.Post(url, jsonData, "application/json");
  2. 设置请求头(如果需要):

    post.SetRequestHeader("Authorization", "Bearer " + apiKey);
  3. 不需要手动设置UploadHandlerRawDownloadHandlerBuffer,因为这些已经由UnityWebRequest.Post内部处理。

因为Unity2022版本,UnityWebReqeust更新了方法,

在23年的版本,这里还可以写别的类型的

Toolbox的Project Setting

网络知识

怎么防止 MITM 攻击?

如果你不想让自己的 HTTPS 连接被代理服务器劫持,可以采取以下措施:

🔹 (1) 检查网站证书

  • 当你访问 https://example.com 时,点击浏览器的“锁”图标,检查证书是否是官方颁发的。
  • 如果证书是未知机构颁发的,说明可能存在 MITM 代理!

🔹 (2) 启用 HSTS(HTTP 严格传输安全)

  • HSTS 让网站强制使用 HTTPS,并防止客户端接受伪造的证书。

🔹 (3) 使用 VPN

  • VPN 加密了你和 VPN 服务器之间的所有通信,即使有人在网络上使用 MITM 代理,也看不到你的实际数据。

合法用途

  1. 公司网络监控

    • 公司可以在员工的电脑上安装“受信任的”证书,让员工的所有 HTTPS 访问都经过 MITM 代理
    • 这样,公司可以监控员工访问的网站内容(比如是否在上班时间刷 YouTube)。
  2. 安全测试

    • 安全研究人员可以用 MITM 代理检查网络通信,看看应用程序是否安全(比如某个APP是否会偷偷上传你的数据)。

非法用途

  1. 黑客攻击

    • 恶意 WiFi 热点可能会使用 MITM 代理,拦截你登录银行、社交媒体时的加密数据,盗取密码。
  2. 政府审查

    • 一些国家可能会使用 MITM 代理来监视公民的网络活动,即使使用了 HTTPS 也无法完全保护隐私。

中间人代理(MITM Proxy)是怎么破解 HTTPS 的?

因为 HTTPS 是加密的,代理服务器默认无法读取数据。但是,中间人代理(MITM Proxy) 采用了一种特殊的“欺骗”手法,绕过了这个限制。

MITM 代理如何破解 HTTPS?

  1. 伪造一个假的 HTTPS 证书

    • 代理服务器自己创建一个“假的”SSL证书,冒充你访问的网站(如 example.com)。
    • 你的电脑本来应该直接和 example.com 建立加密连接,但现在会误以为代理服务器就是 example.com
  2. 代理服务器建立两条连接

    • 第一条连接:你的电脑 → 代理服务器(这个连接使用伪造的 HTTPS 证书)
    • 第二条连接:代理服务器 → 目标网站(真实的 example.com
  3. 代理服务器解密你的数据

    • 你的浏览器“信任”了伪造的证书,并和代理服务器建立了加密连接。
    • 代理服务器可以解密你发送的所有数据,然后再用真实的 HTTPS 连接把数据转发给 example.com
    • 这样,代理服务器就在中间**“偷看”**了你和目标网站之间的所有加密数据。

简单的类比

  • 你本来要寄一封加密信件给朋友(example.com)。
  • 但是,代理服务器伪造了一个假的朋友身份,让你把信寄给它。
  • 代理服务器拆开信封,看完里面的内容,然后再重新封装,寄给真正的朋友。
  • 朋友收到信后,完全不知道中间有人偷偷看过

透明代理 vs. 匿名代理

代理服务器可以根据是否暴露用户真实 IP 来分类:

类型描述是否隐藏 IP
透明代理(Transparent Proxy)只是转发请求,不隐藏 IP,目标服务器仍然能看到客户端的真实 IP
匿名代理(Anonymous Proxy)代理服务器会隐藏客户端的 IP,但目标服务器可能知道请求来自代理
高匿名代理(Elite Proxy)代理服务器不仅隐藏 IP,还会让目标服务器认为请求是直接来自真实用户✅✅

应用场景

  • 透明代理:用于公司/学校内部网络,用户可能不知道自己在使用代理
  • 匿名代理:用于隐藏用户身份,如浏览受限网站。
  • 高匿名代理:用于规避封锁,如 Tor 网络的出口节点。

为什么普通代理无法直接读取 HTTPS 数据?

假设你访问的是 HTTP 网站(比如 http://example.com):

  • 代理服务器可以直接看到所有的请求内容,比如:
    • 你访问了哪个网页?
    • 你提交了什么表单?
    • 你下载了什么文件?

但如果你访问的是 HTTPS 网站(比如 https://example.com),情况就不同了:

  • HTTPS 数据是加密的,所以代理服务器 看不到你发送的具体内容,只能看到:
    • 你访问了哪个网站(example.com
    • 但看不到你访问的具体页面或数据

这就好比:

  • HTTP 是一个透明的信封,代理服务器可以看到里面的信件内容。
  • HTTPS 是一个密封的信封,代理服务器只能看到信封的外观(目的地),但看不到里面的内容。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

结构型模式---享元模式

概念 享元模式是一种结构型设计模式,他摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让你能在有限的内存容量中载入更多对象。享元模式将原始类中的数据分为内在状态数据和外在状态数据。 内在状态:就…

[内网安全] Windows 本地认证 — NTLM 哈希和 LM 哈希

关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:SAM 文件 & Windows 本地认证流程 0x0101:SAM 文件简介 Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的,在登录 Windows 的时候&am…

类和对象—多态—案例2—制作饮品

案例描述: 制作饮品的大致流程为:煮水-冲泡-倒入杯中-加入辅料 利用多态技术实现本案例,提供抽象制作产品基类,提供子类制作咖啡和茶叶 思路解析: 1. 定义抽象基类 - 创建 AbstractDrinking 抽象类,该类…

YOLOv12本地部署教程——42%速度提升,让高效目标检测触手可及

YOLOv12 是“你只看一次”(You Only Look Once, YOLO)系列的最新版本,于 2025 年 2 月发布。它引入了注意力机制,提升了检测精度,同时保持了高效的实时性能。在保持速度的同时,显著提升了检测精度。例如&am…

SpringBoot3—场景整合:AOT

一、AOT与JIT AOT:Ahead-of-Time(提前编译):程序执行前,全部被编译成机器码 JIT:Just in Time(即时编译): 程序边编译,边运行; 编译:源代码&am…

*VulnHub-FristiLeaks:1.3暴力解法、细节解法,主打软硬都吃,隧道搭建、寻找exp、提权、只要你想没有做不到的姿势

*VulnHub-FristiLeaks:1.3暴力解法、细节解法,主打软硬都吃,隧道搭建、寻找exp、提权、只要你想没有做不到的姿势 一、信息收集 1、扫靶机ip 经典第一步,扫一下靶机ip arp-scan -l 扫描同网段 nmap -sP 192.168.122.0/242、指纹扫描、端口…

20242817李臻《Linux⾼级编程实践》第二周

一、AI对学习内容的总结 第2章 Linux编程环境总结 1. GCC编译器 GCC(GNU Compiler Collection)是GNU项目的一部分,支持多种编程语言,包括C、C、Java、Fortran、Ada等。编译过程:GCC将源程序转换为可执行程序的过程包…

vue3 组合式API:插槽

一、内容与出口 1、<slot> 元素是一个插槽出口 (slot outlet)&#xff0c;标示了父元素提供的插槽内容 (slot content) 将在哪里被渲染。插槽内容可以是任意合法的模板内容&#xff0c;不局限于文本&#xff0c;可以是多个元素&#xff0c;甚至是组件 // 插槽内容可以是…

【音视频】ffplay播放控制

一、ffplay播放控制 1.1、ffplay打开视频 比如我当前目录下现在有一个1.mp4的视频&#xff0c;可以使用下面的命令用ffplay打开并播放它 ffplay 1.mp4输入后回车即可打开相应的视频 1.2 ffplay播放控制 使用q、ESC退出播放按f、双击切换全屏状态按m切换为静音按9减少音量&a…

K8S高可用集群-小白学习之二进制部署(ansible+shell)

一.K8S高可用集群配置概述 序言:本文从一个小白的视角进行K8S的研究和部署,采用二进制的方式是为了更清楚了分解部署流程及了解这个集群是怎么运作的,加上ansible+shell是方便在这个过程中,遇到了问题,我们可以不断的快速重复部署来测试和研究问题的所在点,本文的架构图…

K8S学习之基础十六:k8s中Deployment更新策略

滚动更新 滚动更新是一种自动化程度较高的发布方式、用户体验比较平滑、是目前成熟型技术组织采用的主流发布方式&#xff0c;一次滚动发布一般有若干发布批次组成&#xff0c;每批的数量一般都是可配置的&#xff0c;可通过发布模板定义&#xff0c;例如第一批10%&#xff0c…

dify + ollama + deepseek-r1+ stable-diffusion 构建绘画智能体

故事背景 stable-diffusion 集成进 dify 后&#xff0c;我们搭建一个小智能体&#xff0c;验证下文生图功能 业务流程 #mermaid-svg-6nSwwp69eMizP6bt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6nSwwp69eMiz…

如何使用 LLM 生成的术语自动在搜索应用程序上构建 autocomplete 功能

作者&#xff1a;来自 Elastic Michael Supangkat 了解如何在 Elastic Cloud 中&#xff0c;通过使用 LLM 生成的词汇&#xff0c;为搜索应用增强自动补全功能&#xff0c;实现更智能、更动态的搜索建议。 自动补全是搜索应用中的一项关键功能&#xff0c;它通过在用户输入时实…

AI学习有感

和前辈聊天&#xff0c;谈到了现在的ai技术&#xff0c;这里对那天的谈话进行总结&#xff1a; AI是无状态的 我们在使用ai时有时候会有一个错觉&#xff0c;认为和ai聊天久了&#xff0c;ai就会像人与人之间交流一样&#xff0c;会保留一种对聊天对象的认知状态&#xff0c;这…

Java 8 Stream API 详解

目录 引言 一、Stream 简介 1.1 什么是 Stream&#xff1f; 1.2 Stream 与集合的区别 1.3 Stream 的操作分类 二、Stream 的创建 2.1 从集合创建 2.2 从数组创建 2.3 使用 Stream.of 创建 2.4 使用 Stream.generate 或 Stream.iterate 创建 三、Stream 的常…

Ubuntu20.04本地配置IsaacLab 4.2.0的G1训练环境(一)

Ubuntu20.04本地配置IsaacLab的G1训练环境&#xff08;一&#xff09; 配置Omniverse环境配置IsaacSim配置IsaacLab 写在前面&#xff0c;如果Ubuntu剩余空间低于60G&#xff0c;则空间不足&#xff0c;除非你不需要资产包。但资产包中却包含了G1模型、Go2模型等机器人模型和代…

从厨电模范到数字先锋,看永洪科技如何助力方太集团开启数字新征程

在数字化洪流席卷全球的宏大背景下&#xff0c;企业转型升级的紧迫性与重要性日益凸显&#xff0c;成为驱动行业进步的关键引擎。在这一波澜壮阔的转型浪潮中&#xff0c;方太集团——厨电领域的璀璨明珠&#xff0c;以其前瞻性的战略视野和不懈的创新精神&#xff0c;携手数据…

蓝桥杯4T平台(串口打印电压值)

知识点&#xff1a;串口(单片机发送数据)按键ADC 题目 配置 代码 adc.c uint16_t getadc2(void) {uint16_t adc0;HAL_ADC_Start(&hadc2);adcHAL_ADC_GetValue(&hadc2);return adc; } adc.h uint16_t getadc2(void); main.c #include "lcd.h" #include…

[Computer Vision]实验七:图像检索

目录 一、实验内容 二、实验过程 2.1 准备数据集 2.2 SIFT特征提取 2.3 学习“视觉词典”&#xff08;vision vocabulary&#xff09; 2.4 建立图像索引并保存到数据库中 2.5 用一幅图像查询 三、实验小结 一、实验内容 实现基于颜色直方图、bag of word等方法的以图搜…

利用 ArcGIS Pro 快速统计省域各市道路长度的实操指南

在地理信息分析与处理的工作中&#xff0c;ArcGIS Pro 是一款功能强大的 GIS 软件&#xff0c;它能够帮助我们高效地完成各种复杂的空间数据分析任务。 现在&#xff0c;就让我们一起深入学习如何借助 ArcGIS Pro 来统计省下面各市的道路长度&#xff0c;这一技能在城市规划、…