Ollama本地搭建大模型

短短一夜之间,中国的AI大模型DeepSeek迅速崛起,成功引起了全球科技界的广泛关注。

deepSeek爆火时间线

DeepSeek大事记

  1. 技术突破与产品发布
    • 2024年12月26日:DeepSeek-V3发布,知识类任务水平提升,生成吐字速度加快。
    • 2025年1月20日:DeepSeek开源推理模型DeepSeek-R1发布。
    • 2025年1月24日:DeepSeek发布多模态大模型Janus-Pro。
    • 2025年1月27日:DeepSeek应用登顶中国和美国苹果应用商店免费APP下载排行榜。
  1. 市场与行业影响
    • 2025年1月27日:DeepSeek导致美股科技股暴跌,英伟达单日市值蒸发约6000亿美元,创下美股史上最大单日市值下跌纪录。
    • 2025年1月28日:英伟达、亚马逊、微软等美国科技巨头宣布接入DeepSeek。
  1. 遭遇网络攻击
    • 2025年1月3日:DeepSeek开始遭受网络攻击,前期为HTTP代理攻击。
    • 2025年1月20日-26日:攻击者采用SSDP/NTP反射放大攻击。
    • 2025年1月27日:攻击数量激增,手段升级为应用层攻击及暴力破解。
    • 2025年1月28日凌晨:DeepSeek官网发布公告称线上服务遭遇大规模恶意攻击。
    • 2025年1月30日凌晨:攻击烈度再次升级,大量僵尸网络参与其中。

各方表态

各国政府表态
  1. 美国
    • 政府层面:美国众议院首席行政事务官向国会办公室发出通知,警告国会办公室不要使用DeepSeek的服务。
    • 军事层面:美国海军禁止内部人员使用DeepSeek,称其存在“潜在安全和道德问题”。
    • 舆论层面:美国媒体广泛报道DeepSeek,认为其对美国AI领先地位构成挑战。
  1. 英国
    • 议会层面:英国议会对DeepSeek热议非凡,议员们盛赞其卓越性能和开源精神,认为其为英国攀登全球人工智能顶峰提供了机遇。
    • 舆论层面:英国媒体认为DeepSeek的出现使美国巨额投资显得多余,苏格兰因其天然优势被看作是数据中心建设的理想地点。
  1. 印度
    • 政府层面:印度部长称赞DeepSeek低成本AI模型,认为其为印度提供了有益的借鉴。
    • 舆论层面:印度社会反思自身在AI领域的发展不足,对中国推出DeepSeek表示羡慕和焦虑。
  1. 其他国家
    • 日本:日本内阁官房长官林芳正表示,尚未有特别应对方针,将密切关注AI相关国际开发动向。
    • 法国:法国监管机构国家信息与自由委员会表示,将对DeepSeek进行问询,了解其系统运行及可能存在的隐私风险。
    • 意大利、爱尔兰、澳大利亚:这些国家也对DeepSeek的使用表示关注。
头部大公司表态
  1. 英伟达
    • 股价暴跌:2025年1月27日,英伟达股价暴跌近17%,单日市值蒸发约6000亿美元。
    • 技术认可:英伟达科学家Jim Fan认为DeepSeek延续了OpenAI的开放研究使命。
    • 接入合作:英伟达宣布NVIDIA NIM已经可以使用DeepSeek-R1模型。
  1. 微软
    • 股价下跌:微软股价在DeepSeek事件后也出现下跌。
    • 接入合作:微软宣布将DeepSeek-R1正式纳入Azure AI Foundry,并表示DeepSeek“有一些真的创新”,AI成本下降是趋势。
  1. 亚马逊
    • 股价下跌:亚马逊股价在DeepSeek事件后出现下跌。
    • 接入合作:亚马逊表示DeepSeek-R1模型可以在Amazon Web Services上使用。
  1. Meta
    • 股价下跌:Meta股价在DeepSeek事件后出现下跌。
    • 技术反思:Meta CEO马克·扎克伯格表示,DeepSeek有很多值得学习的地方,公司“仍在消化DeepSeek的一些成果”,并计划将其中一些进步应用到Llama中。
  1. OpenAI
    • 抄袭指控:OpenAI对DeepSeek发起抄袭指控。
    • 技术反思:OpenAI创始人山姆·奥特曼承认DeepSeek的强大。
  1. 谷歌
    • 股价下跌:谷歌母公司Alphabet股价在DeepSeek事件后出现下跌。
    • 技术反思:谷歌等公司开始重新评估AI投资策略。
  1. 阿斯麦
    • 积极评价:阿斯麦总裁兼首席执行官富凯表示,DeepSeek推出高效AI模型是个好消息,有助于降低AI应用成本,为阿斯麦带来更多商机。

