当前位置: 首页 > news >正文

(02)Unity使用在线AI大模型(调用Python)

目录

一、概要

二、改造Python代码

三、制作Unity场景


一、概要

       查看本文需完成(01)Unity使用在线AI大模型(使用百度千帆服务)的阅读和实操,本文档接入指南的基础上使用Unity + C#调用百度千帆大模型,需要阅读者有一定的Unity开发基础。

此功能本质上就是拿Python大模型,大模型问答处理都是在Python中执行,而Unity只是在这个基础上包一层“壳”。那么就涉及到Unity该怎么去和Python进行通信的问题了,本文采用C#内的Process类,需要提前在Python代码内做可传入外部程序调用并传出参数方法,再将Python文件打包成.exe格式的文件。当然在Unity和Python通信的方面也可以用Socket的方式或者其他方式,不一定非要是Process哈~

先看达成效果:

二、改造Python代码

1.在上面提到,想要Python在外部被调用到需要先将Python源码做成可传入传出参数的方法,代码如下:

import sys
import os
import qianfan
# 这两行必须存在,使传回到Unity的消息不会变成乱码
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')# 
os.environ["QIANFAN_ACCESS_KEY"] = "xx"
os.environ["QIANFAN_SECRET_KEY"] = "xx"chat_comp = qianfan.ChatCompletion()
def qf(sendmessage):resp = chat_comp.do(model="ERNIE-Bot", messages=[{"role": "user","content": str(sendmessage)}])return resp["result"]s = str(qf(sys.argv[1]))
print(s)

2.接下来需要将Python代码打包成可执行的.exe文件,首先需要在PyCharm终端下载cx_Freeze依赖包,安装命令:pip install cx_Freeze

3.将Python代码打包为.exe文件,继续在终端内输入命令,命令:cxfreeze 聊天/testtounity.py --target-dir dist

4.上述命令中标记下划线的 { 聊天/testtounity.py } 是你需要打包Python文件的相对路径

5.打包成功后这里会出现一个名为dist的文件夹

6.在磁盘中找到这个文件夹,找到已经打包为.exe文件的Python脚本,记住这个路径,待会要调用

三、制作Unity场景

1.在界面中创建输入框(InputField,用于发送消息的内容)、按钮(Button,用于点击发送事件)、面板(Panel+Text,用于显示对话记录)

2.新建C#代码页,粘贴以下代码:

using System.Diagnostics;
using UnityEngine;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{public InputField _InputField;public Button SendBtn;public Text ResultTxt;private static string resultMessage = string.Empty;private void Start(){SendBtn.onClick.AddListener(SendBtnFunc);}private void SendBtnFunc(){ResultTxt.text += "<color=yellow>" + "问题:" + _InputField.text + "</color>" + "\n";RunPythonScript(_InputField.text);ResultTxt.text += "<color=green>" + "回答:" + resultMessage + "</color>" + "\n";}private static void RunPythonScript(string argvs){Process p = new Process();p.StartInfo.FileName = @"C:\Users\JuZ\PycharmProjects\pythonxuexi\dist\testtounity.exe";p.StartInfo.UseShellExecute = false;p.StartInfo.Arguments = argvs;p.StartInfo.RedirectStandardOutput = true;p.StartInfo.RedirectStandardError = true;p.StartInfo.RedirectStandardInput = true;p.StartInfo.CreateNoWindow = true;p.Start();p.BeginOutputReadLine();p.OutputDataReceived += new DataReceivedEventHandler(Get_data);p.WaitForExit();}private static void Get_data(object sender, DataReceivedEventArgs eventArgs){if (!string.IsNullOrEmpty(eventArgs.Data)){resultMessage = string.Empty;resultMessage = eventArgs.Data;}}
}

3.修改代码页中下述的代码,将路径改为刚刚打包为.exe的Python脚本(本文档2-5)文件的绝对路径:p.StartInfo.FileName = @"C:\Users\JuZ\PycharmProjects\pythonxuexi\dist\testtounity.exe";

4.至此,运行Unity!

相关文章:

  • junit mockito service
  • 【Linux知识点汇总】07 Linux系统防火墙相关命令,关闭和开启防火墙、开放端口号
  • leetcode-三数之和
  • 第一章 应急响应- Linux入侵排查
  • windows 11 PC查询连接过的wlan密码
  • 高通Android 12 设置Global属性为null问题
  • 数据库——单表查询
  • 机械臂泡水维修|机器人雨后进水维修措施
  • [AWS]CodeCommit的创建与使用
  • sqlalchemy事件监听
  • 路由上传一个ui_control参数(uint32类型)控制页面UI显隐
  • firefly rk3288 ubuntu23.10 网卡名为end0 改为eth0
  • 【webpack开发环境下的配置】
  • 原码、补码、反码、移码是什么?
  • 如何理解 Composition API 和 Options API
  • [PHP内核探索]PHP中的哈希表
  • [LeetCode] Wiggle Sort
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Android交互
  • DataBase in Android
  • es6--symbol
  • export和import的用法总结
  • JS专题之继承
  • linux安装openssl、swoole等扩展的具体步骤
  • Rancher-k8s加速安装文档
  • Sublime text 3 3103 注册码
  • WebSocket使用
  • 构建二叉树进行数值数组的去重及优化
  • 面试总结JavaScript篇
  • 前端自动化解决方案
  • 浅谈web中前端模板引擎的使用
  • 全栈开发——Linux
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • #微信小程序(布局、渲染层基础知识)
  • (11)MATLAB PCA+SVM 人脸识别
  • (13)Hive调优——动态分区导致的小文件问题
  • (C语言)球球大作战
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (论文阅读11/100)Fast R-CNN
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)甲方乙方——赵民谈找工作
  • (轉)JSON.stringify 语法实例讲解
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .jks文件(JAVA KeyStore)
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 反射 Reflect
  • .NET 直连SAP HANA数据库