当前位置: 首页 > news >正文

SpringAI简单使用(本地模型+自定义知识库)

Ollama

简介

Ollama是一个开源的大型语言模型服务工具,它允许用户在本地机器上构建和运行语言模型,提供了一个简单易用的API来创建、运行和管理模型,同时还提供了丰富的预构建模型库,这些模型可以轻松地应用在多种应用场景中。Ollama支持多种操作系统,包括macOS、Windows、Linux,并提供Docker镜像,方便用户在不同环境中部署使用 。

Ollama的特点包括轻量级和可扩展性,它允许用户通过命令行界面(CLI)或REST API与语言模型进行交互。用户可以下载并运行预训练的模型,如Llama 2、Mistral、Dolphin Phi等,这些模型具有不同的参数量和大小,适用于不同的使用场景和需求 。

此外,Ollama还支持模型的自定义,用户可以根据自己的需求调整模型参数,或者导入自有的模型进行使用。例如,用户可以通过创建Modelfile来定制模型,Modelfile是一个配置文件,用于定义和管理Ollama平台上的模型,通过模型文件可以创建新模型或修改现有模型,以适应特定的应用场景 。

安装

官网:https://ollama.com/
Github:https://github.com/ollama/ollama

进入官网之后,点击download下载对应系统版本进行安装。
ollama下载

模型使用llama3
官网:https://ollama.com/library/llama3

ollama下载完成之后,打开命令行,运行命令ollama run llama3,自动下载模型,在命令行可进行简单的聊天
llama3命令行
llama3有8B和70B,上面的命令运行之后,默认选择的是8B
在这里插入图片描述

客户端

python客户端:https://github.com/ollama/ollama-python

import ollama
response = ollama.chat(model='llama3', messages=[{'role': 'user','content': 'Why is the sky blue?',},
])
print(response['message']['content'])

流式响应:

import ollamastream = ollama.chat(model='llama3',messages=[{'role': 'user', 'content': '用中文讲一个笑话'}],stream=True,
)for chunk in stream:print(chunk['message']['content'], end='', flush=True)

Web UI

Ollama的Github中推荐的UI项目:
在这里插入图片描述
这里我们使用hollama:https://github.com/fmaclen/hollama

先克隆hollama的源代码,进入目录之后运行npm i --registry=https://registry.npmmirror.com安装依赖,然后运行npm run dev启动项目

进入setting中设置ServerModel
在这里插入图片描述
然后再sessions里面可以进行聊天

在这里插入图片描述

Spring AI

官网:https://docs.spring.io/spring-ai/reference/index.html

ollama文档:https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html

1、通过https://start.spring.io/创建项目,并引入Ollama AI
在这里插入图片描述
pom.xml如下:

<?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.3.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>pers.fengxu</groupId><artifactId>springaidemo</artifactId><version>0.0.1-SNAPSHOT</version><name>springaidemo</name><description>Demo project for Spring Boot</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>22</java.version><spring-ai.version>1.0.0-M1</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.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/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>

配置文件application.properties

spring.application.name=springaidemo
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.options.model=llama3

新建controller

package pers.fengxu.springaidemo.controller;import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.ai.ollama.api.OllamaApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;import java.util.Map;@RestController
public class ChatController {private final OllamaChatModel chatModel;@Autowiredpublic ChatController(OllamaChatModel chatModel) {this.chatModel = chatModel;}@GetMapping("/ai/generate")public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return Map.of("generation", chatModel.call(message));}@GetMapping("/ai/generateStream")public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {Prompt prompt = new Prompt(new UserMessage(message));return chatModel.stream(prompt);}}

新建启动类

package pers.fengxu.springaidemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringaidemoApplication {public static void main(String[] args) {SpringApplication.run(SpringaidemoApplication.class, args);}}

启动项目之后,访问:http://localhost:8080/ai/generate

在这里插入图片描述

AnyThingLLM

简介

AnythingLLM 是一款强大的人工智能商业智能工具,用于商业智能和文档处理,具有以下主要特点:

  1. 多平台支持:适用于 MacOS、Linux 和 Windows 系统。
  2. 隐私保护:可以在本地运行,无需互联网连接。
  3. 自定义模型:支持使用闭源模型如 GPT-4 或自定义微调模型如 Llama2。
  4. 多文档处理:不仅支持 PDF,还能处理 Word 文档等多种格式。
  5. 工作区管理:通过“工作区”管理文档,保持上下文清晰。
  6. 成本效益高:管理大型文档时,成本比其他解决方案节省高达 90%。
  7. 开发者友好:提供完整的开发者 API,支持自定义集成。
  8. 多用户支持:支持多用户实例和权限管理。
  9. 遥测功能:可选的匿名使用信息收集,帮助改进产品。

