做一个能和你互动玩耍的智能机器人之七-接入对话和大模型

news2024/11/23 13:16:10

接入科大迅飞的语音识别:

private void printResult(RecognizerResult results) {
        String text = JsonParser2.parseIatResult(results.getResultString());
        String sn = null;
        // 读取json结果中的sn字段
        try {
            JSONObject resultJson = new JSONObject(results.getResultString());
            sn = resultJson.optString("sn");
        } catch (JSONException e) {
            e.printStackTrace();
        }

        mIatResults.put(sn, text);

        StringBuffer resultBuffer = new StringBuffer();
        for (String key : mIatResults.keySet()) {
            resultBuffer.append(mIatResults.get(key));
        }
        String s = mEditTextMessage.getText().toString();
        mEditTextMessage.setText(s + resultBuffer.toString());
        mEditTextMessage.setSelection(mEditTextMessage.length());
    }

    /**
     * 听写UI监听器
     */
    private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {
        // 返回结果
        public void onResult(RecognizerResult results, boolean isLast) {
            Log.i("jiaABC", "results"+results.toString());
            printResult(results);
        }

        // 识别回调错误
        public void onError(SpeechError error) {
            //showTip(error.getPlainDescription(true));
            Log.i("jiaABC", "error"+error.toString());
        }

    };
    //科大迅飞语音识别
    @NeedsPermission(Manifest.permission.RECORD_AUDIO)
    public void startDialog(){
        buffer.setLength(0);
        //mEditTextMessage.setText(null);// 清空显示内容
        mIatResults.clear();
        // 显示听写对话框
        // 初始化识别无UI识别对象
        // 使用SpeechRecognizer对象,可根据回调消息自定义界面;
        //mIat = SpeechRecognizer.createRecognizer(HomeActivity.this, mInitListener);

        // 初始化听写Dialog,如果只使用有UI听写功能,无需创建SpeechRecognizer
        // 使用UI听写功能,请根据sdk文件目录下的notice.txt,放置布局文件和图片资源
        RecognizerDialog  mIatDialog = new RecognizerDialog(HomeActivity.this, mInitListener);

        //mSharedPreferences = getSharedPreferences(PREFER_NAME, Activity.MODE_PRIVATE);
        mIatDialog.setListener(mRecognizerDialogListener);
        mIatDialog.show();
    }private void printResult(RecognizerResult results) {
        String text = JsonParser2.parseIatResult(results.getResultString());
        String sn = null;
        // 读取json结果中的sn字段
        try {
            JSONObject resultJson = new JSONObject(results.getResultString());
            sn = resultJson.optString("sn");
        } catch (JSONException e) {
            e.printStackTrace();
        }

        mIatResults.put(sn, text);

        StringBuffer resultBuffer = new StringBuffer();
        for (String key : mIatResults.keySet()) {
            resultBuffer.append(mIatResults.get(key));
        }
        String s = mEditTextMessage.getText().toString();
        mEditTextMessage.setText(s + resultBuffer.toString());
        mEditTextMessage.setSelection(mEditTextMessage.length());
    }

    /**
     * 听写UI监听器
     */
    private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {
        // 返回结果
        public void onResult(RecognizerResult results, boolean isLast) {
            Log.i("jiaABC", "results"+results.toString());
            printResult(results);
        }

        // 识别回调错误
        public void onError(SpeechError error) {
            //showTip(error.getPlainDescription(true));
            Log.i("jiaABC", "error"+error.toString());
        }

    };
    //科大迅飞语音识别
    @NeedsPermission(Manifest.permission.RECORD_AUDIO)
    public void startDialog(){
        buffer.setLength(0);
        //mEditTextMessage.setText(null);// 清空显示内容
        mIatResults.clear();
        // 显示听写对话框
        // 初始化识别无UI识别对象
        // 使用SpeechRecognizer对象,可根据回调消息自定义界面;
        //mIat = SpeechRecognizer.createRecognizer(HomeActivity.this, mInitListener);

        // 初始化听写Dialog,如果只使用有UI听写功能,无需创建SpeechRecognizer
        // 使用UI听写功能,请根据sdk文件目录下的notice.txt,放置布局文件和图片资源
        RecognizerDialog  mIatDialog = new RecognizerDialog(HomeActivity.this, mInitListener);

        //mSharedPreferences = getSharedPreferences(PREFER_NAME, Activity.MODE_PRIVATE);
        mIatDialog.setListener(mRecognizerDialogListener);
        mIatDialog.show();
    }

