unity接入coze智能体

官网链接

coze智能体创建、设置

点击创建–选着智能体,随便起一个名字,就可以了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加令牌

在这里插入图片描述
把随便起一个名字,设置时间,把所有选项都勾选上,一定要勾选所有团队空间,否则无法点击确定。
点击确定后,会有一个对话框。里面有key,这个key需要做好备份,对话框关闭后,就无法找到这个key了,没有key就无法进行对话
在这里插入图片描述

API

API链接

每个API里面都有示例,可以按照示例,在代码中调用对应的API
在这里插入图片描述

核心代码

class Coze {private string apiToken = "备份的key";private string botId = "智能体的bot";private string conversationId ;private string chatId;//AI智能体回复消息的回调public Action<string> receiveCallBack;public Action processEndCallBack;//进度结束后的回调public Action<int> processCallBack;//进度回调public IEnumerator SendChatRequest(string userMessage){Debug.Log("创建对话");// Step 1: 发起对话请求string chatUrl = "https://api.coze.cn/v3/chat";string jsonBody = $@"{{""bot_id"": ""{botId}"",""user_id"": ""123456789"",""stream"": true,""auto_save_history"": true,""additional_messages"": [{{""role"": ""user"",""content"": ""{userMessage}"",""content_type"": ""text""}}]}}";UnityWebRequest chatRequest = new UnityWebRequest(chatUrl, "POST");byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonBody);chatRequest.uploadHandler = new UploadHandlerRaw(bodyRaw);chatRequest.downloadHandler = new DownloadHandlerBuffer();chatRequest.SetRequestHeader("Authorization", "Bearer " + apiToken);chatRequest.SetRequestHeader("Content-Type", "application/json");yield return chatRequest.SendWebRequest();Debug.Log("创建对话完成");if (chatRequest.result == UnityWebRequest.Result.Success){string response = chatRequest.downloadHandler.text;// 解析SSE格式string[] lines = response.Split('\n');string jsonData = "";foreach (string line in lines){if (line.StartsWith("data:")){jsonData = line.Substring(5); // 去掉"data:"前缀break;}}Debug.Log("对话Json:" + jsonData);if (!string.IsNullOrEmpty(jsonData)){SSEChatResponse sseResponse = JsonUtility.FromJson<SSEChatResponse>(jsonData);chatId = sseResponse.id;conversationId=sseResponse.conversation_id;Debug.Log($"Chat ID: {chatId}");// 继续执行后续代码yield return MonoInstanceTool.Instance.StartCoroutine(CheckChatStatus());yield return MonoInstanceTool.Instance.StartCoroutine(GetChatMessages());}else{Debug.LogError("Failed to parse SSE response");}}else{Debug.LogError("Error: " + chatRequest.error);}}IEnumerator CheckChatStatus(){bool isCompleted = false;while (!isCompleted){string statusUrl = $"https://api.coze.cn/v3/chat/retrieve?chat_id={chatId}&conversation_id={conversationId}";UnityWebRequest statusRequest = UnityWebRequest.Get(statusUrl);statusRequest.SetRequestHeader("Authorization", "Bearer " + apiToken);statusRequest.SetRequestHeader("Content-Type", "application/json");yield return statusRequest.SendWebRequest();if (statusRequest.result == UnityWebRequest.Result.Success){string response = statusRequest.downloadHandler.text;Debug.Log("检查:" + response);ChatResponse statusResponse = JsonUtility.FromJson<ChatResponse>(response);// 检查status是否为completedif (statusResponse.data.status == "completed"){isCompleted = true;Debug.Log("Chat completed!");}else{Debug.Log("Chat still in progress...");}}else{Debug.LogError("Status check failed: " + statusRequest.error);}yield return new WaitForSeconds(1);}}//创建对话IEnumerator GetChatMessages(){string messageUrl = $"https://api.coze.cn/v3/chat/message/list?chat_id={chatId}&conversation_id={conversationId}";UnityWebRequest messageRequest = UnityWebRequest.Get(messageUrl);messageRequest.SetRequestHeader("Authorization", "Bearer " + apiToken);messageRequest.SetRequestHeader("Content-Type", "application/json");yield return messageRequest.SendWebRequest();if (messageRequest.result == UnityWebRequest.Result.Success){string response = messageRequest.downloadHandler.text;MessageResponse messageResponse = JsonUtility.FromJson<MessageResponse>(response);// 查找类型为"answer"的消息string content = "";foreach (MessageData message in messageResponse.data){if (message.type == "answer"){content = message.content;break;}}// 显示到UI上receiveCallBack?.Invoke(content);}else{Debug.LogError("Failed to get messages: " + messageRequest.error);}}string dataset_id ="知识库的id";string documentId;//文件上传知识库public IEnumerator UploadFile(string fileName,string base64File){string fileExtension = Path.GetExtension(fileName);var requestBody = new{dataset_id = dataset_id,document_bases = new[]{new{name =fileName,source_info = new{file_base64 = base64File,file_type = fileExtension}}},chunk_strategy = new{separator = "\n\n",max_tokens = 800,remove_extra_spaces = false,remove_urls_emails = false,chunk_type = 0},format_type = 0};string json = JsonConvert.SerializeObject(requestBody);Debug.Log(json);byte[] jsonToSend = new UTF8Encoding().GetBytes(json);UnityWebRequest request = new UnityWebRequest("https://api.coze.cn/open_api/knowledge/document/create", "POST");request.uploadHandler = new UploadHandlerRaw(jsonToSend);request.downloadHandler = new DownloadHandlerBuffer();request.SetRequestHeader("Authorization", $"Bearer {apiToken}");request.SetRequestHeader("Content-Type", "application/json");request.SetRequestHeader("Agw-Js-Conv", "str");yield return request.SendWebRequest();if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError){Debug.LogError("Error uploading file: " + request.error);}else{Debug.Log("Response: " + request.downloadHandler.text);// 解析 JSON 字符串为 JsonData 对象JsonData jsonObject = JsonMapper.ToObject(request.downloadHandler.text);// 获取 document_iddocumentId = jsonObject["document_infos"][0]["document_id"].ToString();MonoInstanceTool.Instance.StartCoroutine(FileProcess());}}//上传进度public IEnumerator FileProcess(){// 生成要发送的JSON数据var requestBody = new{document_ids = new string[]{dataset_id, // 知识库IDdocumentId  // 上传进度的文件ID}};string jsonBody = JsonConvert.SerializeObject(requestBody);string postUrl = $"https://api.coze.cn/v1/datasets/{dataset_id}/process";// 初始化请求对象UnityWebRequest request = new UnityWebRequest(postUrl, "POST");while (true){byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonBody);request.uploadHandler = new UploadHandlerRaw(bodyRaw);request.downloadHandler = new DownloadHandlerBuffer();request.SetRequestHeader("Authorization", $"Bearer {apiToken}"); // 设置Authorization headerrequest.SetRequestHeader("Content-Type", "application/json");  // 设置Content-Type为JSON// 发送请求并等待返回yield return request.SendWebRequest();if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError){Debug.LogError("进度POST 请求失败,错误信息: " + request.error);yield break;  // 如果请求失败则退出}string response = request.downloadHandler.text;Debug.Log("ProcessResponse: " + response);JsonData jsonObject = JsonMapper.ToObject(response);// 获取 status 和 progressint status = (int)jsonObject["data"]["data"][0]["status"];int progress = (int)jsonObject["data"]["data"][0]["progress"];// 如果文件正在处理中,则循环等待并检查进度if (status == 0) // 处理中,status 为 0{processCallBack?.Invoke(progress);// 等待一段时间后再次请求yield return new WaitForSeconds(2f);  // 每1秒查询一次状态// 重新初始化请求对象request = new UnityWebRequest(postUrl, "POST");}else{// 当 status 为 1 时,表示处理完毕if (status == 1){Debug.Log("文件处理完毕,执行后续操作...");// 在这里执行文件处理完毕后的操作// 例如调用回调函数processEndCallBack?.Invoke();}else if (status == 9){Debug.LogWarning("文件处理失败,建议重新上传");// 在这里可以添加处理文件失败的逻辑}// 跳出循环,避免重复请求break;}}}}// 添加这些数据结构类在CozeTest类外部
[System.Serializable]
public class ChatResponse
{public ChatData data;public int code;public string msg;
}[System.Serializable]
public class ChatData
{public string id;public string conversation_id;public string bot_id;public long created_at;public long completed_at;public string last_error;public object meta_data;public string status;public UsageData usage;
}[System.Serializable]
public class UsageData
{public int token_count;public int output_count;public int input_count;
}[System.Serializable]
public class MessageResponse
{public int code;public MessageData[] data;public string msg;
}[System.Serializable]
public class MessageData
{public string bot_id;public string content;public string content_type;public string conversation_id;public string id;public string role;public string type;
}[System.Serializable]
public class SSEChatResponse
{public string id;public string conversation_id;public string bot_id;public long created_at;public LastError last_error;public string status;public UsageData usage;public string section_id;
}[System.Serializable]
public class LastError
{public int code;public string msg;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/492847.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于51单片机的交通灯设计—夜间、紧急、复位、可调时间、四个数码管显示

基于51单片机的交通灯设计 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1、采用四方向数码管设计&#xff0c;更加符合真实的交通信号灯设计&#xff1b; 2、左侧按键从上到下依次为…

省略内容在句子中间

一、使用二分查找法 每次查找时&#xff0c;将查找范围分成两半&#xff0c;并判断目标值位于哪一半&#xff0c;从而逐步缩小查找范围。 循环查找 计算中间位置 mid Math.floor((low high) / 2)。比较目标值 target 和中间位置的元素 arr[mid]&#xff1a; 如果 target ar…

Python:动态粒子爱心

预览 代码结构概述 这段代码使用了 pygame 库来创建一个动态的图形窗口&#xff0c;绘制一个心形图案&#xff0c;并在其中显示闪烁的文本。代码主要分为以下几个部分&#xff1a; 初始化和设置心形曲线的计算粒子类的定义生成粒子文本设置主循环 1. 初始化和设置 import p…

springboot449教学资源共享平台(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统教学资源共享平台信息管理难度大&#xff0c;容错率低&am…

DataOps驱动数据集成创新:Apache DolphinScheduler SeaTunnel on Amazon Web Services

引言 在数字化转型的浪潮中&#xff0c;数据已成为企业最宝贵的资产之一。DataOps作为一种文化、流程和实践的集合&#xff0c;旨在提高数据管道的质量和效率&#xff0c;从而加速数据从源头到消费的过程。白鲸开源科技&#xff0c;作为DataOps领域的领先开源原生公司&#xf…

【大模型】GraphRAG技术原理

核心概念 GraphRAG 的核心在于用大模型构建知识图谱知识图谱聚类社区化RAG RAG就是输入&#xff08;问题知识&#xff09;到大模型 1-大模型自动从海量数据中构建知识图谱&#xff08;提取合并实体关系&#xff09; 2-聚类算法从知识图谱中聚类社区并生成社区摘要 3-输入问题…

揭秘区块链隐私黑科技:零知识证明如何改变未来

文章目录 1. 引言&#xff1a;什么是零知识证明&#xff1f;2. 零知识证明的核心概念与三大属性2.1 完备性&#xff08;Completeness&#xff09;2.2 可靠性&#xff08;Soundness&#xff09;2.3 零知识性&#xff08;Zero-Knowledge&#xff09; 3. 零知识证明的工作原理4. 零…

王佩丰24节Excel学习笔记——第十二讲:match + index

【以 Excel2010 系列学习&#xff0c;用 Office LTSC 专业增强版 2021 实践】 【本章小技巧】 vlookup与match&#xff0c;index 相结合使用match,index 结合&#xff0c;快速取得引用的值扩展功能&#xff0c;使用match/index函数&#xff0c;结合照相机工具获取照片 一、回顾…

探秘C语言:从诞生到广泛应用的编程世界

引言 在编程的广袤天地里&#xff0c;C 语言宛如一颗璀璨的恒星&#xff0c;持久而耀眼地散发着光芒。自诞生以来&#xff0c;它就以独特的魅力和强大的功能&#xff0c;深深扎根于软件开发的各个层面。无论是构建复杂的操作系统&#xff0c;还是操控微小的嵌入式设备&#xff…

【Python】pandas库---数据分析

大学毕业那年&#xff0c;你成了社会底层群众里&#xff0c;受教育程度最高的一批人。 前言 这是我自己学习Python的第四篇博客总结。后期我会继续把Python学习笔记开源至博客上。 上一期笔记有关Python的NumPy数据分析&#xff0c;没看过的同学可以去看看&#xff1a;【Pyt…

常见异构程序设计语言

目录 一、OpenMP 二、MPI 三、CUDA/HIP 四、OpenACC 五、Athread 六、OpenCL 七、oneAPI 20世纪80年代&#xff0c;异构计算技术就已经诞生了。异构就是CPU、DSP、GPU、ASIC、协处理器、FPGA等各种计算单元、使用不同的类型指令集、不同的体系架构的计算单元&#xff0c…

番外篇 Git 的原理与使用

PS&#xff1a;本篇是个长篇&#xff0c;但是阅读完&#xff0c;可以基本了解 Git 在实际开发中的绝大部分常用操作。 前言&#xff1a;什么是Git 我们在日常工作 / 学习时&#xff0c;对于某些文档 / 代码&#xff0c;可能会存在多个版本需要维护&#xff0c;但是随着版本的…

音频开发中常见的知识体系

在 Linux 系统中&#xff0c;/dev/snd 目录包含与声音设备相关的文件。每个文件代表系统中的一部分音频硬件或音频控制接口。以下是你列出的文件及其含义&#xff1a; 一.基本术语 样本长度(sample)&#xff1a;样本是记录音频数据最基本的单位&#xff0c;计算机对每个通道采…

我的工作会被AI替代吗?

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

‌HBase是什么,‌HBase介绍

‌官方网站&#xff1a;Apache HBase – Apache HBase Home HBase是一个分布式的、面向列的NoSQL数据库&#xff0c;主要用于存储和处理海量数据。‌它起源于Google的​​​​​​​BigTable论文&#xff0c;是Apache Hadoop项目的子项目。HBase设计用于高可靠性、高性能和可伸…

【C 语言指针篇】指针的灵动舞步与内存的神秘疆域:于 C 编程世界中领略指针艺术的奇幻华章

文章目录 【C 语言篇】指针的灵动舞步与内存的神秘疆域&#xff1a;于 C 编程世界中领略指针艺术的奇幻华章前言一 、指针的介绍与使用1. 指针的介绍1.1指针表示1.2指针变量1.3空指针 2. 使用指针2.1交换两个变量的值2.2计算输出最小值和最大值 二、野指针的介绍与使用1. 野指针…

网络视频监控平台/安防监控/视频综合管理Liveweb视频汇聚平台解决方案

一、当前现状分析 当前视频资源面临以下问题&#xff1a; 1&#xff09;不同单位在视频平台建设中以所属领域为单位&#xff0c;设备品牌众多&#xff0c;存在的标准不一&#xff0c;各系统之间也没有统一标准&#xff1b; 2&#xff09;各单位视频平台建设分散、统筹性差&am…

【从零开始入门unity游戏开发之——C#篇08】逻辑运算符、位运算符

文章目录 一、逻辑运算符1、**&&&#xff08;逻辑与&#xff09;**语法&#xff1a;示例&#xff1a; 2、**||&#xff08;逻辑或&#xff09;**语法&#xff1a;示例&#xff1a; 3、**!&#xff08;逻辑非&#xff09;**语法&#xff1a;示例&#xff1a; 4、**^&…

CEF127 编译指南 MacOS 篇 - 编译 CEF(六)

1. 引言 经过前面的准备工作&#xff0c;我们已经完成了所有必要的环境配置。本文将详细介绍如何在 macOS 系统上编译 CEF127。通过正确的编译命令和参数配置&#xff0c;我们将完成 CEF 的构建工作&#xff0c;最终生成可用的二进制文件。 2. 编译前准备 2.1 确认环境变量 …

环境变量的知识

目录 1. 环境变量的概念 2. 命令行参数 2.1 2.2 创建 code.c 文件 2.3 对比 ./code 执行和直接 code 执行 2.4 怎么可以不带 ./ 2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下&#xff0c;也不用带 ./ 了 2.4.2 把我们自己的路径添加到环境变量里 3. 认识PATH 3.…