0 前言
LangChain4j 提供了用于以下功能的 Spring Boot 启动器:
- 常用集成
- 声明式 AI 服务
1 常用集成的 Spring Boot starters
Spring Boot 启动器帮助通过属性创建和配置 语言模型、嵌入模型、嵌入存储 和其他核心 LangChain4j 组件。
要使用 Spring Boot 启动器,请导入相应依赖包。
Spring Boot 启动器依赖包的命名规范:langchain4j-{integration-name}-spring-boot-starter
。
如对于 OpenAI(langchain4j-open-ai
),依赖包名称为 langchain4j-open-ai-spring-boot-starter
:
dev.langchain4j
langchain4j-open-ai-spring-boot-starter
0.34.0
然后,可在 application.properties
文件中配置模型参数:
langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.chat-model.model-name=gpt-4o
langchain4j.open-ai.chat-model.log-requests=true
langchain4j.open-ai.chat-model.log-responses=true
...
此时,将自动创建一个 OpenAiChatModel
实例(ChatLanguageModel
的实现)
并且可通过自动注入在需要的地方使用它:
@RestController
public class ChatController {
ChatLanguageModel chatLanguageModel;
public ChatController(ChatLanguageModel chatLanguageModel) {
this.chatLanguageModel = chatLanguageModel;
}
@GetMapping("/chat")
public String model(@RequestParam(value = "message", defaultValue = "Hello") String message) {
return chatLanguageModel.generate(message);
}
}
如需一个 StreamingChatLanguageModel
实例,使用 streaming-chat-model
代替 chat-model
属性:
langchain4j.open-ai.streaming-chat-model.api-key=${OPENAI_API_KEY}
...
2 声明式 AI 服务的 Spring Boot starter
LangChain4j 提供一个 Spring Boot starter,用于自动配置 AI 服务、RAG、工具 等功能。
假设已导入某已集成的starters(见上文),然后导入 langchain4j-spring-boot-starter
:
dev.langchain4j
langchain4j-spring-boot-starter
0.34.0
定义 AI 服务接口,并用 @AiService
:
@AiService
interface Assistant {
@SystemMessage("You are a polite assistant")
String chat(String userMessage);
}
可把它看作标准 Spring Boot的 @Service
,但带有 AI 功能。
当应用程序启动时,LangChain4j 启动器将扫描类路径并找到所有带有 @AiService
注解的接口。对于每个找到的 AI 服务,它将使用应用程序上下文中的所有 LangChain4j 组件创建此接口的实现,并将其注册为一个 bean,因此您可以在需要的地方进行自动注入:
@RestController
class AssistantController {
@Autowired
Assistant assistant;
@GetMapping("/chat")
public String chat(String message) {
return assistant.chat(message);
}
}
更多细节请见 这里。
3 支持的版本
LangChain4j 的 Spring Boot 集成需要 Java 17 和 Spring Boot 3.2。
4 示例
4.1 使用 Spring Boot 的客户支持代理示例
从官网拉下代码后,直接修改配置文件中的 api-key 如下(仅做本地演示用):
启动CustomerSupportAgentApplication应用后,直接在控制台交互:
我开始提问:How can I cancel my booking?
为啥 AI 会要求提供信息呢?因为注册了一个工具:
@Component
public class BookingTools {
@Autowired
private BookingService bookingService;
@Tool
public void cancelBooking(String bookingNumber, String customerName, String customerSurname) {
System.out.printf("[Tool]: Cancelling booking %s for %s %s...%n", bookingNumber, customerName, customerSurname);
bookingService.cancelBooking(bookingNumber, customerName, customerSurname);
}
}
那我就按他的要求提供信息:
AI 还是会问我要名字。那我就随便回答,然后就报错了:
注意这是个后端自定义的业务异常,即没有找到对应名字的预订。但请注意最后 AI 还是会提醒你输入正确信息:
那就放过他吧,我输入后端存储的真实信息:
4.2 HelloWorld
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import static dev.langchain4j.model.openai.OpenAiChatModelName.GPT_4_O_MINI;
public class _00_HelloWorld {
public static void main(String[] args) {
ChatLanguageModel model = OpenAiChatModel.builder()
.apiKey(ApiKeys.OPENAI_API_KEY)
.modelName(GPT_4_O_MINI)
.build();
String answer = model.generate("Say Hello World");
System.out.println(answer);
}
}
响应:
Hello, World!
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。
各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。
负责:
- 中央/分销预订系统性能优化
- 活动&券等营销中台建设
- 交易平台及数据中台等架构和开发设计
- 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
- LLM Agent应用开发
- 区块链应用开发
- 大数据开发挖掘经验
- 推荐系统项目
目前主攻市级软件项目设计、构建服务全社会的应用系统。
参考:
本文由博客一文多发平台 OpenWrite 发布!
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容