安装配置

官网:https://useanything.com/download

下载之后,双击安装,之后打开进行初始设置:
在这里插入图片描述
选择Ollama
在这里插入图片描述
继续
在这里插入图片描述
设置工作区名称:
在这里插入图片描述
可以在设置里面进行语言和其他相关属性的配置:

在这里插入图片描述

在这里插入图片描述

知识库导入

现在先问ai一个它可能不知道的问题,例如“高启强是谁?”,它的回答显然有些驴头不对马嘴。

在这里插入图片描述

点击左边的上传按钮

在这里插入图片描述

左边支持网址和文本

在这里插入图片描述
所以可以直接讲百度百科的链接提供给ai学习:

地址为:https://baike.baidu.com/item/%E9%AB%98%E5%90%AF%E5%BC%BA/59990049

在这里插入图片描述
解析网页完成之后,将该知识库移动至当前空间
在这里插入图片描述
点击保存
在这里插入图片描述

然后再次输入问题,便可以得到我们想要的答案。

在这里插入图片描述
备注:如果电脑性能不够可以选择阿里的qwen2:0.5b模型,只需要几百兆,运行ollama run qwen2:0.5b即可安装运行,并且对中文的支持更好,对应网址:https://ollama.com/library/qwen2:0.5b

相关文章:

SpringAI简单使用(本地模型+自定义知识库)

Ollama 简介 Ollama是一个开源的大型语言模型服务工具&#xff0c;它允许用户在本地机器上构建和运行语言模型&#xff0c;提供了一个简单易用的API来创建、运行和管理模型&#xff0c;同时还提供了丰富的预构建模型库&#xff0c;这些模型可以轻松地应用在多种应用场景中。O…...

为什么要从C语言开始编程

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;很多小伙伴在入门编程时。都…...

[数据集][目标检测]导盲犬拐杖检测数据集VOC+YOLO格式4635张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4635 标注数量(xml文件个数)&#xff1a;4635 标注数量(txt文件个数)&#xff1a;4635 标注…...

数据结构(稀疏数组)

简介 稀疏数组是一种数据结构&#xff0c;用于有效地存储和处理那些大多数元素都是零或者重复值的数组。在稀疏数组中&#xff0c;只有非零或非重复的元素会被存储&#xff0c;从而节省内存空间。 案例引入 假如想把下面这张表存入文件&#xff0c;我们会怎么做&#xff1f;…...

python 爬虫技术 第02节 基础复习

Python基础复习 Python 是一种高级、通用、解释型的编程语言&#xff0c;以其简洁的语法和强大的功能在数据科学、Web 开发、自动化脚本编写、机器学习等领域广泛使用。下面是一些 Python 基础概念的复习&#xff1a; 1. 数据类型 Python 支持多种内置数据类型&#xff0c;包…...

数据结构-C语言-排序(3)

代码位置&#xff1a;test-c-2024: 对C语言习题代码的练习 (gitee.com) 一、前言&#xff1a; 1.1-排序定义&#xff1a; 排序就是将一组杂乱无章的数据按照一定的规律&#xff08;升序或降序&#xff09;组织起来。(注&#xff1a;我们这里的排序采用的都为升序) 1.2-排序分…...

【分布式事务】怎么解决分布式场景下数据一致性问题

分布式事务的由来 拿充值订单举个栗子吧&#xff0c;假设&#xff1a;原本订单模块和账户模块是放在一起的&#xff0c;现在需要做服务拆分&#xff0c;拆分成订单服务&#xff0c;账户余额服务。原本收到充值回调后&#xff0c;可以将修改订单状态和扣减余额放在一个mysql事务…...

C# 中的委托

委托的概念 在C#中&#xff0c;委托是一种引用类型&#xff0c;它表示对方法的引用&#xff0c;即委托就是一种用来指向一个方法的引用类型变量。委托的声明类似于方法签名&#xff0c;但是关键字是delegate。下面是一个委托的声明和使用的例子&#xff1a; // 声明一个委托 p…...

通过docker构建基于LNMP的WordPress项目

目录 1.准备nginx 2.准备mysql 3.准备php 4.构建各镜像 5.运行wordpress 1、项目环境&#xff1a; 1.1 &#xff08;1&#xff09;公司在实际的生产环境中&#xff0c;需要使用Docker 技术在一台主机上创建LNMP服务并运行Wordpress网站平台。然后对此服务进行相关的性能…...

2024新版IntelliJ IDEA修改包名 全网最简单最粗暴的方法

问题再现 我们在网上淘一些后端框架 又或者是开源的项目 如果要变成自己的 难免会去改包名 即把com.后面的内容改成自己自定义的 第一次我们直接用网络上的方法 shift F6 快捷键 可以修改包名 出现以下情况 进行修改 我们发现失败了 并没有像预计的一样直接把包名修…...

C#中处理Socket粘包

在C#中使用Socket进行网络通信时&#xff0c;粘包问题是常见的。粘包问题通常发生在TCP协议中&#xff0c;因为TCP是流式协议&#xff0c;数据可能会被分割成多个包发送&#xff0c;也可能多个小包会被合并成一个大包接收。 处理粘包问题的常见方法是使用消息分隔符或消息长度…...

7.19IO

思维导图 第一题&#xff1a;测试错误检查锁和递归锁是否会造成死锁状态 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #i…...

【Vue】深入了解 Axios 在 Vue 中的使用:从基本操作到高级用法的全面指南

文章目录 一、Axios 简介与安装1. 什么是 Axios&#xff1f;2. 安装 Axios 二、在 Vue 组件中使用 Axios1. 发送 GET 请求2. 发送 POST 请求 三、Axios 拦截器1. 请求拦截器2. 响应拦截器 四、错误处理五、与 Vuex 结合使用1. 在 Vuex 中定义 actions2. 在组件中调用 Vuex acti…...

【Qt】窗口

文章目录 QMainWindow菜单栏工具栏状态栏浮动窗口对话框自定义对话框Qt内置对话框QMessageBox QMainWindow Qt中的主窗口以QMainWindow表示&#xff0c;其总体结构如下&#xff1a; 菜单栏 菜单栏MenuBar&#xff0c;可包含多个菜单Menu&#xff0c;每个菜单也可以包含多个菜…...

代码随想录训练营【贪心算法篇】

贪心 注&#xff1a;本文代码来自于代码随想录 贪心算法一般分为如下四步&#xff1a; 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 这个四步其实过于理论化了&#xff0c;我们平时在做贪心类的题目 很难去按照这四步…...

Spark中的JOIN机制

Spark中的JOIN机制 1、Hash Join概述2、影响JOIN的因素3、Spark中的JOIN机制3.1、Shuffle Hash Join3.2、Broadcast Hash Join3.3、Sort Merge Join3.4、Cartesian Product Join3.5、Broadcast Nested Loop Join4、Spark中的JOIN策略5、Spark JOIN机制与策略总结5.1、Spark中的…...

WebRTC QOS方法十三.1(TimestampExtrapolator接收时间预估)

一、背景介绍 虽然我们可通过时间戳的差值和采样率计算出发送端视频帧的发送节奏&#xff0c;但是由于网络延迟、抖动、丢包&#xff0c;仅知道视频发送端的发送节奏是明显不够的。我们还需要评估出视频接收端的视频帧的接收节奏&#xff0c;然后进行适当平滑&#xff0c;保证…...

深入了解 GCC

GCC&#xff0c;全称 GNU Compiler Collection&#xff0c;是 GNU 项目的一部分&#xff0c;是一个功能强大且广泛使用的编译器套件。它支持多种编程语言&#xff0c;包括 C、C、Fortran、Java、Ada 和 Go。GCC 具有高度的可移植性&#xff0c;几乎可以在所有现代计算机体系结构…...

vscode 打开远程bug vscode Failed to parse remote port from server output

vscode 打开远程bug vscode Failed to parse remote port from server output 原因如图&#xff1a; 解决&#xff1a;...

前端组件化技术实践:Vue自定义顶部导航栏组件的探索

摘要 随着前端技术的飞速发展&#xff0c;组件化开发已成为提高开发效率、降低维护成本的关键手段。本文将以Vue自定义顶部导航栏组件为例&#xff0c;深入探讨前端组件化开发的实践过程、优势以及面临的挑战&#xff0c;旨在为广大前端开发者提供有价值的参考和启示。 一、引…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...