rerofit调用百度的大模型,yi_34b_chat 可以免费接入,玩玩还是不错的,rxjava请求token可以自动刷新token,而且能合并请求一步到位

 @Headers({"Content-type:application/json;charset=UTF-8"})
    @POST("rpc/2.0/ai_custom/v1/wenxinworkshop/chat/yi_34b_chat")
    Call<Baidu> getBaidu(@Query("access_token") String access_token, @Body RequestBody route);

    //oauth/2.0/token?grant_type=client_credentials&client_id=[API Key]&client_secret=[Secret Key]'
    @GET("oauth/2.0/token")
    Call<BaiduTocken> getBaiduToken(@Query("grant_type") String grant_type, @Query("client_id") String client_id,@Query("client_secret") String client_secret);

    @GET("oauth/2.0/token")
    Observable<BaiduTocken> getBaiduToken2(@Query("grant_type") String grant_type, @Query("client_id") String client_id,@Query("client_secret") String client_secret);

retrofit初始化固定的,自己照着搞一个就行。

public static ApiService getApiService() {
        //星火
        //return RetrofitClient.getSingleClient("https://spark-api-open.xf-yun.com/").create(ApiService.class);
        //百度
        return RetrofitClient.getSingleClient("https://aip.baidubce.com/").create(ApiService.class);
    }
 public static void getBaidu(String access_token, RequestBody rb, Callback<Baidu> callback) {
        getApiService().getBaidu(access_token, rb).enqueue(callback);
    }

    public static void getBaiduToken(String client_id, String client_secret, Callback<BaiduTocken> callback) {
        getApiService().getBaiduToken("client_credentials", client_id, client_secret).enqueue(callback);
    }

测试:

  getBaidu("token", body, new Callback<Baidu>() {
            @Override
            public void onResponse(Call<Baidu> call, Response<Baidu> response) {
                System.out.println("getGPT--------------Success"+call.request().toString());
                System.out.println("getGPT--------------Success"+response.code());
                System.out.println("getGPT--------------Success"+response.message());
                System.out.println("getGPT--------------Success"+response.raw());
                System.out.println("getGPT--------------Success"+response.body());

            }

            @Override
            public void onFailure(Call<Baidu> call, Throwable t) {
                System.out.println("getGPT--------------onFailure"+call.request().toString());
                System.out.println("getGPT------------onFailure"+t.toString());
            }
        });


        getBaiduToken("API kEY", "Secret key", new Callback<BaiduTocken>() {
            @Override
            public void onResponse(Call<BaiduTocken> call, Response<BaiduTocken> response) {
                System.out.println("getGPT--------------Success"+call.request().toString());
                System.out.println("getGPT--------------Success"+response.code());
                System.out.println("getGPT--------------Success"+response.message());
                System.out.println("getGPT--------------Success"+response.raw());
                System.out.println("getGPT--------------Success"+response.body());

            }

            @Override
            public void onFailure(Call<BaiduTocken> call, Throwable t) {
                System.out.println("getGPT--------------onFailure"+call.request().toString());
                System.out.println("getGPT------------onFailure"+t.toString());
            }
        });

 

大模型用到的请求和接收model


public class Msg {

    private List<MessagesBean> messages;
    public static class MessagesBean {
        private String role;
        private String content;

        public String getRole() {
            return role;
        }

        public void setRole(String role) {
            this.role = role;
        }

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }

        @Override
        public String toString() {
            return "MessagesBean{" +
                    "role='" + role + '\'' +
                    ", content='" + content + '\'' +
                    '}';
        }
    }

    public List<MessagesBean> getMessages() {
        return messages;
    }

    public void setMessages(List<MessagesBean> messages) {
        this.messages = messages;
    }

    @Override
    public String toString() {
        return "Msg{" +
                "messages=" + messages +
                '}';
    }
}


public class Baidu {

    private String id;
    private String object;
    private Integer created;
    private String result;
    private Boolean is_truncated;
    private Boolean need_clear_history;
    private UsageBean usage;

    public static class UsageBean {
        private Integer prompt_tokens;
        private Integer completion_tokens;
        private Integer total_tokens;

        public Integer getPrompt_tokens() {
            return prompt_tokens;
        }

        public void setPrompt_tokens(Integer prompt_tokens) {
            this.prompt_tokens = prompt_tokens;
        }

        public Integer getCompletion_tokens() {
            return completion_tokens;
        }

        public void setCompletion_tokens(Integer completion_tokens) {
            this.completion_tokens = completion_tokens;
        }

        public Integer getTotal_tokens() {
            return total_tokens;
        }

        public void setTotal_tokens(Integer total_tokens) {
            this.total_tokens = total_tokens;
        }

        @Override
        public String toString() {
            return "UsageBean{" +
                    "prompt_tokens=" + prompt_tokens +
                    ", completion_tokens=" + completion_tokens +
                    ", total_tokens=" + total_tokens +
                    '}';
        }
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getObject() {
        return object;
    }

    public void setObject(String object) {
        this.object = object;
    }

    public Integer getCreated() {
        return created;
    }

    public void setCreated(Integer created) {
        this.created = created;
    }

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

