如何轻松对接百度智能体API,让您的应用更加智能

351 阅读4分钟

如何轻松对接百度智能体API,让您的应用更加智能

在人工智能飞速发展的今天,将智能对话功能集成到您的应用中变得越来越重要。百度智能体API提供了强大的自然语言处理能力,可以帮助您的应用实现智能问答、聊天机器人等功能。本文将指导您完成对接 【百度智能体】 的API过程,并提供一个简单的代码示例,帮助您快速对接百度智能体API。

一、注册并发布百度智能体

官网:官网地址

  • 1.创建智能体

​ 

  • 2.选择零代码,并创建

  • 3.发布并等待审核上线(审核完成自动上线)

    体验地址:百度智能体 - 疯狂de程序员

  • 4.发布部署

  • 5.部署完成,会显示一下页面

  • 6.选择API调用, 记录ID, 秘钥,在API中会使用这个两个获取 ACCESS_TOKEN

二、对接API

API调用:官网示例

由于官方文档过于简洁,示例代码的开发语言过于单一,导致很多小伙伴无法对接成功,下面我将提供Java版对接的示例代码。

三、Java示例代码

调用步骤:

  1. 根据应用ID和密钥,获取ACCESS_TOKEN
  2. 发起调用
@Slf4j
@SpringBootTest
public class BaiduTest {

    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    RedisService redisService;

    @Value("${baidu.clientId}")
    private String CLIENT_ID;          //部署的应用的ID
    @Value("${baidu.clientSecret}")
    private String CLIENT_SECRET;      //部署的应用的秘钥

    //获取部署的应用的 ACCESS_TOKEN
    private String getAccessTokenUrl="https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials";

    //对话地址
    private String chatUrl="https://openapi.baidu.com/rest/2.0/lingjing/assistant/getAnswer?access_token=";

    @Test
    void test() throws Exception {
        //外部用户ID(串联对话上下文使用,可自行定义,需要保证唯一性)
        //接入方需要为每位使用接入方服务的用户生成唯一 ID 具体要求如下:
        //  • 唯一性:每个用户具有唯一的 ID,不同用户的 ID 不能相同
        //  • 格式:可以是数字或者字符串(数字、下划线、大小写字母),字符串的长度 <= 100字符
        //  • 可追溯:每个用户 ID,接入方可以追溯到用户
        String openId = "1";
        String text = "你会干啥?";
        String res = sendPostRequest(openId,text);
        log.info("res ==> {}", res);
        //res ==> {"status":0,"message":"succ","logid":"*******",
        // "data":{"content":[{"dataType":"txt","data":"哈哈,我可是个IT专家哦!我能做的事情可多啦,比如我可以分享编程的小技巧和心得体会,帮助你更好地理解和掌握编程技术。当然啦,如果你有具体的编程问题或需求,也可以告诉我,我会尽我所能为你解答和指导。那么,你有什么想了解的吗?"}],
        // "threadId":"******************************","msgId":"******************************","referenceList":null}}
    }

    /**
     * 获取 ACCESS_TOKEN,使用到了 redis 缓存
     */
    public String getAccessToken(){
        String accessToken = null;
        if(redisService.hasKey(RedisConstant.BAIDU_AI_ACCESS_TOKEN)){
            accessToken = redisService.getCacheObject(RedisConstant.BAIDU_AI_ACCESS_TOKEN);
            return accessToken;
        }
        else {
            String url = getAccessTokenUrl+"&client_id="+CLIENT_ID + "&client_secret="+CLIENT_SECRET;
            HashMap res = restTemplate.getForObject(url, HashMap.class);
            log.info("res ==> {}", res);
            if(res.containsKey("access_token") && res.containsKey("expires_in")){
                accessToken = res.get("access_token").toString();
                redisService.setCacheObject(RedisConstant.BAIDU_AI_ACCESS_TOKEN,accessToken,Long.parseLong(res.get("expires_in").toString()), TimeUnit.SECONDS);
            }
            return accessToken;
        }
    }

    /**
     *  调用 API 实现对话
     * @param openId
     * @param text
     * @return
     * @throws UnsupportedEncodingException
     */
    public String sendPostRequest(String openId, String text) throws UnsupportedEncodingException {
        String url = chatUrl + getAccessToken();

        // 准备请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

        // 准备请求体
        Map<String, String> requestParams = new HashMap<>();
        Map<String,Object> ms = new HashMap<String, Object>();
        Map<String,Object> content = new HashMap<String, Object>();
        Map<String,Object> value = new HashMap<String, Object>();
        value.put("showText",text);
        content.put("type","text");
        content.put("value",value);
        ms.put("content",content);

        requestParams.put("message", JSONUtil.toJsonPrettyStr(ms));

        //client_id(智能体 ID,可在「文心智能体平台」平台获得。)
        requestParams.put("source", CLIENT_ID);
        requestParams.put("from", "openapi");
        //外部用户ID(串联对话上下文使用,可自行定义,需要保证唯一性)
        //接入方需要为每位使用接入方服务的用户生成唯一 ID 具体要求如下:
        //  • 唯一性:每个用户具有唯一的 ID,不同用户的 ID 不能相同
        //  • 格式:可以是数字或者字符串(数字、下划线、大小写字母),字符串的长度 <= 100字符
        //  • 可追溯:每个用户 ID,接入方可以追溯到用户
        requestParams.put("openId", openId);

        // 将请求参数转换为URL编码的字符串
        StringBuilder requestBody = new StringBuilder();
        for (Map.Entry<String, String> entry : requestParams.entrySet()) {
            if (requestBody.length() > 0) {
                requestBody.append('&');
            }
            requestBody.append(URLEncoder.encode(entry.getKey(), "UTF-8"))
                    .append('=')
                    .append(URLEncoder.encode(entry.getValue(), "UTF-8"));
        }

        // 创建HttpEntity对象,包含请求头和请求体
        HttpEntity<String> request = new HttpEntity<>(requestBody.toString(), headers);

        try {
            // 发送POST请求并获取响应体
            String response = restTemplate.postForObject(url, request, String.class);
            return response;
        } catch (RestClientException e) {
            // 处理异常,例如打印堆栈跟踪或返回错误消息等。
            e.printStackTrace();
            return null;
        }
    }
}

总结

至此,恭喜您!通过遵循本文的指导,您已成功将百度智能体API集成到您的应用中。这标志着您的应用现已迈入智能对话的新纪元,能够为用户提供更加丰富、个性化的互动体验。随着您对API的深入使用和不断探索,将有更多智能化的功能等待您去发掘和实现。 请记住,技术的世界日新月异,百度智能体API也在持续进化,以提供更强大的功能和更流畅的用户体验。我们鼓励您保持关注,定期更新,以便充分利用最新技术和功能。 最后,如果您在集成过程中遇到任何问题或困难,不要犹豫,立即联系我们的技术支持团队。我们随时准备为您提供帮助,解答您的疑问,并确保您的应用能够顺利运行在最前沿的技术之上。 再次祝贺您的成功集成,期待您的应用在智能对话领域大放异彩!