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

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

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

相关文章:

  • 共享内存的原理和创建
  • #函数探幽
  • 《深度解析DeepSeek-M8:量子经典融合,重塑计算能效格局》
  • Zemax 中的 CAD 文件性能比较
  • LeetCode hot 100—爬楼梯
  • Android 线程池实战指南:高效管理多线程任务
  • leetcode日记(91)二叉树的最大深度
  • E1-106.租车骑绿道(贪心)
  • PDF文件中的颜色是什么原理?
  • 拉取gitlab项目时出现500的错误的权限问题
  • vue3通过render函数实现一个菜单下拉框
  • PIMPL模式
  • 深入理解 GPU 渲染加速与合成层(Composite Layers)
  • 008-生成不重复9位随机数
  • C++ 链表List使用与实现:拷贝交换与高效迭代器细致讲解
  • 分布式数据库OceanBase
  • 面试基础--高并发高可用架构深度实践:降级熔断(Hystrix vs Sentinel)核心原理与源码解析
  • 南昌长空STONE 60A-M 无人机电调深度测评:轻量化设计与工业级安全的融合典范
  • 使用服务器搭建开源建站工具Halo 2.0
  • C++学习——哈希表(一)
  • 讲座预告|全球贸易不确定情况下企业创新生态构建
  • 保利42.41亿元竞得上海杨浦东外滩一地块,成交楼面单价超8万元
  • 71岁导演詹姆斯・弗雷病逝,曾执导《纸牌屋》、麦当娜MV
  • 体坛联播|曼联热刺会师欧联杯决赛,多哈世乒赛首日赛程出炉
  • 扶桑谈|素称清廉的石破茂被曝受贿,日本政坛或掀起倒阁浪潮
  • 对话|蓬皮杜策展人布莱昂:抽象风景中的中国审美