Unity 接入本地部署的DeepSeek
接入本地部署的DeepSeek🌵
- 🍱本地部署DeepSeek
- 🍝 API 调用
🍱本地部署DeepSeek
参考这里👈
🍝 API 调用
向Ollama发送post请求,接收结果。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;
using Newtonsoft.Json;
using System.Linq;
namespace ZYF
{
public class DeepSeek : MonoBehaviour
{
public class Response {
public string model;
public string created_at;
public string response;
public bool done;
}
public static DeepSeek Instance;
[SerializeField]
private string baseUrl = "http://localhost:11434/api/generate";
[SerializeField]
private string model= "deepseek-r1:7b";
[SerializeField]
private string prefix = "推测下下面内容的真实表达内容后再回答,并且回答不要带特殊字符:";
public UnityEvent<string> onGetResponseEvent = new UnityEvent<string>();
[SerializeField]
private string currentRequestContent;
private void Awake()
{
Instance = this;
}
internal void Request(string content)
{
this.currentRequestContent = $"{prefix}{content}";
StopRequest();
StartCoroutine(nameof(SendPostRequest));
}
public void StopRequest()
{
StopCoroutine(nameof(SendPostRequest));
Debug.Log($"取消请求");
}
private IEnumerator SendPostRequest()
{
var data = new{model=this.model,prompt=currentRequestContent};
var json = JsonConvert.SerializeObject(data);
Debug.Log(json);
UnityWebRequest request = UnityWebRequest.Post(uri:baseUrl,postData: json, contentType: "application/json");
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
var res = request.downloadHandler.text;
res = ToJsonData(res);
var datas = JsonConvert.DeserializeObject<List<Response>>(res);
if (datas != null)
{
var result = GetResponseContent(datas);
result = RemoveThinkContents(result);
onGetResponseEvent?.Invoke(result);
}
}
else {
Debug.LogError($"request error:{request.error}",gameObject);
}
}
private string ToJsonData(string res)
{
res = res.Replace("}", "},");
res = res.Substring(0, res.Length - 1);
res = $"[{res}]";
Debug.Log(res);
return res;
}
private string GetResponseContent(List<Response> datas)
{
var result = datas.Where(d => d.done == false).Select(d => d.response).Aggregate((current, next) => current + next);
Debug.Log(result);
return result;
}
private string RemoveThinkContents(string content)
{
int tIndex = content.LastIndexOf("</think>") + 8;
content = content.Substring(tIndex);
content = content.Trim();
Debug.Log($"去掉think内容:{content}");
return content;
}
}
}