复习智能体搭建
程序调用 AI 大模型
SDK 接入
首先需要按照官方文档安装 SDK: 安装SDK官方指南
在选择 SDK 版本时,建议在 Maven 仓库查看最新的版本号: Maven 中央仓库版本信息
- 在 pom.xml 中引入依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dashscope-sdk-java</artifactId>
<version>2.19.1</version>
</dependency>
- 创建一个接口类来存储密钥信息(在实际生产环境中,应使用配置文件或环境变量)
public interface TestApiKey {
String API_KEY = "你的 API Key";
}
- 复制文档里面的代码进行测试 通过 API 调用通义千问
package com.example.superaiagent.demo.invoke;// 建议dashscope SDK的版本 >= 2.12.0import java.util.Arrays;
import java.lang.System;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
/*
* 阿里云灵积 AI SDK 调用
* */
public class SdkAiInvoke {
public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {
Generation gen = new Generation();
Message systemMsg = Message.builder()
.role(Role.SYSTEM.getValue())
.content("You are a helpful assistant.")
.build();
Message userMsg = Message.builder()
.role(Role.USER.getValue())
.content("你是谁?")
.build();
GenerationParam param = GenerationParam.builder()
// 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
.apiKey(TestApiKey.API_KEY)
// 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
.model("qwen-plus")
.messages(Arrays.asList(systemMsg, userMsg))
.resultFormat(GenerationParam.ResultFormat.MESSAGE)
.build();
return gen.call(param);
}
public static void main(String[] args) {
try {
GenerationResult result = callWithMessage();
System.out.println(JsonUtils.toJson(result));
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
// 使用日志框架记录异常信息
System.err.println("An error occurred while calling the generation service: " + e.getMessage());
}
System.exit(0);
}
}
HTTP 接入
- 对于 SDK 不支持的编程语言或需要更灵活控制的场景,可以直接使用 HTTP 请求调用 AI 大模型的 API
- 一般来说,如果有官方 SDK 支持,优先使用 SDK;只有在不支持 SDK 的情况下,再考虑直接 HTTP 调用
- HTTP 调用的详细说明可参考官方文档: 通过 API 调用通义千问
package com.example.superaiagent.demo.invoke;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
/*
* 阿里云灵积 AI Http 调用
* */public class HttpAiInvoke {
public static void main(String[] args) {
// 替换为您的API密钥
String apiKey = TestApiKey.API_KEY;
// 构建请求URL
String url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";
// 构建请求体
JSONObject requestBody = new JSONObject();
requestBody.put("model", "qwen-plus");
// 构建messages数组
JSONArray messages = new JSONArray();
// system消息
JSONObject systemMessage = new JSONObject();
systemMessage.put("role", "system");
systemMessage.put("content", "You are a helpful assistant.");
messages.add(systemMessage);
// user消息
JSONObject userMessage = new JSONObject();
userMessage.put("role", "user");
userMessage.put("content", "你是谁?");
messages.add(userMessage);
requestBody.put("messages", messages);
try {
// 发送POST请求
HttpResponse response = HttpRequest.post(url)
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.body(requestBody.toString())
.execute();
// 打印响应结果
System.out.println("响应状态码: " + response.getStatus());
System.out.println("响应内容: " + response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Spring AI
Spring AI 默认没有支持所有的大模型(尤其是国产的),更多的是支持兼容 OpenAI API 的大模型的集成