    public Boolean getIs_truncated() {
        return is_truncated;
    }

    public void setIs_truncated(Boolean is_truncated) {
        this.is_truncated = is_truncated;
    }

    public Boolean getNeed_clear_history() {
        return need_clear_history;
    }

    public void setNeed_clear_history(Boolean need_clear_history) {
        this.need_clear_history = need_clear_history;
    }

    public UsageBean getUsage() {
        return usage;
    }

    public void setUsage(UsageBean usage) {
        this.usage = usage;
    }

    @Override
    public String toString() {
        return "Baidu{" +
                "id='" + id + '\'' +
                ", object='" + object + '\'' +
                ", created=" + created +
                ", result='" + result + '\'' +
                ", is_truncated=" + is_truncated +
                ", need_clear_history=" + need_clear_history +
                ", usage=" + usage +
                '}';
    }
}

public class BaiduTocken {

    private String refresh_token;
    private Integer expires_in;
    private String session_key;
    private String access_token;
    private String scope;
    private String session_secret;

    public String getRefresh_token() {
        return refresh_token;
    }

    public void setRefresh_token(String refresh_token) {
        this.refresh_token = refresh_token;
    }

    public Integer getExpires_in() {
        return expires_in;
    }

    public void setExpires_in(Integer expires_in) {
        this.expires_in = expires_in;
    }

    public String getSession_key() {
        return session_key;
    }

    public void setSession_key(String session_key) {
        this.session_key = session_key;
    }

    public String getAccess_token() {
        return access_token;
    }

    public void setAccess_token(String access_token) {
        this.access_token = access_token;
    }

    public String getScope() {
        return scope;
    }

    public void setScope(String scope) {
        this.scope = scope;
    }

    public String getSession_secret() {
        return session_secret;
    }

    public void setSession_secret(String session_secret) {
        this.session_secret = session_secret;
    }

