当前位置: 首页 > article >正文

unity调用本地部署deepseek全流程

unity调用本地部署deepseek全流程

deepseek本地部署

  • 安装Ollama
    搜索并打开Ollama官网[Ollama](https://ollama.com/download)

    点击Download下载对应版本

    下载后点击直接安装

  • 安装deepseek大语言模型

    官网选择Models

    选择deepseek-r1,选择对应的模型,复制对应的命令

    打开cmd,输入命名启动下载。下载完后便可以简单进行聊天了。

  • 启动Ollama服务

    cmd输入ollama serve命令启动服务

    如果无法启动,可以尝试退出ollama后重启

    常用的Ollama命令

    命令说明
    ollama run <模型名> # 例如:ollama run llama2下载并运行模型
    ollama pull <模型名> # 例如:ollama pull mistral仅下载模型不运行
    ollama list查看已安装的模型列表
    ollama rm <模型名> # 例如:ollama rm llama2删除本地模型
    ollama cp <原模型名> <新模型名>复制模型
    ollama create <自定义模型名> -f ./Modelfile自定义模型执行构建命令
    ollama push <自定义模型名>推送自定义模型到仓库
    ollama serve启动 Ollama 服务器
    Ctrl+C 终止进程,或结束相关后台服务。停止服务器

unity调用

调用地址默认为:http://127.0.0.1:11434/api/chat

核心代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEngine.Networking;

public class LocalDeepSeek : MonoBehaviour
{
   
      string  url = "http://127.0.0.1:11434/api/chat";
    /// <summary>
    /// 缓存对话
    /// </summary>
    [SerializeField] public List<SendData> m_DataList = new List<SendData>();

    /// <summary>
    /// api key
    /// </summary>
    [SerializeField] private string api_key;
    /// <summary>
    /// AI设定
    /// </summary>
    public string m_SystemSetting = string.Empty;
    /// <summary>
    /// 模型名称
    /// </summary>
    public string m_ModelName = "deepseek-r1:7b";//使用本地安装的模型

    private void Start()
    {
        //运行时,添加AI设定
        m_DataList.Add(new SendData("system", m_SystemSetting));
    }

    / <summary>
    / 发送消息
    / </summary>
    / <returns></returns>
    public void PostMsg(string _msg, Action<string> _callback)
    {
        //缓存发送的信息列表
        m_DataList.Add(new SendData("user", _msg));

        StartCoroutine(Request(_callback));
    }

    /// <summary>
    /// 调用接口
    /// </summary>
    /// <param name="_postWord"></param>
    /// <param name="_callback"></param>
    /// <returns></returns>
    public  IEnumerator Request(System.Action<string> _callback)
    {
      
        using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
        {
            Debug.Log("url:" + url);
            Debug.Log("m_ModelName:" + m_ModelName);
            PostData _postData = new PostData
            {
                model = m_ModelName,
                messages = m_DataList,
                stream = false
            };

            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");
            if (!string.IsNullOrEmpty(api_key))
            {
                request.SetRequestHeader("Authorization", string.Format("Bearer {0}", api_key));
            }


            yield return request.SendWebRequest();

            if (request.responseCode == 200)
            {
                string _msgBack = request.downloadHandler.text;
                Debug.Log(_msgBack);
                MessageBack2 _textback = JsonUtility.FromJson<MessageBack2>(_msgBack);

                string _backMsg = _textback.message.content;

                // 使用正则表达式提取
                Match match = Regex.Match(_backMsg, @"</think>\n\n(.*?)$", RegexOptions.Singleline);
                if (match.Success)
                {
                    string extractedText = match.Groups[1].Value.Trim();
                    _backMsg = extractedText;
                }
                Debug.Log(_msgBack);
                m_DataList.Add(new SendData("assistant", _backMsg));
                _callback(_backMsg);//返回接收的消息
           
            }
            else
            {
                string _msgBack = request.downloadHandler.text;
                Debug.LogError(_msgBack);
            }

          
        }
    }

    #region 数据包

    [Serializable]
    public class PostData
    {
        public string model;
        public List<SendData> messages;
        public bool stream = false;
    }


    [Serializable]
    public class MessageBack
    {
        public string id;
        public string created;
        public string model;
        public List<MessageBody> choices;
    }
    [Serializable]
    public class MessageBack2
    {
        public string model;
        public string created;
        public Message message;
    }
    [Serializable]
    public class MessageBody
    {
        public Message message;
        public string finish_reason;
        public string index;
    }
    [Serializable]
    public class Message
    {
        public string role;
        public string content;
    }
    [Serializable]
    public class SendData
    {
        [SerializeField] public string role;
        [SerializeField] public string content;
        public SendData() { }
        public SendData(string _role, string _content)
        {
            role = _role;
            content = _content;
        }
    }
    #endregion
}


http://www.kler.cn/a/574559.html

相关文章:

  • 函数扩展【ES6】
  • Manus AI 全球首款通用型 Agent,中国制造
  • 极狐GitLab 17.9 正式发布,40+ DevSecOps 重点功能解读【一】
  • MATLAB中startsWith函数用法
  • 面试基础---Redis 延迟队列深度解析
  • ssm_mysql_暖心家装平台
  • 华为OD机试-Excel单元格数值统计(Java 2024 E卷 200分)
  • Mybatis中的分页操作,如何使用PageHelper进行分页,以及Spring Boot整合Mybatis Plus分页
  • SpringBoot读取类路径下文件
  • 【DeepSeek】5分钟快速实现本地化部署教程
  • 【经验分享】Ubuntu20.04编译RK3568 AI模型报错问题(已解决)
  • Java TCP 通信:实现简单的 Echo 服务器与客户端
  • 单片机最小系统原理图设计
  • 【芯片设计】AI偏车载芯片前端设计工程师面试记录·20250304
  • Linux网络编程——TCP并行服务器
  • Swagger UI界面的使用
  • Ae 效果详解:VR 球面到平面
  • 【解决问题】conda 虚拟环境内,`pip list` 展示全局的包
  • 通往 AI 之路:Python 机器学习入门-机器学习基本概念
  • redis 过期键删除策略与回收策略