一、使用介绍
官方网页: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回应