Bootstrap

【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、引入依赖

<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() 执行请求并接收响应。

@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;
    }
}

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

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

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

3、业务层

以下代码仅供参考

前端请求示例:

{

"input":"你好"

}

响应示例:

{

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

}

controller层

@RestController
@RequestMapping("/chat")
public class ChatController {
    @Autowired
    private ChatService chatService;

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

service层

@Service
public interface ChatService {
    ChatVo getChatMessage(Chat chat);
}
@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;
    }
}

;