    @Override
    public String toString() {
        return "BaiduTocken{" +
                "refresh_token='" + refresh_token + '\'' +
                ", expires_in=" + expires_in +
                ", session_key='" + session_key + '\'' +
                ", access_token='" + access_token + '\'' +
                ", scope='" + scope + '\'' +
                ", session_secret='" + session_secret + '\'' +
                '}';
    }
}

唉,我的Arduino nano接了lcd屏显示速度很慢,也不知道哪里出了问题,唉,估计要买四条腿的,8条腿带不动

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何忽略已经提交到 Git 仓库中的文件

文章目录 前言一、确认文件是否已经被提交二、确认 .git 文件存在三、修改 .git/info/exclude 文件四、修改文件名五、提交和推送六、验证总结 前言 在日常开发中&#xff0c;我们常常会遇到这样的情况&#xff1a;不小心将不应追踪的文件提交到了 Git 仓库中&#xff0c;例如…

LabVIEW中的Reverse String函数与字节序转换

在LabVIEW中&#xff0c;数据的字节序&#xff08;也称为端序&#xff09;问题通常出现在数据传输和存储过程中。字节序可以分为大端&#xff08;Big-Endian&#xff09;和小端&#xff08;Little-Endian&#xff09;&#xff0c;它们分别表示高字节存储在低地址和低字节存储在…

培训第二十二天(mysql数据库主从搭建)

上午 1、为mysql添加开机启动chkconfig [rootmysql1 ~]# chkconfig --list //列出系统服务在不同运行级别下的启动状态注&#xff1a;该输出结果只显示 SysV 服务&#xff0c;并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 要列出 systemd 服务…

2024.8.2(MySQL)

一、mysql 1、下载mysql软件包 [rootmysql ~]# yum -y install wget [rootmysql ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 2、解压 [rootmysql ~]# tar -xf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 3、安装…

完美解决浏览器的输入框自动填入时,黄色背景问题,以及图标被遮住问题(最新)

用图说话↓↓↓ 首先用代码解决黄色背景问题&#xff0c;box-shadow颜色设置透明即可 :deep(input:-webkit-autofill) {box-shadow: 0 0 0 1000px transparent !important;/* 浏览器记住密码的底色的颜色 */-webkit-text-fill-color: #fff !important;/* 浏览器记住密码的字的…

【Linux 驱动】IMX6ULL input驱动

1. input子系统介绍 input 子系统分为 input 驱动层、input 核心层、input 事件处理层&#xff0c;最终给用户空间提供可访问的设备节点。 驱动层&#xff1a;输入设备的具体驱动程序&#xff0c;比如按键驱动程序&#xff0c;向内核层报告输入内容核心层&#xff1a;承上启下…

【docker】docker和镜像仓库

阿里云镜像仓库&#xff08;Aliyun Container Registry&#xff09;是阿里云提供的容器镜像存储和管理服务。它以Docker Registry协议为基础&#xff0c;为容器开发者提供了稳定可靠的镜像存储和分发服务。 使用阿里云镜像仓库&#xff0c;您可以将自己的Docker镜像推送到阿里…

lc209. 长度最小的子数组

题目&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 思路&#xff1a;…

非刚性ICP算法

非刚性ICP配准通过对V上的每个顶点v_i&#xff0c;利用仿射变换X_i来对模板网格进行变形。由此将V形变成为一个形变模板网格V^′&#xff0c;使得V^′与目标数据T的形状越接近越好&#xff0c;即V^′上的每个顶点在T上的对应点为该顶点在T中的最近点。该过程的目标函数如下&…

原生js: AI聊天功能, 仿照chatGPT问答功能

问: 现在我们需要一个ai聊天功能, 接口已经给出: 只要是message就是我们的数据, 是message_end就是结束信息, 其他的我们不需要管. 回答: 我们不使用传统的fetch请求这个接口, 而是使用sse, eventSource去请求, 当我们输入框回车 或者 点击元素, 获取到输入框中用户输入的值…

stm32入门学习10-软件I2C和陀螺仪模块

&#xff08;一&#xff09;I2C通信 &#xff08;1&#xff09;通信方式 I2C是一种同步半双工的通信方式&#xff0c;同步指的是通信双方时钟为一个时钟&#xff0c;半双工指的是在同一时间只能进行接收数据或发送数据&#xff0c;其有一条时钟线&#xff08;SCL&#xff09;…

MyBatis补充

控制类和dao层接口以及mapper中的xml是怎样的关联的&#xff1f; 在Mybatis中&#xff0c;控制类和dao层接口是通过mapper的xml文件进行连接的。 控制类调用dao层接口中的方法&#xff0c;通过接口实现进行访问数据库操作。dao层接口定义数据库操作的方法&#xff0c;提供给控制…

第6章>>实验7:PS(ARM)端Linux RT与PL端FPGA之间(通过Memory存储器进行通信和交互)《LabVIEW ZYNQ FPGA宝典》

1、实验内容 上一节实验里面介绍的Reg寄存器通道比较适合在PS端和PL端之间传递标量数据&#xff0c;也就是单个元素&#xff0c;如果要传递多个元素的数组或者连续数据流的话&#xff0c;Reg寄存器通道就不是很合适了。 本节实验我们向大家讲解如何借助Memory存储器通道在PS&am…

【Mind+】掌控板入门教程06 多彩呼吸灯

呼吸灯是指模仿动物一呼一吸使灯光由亮到暗逐渐变化&#xff0c;给人以安静沉稳的感觉。电子产品中经常会使用不同色彩的呼吸灯&#xff0c;起到很好的视觉提醒效果。 这个项目中我们将带领大家用掌控板制作一个颜色和亮度一起变化的多彩呼吸灯&#xff01; 项目示例 …

编程深水区之并发④:Web多线程

Node的灵感来源于Chrome&#xff0c;更是移植了V8引擎。在Node中能够实现的多线程&#xff0c;在Web环境中自然也可以。 一、浏览器是多进程和多线程的复杂应用 在本系列的第二章节&#xff0c;有提到现代浏览器是一个多进程和多线程的复杂应用。浏览器主进程统管全局&#xf…

vue动态规则

vue动态规则 在Vue中&#xff0c;可以使用动态规则来实现灵活的表单验证和输入限制。动态规则允许你根据特定条件或动态数据来定义验证规则。 以下是一个示例&#xff0c;展示如何在Vue中使用动态规则&#xff1a; <template><div><input v-model"inputVa…

LVS--DR模式

目录 1 DR模式原理 2 DR模式请求回复过程 3 实验环境 4 开始实验 4.1 配置实验环境 4.2 Router 配置路由转发 4.3 LVS 设置转发规则 4.4 解决vip响应问题 4.5 Web1配置 4.6 Web2配置 5 测试效果 1 DR模式原理 当用户向负载均衡调度器&#xff08;Director Server&#xff09;发…

如何用数字便签管理工作任务?

在快节奏的工作环境中&#xff0c;我们每天都需要处理大量的工作任务。如果仅仅依靠个人的记忆力和精力&#xff0c;很容易导致任务遗漏或者延误。随着数字化技术的发展&#xff0c;选择一款功能强大的数字便签软件已经成为我们管理工作任务的更好选择。 在众多的数字便签软件…

Java零基础之多线程篇:讲解并发集合

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

c语言11天笔记

函数的概述 函数&#xff1a;实现一定功能的&#xff0c;独立的代码模块。我们的函数一定是先定义&#xff0c;后使用。 使用函数的优势&#xff1a; 1. 我们可以通过函数提供功能给别人使用。当然我们也可以使用别人提供的函数&#xff0c;减少代码量。 2. 借助函数可以减…