Langchain4j 系列之二十七 - Ollama集成Deepseek

上一个系列讲了Spring AI得到反馈效果不错,有人私信我说这个和Langchain4j有什么区别。如果站在使用方面,都是基于Java的大模型应用研发的工具,本质上没太大区别。但是从细节层面来说还是有很多不同之处,所以索性借此机会,给大家分享一下Langchain4j框架。在本系列中会按照Spring AI系列的顺序来写Langchain4j,这样的好处是可以对比两者不同的细节。

注意由于框架不同版本改造会有些使用的不同,因此本次系列中使用基本框架是langchain4j-1.9.1,JDK版本使用的是19。另外本系列尽量使用Java原生态,尽量不依赖于Spring和Spring Boot。虽然langchain4j也支持Spring Boot集成,但是如果是使用Spring Boot框架,那为何不索性使用Spring AI
本系列的所有代码地址: https://github.com/forever1986/langchain4j-study

目录

  • [1 Ollama](#1 Ollama)
  • [2 示例演示](#2 示例演示)
    • [2.1 部署机器准备(可选)](#2.1 部署机器准备(可选))
    • [2.2 Ollama的安装](#2.2 Ollama的安装)
    • [2.3 开放AutoDL端口(可选)](#2.3 开放AutoDL端口(可选))
    • [2.4 代码](#2.4 代码)
    • [2.5 演示效果](#2.5 演示效果)

上一章讲解了如何本地加载ONNX格式的模型,并在Langchain4j 中使用该格式的模型。这一章讲解如何使用Ollama运行Deepseek模型,并通过Langchain4j 调用。

1 Ollama

如果部署过大模型的朋友,应该知道大模型部署比较麻烦,更何况要使用不同大模型,其API接口也有些小差异。这时候就有人想着要是能一键部署就好了,因此Ollama就出现了。

Ollama 是一个强大的本地推理大模型平台,旨在简化模型的本地部署、管理和推理工作流。它允许用户在本地机器上拉取、管理、运行大模型,并提供多种访问方式,包括本地 CLI、HTTP 接口以及通过 OpenAI 客户端的集成。这篇文章将详细介绍 Ollama 的功能,如何使用 Ollama 拉取模型、运行模型,并通过多种方式访问推理服务。

简单理解,它就是一个大模型的安装工具,可以安装各类大模型,并且适合于各种平台Windows、Linux、MacOS、Docker等等。因此它就变成越来越受欢迎,最终使得它能部署的大模型也就越来越多。这一点上,Langchain4j 也是有一样的目的,就是让用户使用起来方便,这样很多大模型都会提供Langchain4j 的插件,这样用户就不用担心模型迁移的问题。

2 示例演示

示例说明:本次演示通过Ollama部署deepseek-r1:7b模型,并通过Langchain4j 客户端进行访问

2.1 部署机器准备(可选)

说明 :由于本人比较穷,没有很好的显卡,因此在网上租了一台,在AutoDL上面租赁的。如果自己机子的,可以自己安装,不用参考这一部分

1)在AutoDL申请一台机子,显卡3090即可

2)其镜像选择ubuntu22.04即可

3)通过Web界面JupyterLab工具访问

2.2 Ollama的安装

1)执行以下命令安装Ollama

shell 复制代码
curl -fsSL https://ollama.com/install.sh | sh

2)安装成功之后,启动Ollama(注意:这里设置端口

shell 复制代码
export OLLAMA_HOST="0.0.0.0:6006"
ollama serve

说明:这里增加一个临时变量配置,将ollama的HOST设为0.0.0.0是允许外部访问。端口设置为6006是因为AutoDL只提供6006端口对外访问(如果你这边是自己本地机子,可以不用设置该变量)

3)下载deepseek-r1:7b模型

shell 复制代码
export OLLAMA_HOST="0.0.0.0:6006"
ollama run deepseek-r1:7b

下载完成

2.3 开放AutoDL端口(可选)

说明 :该步骤是因为我使用了远程机子AutoDL,而AutoDL只开放6006端口,如果你使用自己的机子,可以跳过这一步

1)本地设置可以访问AutoDL服务器的6006端口

参考视频:AutoDL暴露6006端口教程

2)访问:http://localhost:6006

说明:当在本地使用:http://localhost:6006 访问到上图的内容,即说明本地已经和AutoDL打通了6006端口

2.4 代码

代码参考lesson11子模块

1)在lesson11子模块下,其pom引入如下插件:

xml 复制代码
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-ollama</artifactId>
</dependency>

2)在lesson11子模块下,新建OllamaTest 类

java 复制代码
package com.langchain.lesson11;

import dev.langchain4j.model.ollama.OllamaChatModel;

public class OllamaTest {
    public static void main(String[] args) {
        OllamaChatModel ollamaChatModel = OllamaChatModel.builder()
                .baseUrl("http://localhost:6006")
                .modelName("deepseek-r1:7b")
                .build();
        System.out.println(ollamaChatModel.chat("你是谁?"));
    }
}

2.5 演示效果

1)运行OllamaTest 测试,结果如下:

结语:本章示了Ollama的部署和运行,然后又演示了如何在Langchain4j调用Ollama大模型。为什么Ollama如此重要,这是因为Ollama通过统一规范,让不同厂商的大模型统一化,这个对后续应用非常友好,因此现在很多人都喜欢使用该方式部署大模型。因此Langchain4j才会特意兼容Ollama部署好的大模型。

Langchain4j 系列上一章:《Langchain4j 系列之二十六 - ONNX部署本地模型

Langchain4j 系列下一章:《Langchain4j 系列之二十八 - Hugging Face 集成

相关推荐
leoZ2318 小时前
本地跑大模型实战(七):llama.cpp 性能调优,让推理更快更省
java·人工智能·spring·生成对抗网络·语言模型·自然语言处理·llama
To_OC8 小时前
我把《天龙八部》塞进向量数据库后,终于搞懂了 RAG 到底是个啥
人工智能·llm·agent
蜡台8 小时前
AI Agent(智能体)入门基础教程
人工智能
Akir.weiwen9 小时前
Token 层差异:从颜色值到语义状态的三层跃迁
人工智能·设计规范
迷迭香yy9 小时前
集合竞价数据挖掘实战:用Python构建开盘信号识别系统
人工智能·python·数据挖掘
大模型momo9 小时前
Spring AI 实战:多 Agent 协作实战 —— 分工拆解复杂旅游行程任务
人工智能·spring·ai·agent·旅游
小程故事多_8010 小时前
从A2C、TRPO、PPO到GRPO,强化学习策略梯度算法完整演进与大模型落地实战解析
人工智能·算法
冬奇Lab10 小时前
开源项目第176期:Better Harness — 不审查 diff,审查工作流本身,给 AI 编程 Agent 的五维评估框架
人工智能·开源·agent
冬奇Lab10 小时前
代码库知识库系列(07):混合检索 BM25 + 向量——Q8 还是失败,而且总分退步了
人工智能
ajassi200010 小时前
AI语音智能体开发日记(十一)为智能设备“声”临其境——详解音频资源自动化生成流程
人工智能·ai·ai编程