网站服务器建设的三种方法,邯郸网站建设费用,仿第四城地方门户网站模板,平面设计培训班教程最近工作上遇到了要接入gpt相关内容的需求#xff0c;简单实现了一个安卓端接入讯飞星火的UnitySDK。 或者也可以接入WebSocket接口的。本文只讲安卓实现 我使用的Unity版本为2021.3.27f1c2 Android版本为4.2.2
1.下载SDK
登陆讯飞开放平台下载如图所示SDK
2.新建安卓工程…最近工作上遇到了要接入gpt相关内容的需求简单实现了一个安卓端接入讯飞星火的UnitySDK。 或者也可以接入WebSocket接口的。本文只讲安卓实现 我使用的Unity版本为2021.3.27f1c2 Android版本为4.2.2
1.下载SDK
登陆讯飞开放平台下载如图所示SDK
2.新建安卓工程
新建安卓工程在工程下创建libs文件夹 下载的SDK解压后的aar文件至安卓工程的libs文件夹下 打开工程的build.gradle 复制以下代码 上面红框部分是引用aar下面是打jar包的逻辑
3.根据原来的demo工程修改代码
package com.rayneo.sparklib;
import android.app.Activity;
import com.iflytek.sparkchain.core.LLM;
import com.iflytek.sparkchain.core.LLMCallbacks;
import com.iflytek.sparkchain.core.LLMConfig;
import com.iflytek.sparkchain.core.SparkChain;
import com.iflytek.sparkchain.core.SparkChainConfig;public class SparkTool {private static final String TAG SparkLLM;private Activity _unityActivity;private String domain general;private String url wss://spark-api.xf-yun.com/v1.1/chat;public int initSDK(String appid,String apiKey,String apiSecret,int logLevel,String domain,String url) {// 初始化SDKAppid等信息在清单中配置SparkChainConfig sparkChainConfig SparkChainConfig.builder();sparkChainConfig.appID(appid).apiKey(apiKey).apiSecret(apiSecret)//应用申请的appid三元组.logLevel(logLevel);int ret SparkChain.getInst().init(getActivity(),sparkChainConfig);this.domain domain;this.url url;return ret;}public void unInitSDK() {SparkChain.getInst().unInit();}Activity getActivity(){if(null _unityActivity) {try {Class? classtype Class.forName(com.unity3d.player.UnityPlayer);Activity activity (Activity) classtype.getDeclaredField(currentActivity).get(classtype);_unityActivity activity;} catch (ClassNotFoundException e) {} catch (IllegalAccessException e) {} catch (NoSuchFieldException e) {}}return _unityActivity;}public int startChat(ISparkLLMProxy unityProxy,String msg) {LLMConfig llmConfig LLMConfig.builder();llmConfig.domain(domain).url(url);LLM llm new LLM(llmConfig);LLMCallbacks llmCallbacks new SparkLLMCallbacks(unityProxy);llm.registerLLMCallbacks(llmCallbacks);String myContext myContext;int ret llm.arun(msg,myContext);return ret;}}
这几个接口分别是初始化释放获取Unity的Activity开始gpt。
package com.rayneo.sparklib;public interface ISparkLLMProxy {void onLLMResult(int status, String Content);void onLLMEvent(int eventID, String eventMsg);void onLLMError(int errorCode, String var2);}
package com.rayneo.sparklib;import android.util.Log;import com.iflytek.sparkchain.core.LLMCallbacks;
import com.iflytek.sparkchain.core.LLMError;
import com.iflytek.sparkchain.core.LLMEvent;
import com.iflytek.sparkchain.core.LLMResult;public class SparkLLMCallbacks implements LLMCallbacks {private static final String TAG SparkLLMCallbacks;private ISparkLLMProxy unityProxy;public SparkLLMCallbacks(ISparkLLMProxy unityProxy) {this.unityProxy unityProxy;}Overridepublic void onLLMResult(LLMResult llmResult, Object usrContext) {Log.d(TAG, onLLMResult\n);String content llmResult.getContent();Log.e(TAG, onLLMResult: content);int status llmResult.getStatus();if (unityProxy ! null) {unityProxy.onLLMResult(status, content);}}Overridepublic void onLLMEvent(LLMEvent event, Object usrContext) {Log.d(TAG, onLLMEvent\n);Log.w(TAG, onLLMEvent: event.getEventID() event.getEventMsg());if (unityProxy ! null) {unityProxy.onLLMEvent(event.getEventID(), event.getEventMsg());}}Overridepublic void onLLMError(LLMError error, Object usrContext) {Log.d(TAG, onLLMError\n);Log.e(TAG, errCode: error.getErrCode() errDesc: error.getErrMsg());if (unityProxy ! null) {unityProxy.onLLMError(error.getErrCode(), error.getErrMsg());}}
}
实现回调接口让Unity可以注册 点击此处导出jar包
4.导入Unity工程
拷贝jar包和aar包至Unity工程此目录下
Androidmanifest增加 权限
using System;
using UnityEngine;
using UnityEngine.UI;
//using FfalconXR;public class IFlyLLMHandler : MonoBehaviour
{public InputField input;public Button button;public Text text;private AndroidJavaObject sparkToolInstance;private void Start(){Loom.Initialize();sparkToolInstance new AndroidJavaObject(com.rayneo.sparklib.SparkTool);InitializeSDK();button.onClick.AddListener(() {text.text ;StartChat(input.text);});}public void InitializeSDK(){if (sparkToolInstance ! null){//输入开放平台的apikey等数据appid,apiKey,apiSecret,logLevel,domain,urlint ret sparkToolInstance.Callint(initSDK, 9e803172, e4045501df3916cad0c4137d43db8b3b, ZWFiZGYwMjllNTkyYTFmNjE1YTNiMWRk, 0, general, );Debug.Log(initializeSDK error code is ret);}else{Debug.LogError(SparkTool instance is null. Make sure the Android plugin is properly imported.);}}public void StartChat(string msg){if (sparkToolInstance ! null){int ret sparkToolInstance.Callint(startChat, new SparkLLMProxy(onLLMResult, onLLMEvent, onLLMError), msg);Debug.Log(startChat error code is ret);}else{Debug.LogError(SparkTool instance is null. Make sure the Android plugin is properly imported.);}}private void onLLMError(int errorCode, string error){Debug.Log(onLLMError errorCode errorCode error message error);}private void onLLMEvent(int eventID, string eventMsg){Debug.Log(onLLMError eventID eventID eventMsg eventMsg);}private void onLLMResult(int status, string content){Loom.QueueOnMainThread((p) {text.text content;}, null);Debug.Log(onLLMResult status status content content);}public void UninitializeSDK(){if (sparkToolInstance ! null){sparkToolInstance.Call(unInitSDK);}else{Debug.LogError(SparkTool instance is null. Make sure the Android plugin is properly imported.);}}
}
public class SparkLLMProxy : AndroidJavaProxy
{private Actionint, string onLLMResultCallback;private Actionint, string onLLMEventCallback;private Actionint, string onLLMErrorCallback;public SparkLLMProxy(Actionint, string onLLMResult, Actionint, string onLLMEvent, Actionint, string onLLMError) : base(com.rayneo.sparklib.ISparkLLMProxy){onLLMResultCallback onLLMResult;onLLMEventCallback onLLMEvent;onLLMErrorCallback onLLMError;}public void onLLMResult(int status, string content){if (onLLMResultCallback ! null){onLLMResultCallback(status, content);}}public void onLLMEvent(int eventID, string eventMsg){if (onLLMEventCallback ! null){onLLMEventCallback(eventID, eventMsg);}}public void onLLMError(int errorCode, string error){if (onLLMErrorCallback ! null){onLLMErrorCallback(errorCode, error);}}}接入安卓接口 打包运行至手机上 左边输入栏输入文本点击按钮发送。收到返回即代表成功。
工程仓库地址为:https://github.com/oneSitDown/spark-unity