模型开发和常规开发层级对比
- Prompt:好比UI层,进行用户交互
- Langchain4j, Spring AI:好比Controller,调用AI大模型
- 各类AI大模型:好比Service,提供人工智能服务
- 向量数据库:好比Mapper,进行数据存储
大模型调用三件套
导入依赖
导入 Lanchain4j 依赖
导入 BOM 包管理版本
参考文档: 快速开始- <properties>
-
- <langchain4j.version>1.0.1</langchain4j.version>
- </properties>
- <dependencyManagement>
- <dependencies>
-
- <dependency>
- <groupId>dev.langchain4j</groupId>
- langchain4j-bom</artifactId>
- <version>${langchain4j.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <dependencies>
- </dependencyManagement>
复制代码 导入原生依赖包
- 导入 Low-Level API 和 High-Level API 的依赖包
-
- <dependency>
- <groupId>dev.langchain4j</groupId>
- langchain4j-open-ai</artifactId>
- </dependency>
-
- <dependency>
- <groupId>dev.langchain4j</groupId>
- langchain4j</artifactId>
- </dependency>
复制代码 导入SpringBoot 集成依赖包
参考文档: SprintBoot 集成
- <dependency>
- <groupId>dev.langchain4j</groupId>
- langchain4j-open-ai-spring-boot-starter</artifactId>
- <version>1.0.0-beta3</version>
- </dependency>
- <dependency>
- <groupId>dev.langchain4j</groupId>
- langchain4j-spring-boot-starter</artifactId>
- <version>1.0.0-beta3</version>
- </dependency>
复制代码 第三方集成 (通义千问为例)
参考文档:通义千问
导入 BOM 包管理版本
- <properties>
-
- <langchain4j-community.version>1.0.1-beta6</langchain4j-community.version>
- </properties>
- <dependencyManagement>
- <dependencies>
-
- <dependency>
- <groupId>dev.langchain4j</groupId>
- langchain4j-community-bom</artifactId>
- <version>${langchain4j-community.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
复制代码 导入 SpringBoot 集成依赖包
- <dependency>
- <groupId>dev.langchain4j</groupId>
- langchain4j-community-dashscope-spring-boot-starter</artifactId>
- </dependency>
复制代码 创建 ChatModel
APIKey 要从环境变量中获取。 设置方法:百炼平台文档- @Bean
- public ChatModel chatModelQwen()
- {
- System.out.println("ALIQWEN_API: "+System.getenv("ALIQWEN_API"));
- return OpenAiChatModel.builder()
- .apiKey(System.getenv("ALIQWEN_API"))
- .modelName("qwen-plus")
- .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
- .build();
- }
复制代码 创建 AI Service
原生整合:手动创建 AI Service- // ChatAssistant.java
- public interface ChatAssistant
- {
- String chat(String prompt);
- }
- // Config.java
- @Bean
- public ChatAssistant chatAssistant(@Qualifier("qwen") ChatModel chatModelQwen)
- {
- return AiServices.create(ChatAssistant.class, chatModelQwen);
- }
- // Controller.java
- @RestController
- @Slf4j
- public class HighApiController
- {
- @Resource
- private ChatAssistant chatAssistant;
-
- @GetMapping(value = "/highapi/highapi")
- public String highApi(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt)
- {
- return chatAssistant.chat(prompt);
- }
- }
复制代码
- 和 SpringBoot 整合:声明式创建 AI Service
- // ChatAssiatant.java
- @AiService
- public interface ChatAssistant
- {
- String chat(String prompt);
- }
- // Controller.java
- @RestController
- public class DeclarativeAIServiceController
- {
- @Resource
- private ChatAssistant chatAssistant;
-
- @GetMapping(value = "/lc4j/boot/chatAssistant")
- public String deepseekAI(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt)
- {
- return chatAssistant.chat(prompt);
- }
-
- }
复制代码 @AIService(wiringMode = EXPLICIT, chatModel = "chatModelQwen") 可以指定改 AI Service 使用的是 chatModelQwen 模型。
模型参数
- // Config.java
- @Configuration
- public class LLMConfig
- {
- @Bean(name = "qwen")
- public ChatModel chatModelQwen()
- {
- return OpenAiChatModel.builder()
- .apiKey(System.getenv("ALIQWEN_API"))
- .modelName("qwen-plus")
- .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
- .logRequests(true) // 日志级别设置为debug才有效
- .logResponses(true)// 日志级别设置为debug才有效
- .listeners(List.of(new TestChatModelListener())) // 事件监听
- .maxRetries(2) // 最大重试次数
- .timeout(Duration.ofSeconds(5)) // 请求大模型的超时时间
- .build();
- }
- }
- // Linstener.java
- @Slf4j
- public class TestChatModelListener implements ChatModelListener
- {
- @Override
- public void onRequest(ChatModelRequestContext requestContext)
- {
-
- // onRequest配置的k:v键值对,在onResponse阶段可以获得,上下文传递参数好用
- String uuidValue = IdUtil.simpleUUID();
- requestContext.attributes().put("TraceID",uuidValue);
- log.info("请求参数requestContext:{}", requestContext+"\t"+uuidValue);
- }
-
- @Override
- public void onResponse(ChatModelResponseContext responseContext)
- {
- Object object = responseContext.attributes().get("TraceID");
-
- log.info("返回结果responseContext:{}", object);
- }
-
- @Override
- public void onError(ChatModelErrorContext errorContext)
- {
- log.error("请求异常ChatModelErrorContext:{}", errorContext);
- }
- }
复制代码 图片生产模型
使用 qwen-vl-max 模型- // Config.java
- @Configuration
- public class LLMConfig
- {
- @Bean
- public ChatModel ImageModel() {
- return OpenAiChatModel.builder()
- .apiKey(System.getenv("ALIQWEN_API"))
- //qwen-vl-max 是一个多模态大模型,支持图片和文本的结合输入,适用于视觉-语言任务。
- .modelName("qwen-vl-max")
- .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
- .build();
- }
- }
复制代码 发送用户消息:
- 图片转 Base 64 编码
- 构造请求消息 UserMessage :包含文字和转码后的图片
- 调用 .chat 接口
- 打印请求结果
- // ImageModeController.java
- @RestController
- @Slf4j
- public class ImageModelController
- {
- @Autowired
- private ChatModel chatModel;
-
- @Value("classpath:static/images/mi.jpg")
- private Resource resource;//import org.springframework.core.io.Resource;
-
- /**
- * @Description: 通过Base64编码将图片转化为字符串
- * 结合ImageContent和TextContent形成UserMessage一起发送到模型进行处理。
- * @Auther: zzyybs@126.com
- * *测试地址:http://localhost:9006/image/call
- */ @GetMapping(value = "/image/call")
- public String readImageContent() throws IOException
- {
- String result = null;
-
- //第一步,图片转码:通过Base64编码将图片转化为字符串
- byte[] byteArray = resource.getContentAsByteArray();
- String base64Data = Base64.getEncoder().encodeToString(byteArray);
-
- //第二步,提示词指定:结合ImageContent和TextContent一起发送到模型进行处理。
- UserMessage userMessage = UserMessage.from(
- TextContent.from("从下面图片种获取来源网站名称,股价走势和5月30号股价"),
- ImageContent.from(base64Data, "image/jpg")
- );
- //第三步,API调用:使用OpenAiChatModel来构建请求,并通过chat()方法调用模型。
- //请求内容包括文本提示和图片,模型会根据输入返回分析结果。
- ChatResponse chatResponse = chatModel.chat(userMessage);
-
- //第四步,解析与输出:从ChatResponse中获取AI大模型的回复,打印出处理后的结果。
- result = chatResponse.aiMessage().text();
-
- //后台打印
- System.out.println(result);
-
- //返回前台
- return result;
- }
- }
复制代码 来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |