Ollama简明教程
xsobi 2024-12-06 20:28 21 浏览
这是深入研究 Ollama 的第一部分,以及我所学到的有关本地 LLM 的知识以及如何将它们用于基于推理的应用程序。在这篇文章中,你将了解——
- 如何使用 Ollama
- 如何在 Ollama 中创建自己的模型
- 如何使用 Ollama 构建聊天机器人
1、首先,一些背景
在本地 LLM 领域,我首先遇到了 LMStudio。虽然应用程序本身易于使用,但我喜欢 Ollama 提供的简单性和可操作性。要了解有关 Ollama 的更多信息,您可以访问此处。
Ollama 托管了你可以访问的模型的精选列表。你可以将这些模型下载到本地计算机,然后通过命令行提示符与这些模型交互。或者,当你运行模型时,Ollama 还会运行一个托管在端口 11434(默认情况下)的推理服务器,你可以通过与OpenAI兼容的 API 和其他库(如 Langchain)与其交互。
截至本文发布时,Ollama 有 74 个模型,其中还包括嵌入模型等类别。
2、如何使用 Ollama
为你选择的操作系统下载 Ollama。完成后,运行命令 ollama 以确认它正常运行。它应该会向你显示帮助菜单 —
Usage:
ollama [flags]
ollama [command]
Available Commands:
serve Start ollama
create Create a model from a Modelfile
show Show information for a model
run Run a model
pull Pull a model from a registry
push Push a model to a registry
list List models
cp Copy a model
rm Remove a model
help Help about any command
Flags:
-h, --help help for ollama
-v, --version Show version information
Use "ollama [command] --help" for more information about a command.
要使用任何模型,你首先需要从 Ollama“拉取”它们,就像从 Dockerhub(如果您以前使用过)或 Elastic Container Registry (ECR) 之类的东西中拉取图像一样。
Ollama 附带一些默认模型(如 llama2,它是 Facebook 的开源 LLM),你可以通过运行如下命令查看:
ollama list
从 Ollama 模型库页面中选择你想要与之交互的模型(假设为 phi)。现在,你可以通过运行如下命令下载模型:
ollama pull phi
下载完成后,你可以通过运行如下命令来检查模型是否在本地可用 -
ollama list
现在模型可用,可以运行了。你可以使用如下命令运行模型:
ollama run phi
答案的准确性并不总是一流的,但你可以通过选择不同的模型或自己进行一些微调或实施类似 RAG 的解决方案来解决这个问题,以提高准确性。
我上面演示的是如何使用命令行提示符使用 Ollama 模型。但是,如果你检查 Llama 正在运行的推理服务器,会发现可以通过访问端口 11434 来以编程方式访问它。
如果想使用 Langchain 访问你的 Ollama 模型,可以使用类似以下代码 —
from langchain_community.llms import Ollama
from langchain.chains import RetrievalQA
prompt = "What is the difference between an adverb and an adjective?"
llm = Ollama(model="mistral")
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True,
)
response = qa(prompt)
3、如何在 Ollama 中创建自己的模型
你还可以使用 Ollama 中的 Modelfile 概念创建自己的模型变体。有关在 Modelfile 中配置的更多参数,您可以查看这些文档。
示例模型文件?—
# Downloaded from Hugging Face https://huggingface.co/TheBloke/finance-LLM-GGUF/tree/main
FROM "./finance-llm-13b.Q4_K_M.gguf"
PARAMETER temperature 0.001
PARAMETER top_k 20
TEMPLATE """
{{.Prompt}}
"""
# set the system message
SYSTEM """
You are Warren Buffet. Answer as Buffet only, and do so in short sentences.
"""
获得模型文件后,你可以使用以下命令创建模型:
ollama create arjunrao87/financellm -f Modelfile
其中 financellm 是你的 LLM 模型的名称, arjunrao87 将替换为你的 ollama.com 用户名(它也充当你的在线 ollama 注册表的命名空间)。此时,你可以像使用 Ollama 上的任何其他模型一样使用你创建的模型。
你还可以选择将模型推送到远程 ollama 注册表。为此,你需要
- 在 ollama.com 上创建你的帐户
- 添加新模型
- 设置公钥以允许你从远程机器推送模型。
创建本地 llm 后,你可以使用?如下命令将其推送到 ollama 注册表:
ollama push arjunrao87/financellm
现在,让我们进入精彩部分。
4、使用 Ollama 构建聊天机器人
在我使用 Ollama 的过程中,最令人愉快的发现之一是这个基于 Python 的 Web 应用程序构建生态系统。Chainlit 可用于构建像 ChatGPT 这样的成熟聊天机器人。正如他们的页面所述,
Chainlit 是一个开源 Python 包,用于构建可用于生产的对话式 AI
我浏览了一些 Chainlit 教程,以了解你可以用 chainlit 做什么,其中包括创建任务序列(称为“步骤”)、启用按钮和操作、发送图像以及各种事情。你可以在这里关注我旅程的这一部分。
一旦我掌握了 Chainlit,我就想组装一个简单的聊天机器人,它基本上使用 Ollama,这样我就可以使用本地 LLM 进行聊天(而不是说 ChatGPT 或 Claude)。
使用不到 50 行代码,你就可以使用 Chainlit + Ollama 做到这一点。这不是很疯狂吗?
Chainlit 作为一个库使用起来非常简单。我还使用 Langchain 来使用和与 Ollama 交互:
from langchain_community.llms import Ollama
from langchain.prompts import ChatPromptTemplate
import chainlit as cl
下一步是定义聊天机器人的加载屏幕看起来是什么样子,方法是使用 chainlit 的 @cl.on_chat_start 装饰器:
@cl.on_chat_start
async def on_chat_start():
elements = [cl.Image(name="image1", display="inline", path="assets/gemma.jpeg")]
await cl.Message(
content="Hello there, I am Gemma. How can I help you?", elements=elements
).send()
....
....
Message 接口是 Chainlit 用于将响应发送回 UI 的接口。你可以使用简单的内容键构建消息,然后可以使用元素之类的东西对其进行修饰,在我的例子中,我添加了一个图像,以便在用户首次登录时显示图像。
下一步是调用 Langchain 来实例化 Ollama(使用你选择的模型),并构建提示模板。 cl.user_session 的用途主要是保持用户上下文和历史记录的分离,这只是为了运行快速演示,并不是严格要求的。
Chain 是一个名为 Runnable 的 Langchain 接口,用于创建自定义链。你可以在此处阅读更多相关信息:
@cl.on_chat_start
async def on_chat_start():
....
....
model = Ollama(model="mistral")
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a knowledgeable historian who answers super concisely",
),
("human", "{question}"),
]
)
chain = prompt | model
cl.user_session.set("chain", chain)
现在,你已经拥有了聊天机器人 UI 和接受用户输入的所有要素。如何处理用户提供的提示?你将使用 Chainlit 中的 @cl.on_message 处理程序对用户提供的消息执行某些操作:
@cl.on_message
async def on_message(message: cl.Message):
chain = cl.user_session.get("chain")
msg = cl.Message(content="")
async for chunk in chain.astream(
{"question": message.content},
):
await msg.stream_token(chunk)
await msg.send()
chain.astream 就像文档建议的那样“异步流回响应块”,这正是我们想要的机器人。
就是这样。一些导入、几个函数、一点点修饰,你就有了一个功能齐全的聊天机器人。
一位优秀的历史学家的回应
一位傲慢的历史学家,他(可以理解)不擅长数学;)
完整代码,你可以查看我的 GitHub。
原文链接:Ollama简明教程 - 汇智网
相关推荐
- Web前端和后端有什么区别(上)
-
关于Web前端与后端之间有什么区别呢,下面有小编带你了解一下,相信看完本文你会有新的理解。一.定义不同一般来说,我们把网站分为前端和后端。前端主要负责页面展示,后端是业务逻辑的实现。1、Web前端...
- 前端开发新手入门:Web开发工具有哪些?
-
好的开发工具不仅可以节约时间,更能节约开发成本。作为Web时代最常用的前端开发语言,Web前端受到各大企业的重视,很多零基础的人都想学习Web前端开发,下面千锋广州小编就来给大家介绍一下常见的Web开...
- 自己动手写的一套UI界面框架,有兴趣的可以看看
-
从事web开发这么多年了,UI一直是我的痛,第一个用的是Ext,授权费用高暂且不说,那个前端框架实在是臃肿,肿到要用Chrome浏览器才顺畅。然后就是easyUI,比ext是轻巧,但是商用也一样要授权...
- 十大初学者须知的web前端开发框架,知道几个
-
近几年随着jQuery、Ext以及CSS3的发展,以Bootstrap为代表的前端开发框架如雨后春笋般挤入视野,可谓应接不暇。不论是桌面浏览器端还是移动端都涌现出很多优秀的框架,极大丰富了...
- 同事给我埋了个坑:Insert into select语句把生产服务器炸了
-
前言Insertintoselect请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费大量的网络I/O...
- MySQL 导出数据
-
MySQL中你可以使用SELECT...INTOOUTFILE语句来简单的导出数据到文本文件上。使用SELECT...INTOOUTFILE语句导出数据以下实例中我们将数据表w3csch...
- VBA中if then 语句和select case实例比较
-
实例比较分析“If…then…”语句和“selectcase对象caseis条件1执行1caseis条件n执行n或caseelse执行Endeslect”的区别...
- Excel高级教程:VBA Select Case语句用法与案例教程
-
当需要依次检测一个表达式的多个值,并根据每个值来执行不同的操作时,SelectCase可以提供更清晰的结构。下面我们一起来看看VBASelectCase语句用法与案例教程吧。...
- Excel VBA流程图解之Select Case语句 多分支选择的最佳选择
-
上一篇,我们画了一个IF的流程图,显然有些场景用IF写起来比较繁琐,比如常用与分数段判断,时间段,税率,提成比例等问题,IF每个条件里都要写判断的对象,很是麻烦,那么SelectCase就是为此而生...
- 真刺激,用了Insert into select语句,差点直接被劝退
-
作者:不一样的科技宅https://juejin.im/post/5e670f0151882549274a65efInsertintoselect请慎用,同事因为使用了Insertinto...
- shell脚本中使用select循环语句创建交互式菜单
-
在shell脚本中需要创建一个交互式菜单时,可以使用while语句或者select语句;不过两者存在区别,接下来,体验一下两个语句的不同之处;使用while语句创建交互式菜单...
- 2025年SQL新手避坑指南:SELECT语句的正确打开方式,效率翻倍!
-
为什么数据库运行顺序必须死记硬背?...
- 面试官:select语句和update语句分别是怎么执行的?
-
最近有粉丝面试互联网公司被问到:你知道select语句和update语句分别是怎么执行的吗?...
- DevExpress Demo示例展示:媲美Excel的电子表格控件
-
今天介绍一个很强大的电子表格(Spreadsheet)控件:DevExpressSpreadsheetforASP.NETMVC。它是一个仿ExcelUI的电子表格控件,可完全无障碍读写...
- C#上传大型视频文件到服务器,解决方案
-
后端用了ASP.NET,.NETCore.NETMVC,IDE用了VisualStudio2010,VisualStudio2013,VisualStudio2022前端用了HTML,...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- dedecms模版 (53)
- c 视频教程下载 (33)
- listview排序 (33)
- characterencodingfilter (33)
- getmonth (34)
- label换行 (33)
- android studio 3 0 (34)
- html转js (35)
- 索引的作用 (33)
- checkedlistbox (34)
- xmlhttp (35)
- mysql更改密码 (34)
- 权限777 (33)
- htmlposition (33)
- 学校网站模板 (34)
- textarea换行 (34)
- 轮播 (34)
- asp net三层架构 (38)
- bash (34)