程序员参与吃瓜

  • 程序员是否有必要关注,如何参与这一场全球舆论?
  • 学习大模型应用门槛有多高?
  • java社区对大模型的应用跟进状态?

带着这些朴素的问题,我们从最简单的开始,自己动手本地搭建大模型,切身感受AI能为我们做什么,学习使用门槛有多低。

Ollama

什么是Ollama

Ollama 是一个用于本地运行和部署大型语言模型(LLM,Large Language Models)的平台。它使开发者能够在本地环境中运行 AI 模型,而不必依赖于云服务。这个工具支持多种类型的 LLM,能够帮助开发者更轻松地与 AI 模型交互、进行训练和调优。

Ollama 主要特点包括:

  1. 本地部署:Ollama 允许用户在本地运行多个大型语言模型,避免了云计算带来的延迟和隐私问题。
  2. 易于使用:它通过命令行工具和简单的 API,提供了直接与模型交互的方式。
  3. 多模型支持:支持各种类型的 LLM,比如 GPT 系列、LLaMA 等。
  4. 轻量级:它优化了模型运行的资源消耗,可以在普通的本地机器上运行,而不需要强大的 GPU 资源。

Ollama 适合那些希望在本地环境中控制和运行大型语言模型的开发者,尤其在需要减少延迟、保护数据隐私或避免过度依赖云计算的情况下特别有用。

官网

Ollama

支持多种平台

也可以使用docker安装

https://hub.docker.com/r/ollama/ollama

本次使用docker安装演示:

直接访问11434端口,可查看Ollama状态:curl http://localhost:11434

模型

有了平台,哪里去找可运行的大模型?Ollama也准备好了。

Ollama

查看模型详情

deepseek-r1:8b

使用风格跟docker非常类似,复制命令执行即可

ollama run deepseek-r1:1.5b
# docker
# docker exec -it ollam ollama run deepseek-r1:1.5b

安装完成之后,就可以使用本地的大模型进行普通的问答了

控制台问答用起来有些不舒服,我们可以用一些开源的web工具,如Open WebUI

Open WebUI

Open WebUI 是一个可扩展的、功能丰富且用户友好的自托管人工智能平台,设计为完全离线运行。它支持各种 LLM 运行器,如Ollama和OpenAI 兼容的 API,带有内置推理引擎用于检索增强生成(RAG),使其成为一个强大的人工智能部署解决方案。

官网

https://docs.openwebui.com

使用docker安装
docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data --name open-webui \
--restart always ghcr.io/open-webui/open-webui:main

安装完成之后,访问 http://localhost:3000

可以看到和ChatGPT的对话框相似。

能自动识别到本地通过Ollama运行的大模型,直接选择就可以愉快的对话了。

Lobe Chat

官网:LobeHub - LobeChat: Personal LLM productivity tool, surpassing the ChatGPT / OLLaMA user experience

使用docker安装
 docker run -d -p 3210:3210 --add-host=host.docker.internal:host-gateway -e OLLAMA_PROXY_URL=http://host.docker.internal:11434 lobehub/lobe-chat

访问3210端口:

配置ollama地址

开始对话

Spring整合Ollama

Spring AI 是 Spring 框架的一部分,它目的是为构建与人工智能(AI)和机器学习(ML)相关的应用程序提供支持。这个模块整合了常见的 AI 工具和库,简化了 Spring 开发者在应用中引入 AI 功能的过程。Spring AI 是为了让开发者能够以更简单、直观的方式将 AI 功能嵌入到 Spring 应用程序中,并提高生产力。

官网

Spring AI

新建工程

选择AI模块的Ollama

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.4.2</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <groupId>com.example.ai</groupId>
  <artifactId>spring-ai-demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>spring-ai-demo</name>

  <properties>
    <java.version>17</java.version>
    <spring-ai.version>1.0.0-SNAPSHOT</spring-ai.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-bom</artifactId>
        <version>${spring-ai.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

  <repositories>
    <repository>
      <id>spring-milestones</id>
      <name>Spring Milestones</name>
      <url>https://repo.spring.io/snapshot</url>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
  </repositories>

</project>

application.yaml

spring:
  application:
    name: spring-ai-demo
  ai:
    ollama:
      base-url: http://localhost:11434

代码demo


@RestController
@RequestMapping("/ai/ollama")
public class OllamaChatController {

    @Autowired
    private OllamaChatModel ollamaChatModel;

    @GetMapping("/chat")
    public Object chat(@RequestParam(value = "msg",defaultValue = "你好!") String msg) {
        String call = ollamaChatModel.call(msg);
        System.out.println(call);
        return call;
    }
}

启动服务,并访问:

RAG

什么是RGA?

RAG(Retrieval-Augmented Generation)是一种结合信息检索(Information Retrieval)和生成模型(Generative Models)的方法,用于提升自然语言处理(NLP)任务的性能。RAG 的核心思想是将信息检索与生成模型的能力相结合,通过检索外部知识来增强模型生成的质量,尤其是在需要大规模知识的场景下,如问答系统、对话生成和文档生成等。

RAG 与 LLM 配合使用的概念流程:

anythingLLM

官网:https://anythingllm.com/

安装:支持多端

docker安装:https://hub.docker.com/r/mintplexlabs/anythingllm

docker pull mintplexlabs/anythingllm:latest


docker run -d \
 --name anythingllm \
 --add-host=host.docker.internal:host-gateway \
 --health-cmd "/bin/bash /usr/local/bin/docker-healthcheck.sh || exit 1" \
 --health-interval 60s \
 --health-start-period 60s \
 --health-timeout 10s \
 -p 3001:3001/tcp \
 --restart=always \
 --user anythingllm \
 -w /app \
 mintplexlabs/anythingllm

访问:

可以在工作区上传自己的知识库,anythingLLM提供检索能力。

连接一些常见的数据源

RAGflow

https://github.com/infiniflow/ragflow/blob/main/README_zh.md

spring ai整合知识库

前面通过RAG介绍知道,需要将知识存到一个向量数据库中。

向量数据库

VectorDBBench: An Open-Source VectorDB Benchmark Tool

DB-Engines Ranking

演示使用pgvector

安装向量数据库pgvector(postgres封装提供)

docker run -d --name pgvector -p 5433:5433 \
  -e POSTGRES_USER=root -e POSTGRES_PASSWORD=root pgvector/pgvector:pg17

选择数据向量化模型

确定使用什么embedding向量化数据。

下载量最大的是这个nomic-embed-text

ollama pull nomic-embed-text

注意:embedding模型无需run命令

创建向量数据库

建库建表

create database spring_ai;

CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE IF NOT EXISTS vector_store (
	id uuid DEFAULT uuid_generate_v4() PRIMARY KEY,
	content text,
	metadata json,
	embedding vector(768) // 768 is the nomic-embed-text default embedding dimension
);

CREATE INDEX ON vector_store USING HNSW (embedding vector_cosine_ops);

application.yaml

spring:
  application:
    name: demo-spring-ai
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://47.236.8.42:5432/spring_ai
    username: root
    password: root
  ai:
    vectorstore:
      pgvector:
        index-type: HNSW
        distance-type: COSINE_DISTANCE
        dimensions: 768
        max-document-batch-size: 10000
    ollama:
      embedding:
        enabled: true
        model: nomic-embed-text
      base-url: http://47.236.8.42:11434
      chat:
        model: deepseek-r1:1.5b
        options:
          temperature: 0.1

使用java代码,利用nomic-embed-text embedding模型向量化文本数据,并将向量数据保存到向量数据库pgvector中。

@Resource
private VectorStore vectorStore;

@Test
void save() throws Exception {
    ClassPathResource classPathResource = new ClassPathResource("xxxjjj.txt");
    String content = FileUtils.readFileToString(classPathResource.getFile(), "UTF-8");
    List<Document> list = Arrays.stream(content.split("([。.;])"))
                        .map(Document::new).collect(Collectors.toList());
    vectorStore.write(list);
}

测试RAG能力代码,可以查询知识库相关内容。

@RestController
@RequestMapping("/ai/ollama")
public class OllamaChatController {

    @Autowired
    private ChatClient chatClient;

    @GetMapping("/chat")
    public Object chat(@RequestParam(value = "msg",defaultValue = "你好!") String msg) {
        String prompt = chatClient.prompt().user(msg).call().content();
        System.out.println(prompt);
        return prompt;
    }
}


@Configuration
public class OllamaConfiguration {

    @Autowired
    private OllamaChatModel ollamaChatModel;
    @Autowired
    private VectorStore vectorStore;

    @Bean
    public ChatClient chatClient(ChatMemory chatMemory) {
        return ChatClient.builder(ollamaChatModel)
                .defaultAdvisors(
                        new MessageChatMemoryAdvisor(chatMemory),
                        new QuestionAnswerAdvisor(vectorStore)
                )
                .build();
    }


    @Bean
    public ChatMemory chatMemory() {
        return new InMemoryChatMemory();
    }
}

测试:

向量化的知识库文本数据为

数据库表内容:

测试问答:

参考链接

DeepSeek

Ollama

LM Studio - Discover, download, and run local LLMs

🏡 Home | Open WebUI

LobeChat: Personal LLM productivity tool

Introduction :: Spring AI Reference

AnythingLLM | The all-in-one AI application for everyone

ragflow/README_zh.md at main · infiniflow/ragflow

huggingface

ModelScope 魔搭社区

Cursor - The AI Code Editor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值