SpringBoot Java通过API的方式调用腾讯智能体(腾讯元宝)代码示例

 更新时间:2025年06月11日 10:06:52   作者:deja vu?  
这篇文章主要介绍了SpringBoot Java通过API的方式调用腾讯智能体(腾讯元宝)的相关资料,详细说明参数获取及动态处理方法,提供结果字符串转数组技巧,需要的朋友可以参考下

引言

我发现官网只有Python的调用代码示例,在网上也没找到有人分享Java的例子,因此就有了这篇文章,前人栽树后人乘凉(如果你只想看代码部分可跳到文章后半部分)。

一、获取调用API所需要的参数信息:

首先我们进入腾讯元器获取调用API所需要的参数信息;链接:https://yuanqi.tencent.com/

点击【我的创建】,找到自己想要API调用的智能体,点击【更多】,点击【调用API】。

我们会得到调用所需要的信息:url、assistant_id、token等。

调用信息的具体意义可参考官网文档:https://docs.qq.com/aio/p/scxmsn78nzsuj64?p=unUU8C3HBocfQSOGAh2BYuC

请求参数(其中红框为必填项): 

二、代码实现:

【代码1】:

 主要是对请求参数的处理;官方给的参数例子格式是:

String jsonInputString = "{\n" +
                "  \"assistant_id\": \"你的assistant_id\",\n" +
                "  \"user_id\": \"username\",\n" +
                "  \"stream\": false,\n" +
                "  \"messages\": [\n" +
                "    {\n" +
                "      \"role\": \"user\",\n" +
                "      \"content\": [\n" +
                "        {\n" +
                "          \"type\": \"text\",\n" +
                "          \"text\": \"开始\"\n" +
                "        }\n" +
                "      ]\n" +
                "    }\n" +
                "  ]\n" +
                "}";

但是我们一般情况下不能这样写死,所以需要动态处理请求参数,如下: 

String url = 你的url";
String token = "你的token";
try {
            Map m = new HashMap();
            m.put("assistant_id","你的assistant_id");
            m.put("user_id","username");
            m.put("stream",false);
            List mesg = new ArrayList();
            Map m2 = new HashMap();
            m2.put("role","user");
            Map m3 = new HashMap();
            m3.put("type","text");
            m3.put("text","开始");
            List content = new ArrayList();
            content.add(m3);
            m2.put("content",content);
            mesg.add(m2);
            m.put("messages",mesg);
            Gson gson = new Gson();
            String json = gson.toJson(m);
            List list = accessRetailApi.doPostJson5(url,json,token);
        }catch (Exception e){
            e.printStackTrace();
        }

【代码1】所引用的包参考:

import com.google.gson.Gson;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

【代码2】:

上面调用的accessRetailApi.doPostJson5(url,json,token)方法的代码内容:

