【JavaEE】—— SpringBoot项目集成百度千帆AI大模型(对话Chat V2)

本篇文章在SpringBoot项目中集成百度千帆提供的大模型接口实现Chat问答效果:

一、百度智能云

百度千帆大模型平台是百度智能云推出的一个企业级一站式大模型与AI原生应用开发及服务平台。

注册成功后,下载百度智能云APP进行实名认证

实名认证成功之后,进入到管理平台

进入管理平台后,找到应用接入,我们需要创建新的应用,只有创建了应用,后面才能让大模型来绑定应用并使用

输入应用必要的信息(应用名称、应用描述)

创建成功后,保存好APIkey和Secret Key

二、大模型API

大模型API官方文档:API列表 - ModelBuilder

我们本次采用ERNIE-4.0-8K-Preview

ERNIE 4.0是百度自研的旗舰级超大规模⼤语⾔模型,相较ERNIE 3.5实现了模型能力全面升级,广泛适用于各领域复杂任务场景;支持自动对接百度搜索插件,保障问答信息时效,支持5K tokens输入+2K tokens输出。

文档:https://github.com/baidubce/bce-qianfan-sdk/tree/main/java

部分关键参数:

|-------------------|--------------|--------|--------------------------------------------------------------------------------------------------------------------|
| 名称 | 类型 | 必填 | 描述 |
| messages | List[dict] | 是 | 对话信息,messages": [ {"role": "user","content": "你好"}] message中的content总长度和system字段总内容不能超过20000个字符,且不能超过5120 tokens |
| model | string | 是 | 模型名称,用于指定平台支持预置服务的模型,说明:该字段为固定值ERNIE-4.0-8K-Preview(必须开通付费) |
| temperature | float | 否 | 大模型的采样参数, (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 (2)默认0.8,范围 (0, 1.0],不能为0 |
| max_output_tokens | int | 否 | 指定模型最大输出token数,说明: (1)如果设置此参数,范围[2, 2048] (2)如果不设置此参数,最大输出token数为1024 |
| response_format | string | 否 | 指定响应内容的格式,说明: (1)可选值: · json_object:以json格式返回,可能出现不满足效果情况 · text:以文本格式返回 (2)如果不填写参数response_format值,默认为text |

三、具体使用

1、引入依赖

XML 复制代码
<dependency>
    <groupId>com.baidubce</groupId>
    <artifactId>qianfan</artifactId>
    <version>0.1.1</version>
</dependency>

2、封装工具类(核心)

封装一个调用API的工具类。

  • .chatCompletion() 开始构建一个聊天完成请求。

  • .model(baiduAIProperties.getQianfanModel()) 设置了要使用的模型名称,这个名称通常是预先在百度AI平台配置好的模型。

  • .addMessage("user", prompt) 添加了一条消息到对话中,角色为 "user",内容是传入的 prompt 参数。

  • .temperature(0.7) 设置了采样随机性,数值越大意味着输出越随机,数值越小则输出越确定。这里设置为0.7

  • .maxOutputTokens(2000) 指定了生成的最大token数,即最大输出长度。这里设置为2000个token。

  • .execute() 执行请求并接收响应。

java 复制代码
@Component
@Slf4j
public class AIModelInvoker {
    @Autowired
    private BaiduAIProperties baiduAIProperties;

    public String qianfanInvoker(String prompt){
        Qianfan qianfan = new Qianfan(Auth.TYPE_OAUTH, baiduAIProperties.getAccessKey(), baiduAIProperties.getSecretKey());
        ChatResponse response = qianfan.chatCompletion()
                .model(baiduAIProperties.getQianfanModel())
                .addMessage("user", prompt)
                .temperature(0.7)
                .maxOutputTokens(2000)
                .execute();
        String result = response.getResult();

        return result;
    }
}

为了便于维护,将配置写在配置文件中

java 复制代码
@Data
@Configuration
@ConfigurationProperties(prefix = "baidu")
public class BaiduAIProperties {
    private String accessKey;
    private String secretKey;
    private String qianfanModel;
}

application.yml文件:注意把key换成自己的

3、业务层

以下代码仅供参考

前端请求示例:

{

"input":"你好"

}

响应示例:

{

"message":"你好,如果你有任何问题或需要帮助,请随时告诉我,我会尽力回答你的问题。"

}

controller层

java 复制代码
@RestController
@RequestMapping("/chat")
public class ChatController {
    @Autowired
    private ChatService chatService;

    @PostMapping("/list")
    public ChatVo getChatMessage(@RequestBody Chat chat){
        return chatService.getChatMessage(chat);
    }
}

service层

java 复制代码
@Service
public interface ChatService {
    ChatVo getChatMessage(Chat chat);
}
java 复制代码
@Service
public class ChatServiceImpl implements ChatService {
    @Autowired
    private AIModelInvoker aiModelInvoker;
    @Override
    public ChatVo getChatMessage(Chat chat) {
        String result = aiModelInvoker.qianfanInvoker(chat.getInput());
        ChatVo chatVo = new ChatVo();
        chatVo.setMessage(result);
        return chatVo;
    }
}
相关推荐
雨白40 分钟前
Java 线程通信基础:interrupt、wait 和 notifyAll 详解
android·java
架构师沉默5 小时前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
Java中文社群6 小时前
重要:Java25正式发布(长期支持版)!
java·后端·面试
每天进步一点_JL7 小时前
JVM 类加载:双亲委派机制
java·后端
用户298698530148 小时前
Java HTML 转 Word 完整指南
java·后端
渣哥8 小时前
原来公平锁和非公平锁差别这么大
java
渣哥8 小时前
99% 的人没搞懂:Semaphore 到底是干啥的?
java
J2K8 小时前
JDK都25了,你还没用过ZGC?那真得补补课了
java·jvm·后端
kfyty7258 小时前
不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
java·架构
isysc110 小时前
面了一个校招生,竟然说我是老古董
java·后端·面试