Spring AI Alibaba 项目接入兼容 OpenAI API 的大模型
1 依赖
主要的 maven 依赖如下所示:
jdk 21 + springboot 3.4.5 + spring-ai-alibaba-starter-dashscope 1.0.0.2 + spring-ai-openai 1.0.0
<properties><java.version>21</java.version><spring-ai.version>1.0.0</spring-ai.version><spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.version><spring-boot.version>3.4.5</spring-boot.version>
</properties><dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-bom</artifactId><version>${spring-ai-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--接入兼容OpenAI api的大模型--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai</artifactId></dependency></dependencies><build><plugins><!-- Maven 编译器插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><configuration><source>21</source><target>21</target><parameters>true</parameters> <!-- 支持参数名保留 --><compilerArgs><arg>-Xlint:unchecked</arg><arg>-Xlint:deprecation</arg></compilerArgs></configuration></plugin><!-- Spring Boot Maven 插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version></plugin><!-- 资源处理插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.3.1</version><configuration><encoding>UTF-8</encoding></configuration></plugin></plugins>
</build>
2 创建模型的 ChatClient
创建兼容 OpenAI API 的模型的 ChatClient 配置类,用于模型的调用。参考以下方法,可以为不同的模型创建不同的配置类。以火山引擎某模型为例,代码如下所示。
@Configuration
public class OpenAIChatClientConfig {/*** 火山引擎模型baseUrl*/@Value("${volces.baseUrl:test}")private String volcesBaseUrl;/*** 火山引擎模型apiKey*/@Value("${volces.apiKey:test}")private String volcesApiKey;/*** 火山引擎模型-豆包模型v1*/@Value("${volces.model.doubaoV1:test}")private String volcesModelDoubaoV1;// 获取火山引擎-豆包模型v1@Bean("chatClient4VolcesDoubaoV1")public ChatClient createChatClient4VolcesDoubaoV1() {OpenAiApi baseOpenAiApi = OpenAiApi.builder().baseUrl(volcesBaseUrl).apiKey(volcesApiKey).completionsPath("/chat/completions").build();OpenAiChatModel chatModel = OpenAiChatModel.builder().openAiApi(baseOpenAiApi).defaultOptions(OpenAiChatOptions.builder().model(volcesModelDoubaoV1).temperature(0.7).build()).build();return ChatClient.builder(chatModel).defaultAdvisors().defaultTools().build();}}
3 模型应用
使用上述创建的模型的 ChatClient,就可以进行模型的调用了。示例代码如下所示。
@Slf4j
@RestController
@RequestMapping("/openai")
public class OpenAIChatClientController {private static final String DEFAULT_PROMPT = "你好,介绍下你自己!";@Resourceprivate ChatClient chatClient4VolcesDoubaoV1;@GetMapping("/simple/chat")public String simpleChat(String prompt) {if (StringUtils.isBlank(prompt)) {prompt = DEFAULT_PROMPT;}String content;try {content = chatClient4VolcesDoubaoV1.prompt(prompt).call().content();} catch (Exception e) {log.error("simpleChat error", e);throw new RuntimeException(e.getMessage());}log.info("simpleChat --> \n prompt ={}, \n content = {}", prompt, content);return content;}}