win10部署本地大模型langchain+ollama

一、环境

windows10、Python 3.9.18、langchain==0.1.9

二、ollama下载

Download Ollama on Windows

0.1.33版本链接icon-default.png?t=N7T8https://objects.githubusercontent.com/github-production-release-asset-2e65be/658928958/35e38c8d-b7f6-48ed-8a9c-f053d04b01a9?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240503%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240503T004753Z&X-Amz-Expires=300&X-Amz-Signature=ead8e1666fde6b2f23c86dec1c46ef2759fa6f05f60de5a506103db53e03478f&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=658928958&response-content-disposition=attachment%3B%20filename%3DOllamaSetup.exe&response-content-type=application%2Foctet-stream

三、ollama安装及迁移到其他盘

1、ollama安装及模型下载

直接运行下载的exe文件即可。安装完成后win+r打开cmd,输入ollama,有显示以下的内容就是安装成功

2、模型下载

详细见library,这里执行ollama run qwen:7b下载了阿里的,4.2G

3、默认位置

ollama及其下载的模型默认在c盘,会占用较大的空间。

ollama默认安装位置在C:\Users\XX\AppData\Local\Programs\Ollama

下载的模型默然安装在C:\Users\XX\.ollama

4、迁移操作

(1)将C:\Users\XX\AppData\Local\Programs\Ollama这个文件夹移动到其他盘(D:\Ollama)

(2)修改环境变量的用户变量,将PATH变量中的C:\Users\XX\AppData\Local\Programs\Ollama修改为步骤(1)的位置

(3)在系统变量中新建一个OLLAMA_MODELS的变量,位置根据其他盘的存储空间去设置,比如在ollama的文件夹下(D:\Ollama\models)

(4)将以下2个文件迁移到新目录

四、ollama的独立使用

1、打印版本号:ollama -v

2、打印已下载的模型:ollama list

3、启动模型:ollama run qwen:7b;(没有的话会先下载)

4、退出会话:crtl+d

5、关闭ollama:任务栏小图标quit

五、ollama+langchain搭建应用服务

1、启动ollama服务

在cmd执行ollama serve,默认占用端口:11434

2、langchain中的封装

miniconda3\envs\py39\Lib\site-packages\langchain_community\llms\ollama.py

class _OllamaCommon(BaseLanguageModel):base_url: str = "http://localhost:11434""""Base url the model is hosted under."""model: str = "llama2""""Model name to use."""mirostat: Optional[int] = None"""Enable Mirostat sampling for controlling perplexity.(default: 0, 0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0)"""mirostat_eta: Optional[float] = None"""Influences how quickly the algorithm responds to feedbackfrom the generated text. A lower learning rate will result inslower adjustments, while a higher learning rate will makethe algorithm more responsive. (Default: 0.1)"""mirostat_tau: Optional[float] = None"""Controls the balance between coherence and diversityof the output. A lower value will result in more focused andcoherent text. (Default: 5.0)"""num_ctx: Optional[int] = None"""Sets the size of the context window used to generate thenext token. (Default: 2048)	"""num_gpu: Optional[int] = None"""The number of GPUs to use. On macOS it defaults to 1 toenable metal support, 0 to disable."""num_thread: Optional[int] = None"""Sets the number of threads to use during computation.By default, Ollama will detect this for optimal performance.It is recommended to set this value to the number of physicalCPU cores your system has (as opposed to the logical number of cores)."""num_predict: Optional[int] = None"""Maximum number of tokens to predict when generating text.(Default: 128, -1 = infinite generation, -2 = fill context)"""repeat_last_n: Optional[int] = None"""Sets how far back for the model to look back to preventrepetition. (Default: 64, 0 = disabled, -1 = num_ctx)"""repeat_penalty: Optional[float] = None"""Sets how strongly to penalize repetitions. A higher value (e.g., 1.5)will penalize repetitions more strongly, while a lower value (e.g., 0.9)will be more lenient. (Default: 1.1)"""temperature: Optional[float] = None"""The temperature of the model. Increasing the temperature willmake the model answer more creatively. (Default: 0.8)"""stop: Optional[List[str]] = None"""Sets the stop tokens to use."""tfs_z: Optional[float] = None"""Tail free sampling is used to reduce the impact of less probabletokens from the output. A higher value (e.g., 2.0) will reduce theimpact more, while a value of 1.0 disables this setting. (default: 1)"""top_k: Optional[int] = None"""Reduces the probability of generating nonsense. A higher value (e.g. 100)will give more diverse answers, while a lower value (e.g. 10)will be more conservative. (Default: 40)"""top_p: Optional[float] = None"""Works together with top-k. A higher value (e.g., 0.95) will leadto more diverse text, while a lower value (e.g., 0.5) willgenerate more focused and conservative text. (Default: 0.9)"""system: Optional[str] = None"""system prompt (overrides what is defined in the Modelfile)"""template: Optional[str] = None"""full prompt or prompt template (overrides what is defined in the Modelfile)"""format: Optional[str] = None"""Specify the format of the output (e.g., json)"""timeout: Optional[int] = None"""Timeout for the request stream"""headers: Optional[dict] = None"""Additional headers to pass to endpoint (e.g. Authorization, Referer).This is useful when Ollama is hosted on cloud services that requiretokens for authentication."""

3、示例

(1)基于给定的信息回答用户的问题

这里我们给出的信息是【"小明是一位科学家", "小明在balala地区工作"】,要求大模型介绍小明

(2)“阅读”一份文档后回答用户关于文档内容的问题

from langchain_community.document_loaders import PyPDFLoader
from langchain_community.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chain
from langchain.chains import create_history_aware_retriever
from langchain_core.prompts import MessagesPlaceholder
from langchain_community.chat_models import ChatOllama
from langchain_community.embeddings import OllamaEmbeddingsmodel="qwen:7b"
llm = ChatOllama(model=model, temperature=0)
loader = PyPDFLoader('../file/test.pdf')
docs = loader.load()
embeddings = OllamaEmbeddings(model=model)
text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(docs)[:10]#解析前10页
vector = FAISS.from_documents(documents, embeddings)
# vector = FAISS.from_texts(["小明是一位科学家", "小明在balala地区工作"],embeddings)
retriever = vector.as_retriever()
prompt1 = ChatPromptTemplate.from_messages([MessagesPlaceholder(variable_name="chat_history"),("user", "{input}"),("user", "在给定上述对话的情况下,生成一个要查找的搜索查询,以获取与对话相关的信息")
])
retriever_chain = create_history_aware_retriever(llm, retriever, prompt1)
prompt2 = ChatPromptTemplate.from_messages([("system", "根据文章内容回答问题:{context}"),MessagesPlaceholder(variable_name="chat_history"),("user", "{input}"),
])
document_chain = create_stuff_documents_chain(llm, prompt2)
retrieval_chain = create_retrieval_chain(retriever_chain, document_chain)
chat_history = []
while True:question = input('用户:')response = retrieval_chain.invoke({"chat_history": chat_history,"input": question})answer = response["answer"]chat_history.extend([question, answer])print('AI:', answer)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1410687.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

一键切换ip地址的软件哪个好用

随着互联网的快速发展,IP地址的重要性日益凸显。它不仅代表着每台设备在网络上的唯一标识,还关乎到我们的网络隐私、访问权限以及工作效率。一键切换IP地址的软件应运而生,为我们提供了极大的便利。那么,在众多选择中,…

前端 JS 异常那些事

前言 人无完人,所以代码总会出异常的,异常并不可怕,关键是怎么处理 什么是异常 程序发生了意想不到的情况,影响到了程序的正确运行 从根本上来说,异常就是一个普通的对象,其保存了异常发生的相关信息&a…

《罪与罚》读后感

陀思妥耶夫斯基和列夫托尔斯泰是公认的俄国文学黄金时代的两座高峰,分别代表着俄国文学的“深度”和“广度”。列夫托尔斯泰的鸿篇巨著《复活》《安娜卡列尼娜》等等都已经拜读过,但陀思妥耶夫斯基的作品却一本也没有看过,实在是有点遗憾。这…

JUC并发-共享模型-工具-线程池

1、自定义线程池 每创建一个线程资源,就要占用一定的内存; ①如果是高并发场景,一下子来了很多任务,如果为每个任务都创建一个线程,对内存占用较大,甚至可能出现OOM。 ②大量任务来了,创建了很…

中国人自己编的百科全书,百科知识全书10册(外国卷)

一、电子书描述 中国人自己编的与国际接轨的百科全书,也是真正意义上的现代百科全书,在坚持全面反映了人类知识的同时,也突出了中国特色,充分显示世界科学文化的新成就和新发展。本套电子书,大小367.39M,共…

每日一题:两地调度

公司计划面试 2n 人。给你一个数组 costs ,其中 costs[i] [, ] 。第 i 人飞往 a 市的费用为 ,飞往 b 市的费用为 。 返回将每个人都飞到 a 、b 中某座城市的最低费用,要求每个城市都有 n 人抵达。 示例 1: 输入:c…

【深耕 Python】Data Science with Python 数据科学(19)书402页练习题:模型准确率对比研究、KMeans算法的一点探讨

