百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

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 以确认它正常运行。它应该会向你显示帮助菜单 —

Bash
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),你可以通过运行如下命令查看:

Bash
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,...