当前位置: 首页 > 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux处理文件sed
  • Java 新手学习线路,Java 学习路线是怎样的?
  • uniapp自定义tabBar
  • unity2022 il2cpp 源码编译
  • 信息检索(39):Condenser: a Pre-training Architecture for Dense Retrieval
  • SpringBoot源码深度解析
  • # Redis 入门到精通(九)-- 主从复制(1)
  • buu做题(6)
  • 时间卷积网络(TCN):序列建模的强大工具(附Pytorch网络模型代码)
  • 入门 git
  • MySQL:SELECT 语句
  • Android 11 HAL层集成FFMPEG
  • Flink源码学习资料
  • 机体坐标系和导航坐标系
  • 【中项】系统集成项目管理工程师-第2章 信息技术发展-2.1信息技术及其发展-2.1.1计算机软硬件与2.1.2计算机网络
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • CentOS 7 防火墙操作
  • ECMAScript入门(七)--Module语法
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Hexo+码云+git快速搭建免费的静态Blog
  • idea + plantuml 画流程图
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java,console输出实时的转向GUI textbox
  • October CMS - 快速入门 9 Images And Galleries
  • orm2 中文文档 3.1 模型属性
  • PAT A1017 优先队列
  • Python 基础起步 (十) 什么叫函数?
  • Spring Cloud Feign的两种使用姿势
  • Yeoman_Bower_Grunt
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 区块链分支循环
  • 如何合理的规划jvm性能调优
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 一些关于Rust在2019年的思考
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • ‌移动管家手机智能控制汽车系统
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (不用互三)AI绘画工具应该如何选择
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (七)Knockout 创建自定义绑定
  • (三) diretfbrc详解
  • (三)elasticsearch 源码之启动流程分析
  • (十) 初识 Docker file
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (四)linux文件内容查看
  • (四)鸿鹄云架构一服务注册中心
  • (四)进入MySQL 【事务】
  • (一)插入排序
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失