写在前面 关于数据科学环境的建立,可以参考我的博客: 【深耕 Python】Data Science with Python 数据科学(1)环境搭建 往期数据科学博文一览: 【深耕 Python】Data Science with Python 数据科学(2&…

Redis 实战1

SDS Redis 只会使用 C 字符串作为字面量, 在大多数情况下, Redis 使用 SDS (Simple Dynamic String,简单动态字符串)作为字符串表示。 比起 C 字符串, SDS 具有以下优点: 常数复杂度获取字符串…

【高质量精品】2024五一数学建模C题成品论文22页matlab和13页python完整建模代码、可视图表+分解结果等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下卡片,那是获取资料的入口! 【高质量精品】2024五一数学建模C题成品论文22页matlab和13页python完整建模代码、可视图表分解结果等「首先来看看目前已有的资料,还会不断更新哦…

『MySQL 实战 45 讲』19 - 为什么我只查一行的语句,也执行这么慢?

为什么我只查一行的语句,也执行这么慢? 需求:创建一个表,有两个字段 id 和 c,并且在里面插入了 10 万行记录 CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB;delimit…

硬件知识积累 DP 接口简单介绍以及 DP信号飞线到显示屏的问题

1. DP 接口的介绍 定义与起源: DP接口是由PC及芯片制造商联盟开发,并由视频电子标准协会(VESA)标准化的数字式视频接口标准。它的设计初衷是为了取代传统的VGA、DVI和FPD-Link(LVDS)接口,以满足…

Qt QImageReader类介绍

1.简介 QImageReader 是用于读取图像文件的类。它提供了读取不同图像格式的功能,包括但不限于 PNG、JPEG、BMP 等。QImageReader 可以用于文件,也可以用于任何 QIODevice,如 QByteArray ,这使得它非常灵活。 QImageReader 是一个…

323_C++_QT_QProcess执行cmd解压、压缩、删除tar.gz等等其他压缩包文件到指定目录,不需要外部库,QT自带API的就行

// decompressPath : 解压到此目录 // fileName : 解压的tar.gz文件名executeCommand(decompressPath , QString::fromStdString(fileName));// 开始解压 void executeCommand

uni-app scroll-view隐藏滚动条的小细节 兼容主流浏览器

开端 想写个横向滚动的列表适配浏览器,主要就是隐藏一下滚动条在手机上美观一点。 但是使用uni-app官方文档建议的::-webkit-scrollbar在目标标签时发现没生效。 .scroll-view_H::-webkit-scrollbar{display: none; }解决 F12看了一下,原来编译到浏览…

漏洞扫描神器:Nessus 保姆级教程(附破解步骤)

一、介绍 Nessus是一款广泛使用的网络漏洞扫描工具,用于发现和评估计算机系统和网络中的安全漏洞。它是一款功能强大的商业工具,由Tenable Network Security开发和维护。 以下是Nessus的一些主要特点和功能: 1. 漏洞扫描:Nessu…

转义字符解释

也许在一些代码中你看到 \n, \0 很纳闷是啥。其实在字符中有一组特殊的字符是转义字符,转义字符顾名思义:转变原来的意思的字符。 比如:我们有字符n,在字符串中打印的时候自然能打印出这个字符,如下: #in…

通过 API 接口,实现增值税发票智能识别

增值税发票智能识别是一项应用于财务管理和数据分析的技术,通过使用API接口,我们可以轻松地将增值税发票的各项信息进行结构化识别。本文将详细介绍如何通过API接口实现增值税发票的智能识别,并给出相应的代码说明。 首先,我们需…

自动安装环境shell脚本使用和运维基础使用讲解

title: 自动安装环境shell脚本使用和运维基础使用讲解 tags: [shell,linux,运维] categories: [开发记录,系统运维] date: 2024-3-27 14:10:15 description: 准备和说明 确认有网。 依赖程序集,官网只提供32位压缩包,手动编译安装后,在64位机…

Java 新手上路常见的5个经典问题,你遇到过吗?

当我们开始学习一门新的编程语言或者开发平台时,经常会遇到一些常见的问题。这些问题不仅是学习过程中的一部分,也是成长和提高的机会。 1. 空指针异常(NullPointerException) 空指针异常是 Java 开发中最常见的问题之一。它的产…

docker学习笔记3:VmWare CentOS7安装与静态ip配置

文章目录 一、安装CentOS71、下载centos镜像2、安装二、设置静态ip三、xshell连接centos本专栏的docker环境是在centos7里安装,因此首先需要会安装centos虚拟机。 本篇博客介绍如何在vm虚拟机里安装centos7。 一、安装CentOS7 1、下载centos镜像 推荐清华源,下载如下版本 …