OLLaMA搭建本地大模型

news2024/11/16 13:33:27

LLMChain是一个简单的链,接受一个提示模板,使用用户输入格式化它并从LLM返回响应。
其中,prompt_template是一个非常关键的组件,可以让你创建一个非常简单的链,它将接收用户输入,使用它格式化提示,然后将其发送到LLM。

1. 配置OLLaMA

在使用LLMChain之前,需要先配置OLLaMA,OLLaMA可以运行本地大语言模型,模型名称如下:
https://ollama.com/library
每个模型都有其特点和适用场景:

  1. Llama 2:这是一个预训练的大型语言模型,具有7B、13B和70B三种不同规模的模型。Llama 2增加了预训练语料,上下文长度从2048提升到4096,使得模型能够理解和生成更长的文本。
  2. OpenHermes:这个模型专注于代码生成和编程任务,适合用于软件开发和脚本编写等场景。
  3. Solar:这是一个基于Llama 2的微调版本,专为对话场景优化。Solar在安全性和有用性方面进行了人工评估和改进,旨在成为封闭源模型的有效替代品。
  4. Qwen:7B:这是一个中文微调过的模型,特别适合处理中文文本。它需要至少8GB的内存进行推理,推荐配备16GB以流畅运行。
    综上所述,这些模型各有侧重点,用户可以根据自己的需求选择合适的模型进行使用。
    下载的模型列表,可以通过以下命令来查看:
ollama list
NAME                ID              SIZE    MODIFIED     
llama2:latest       78e26419b446    3.8 GB  38 hours ago    
llama2-chinese:13b  990f930d55c5    7.4 GB  2 days ago      
qwen:7b             2091ee8c8d8f    4.5 GB  7 days ago      
qwen:latest         d53d04290064    2.3 GB  2 days ago 

1.1 安装

ollama官网 https://ollama.com/

1.2 下载模型

以通义千问模型为例:
ollama run 模型名
ollama run qwen:7b

qwen下载.png

qwen使用.png

第一次下载时间长点,后面再运行就不用下载了

2. langchain

2.1.LLMChain调用

实现目标:创建LLM链。假设我们想要创建一个公司名字
英文版

from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.llms import Ollama

prompt_template = "What is a good name for a company that makes {product}?"

ollama_llm = Ollama(model="qwen:7b")
llm_chain = LLMChain(
    llm = ollama_llm,
    prompt = PromptTemplate.from_template(prompt_template)
)
print(llm_chain("colorful socks"))

中文版

from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.llms import Ollama

prompt_template = "请给制作 {product} 的公司起个名字,只回答公司名即可"

ollama_llm = Ollama(model="qwen:7b")
llm_chain = LLMChain(
    llm = ollama_llm,
    prompt = PromptTemplate.from_template(prompt_template)
)
print(llm_chain("袜子"))
# print(llm_chain.run("袜子"))    # 加个.run也可

输出:{'product': '袜子', 'text': '"棉语袜业公司"\n\n\n'}

print(llm_chain.predict("袜子"))
输出:棉语袜业公司

run和 predict的区别是

  • llm_chain.run:结合 输入{product} 和 大模型输出内容一起输出
  • llm_chain.predict :只给出大模型输出内容

2.2.Model调用

直接调用llama2模型

from langchain_community.llms import Ollama

llm = Ollama(model="llama2")

response = llm.invoke("Who are you")

print(response)

运行输出结果:

I'm LLaMA, an AI assistant developed by Meta AI that can understand and respond
to human input in a conversational manner. I'm here to help you with any questions
 or topics you'd like to discuss! 
Is there anything specific you'd like to talk about?

3.本地化LLM

前面讲到,可以通过ollama run llama2 可以直接访问大模型:

>>> hello
Hello! It's nice to meet you. Is there something I can help you 
with or would you like to chat?

>>> tell me a joke
Sure, here's one:

Why don't scientists trust atoms?
Because they make up everything!

I hope that brought a smile to your face 😄. Is there anything 
else I can assist you with?

>>> Send a message (/? for help)

langchain集成
可以通过langchain本地代码方式集成实现,实现方式如下:

ollama_host = "localhost"
ollama_port = 11434
ollama_model = "llama2"

from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

if __name__ == "__main__":
    llm = Ollama(base_url = f"http://{ollama_host}:{ollama_port}",
                 model= ollama_model,
                 callback_manager = CallbackManager([StreamingStdOutCallbackHandler()]))

    while True:
        query = input("\n\n>>>Enter a query:")
        llm(query)

运行后,显示效果如下:

>>>Enter a query:hello
Hello! It's nice to meet you. Is there something I can help you with or would you like to chat?

>>>Enter a query:tell me a joke
Sure! Here's one:

Why don't scientists trust atoms?
Because they make up everything!

I hope that made you smile! Do you want to hear another one?

>>>Enter a query:

4.定制化LLM

4.1.Modelfile

可以通过ModelFile的方式来对大模型进行本地定制化:
1.Create a Modelfile:

FROM llama2

SYSTEM """
You are responsible for translating user's query to English. You should only respond 
with the following content:
1. The translated content.
2. Introduction to some ket concepts or words in the translated content, to help 
users understand the context.
"""

2.创建LLM:

ollama create llama-translator -f ./llama2-translator.Modelfile

创建完后,ollama list 可以发现:

llama-translator:latest 40f41df44b0a    3.8 GB  53 minutes ago

3.运行LLM

ollama run llama-translator

运行结果如下:

>>> 今天心情不错

Translation: "Today's mood is good."

Introduction to some key concepts or words in the translated content:

* 心情 (xīn jìng) - mood, state of mind
* 不错 (bù hǎo) - good, fine, well

So, "今天心情不错" means "Today's mood is good." It is a simple sentence that expresses a positive emotional state. 
The word "心情" is a key term in Chinese that refers to one's emotions or mood, and the word "不错"
 is an adverb that can be translated as "good," "fine," or "well."

>>> 我爱你中国

Translation: "I love you China."

Introduction to some key concepts or words in the translated content:

* 爱 (ài) - love, loving
* 中国 (zhōng guó) - China, People's Republic of China

So, "我爱你中国" means "I love you China." It is a simple sentence that expresses affection
or fondness towards a country. The word "爱" is a key term in Chinese that refers to romantic
love, while the word "中国" is a geographical term that refers to the People's Republic of China.

>>> Send a message (/? for help)

4.2.自定义系统提示词

根据 ChatGPT 的使用经验,大家都知道系统提示词的重要性。好的系统提示词能有效地将大模型定制成自己需要的状态。在 Ollama 中,有多种方法可以自定义系统提示词。

首先,不少 Ollama 前端已提供系统提示词的配置入口,推荐直接利用其功能。此外,这些前端在底层往往是通过API与 Ollama 服务端交互的,我们也可以直接调用,并传入系统提示词选项:

curl http://localhost:11434/api/chat -d '{
  "model": "llama2-chinese:13b",
  "messages": [
    {
      "role": "system",
      "content": "以海盗的口吻简单作答。"
    },
    {
      "role": "user",
      "content": "天空为什么是蓝色的?"
    }
  ],
  "stream": false
}'

其中rolesystem的消息即为系统提示词,跟Modelfile里面的SYSTEM下面的定义差不多一个意思。
输出如下:

{
"model":"llama2-chinese:13b",
"created_at":"2024-04-29T01:32:08.448614864Z",
"message":{
     "role":"assistant",
     "content":"好了,这个问题太简单了。蓝色是由于我们的视觉系统处理光线而有所改变造成的。在水平方向看到的天空大多为天际辐射,
          其中包括大量的紫外线和可见光线。这些光线会被散射,而且被大气层上的大量分子所吸收,进而变成蓝色或其他相似的颜色。\n"
},
"done":true,
"total_duration":31927183897,
"load_duration":522246,
"prompt_eval_duration":224460000,
"eval_count":149,
"eval_duration":31700862000
}

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

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

相关文章

通信原理-思科实验四:静态路由项配置实验

实验四 静态路由项配置实验 一:实验内容 二:实验目的 三、实验原理 四、实验步骤 选择三个2811型号的路由器 R1、R2、R3 路由器默认只有两个快速以太网接口,为路由器R1和R3增加快速以太网接口模块NM-1FE-TX,安装后检查路由器的接…

C++入门基础:C++中的循环语句

循环语句是编程语言中用来重复执行一段代码直到满足特定条件的一种控制结构。它们对于处理需要重复任务的场景非常有用,比如遍历数组、累加数值、重复执行某项操作直到满足条件等。 但是在使用循环语句的时候需要注意下哈,有时候一不小心会构成死循环或者…

学习小型gpt源码(自用)

数据集构建_哔哩哔哩_bilibili (b站上有一系列课,从数据处理到模型构建和训练使用) 什么是batch? 为什么一个batch内的句子要一样长? 不同batch的长度可以不一样,但是同一个batch内长度一样!…

IDEA缓存和索引

IDEA缓存和索引 —2020年06月10日 IntelliJ IDEA首次加载项目的时候。都会创建索引,而创建索引的时间根项目的文件多少成正比。 IntelliJ IDEA的缓存和索引主要是用来加快文件查询,从而加快各种查找、代码提示等操作的速度。 某些特殊情况下&#xf…

SpringBoot项目如何引进MyBatis ?如何使用及操作数据库

一、创建SpringBoot项目,导入依赖 首先需要创建一个SpringBoot项目,然后再pom.xml文件中,右击选择”Generate“,依次进行下述操作:(同样也可以在项目创建的时候选择MyBatis Framework 和 MySQL Driver) 然…

GitLab添加TortoiseGIT生成SSH Key

