LangChain4j是一个LLM(Large Language Model)框架,java版的langChain。目前已经正式发布了1.4.0版本,最低支持java17环境。

  1. 准备工作
    首先得有一个大模型,两种方式:1-调用api,2-本地部署。
    1)去deepseek官网申请apiKey,有免费的额度使用。
    2)去ollama官网下载工具,部署量化模型。
  2. 安装ollama
    1)官网点击download,选择合适环境下载,等待下载安装包。
    官网地址2)下载完,点击安装包,一直确定。
    3)在cmd界面输入ollama -v,出现版本信息,即安装成功。
    4)回到ollama官网,点击搜索栏,搜索deepseek-r1。
    在这里插入图片描述
    5)根据自己的配置选择不同的模型,在cmd中执行ollama run deepseek-r1:xxxb
    在这里插入图片描述
  3. quick start
    在langchain4j中LLM相关API以两种形式:低级和高级,低级api是调用各个类,用以实现功能;高级则是以AIServices类实现。今天主要以低级API做一个快速开始。
    首先引入
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-ollama</artifactId>
    <version>1.4.0</version>
</dependency>
class OllamaChatQuickStartTest {

   public static void main(String[] args) {
        String modelName = "deepseek-r1:7b";          // 填入你刚刚下载的模型
        String baseUrl = "http://localhost:11434";     // ollama启动后的ip:port
        ChatModel model = OllamaChatModel.builder()
                .baseUrl(baseUrl)
                .modelName(modelName)
                .build();
        String answer = model.chat("hello world");
        System.out.println("ai答:" + answer);
        // 恭喜你成功完成了一次大模型的调用
    }
}
  1. 进阶使用
  • ChatModel
    现我们来看看ChatModel里面有什么吧,不仅提供以字符串形式问答,还提供以ChatMessage对象集合问,ChatResponse对象答。
public interface ChatModel {

    String chat(String userMessage);
    ...
    ChatResponse chat(ChatMessage... messages);
    ChatResponse chat(List<ChatMessage> messages);
}

ChatMessage是接口类,它的实现类分别是:
1)UserMessage:来自用户的信息。
2)AiMessage:存放Ai生成的信息,以及像deepseek的思考信息,即think标签内的信息
3)ToolExecutionResultMessage:存放tools的返回结果信息(后续会详细介绍tools)
4)SystemMessage:放在于ai对话的第一句,常常存放prompt提示词(后续会详细介绍prompt)
5)CustomMessage:可以包含任意属性的自定义消息。目前仅支持ollama,不常用。
chat接口提供集合传参,则意味着我们可以多次和Ai聊天,并保存上一次的聊天信息.

public class OllamaChatMultipleChatTest {
    public static void main(String[] args) {
        String modelName = "deepseek-r1:7b";          // 填入你刚刚下载的模型
        String baseUrl = "http://localhost:11434";     // ollama启动后的ip:port
        ChatModel model = OllamaChatModel.builder()
                .baseUrl(baseUrl)
                .modelName(modelName)
                .build();
        UserMessage helloUserMsg = UserMessage.from("你好,你现在是我的朋友koi");
        ChatResponse res1 = model.chat(helloUserMsg);
        AiMessage helloAiMsg = res1.aiMessage();
        System.out.println("ai答1:" + helloAiMsg);

        UserMessage nameMsg = UserMessage.from("你是谁?");
        ChatResponse res2 = model.chat(helloUserMsg, helloAiMsg, nameMsg);
        AiMessage nameAiMsg = res2.aiMessage();
        System.out.println("ai答2:" + nameAiMsg);
    }
}
  • StreamingChatModel
    ChatModel实现的是等待Ai将结果完全回复完再响应,一般情况下用户并不希望等待这么久,突然展示回复结果。因此一般使用StreamingChatModel类,该类采用流式回复,模型像打字一般,持续的输出结果。
public class OllamaChatStreamChatTest {
    public static void main(String[] args) {
        String modelName = "deepseek-r1:7b";          // 填入你刚刚下载的模型
        String baseUrl = "http://localhost:11434";     // ollama启动后的ip:port
        StreamingChatModel model = OllamaStreamingChatModel.builder()
                .baseUrl(baseUrl)
                .modelName(modelName)
                .build();

        CompletableFuture<ChatResponse> futureResponse = new CompletableFuture<>();
        UserMessage helloUserMsg = UserMessage.from("你好,你现在是我的朋友koi");
        List<ChatMessage> messages = new ArrayList<>();
        messages.add(helloUserMsg);
        model.chat(messages, new StreamingChatResponseHandler() {
            @Override
            public void onPartialResponse(String partialResponse) {
                // 这里将持续接收ai回复的部分内容
                System.out.print(partialResponse);
            }

            @Override
            public void onCompleteResponse(ChatResponse completeResponse) {
                // 当ai回复完会调用该方法
                futureResponse.complete(completeResponse);
            }

            @Override
            public void onError(Throwable error) {
                // 当发生异常调用该方法
                futureResponse.completeExceptionally(error);
            }
        });
        futureResponse.join();
    }
}
  • ChatModel和StreamingChatModel的常用相关配置
class OllamaChatBuilderParamterTest {

    public static void main(String[] args) {
        String modelName = "deepseek-r1:7b";          // 填入你刚刚下载的模型
        String baseUrl = "http://localhost:11434";     // ollama启动后的ip:port
        StreamingChatModel model = OllamaStreamingChatModel.builder()
                .baseUrl(baseUrl)
                .modelName(modelName)
                .temperature(1.0)                      	// 控制ai回复的随机性,较高的值会导致多样化的输出,较低的值则产生更确定的输出
                .responseFormat(ResponseFormat.JSON)    // 输出形式,
                .think(true)                            // 是否深度思考
                .returnThinking(true)                   // 是否返回思考过程
                .timeout(Duration.ofMinutes(10))        // 超时时间
                .build();

        OllamaChatModel.builder()
                .maxRetries(3)                           // 非流式模型,才有的最大api返回失败的重试次数
                .build();
        // 更多parameter配置见:https://docs.langchain4j.dev/integrations/language-models/ollama#parameters
    }
}

以上完整代码在我的仓库,地址:https://gitee.com/liutao-lx/langchain4j-agent-dev/tree/master/agent-example/src/main/java/com/koicarp/agent/example/chatmodel

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