langchain4j初使用

背景

最近公司的AI项目有个新的需求:当向大模型提问时,大模型可能无法回答这个问题,领导感觉体验不好,打算引入搜索的功能,即在大模型回答不了问题的情况下,通过一些搜索引擎提供的api去搜索相关的答案返回给客户。 目前比较流行的框架是langchain, 由于我们公司在调用模型时是利用大模型提供的rest api相关的文档通过Java的Httpclient去调用的,因此考虑引入python不太合适。因此公司专职研究人员提供了langchain4j框架,基本是Java版的langchain,本人就公司的这个搜索需求做了一个初使用的记录,供大家参考。

准备工作

创建一个spring boot的项目, 版本3.2+, jdk使用的是17
参考文档: https://docs.langchain4j.dev/ (langchain4j官方)
目前langchain4j支持十几种大模型。

编码工作

导入langchain4j与spring boot整合的最基本的依赖:

<dependency>
  <groupId>dev.langchain4j</groupId>
  <artifactId>langchain4j-spring-boot-starter</artifactId>
  <version>0.35.0</version>
</dependency>

上述只是整合最基本的依赖,如果需要使用具体的大模型,那么还需要导入具体模型的整合依赖,如open ai:

<dependency>
  <groupId>dev.langchain4j</groupId>
  <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
  <version>0.35.0</version>
</dependency>

基本格式是:langchain4j-{integration-name}-spring-boot-starter

langchain官方提供了两种实现方式,一种叫low-level,针对每个模型都提供一个模型实现类的方式来和模型进行会话。另外一种是通过AI Services方式进行。下面分别简单演示一下这两种方式工作的代码。

low-level

ChatLanguageModel:这个是该框架提供的一个大模型接口,有很多不同的实现,比如open ai的实现类是:OpenAiChatModel。
当然也有支持流式输出的StreamingChatLanguageModel接口,对应的具体大模型也有相应的实现类。
官方给出了示例:
在这里插入图片描述
这里ChatLanguageModel需要是一个spring的bean,因此需要改一下以上这种写法,也不能直接在ChatLanguageModel的对象上加@Autowired注解。因此可以通过配置类来实现(以open ai为例):

@Configuration
public class ChatLanguageModelConfig {
   
   

    /**
     * 非流式
     * @return
     */
    @Bean
    public ChatLanguageModel openAiChatModel() {
   
   
        //如果使用了代理必须要传入代理信息
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 7777));
        return OpenAiChatModel.builder()
                .</
### LangChain4J 流式处理概述 LangChain4J 设计之就考虑到了流式处理的需求,这使得应用程序能够更高效地处理大规模数据。通过实现同步和异步两种模式下的流式API调用,开发者可以根据实际需求选择最合适的方案来优化性能[^2]。 对于希望利用这些特性构建应用的人来说,在Spring Boot环境中集成langchain4j并启用其流式功能是一个不错的选择。下面将展示如何在一个基于Java 17及Spring Boot 3.2+版本的新项目里配置langchain4j来进行流式操作的具体步骤。 ### 实现示例 为了更好地理解这一过程,这里给出一段简单的代码片段作为参考: ```java import dev.langchain4j.data.message.StreamingChatHistory; import dev.langchain4j.model.chat.StreamingChatResponse; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ChatController { @GetMapping("/chat/stream") public void chatStream() { StreamingChatHistory history = new StreamingChatHistory(); // 假设这里的model已经被正确始化 model.streamChat(history, response -> { System.out.println(response.getMessage().text()); }); } } ``` 上述例子展示了如何设置一个HTTP GET请求处理器`/chat/stream`,当接收到客户端请求时会触发聊天记录的流式传输。每当有新的消息块到达服务器端时,就会被即时打印出来。 值得注意的是,除了基本的消息传递外,还可以进一步扩展此逻辑以适应更多复杂的业务场景,比如实时更新UI界面或将部分计算卸载到边缘设备上执行等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值