//API方式调用腾讯智能体(元宝)
    public List doPostJson5(String apiurl, String jsonInput,String auth) throws IOException {
        // API 的 URL
        String url = apiurl;

        // 请求头
        String authorizationToken = auth; // 替换为实际的Token

        String jsonInputString = jsonInput;
        // 创建URL对象
        URL obj = new URL(url);

        // 打开连接
        HttpURLConnection connection = (HttpURLConnection) obj.openConnection();

        // 设置请求方法为 POST
        connection.setRequestMethod("POST");

        // 设置请求头
        connection.setRequestProperty("X-Source", "openapi");
        connection.setRequestProperty("Content-Type", "application/json");
        connection.setRequestProperty("Authorization", "Bearer " + authorizationToken);

        // 启用输入输出流
        connection.setDoOutput(true);

        // 将请求体写入输出流
        try (OutputStream os = connection.getOutputStream()) {
            byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
            os.write(input, 0, input.length);
        }

        // 获取响应状态码;为200即成功
        int responseCode = connection.getResponseCode();
        System.out.println("Response Code: " + responseCode);

        List result = new ArrayList();
        // 读取响应内容
        try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            String resultstr = response.toString();
            System.out.println("Response: " + response.toString());
            result = strToList(resultstr,"choices");
            System.out.println("result: " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    //把JSON类型字符串转换成List<Map>
    public static List strToList(String liststr, String path) throws Exception{
        ObjectMapper mapper = new ObjectMapper();
        JsonNode rootNode = mapper.readTree(liststr);
        // 访问路径的数组
        JsonNode datasNode = rootNode.path(path);
        // 创建一个List来存储Map
        List<Map<String, Object>> datasList = new ArrayList<>();

        // 遍历数组中的每个元素(JsonNode),并将其转换为Map
        for (JsonNode dataNode : datasNode) {
            Map<String, Object> dataMap = new HashMap<>();
            dataNode.fields().forEachRemaining(entry -> {
                // 注意:这里简单地将所有值都视为Object类型
                // 对于更复杂的类型(如嵌套对象或数组),你可能需要进一步的逻辑来处理它们
                dataMap.put(entry.getKey(), entry.getValue().asText());
                if(entry.getKey().equals("message")) {
                    ObjectMapper objectMapper = new ObjectMapper();
                    Map<String, Object> resultMap = new HashMap<>();
                    try {
                        // 首先,将整个JSON字符串解析为JsonNode
                        JsonNode rootNode2 = objectMapper.readTree(entry.getValue().toString());
                        // 将JsonNode转换为Map<String, Object>
                        resultMap = objectMapper.convertValue(rootNode2, Map.class);
                        dataMap.replace("message", resultMap);
                    } catch (JsonMappingException e) {
                        e.printStackTrace();
                    } catch (JsonProcessingException e) {
                        e.printStackTrace();
                    }
                }
            });
            datasList.add(dataMap);
        }
        return datasList;
    }

 其中特意要讲解一下的是strToList方法,这个方法是把调用成功返回的字符串结果转换成数组;

例如:获得的resultstr是这样一段字符串:

通过 strToList(resultstr,"choices")方法把“choices”路径下提取成数组List,方便后续处理:

【代码2】所引用的包参考:

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

总结 

到此这篇关于SpringBoot Java通过API的方式调用腾讯智能体(腾讯元宝)的文章就介绍到这了,更多相关Java API调用腾讯元宝内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot 整合 ElasticSearch操作各种高级查询搜索

    SpringBoot 整合 ElasticSearch操作各种高级查询搜索

    这篇文章主要介绍了SpringBoot 整合 ES 进行各种高级查询搜索的实践记录,本文主要围绕 SpringBoot 整合 ElasticSearch 进行各种高级查询的介绍,需要的朋友可以参考下
    2022-06-06
  • SpringBoot中配置Web静态资源路径的方法

    SpringBoot中配置Web静态资源路径的方法

    这篇文章主要介绍了SpringBoot中配置Web静态资源路径的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 在IntelliJ IDEA中.idea文件是什么可以删除吗

    在IntelliJ IDEA中.idea文件是什么可以删除吗

    相信有很多小伙伴,在用idea写java代码的时候,创建工程总是会出现.idea文件,该文件也从来没去打开使用过,那么它在我们项目里面,扮演什么角色,到底能不能删除它呢?这篇文章主要介绍了在IntelliJ IDEA中.idea文件是什么可以删除吗,需要的朋友可以参考下
    2024-01-01
  • 一文看懂springboot实现短信服务功能

    一文看懂springboot实现短信服务功能

    项目中的短信服务基本上上都会用到,简单的注册验证码,消息通知等等都会用到。这篇文章主要介绍了springboot 实现短信服务功能,需要的朋友可以参考下
    2019-10-10
  • Java让多线程按顺序执行的几种方法

    Java让多线程按顺序执行的几种方法

    本文主要介绍了Java让多线程按顺序执行的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 对象存储服务MinIO快速入门(集成项目的详细过程)

    对象存储服务MinIO快速入门(集成项目的详细过程)

    MinIO是一个开源的对象存储服务,支持多种操作系统,配置简单且性能高,它使用纠删码进行数据保护,可以容忍硬件故障,MinIO支持多种语言的SDK和丰富的API,本文介绍对象存储服务MinIO快速入门,感兴趣的朋友一起看看吧
    2025-03-03
  • 快速了解Java中NIO核心组件

    快速了解Java中NIO核心组件

    这篇文章主要介绍了快速了解Java中NIO核心组件,涉及相关介绍及完整实例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • SpringCloud Gateway加载断言predicates与过滤器filters的源码分析

    SpringCloud Gateway加载断言predicates与过滤器filters的源码分析

    这篇文章主要介绍了SpringCloud Gateway加载断言predicates与过滤器filters的详细过程,本文通过源码给大家解析的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • SpringBoot如何接收前端传递参数

    SpringBoot如何接收前端传递参数

    这篇文章主要介绍了SpringBoot如何接收前端传递参数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-08-08
  • Java序列化原理详解

    Java序列化原理详解

    这篇文章主要介绍了Java序列化原理详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06

最新评论