Ollama简明教程
xsobi 2024-12-06 20:28 1 浏览
这是深入研究 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简明教程 - 汇智网
相关推荐
- 【互联网那些事】高效开发Android App的10个建议
-
假如要GooglePlay上做一个最失败的案例,那最好的秘诀就是界面奇慢无比、耗电、耗内存。接下来就会得到用户的消极评论,最后名声也就臭了。即使你的应用设计精良、创意无限也没用。 耗电或者内存...
- 手机APP开发方式有哪些? 手机app的开发模式有哪三种?
-
微信小程序开发定制_软件开发_APP开发_网站制作-优软软件开发...
- Android开发入门(一):Android系统简介
-
Android系统是Google公司在2008年推出的一款智能移动设备操作系统,通过不断地版本迭代,目前已经推出到Android11版本了。Android系统广泛应用在手机、平板、电视等各种电子设...
- 物联网app开发流程 物联网app开发工具
-
现在随着科技的发展,很多产品都想用一个手机app去显示他的参数数据或者通过手机app去控制它。但是很多人不知道他的流程。今天我就来说下物联网app开发流程。首先需要把物联网app开发流程分2个步骤,一...
- Android开发进阶 | 如何学习 Android Framework?
-
大部分有“如何学习Framework源码”这个疑问的,应该大都是应用层开发。应用层是被Framework层调用执行的,知道自己的代码是怎么被调用的,才能理解程序的本质,理解本质有助于解决遇到的...
- 快速实现APP混合开发(Hybrid App开发)攻略
-
前言:...
- 三个阶段带你了解一款app开发的完整流程
-
第一个阶段需求阶段:1.需求讨论--开发类型、开发平台、具体的产品功能需求、项目预计完成时间、预算2.需求评估--确认合作后评估具体的预算3.界面设计--设计部门进行产品界面设计,形成效果图...
- Android 开发中文引导-应用小部件
-
应用小部件是可以嵌入其它应用(例如主屏幕)并收到定期更新的微型应用视图。这些视图在用户界面中被叫做小部件,并可以用应用小部件提供者发布。可以容纳其他应用部件的应用组件叫做应用部件的宿主(1)。下面的截...
- 手机软件开发从零开始【Android第2篇Hello】
-
Hello,朋友们我们又见面了。上一篇我们讲到了《Android开发环境搭建【Android基础第1篇】》,错过的朋友可以点击文章末尾的“阅读原文”查看。另外需要下载JDK和ADT-bundle工具的...
- 「全栈工程师之梦的开始--安卓开发(二)」开发安卓app
-
在配置好jdk开发环境、安装好开发工具Androidstudio后,我们就可以开始开发安卓app了。首先,我们需要先了解下android的术语。...
- 二、Android界面开发 android 开发
-
学习目标了解Android常用布局了解Android常用控件...
- 如何开发一款APP既快捷也简便 开发一款app的步骤
-
具体较为简单的步骤可以选择用androidstudio开发app1、打开软件,在菜单中选择file-》newproject打开创建向导。2、配置项目,确定各个名称和存放项目的存放路径;Applic...
- 安卓开发中的“Android高手”,需要具备哪些技术?
-
前言成为一名安卓开发者很容易,但是要成为一名“Android高手”却不那么容易;...
- 移动开发(一):使用.NET MAUI开发第一个安卓APP
-
对于工作多年的C#程序员来说,近来想尝试开发一款安卓APP,考虑了很久最终选择使用.NETMAUI这个微软官方的框架来尝试体验开发安卓APP,毕竟是使用VisualStudio开发工具,使用起来也...
- 微软推出PowerApps:零基础开发Win10/iOS/安卓企业应用
-
IT之家讯微软今天面向企业宣布了全新的应用开发解决方案PowerApps,让Windows(包括Win10)、iOS以及安卓应用的开发和分发变得更加简单。PowerApps的用户界面与Office办...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- c 视频教程下载 (33)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)
- android studio 3 0 (34)
- android开发视频 (30)
- android应用开发 (31)