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

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
}

相关文章:

  • 【AI深度学习网络】卷积神经网络(CNN)入门指南:从生物启发的原理到现代架构演进
  • 【leetcode hot 100 41】缺失的第一个整数
  • 可狱可囚的爬虫系列课程 16:爬虫重试机制
  • PySide(PyQT)的视图(QGraphicsView)范例(二) 功能规划
  • 系统架构师----中间件技术
  • docker本地部署ollama
  • 快速熟悉JavaScript
  • 机器学习基础——数值计算
  • 【一步解决】docker国内pull失败,镜像源
  • leetcode麻烦又易忘记题目
  • es如何进行refresh?
  • 利用python实现对Excel文件中数据元组的自定义排序
  • 错误: 加载主类时出现 LinkageError,java.lang.UnsupportedClassVersionError 解决方案
  • MLT媒体程序框架03:滤镜——loudness
  • 蓝桥杯 之 前缀和与查分
  • 智谱AI-大模型调用
  • Linux的缓存I/O和无缓存IO
  • 前端监控体系搭建
  • 游戏树搜索与优化策略:Alpha-Beta剪枝及其实例分析
  • DeepSeek×博云AIOS:突破算力桎梏,开启AI普惠新纪元
  • 电影网站怎么做不犯法/做网页设计的软件
  • 做展馆好的设计网站/西安百度网站快速优化
  • 真人视频发牌网站开发/广州网络运营课程培训班
  • 企业网络规划与设计方案/网络seo优化
  • 工作站做网站/网站优化怎么操作
  • 常德网络建站/江西优化中心