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

SpringBoot 接入 豆包 火山方舟大模型

火山方舟控制台 开通模型推理、知识库 应用入口;

文档中心 各类接口说明及SDK 获取;

向量数据库VikingDB 文档 下翻找到有java操作案例;

实现目标功能效果:

  1. 通过SDK调用 豆包大模型,在代码内实现问答的效果
    官方示例

  2. 通过使用知识库,自己上传文档。让豆包大模型可以回答 你文档中的内容数据(即自定义属于你自己(自身业务领域)的大模型);

前置步骤:

  • 点击右上角头像处去创建 API 访问密钥;
  • 控制台内 模型推理 - 在线推理 创建一个推理接入点(按提示操作即可);
  • 控制台内 知识库 - 创建知识库;

代码

package com.example.demo.service.doubao;

import com.volcengine.ark.runtime.model.completion.chat.ChatCompletionRequest;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessage;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessageRole;
import com.volcengine.ark.runtime.service.ArkService;
import com.volcengine.auth.ISignerV4;
import com.volcengine.auth.impl.SignerV4Impl;
import com.volcengine.model.Credentials;
import com.volcengine.service.SignableRequest;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author:wwf
 * @Package:com.example.demo.service
 * @Project:demo
 * @name:CreateArkClientExample
 * @Date:2024/11/28 15:32
 * @Filename:CreateArkClientExample
 */
public class CreateArkClientExample {

	//模型推理 - 在线推理 - API 调用 内查看获取
    private static final String API_KEY = "ea9fxxxxxxxxx49c";

    
    //这里获取 https://console.volcengine.com/iam/keymanage
    private static final String AK = "AKLTZDI2Yxxxxxxxxx2U2NGZmMzA";
    private static final String SK = "Tnpjd0xxxxxxxxxOa1pXRQ";


    public static void main(String[] args) throws Exception {
        // 以华北 2 (北京) 为例,<ARK_DOMAIN> 处应改为 ark.cn-beijing.volces.com
        ArkService service = ArkService.builder()
                .apiKey(API_KEY)
                .baseUrl("https://ark.cn-beijing.volces.com/api/v3")
                .build();
        System.out.println("
----- standard request -----");
        String host = "api-knowledgebase.mlp.cn-beijing.volces.com";
        String path = "/api/knowledge/collection/search_knowledge";
        String method = "POST";
        String body = "{"name":"wwfTest","query":"总结介绍下王清"}";

        SignableRequest request = prepareRequest(host, path, method, null, body, AK, SK);
        System.out.println(request.getURI());

        HttpClient client = HttpClients.createDefault();
        HttpResponse response = client.execute(request);
        int statusCode = response.getStatusLine().getStatusCode();
        String content = EntityUtils.toString(response.getEntity());
        System.out.println(statusCode);
        System.out.println(content);

        final List<ChatMessage> streamMessages = new ArrayList<>();
        final ChatMessage streamSystemMessage = ChatMessage.builder().role(ChatMessageRole.SYSTEM).content("你是豆包,是由字节跳动开发的 AI 人工智能助手")
                .content(content)
                .build();
        final ChatMessage streamUserMessage = ChatMessage.builder().role(ChatMessageRole.USER).content("总结介绍下王清").build();
        streamMessages.add(streamSystemMessage);
        streamMessages.add(streamUserMessage);

        ChatCompletionRequest streamChatCompletionRequest = ChatCompletionRequest.builder()
                .model("ep-20241128155250-zlbd8")
                //回调函数
//                .tools()
                .messages(streamMessages)
                .build();

        service.streamChatCompletion(streamChatCompletionRequest)
                .doOnError(Throwable::printStackTrace)
                .blockingForEach(
                        choice -> {
                            if (choice.getChoices().size() > 0) {
                                System.out.print(choice.getChoices().get(0).getMessage().getContent());
                            }
                        }
                );


        // shutdown service
        service.shutdownExecutor();
    }


    /**
     * 构建请求
     *
     * @param host
     * @param path
     * @param method
     * @param params
     * @param body
     * @param ak
     * @param sk
     * @return
     * @throws Exception
     */
    public static SignableRequest prepareRequest(String host, String path, String method, List<NameValuePair> params, String body, String ak, String sk) throws Exception {
        SignableRequest request = new SignableRequest();
        request.setMethod(method);
        request.setHeader("Accept", "application/json");
        request.setHeader("Content-Type", "application/json");
        request.setHeader("Host", "api-knowledgebase.mlp.cn-beijing.volces.com");
        request.setEntity(new StringEntity(body, "utf-8"));

        URIBuilder builder = request.getUriBuilder();
        builder.setScheme("https");
        builder.setHost(host);
        builder.setPath(path);
        if (params != null) {
            builder.setParameters(params);
        }

        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(2000).build();
        request.setConfig(requestConfig);

        Credentials credentials = new Credentials("cn-north-1", "air");
        credentials.setAccessKeyID(ak);
        credentials.setSecretAccessKey(sk);

        // 签名
        ISignerV4 ISigner = new SignerV4Impl();
        ISigner.sign(request, credentials);

        return request;
    }
}

示例代码说明:

本人随意使用gpt 编写了一篇短片小说,通过平台内知识库,以文档形式上传进去。小说内有个人物叫 王清,于是问 豆包模型 介绍下王清的信息,此时 模型可以准确快速的响应 关于王清的信息;

,,,,,,,,,
本文为个人操作接入记录,官方文档示例还是比较全的。仅记录大致接入流程;


http://www.kler.cn/a/512574.html

相关文章:

  • 【vitePress】基于github快速添加评论功能(giscus)
  • Docker 实现MySQL 主从复制
  • LeetCode:37. 解数独
  • 淘宝关键词页面爬取绘图进行数据分析
  • JupyterLab 安装以及部分相关配置
  • Linux磁盘空间不足,12个详细的排查方法
  • Debian 上安装PHP
  • 【深度解析Java 20天速成】04_IDEA的安装与使用
  • ChromeOS 132 版本更新
  • 一文夯实垃圾收集的理论基础
  • 完整地实现了推荐系统的构建、实验和评估过程,为不同推荐算法在同一数据集上的性能比较提供了可重复实验的框架
  • docker pull error with proxy
  • 【Linux】常见指令(三)
  • YOLOv8改进,YOLOv8检测头融合DiverseBranchBlock,并添加小目标检测层(四头检测),适合目标检测、分割等
  • 手机怎么远程操控电脑?
  • 算法-求字符串公共前缀
  • Docker 部署 mysql
  • Java设计模式—观察者模式
  • Python实现PDF文档转图片功能
  • c++ 给定欧氏平面中的一组线可以形成的三角形的数量
  • 嵌入式Linux驱动开发之pinctrl和gpio子系统
  • 《Vue3 七》Vue 中的动画
  • 【语言处理和机器学习】概述篇(基础小白入门篇)
  • 蒙操作系统(HarmonyOS)
  • 具身智能新突破!Physical Intelligence推出机器人动作tokenizer,训练提速5倍
  • 高级java每日一道面试题-2025年01月20日-数据库篇-并发事务带来哪些问题?