文章目录 前言一、PuTTYgen二、GitLab 前言 GitLab是一个用于托管代码仓库和项目管理的Web平台,公司搭建自己的gitlab来管理代码,我们在clone代码的时候可以选择http协议,也可以选择ssh协议来拉取代码。 SSH (Secure Shell)是一种通过网络进…

算法工程师第十九天(理论基础 组合 组合总和III 电话号码的字母组合)

参考文献 代码随想录 一、组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2&#xff…

Windows本地启动Redis

找到本地redis目录 输入cmd,然后输入redis-server.exe redis.windows.conf,默认端口为6379 再新打开一个cmd,输入redis-cli.exe -p 6379 -a (你在redis.windows.conf中设置的密码)

Kubeflow 模型管理和训练优化的新工具

Kubeflow 显著简化了安全机器学习模型和大语言模型(LLMs)的开发、调优和管理。亮点包括: 模型注册表:集中管理机器学习模型、版本和制品。 LLMs 微调 API:简化使用自定义数据集微调 LLMs 的过程。 流水线&#xff1a…

如何在 SpringBoot 中优雅的做参数校验?

一、故事背景 关于参数合法性验证的重要性就不多说了,即使前端对参数做了基本验证,后端依然也需要进行验证,以防不合规的数据直接进入服务器,如果不对其进行拦截,严重的甚至会造成系统直接崩溃! 本文结合…

7月22日JavaSE学习笔记

Collection接口,还有一个父级接口Iterable可迭代的 Collection继承树 Set 集合 Set的底层是用Map实现(存储在key中,value中是空的Object对象) 有序:取出的顺序和添加的顺序是一样的。 List是有序的,Set是…

Idea2024 创建Meaven项目没有src文件夹

1、直接创建 新建maven项目,发现没有src/main/java 直接新建文件夹:右击项目名->new->Directory 可以看到idea给出了快捷创建文件夹的选项,可以根据需要创建,这里点击src/main/java 回车,可以看到文件夹已经创建…

搭建本地私有知识问答系统:MaxKB + Ollama + Llama3 (wsl网络代理配置、MaxKB-API访问配置)

目录 搭建本地私有知识问答系统:MaxKB、Ollama 和 Llama3 实现指南引言MaxKB+Ollama+Llama 3 Start buildingMaxKB 简介:1.1、docker部署 MaxKB(方法一)1.1.1、启用wls或是开启Hyper使用 WSL 2 的优势1.1.2、安装docker1.1.3、docker部署 MaxKB (Max Knowledge Base)MaxKB …

解决Windows 11更新错误0x800f081f的详细指南

在尝试更新Windows 11时,用户可能会遇到各种错误代码,其中之一是0x800f081f。这个错误通常与Windows更新组件或系统文件的损坏有关。本文将提供解决这一特定错误的详细步骤,并解释可能的原因。 错误代码0x800f081f概述 错误代码0x800f081f指…

【LLM】-08-搭建问答系统-语言模型,提问范式与 Token

目录 1、语言模型 1.1、训练过程: 1..2、大型语言模型分类: 1.3、指令微调模型训练过程: 2、Tokens 3、Helper function辅助函数 (提问范式) 4、计算token数量 1、语言模型 大语言模型(LLM)是通过预测下一个词…

【数据结构】搜索二叉树

二叉搜索树 二叉树的博客 在之前的数据结构的文章中已经基本对二叉树有一定的了解,二叉搜索树也是一种数据结构,下面将对二叉搜索树进行讲解。 二叉搜索树的概念 二叉搜索树又称为二叉排序树,它或者是一棵空树,或者是具有下面性…

汇凯金业:区块链技术包括哪些技术

区块链,作为一项颠覆性的技术,其应用场景日益广泛。然而,很多人对于区块链技术的组成部分却知之甚少。本文将深入探讨区块链技术所包含的各种技术组件,揭示其背后的工作原理,帮助读者更全面地理解区块链。 区块链技术…

最优化大模型效果之 RAG(一):Naive RAG

Hi,我是 Hyde,今天的话题是 RAG(Retrieval-Augmented Generation),一种用于优化大模型效果的方法,翻译成中文就是检索增强生成。 在之前的文章《最优化大模型效果的方向和思考》中,我们提到当前…

Google Test 学习笔记(简称GTest)

文章目录 一、介绍1.1 介绍1.2 教程 二、使用2.1 基本使用2.1.1 安装GTest (下载和编译)2.1.2 编写测试2.1.3 运行测试2.1.4 高级特性2.1.5 调试和分析 2.2 源码自带测试用例2.3 TEST 使用2.3.1 TestCase的介绍2.3.2 TEST宏demo1demo2 2.3.3 TEST_F宏2.3…

2-45 基于matlab的递归最小二乘法(RLS)对声音信号去噪

基于matlab的递归最小二乘法(RLS)对声音信号去噪,并对消噪前后的信号进行FFT分析,对比消噪前后的效果。可替换自己的声音信号进行分析。程序已调通,可直接运行。 2-45 递归最小二乘法(RLS) FFT分析 - 小红书…