先演示一下效果
AI模型演示
1.接入DeepSeek文档地址:对话补全 | DeepSeek API Docs
(1).需要申请一个API keys,申请地址如下:DeepSeek,点击创建
(2).拿到Key就可以向deepseek发起请求了,可以采用StreamingDownloadHandler数据流接收或者DownloadHandlerBuffer数据加载完毕再处理
using (UnityWebRequest request = new UnityWebRequest(URL, "POST"))
{
byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonBody);
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
request.downloadHandler = new StreamingDownloadHandler(DataStream.Instance.ParseResponseChunk);
request.SetRequestHeader("Content-Type", "application/json");
request.SetRequestHeader("Authorization", Key);
yield return request.SendWebRequest();
if (request.result != UnityWebRequest.Result.Success)
{
Debug.LogError("Request failed: " + request.error);
}
}
(3).拿到数据流后,如下
高效率的学习不仅仅是投入大量时间,更重要的是如何有效地利用这些时间。以下是一些提高学习效率的策略:
### 1. **明确目标**
- **设定具体目标**:明确你想要达到的学习目标,而不是盲目地学习。目标可以是短期的(如完成某一章节)或长期的(如通过考试)。
- **SMART原则**:确保目标是具体的(Specific)、可衡量的(Measurable)、可实现的(Achievable)、相关的(Relevant)和有时间限制的(Time-bound)。
### 2. **制定计划**
- **时间管理**:制定一个合理的学习计划,分配好每天的学习时间。使用番茄工作法(25分钟学习+5分钟休息)或其他时间管理工具来提高专注力。
- **优先级排序**:根据任务的重要性和紧急性,优先处理最重要的内容。
### 3. **主动学习**
- **积极参与**:不要只是被动地阅读或听讲,尝试通过提问、讨论、总结等方式积极参与学习过程。
- **自我测试**:通过自我测试或模拟考试来检验自己的理解程度,找出薄弱环节。
### 4. **深度理解**
- **理解而非记忆**:尽量理解概念背后的原理,而不是单纯记忆。理解后,知识更容易被长期记住。
- **联系实际**:将所学知识与实际生活中的例子或问题联系起来,帮助加深理解。
(4).因为是markdown格式的,需要引入markdown进行文本解析
public string ConvertMarkdownToRichText(string markdown)
{
// 1. 先提取代码块,防止误替换
Dictionary<string, string> codeBlockPlaceholders = new Dictionary<string, string>();
int codeBlockIndex = 0;
// 匹配 ```csharp ... ``` 代码块并替换为占位符
markdown = Regex.Replace(markdown, @"```csharp\n([\s\S]+?)\n```", match =>
{
string key = $"[CODEBLOCK_{codeBlockIndex}]";
codeBlockPlaceholders[key] = $"<color=#00ff00>{match.Groups[1].Value}</color>";
codeBlockIndex++;
return key;
});
// 2. 处理标题
markdown = Regex.Replace(markdown, @"^###### (.+)$", "<size=28><b>$1</b></size>", RegexOptions.Multiline);
markdown = Regex.Replace(markdown, @"^##### (.+)$", "<size=30><b>$1</b></size>", RegexOptions.Multiline);
markdown = Regex.Replace(markdown, @"^#### (.+)$", "<size=32><b>$1</b></size>", RegexOptions.Multiline);
markdown = Regex.Replace(markdown, @"^### (.+)$", "<size=36><b>$1</b></size>", RegexOptions.Multiline);
markdown = Regex.Replace(markdown, @"^## (.+)$", "<size=40><b>$1</b></size>", RegexOptions.Multiline);
markdown = Regex.Replace(markdown, @"^# (.+)$", "<size=45><b>$1</b></size>", RegexOptions.Multiline);
// 3. 处理加粗 **text** 或 __text__
markdown = Regex.Replace(markdown, @"\*\*(.+?)\*\*", "<b>$1</b>");
markdown = Regex.Replace(markdown, @"__(.+?)__", "<b>$1</b>");
// 4. 处理斜体 *text* 或 _text_
markdown = Regex.Replace(markdown, @"\*(.+?)\*", "<i>$1</i>");
markdown = Regex.Replace(markdown, @"_(.+?)_", "<i>$1</i>");
// 替换全角>为半角>
markdown = Regex.Replace(markdown, ">", ">");
// 替换全角<为半角<
markdown = Regex.Replace(markdown, "<", "<");
// 5. 处理单行代码 `inline code`
markdown = Regex.Replace(markdown, @"`(.+?)`", "<color=#FFA500>$1</color>"); // 使用橙色显示内联代码
// 6. 还原代码块
foreach (var entry in codeBlockPlaceholders)
{
markdown = markdown.Replace(entry.Key, entry.Value);
}
return markdown;
}
(5).解析完毕后使用TMP_Text组件进行显示,效果如下:
(6).为了避免同一个问题询问多次,可以将请求的结果放入数据库中,方便下次直接查看,推荐使用SQLite进行保存:我这里主要保存,问题,回答,来源,日期
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using SQLite4Unity3d;
using System.Linq;
public class DialogEntry
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Question { get; set; }
public string Answer { get; set; }
public string Type { get; set; }
public string Date { get; set; }
}
public class DatabaseManager : MonoBehaviour
{
private SQLiteConnection db;
void Start()
{
string dbPath = Path.Combine(Application.persistentDataPath, "dialogDB.db");
db = new SQLiteConnection(dbPath);
db.CreateTable<DialogEntry>();
}
// 保存对话
public void SaveDialog(string question, string answer,string type)
{
db.Insert(new DialogEntry
{
Question = question,
Answer = answer,
Type=type,
Date = System.DateTime.Now.ToString("yyyy-MM-dd")
});
Debug.Log("对话已存储到数据库");
}
// 读取所有对话
public List<DialogEntry> LoadDialogHistory()
{
return db.Table<DialogEntry>().ToList();
}
// 通过 Id 获取单个对话内容
public DialogEntry GetDialogById(int id)
{
return db.Table<DialogEntry>().FirstOrDefault(d => d.Id == id);
}
// 删除单个对话
public void DeleteDialogById(int id)
{
var entry = db.Table<DialogEntry>().FirstOrDefault(d => d.Id == id);
if (entry != null)
{
db.Delete(entry);
Debug.Log($"对话(ID: {id})已删除");
}
else
{
Debug.LogWarning($"未找到 ID 为 {id} 的对话");
}
}
// 打印所有对话
public void PrintDialogs()
{
List<DialogEntry> history = LoadDialogHistory();
foreach (var entry in history)
{
Debug.Log($"问题: {entry.Question}, 答案: {entry.Answer},来源: {entry.Type}, 日期: {entry.Date}");
}
}
}
(7).保存完毕后可以加载和删除对话
public DialogEntry GetDialogById(int id)
{
return db.Table<DialogEntry>().FirstOrDefault(d => d.Id == id);
}
// 删除单个对话
public void DeleteDialogById(int id)
{
var entry = db.Table<DialogEntry>().FirstOrDefault(d => d.Id == id);
if (entry != null)
{
db.Delete(entry);
Debug.Log($"对话(ID: {id})已删除");
}
else
{
Debug.LogWarning($"未找到 ID 为 {id} 的对话");
}
}
(8).同样解析后用TMP_Text进行展示
2.接入通义千问文档地址:
QwQ 模型的用法_大模型服务平台百炼(Model Studio)-阿里云帮助中心
(1).需要申请一个API keys,申请地址如下:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
(2).拿到Key后就可以发起请求了
(3).拿到数据后和上面DeepSeek方法一样进行处理。 后续步骤一样,不再赘述。
3.接入豆包,文档地址API文档中心
(1).申请一个Key地址如下:账号登录-火山引擎
(2)拿到Key进行请求:和上面方法一样进行处理。
4.总结如上,后续会更新OpenAI,有什么问题请留言大家一起讨论。