Unity AI-使用Ollama本地大语言模型运行框架运行本地Deepseek等模型实现聊天对话(二)

发布于:2025-05-01 ⋅ 阅读:(24) ⋅ 点赞:(0)

一、使用介绍

官方网页:Ollama官方网址

中文文档参考:Ollama中文文档

相关教程:Ollama教程

使用版本:Unity 2022.3.53f1c1、Ollama 0.6.2

示例模型:llama3.2

二、运行示例

三、使用步骤

1、创建Canvas面板

具体层级如下

主要组件:发送按钮、输入框、滚动框

2、编写代码Webrequest

using System;
using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using Button = UnityEngine.UI.Button;

public class Webrequest : MonoBehaviour
{
    //curl http://localhost:11434/api/generate -H "Content-Type: application/json" -d "{ \"model\": \"llama3\", \"prompt\": \"你好\", \"stream\": false }"
    public Text text;
    public InputField input;
    public Button sendBtn;
    public ScrollRect scrollRect;

    void Start()
    {
        sendBtn.onClick.AddListener(OnSend);
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.KeypadEnter) || Input.GetKeyDown(KeyCode.Return))
        {
            OnSend();
        }

        scrollRect.content.sizeDelta = text.rectTransform.sizeDelta;
    }

    void OnSend()
    {
        if (input.text != "")
        {
            text.text += $"你:{input.text}\n\n";
            scrollRect.verticalScrollbar.value = -0.1f;
            StartCoroutine(SendOllamaRequest(input.text));
            input.text = "";
        }
        else
        {
            text.text += "不能为空\n\n";
            scrollRect.verticalScrollbar.value = -0.1f;
        }
    }

    IEnumerator SendOllamaRequest(string value)
    {
        // 目标 URL
        string url = "http://localhost:11434/api/generate";
        string jsonData = $@"
        {{
            ""model"": ""llama3.2"",
            ""prompt"": ""{value}"",
            ""stream"": false
        }}";
        // 创建 POST 请求
        UnityWebRequest request = new UnityWebRequest(url, "POST");
        byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonData);
        request.uploadHandler = new UploadHandlerRaw(bodyRaw);
        request.downloadHandler = new DownloadHandlerBuffer();

        // 设置请求头
        request.SetRequestHeader("Content-Type", "application/json"); 

        yield return request.SendWebRequest();

        // 处理响应
        if (request.result != UnityWebRequest.Result.Success)
        {
            Debug.LogError($"Error: {request.error}");
        }
        else
        {
            string responseJson = request.downloadHandler.text;
            Debug.Log("Response: " + responseJson);
            // 解析 JSON 响应(示例)
            OllamaResponse response = JsonUtility.FromJson<OllamaResponse>(responseJson);
            // 访问字段
            Debug.Log($"模型: {response.model}");
            Debug.Log($"回复: {response.response}");
            text.text += "智能体:" + response.response + "\n\n";
            Debug.Log($"生成耗时: {response.eval_duration / 1e12} 秒");
            scrollRect.verticalNormalizedPosition = -0.1f;
        }
    }
}

3、将代码拖到场景中

将场景对应的对象拖动到Webrequest上

4、运行场景

输入对话内容,点击发送,等待AI回应