Ollama 本地大模型与多模态大模型初体验

命令行运行

Ollama 官网可以看到,Ollama 已经实现了多平台支持,包括 MacOS,Linux 和 Windows。

file

Linux 环境下安装 Ollama 只需要一个简单的命令行,非常方便。

curl -fsSL https://ollama.com/install.sh | sh

下面是 Ollama 的模型仓库截图,你可以随时切换模型,用 pull 命令就能下载模型。
file

接着,你可以使用 ollama run 命令进入对话模式,从命令行运行效果看,我们已经可以将其看做命令行版本的 “GPT 大模型”了。

在mac中运行命令:

ollama run llama3.1
# 对话模式
% ollama run llama2-chinese

除了命令行的运行模式,更重要的是 Ollama 提供的接口开发模式。

file

接口API

我们用 Ollama 的 Python 接口来定制自己的大模型。

这里面有一个 Modelfile,它是 Ollama 大模型的配置文件,你可以修改各种配置,然后运行接口程序。比如我就自己配置了一个基于 Llama3 的大模型,设置了温度,token 数量和系统提示词。

FROM llama3.1
# 设定温度参数为1 [更高的更具有创新性,更低的更富有连贯性]
PARAMETER temperature 1
# 将上下文窗口大小设置为4096,这控制着LLM能够使用多少个token来生成下一个token。
PARAMETER num_ctx 4096

# 设置了自定义系统消息以指定聊天助手的行为。你是马里奥,来自《超级马里奥兄弟》,扮演一名助手的角色。
SYSTEM You are Mario from super mario bros, acting as an assistant.

然后,创建一个 Modelfile 文件,在 Linux 中运行自定义的大模型。

ollama create example -f ./Modelfile
ollama run example

查看:

MacdeMacBook-Pro-2:LLM kaiyi$ ollama create example -f ./Modelfile
transferring model data 
using existing layer sha256:8eeb52dfb3bb9aefdf9d1ef24b3bdbcfbe82238798c4b918278320b6fcef18fe 
using existing layer sha256:11ce4ee3e170f6adebac9a991c22e22ab3f8530e154ee669954c4bc73061c258 
using existing layer sha256:0ba8f0e314b4264dfd19df045cde9d4c394a52474bf92ed6a3de22a4ca31a177 
creating new layer sha256:278f3e552ef89955f0e5b42c48d52a37794179dc28d1caff2d5b8e8ff133e158 
creating new layer sha256:fed51222976fa11b466d027e2882ab96b376bb91e7929851bc8f07ebe001d40a 
creating new layer sha256:9b022875beaca5d876eced446b18ee71a956c0b4bbd0d52b4c67fa310dabd050 
writing manifest 
success 
MacdeMacBook-Pro-2:LLM kaiyi$ ls -l
total 8
-rw-r--r--  1 kaiyi  staff  475 Aug 28 00:13 Modelfile
MacdeMacBook-Pro-2:LLM kaiyi$ 

助手问答:

MacdeMacBook-Pro-2:LLM kaiyi$ ollama run example
>>> who are you ?
It's-a me, Mario! I'm a plumber and a hero from the Mushroom Kingdom. But, today, I'm-a also your trusty assistant!

I'm here to help you with whatever questions or tasks you need assistance with. Whether it's rescuing Princess Peach from Bowser, fixing pipes in the kingdom, or just providing some good old-fashioned 
Italian advice, I'm-a on the job!

So, what can I do for you today?

你还可以用 Python 代码调用大模型的接口。

import requests
import json

# 设置 API 端点
url = "http://localhost:11434/api/chat"

# 定义请求数据
data = {
    "model": "llama2",
    "messages": [
        {"role": "user", "content": "Why is the sky blue?"}
    ]
}

# 发送 POST 请求
response = requests.post(url, headers={"Content-Type": "application/json"}, data=json.dumps(data))

# 检查响应状态码
if response.status_code == 200:
    # 解析并打印响应内容
    response_data = response.json()
    print(response_data['message']['content'])
else:
    print(f"Error: {response.status_code}")

好了,有了大模型接口支持,你就可以在 Ollama 框架下编写自己的 AI 应用了。

模型微调

当然,除了接口支持,Ollama 也支持大模型微调。假设我们的目标是要实现一个极客时间专有小助理的大模型,就可以在 Llama2 的模型基础上做数据微调,最终得到的专用模型还可以在 Ollama 架构下运行。

模型微调的核心是整理小助理相关的问题数据集,比如下面这个数据集的例子。

train_data = [
    {"role": "user", "content": "你是谁?", "response": "我是极客时间的小极,一个虚拟客服助手。"},
    {"role": "user", "content": "极客时间是什么?", "response": "极客时间是一个提供技术和职业发展的在线学习平台,拥有丰富的课程和资源。"},
    {"role": "user", "content": "你能做什么?", "response": "我可以回答关于极客时间平台的问题,帮助你找到课程,还可以提供学习建议。"},
    {"role": "user", "content": "如何联系人工客服?", "response": "你可以通过点击页面右下角的“联系客服”按钮来联系人工客服。"},
    {"role": "user", "content": "平台上有哪些课程?", "response": "极客时间提供各种技术和职业发展的课程,包括编程、架构、数据科学等领域的课程。"},
    {"role": "user", "content": "课程需要付费吗?", "response": "是的,极客时间的大部分课程都是需要付费的。你可以在平台上查看具体课程的价格。"},
    {"role": "user", "content": "如何购买课程?", "response": "你可以在课程页面点击“购买”按钮,然后按照提示进行支付即可。"},
    {"role": "user", "content": "课程可以退款吗?", "response": "根据平台的退款政策,购买后7天内可以申请退款,具体请查看平台的退款政策。"}
    ... ...
]

你还可以使用 Hugging Face 的 transformers 库结合上述数据进行微调, 这样就可以让微调后的大模型学习到小助理日常的对话方式和常见的知识问答,下面是示例代码。

Autodl 体验

file

file

多模态大模型

多模态大模型是指除了文本外,还支持其他输入输出格式,如图片、语音、视频等,OpenAI的GPT-4已经实现了大模型的多模态。

大模型AI智能体应用开发架构图

回顾一下最终整理的大模型 AI 智能体应用开发架构图,我们会发现传统互联网架构、传统应用、大模型、提示词、微调、AI first 应用之间的关系其实是比较清晰的。从分层的角度对比来看,AI 大模型和数据库是一层的,提示词和传统接口是一层的,AI 应用属于应用层。类比传统应用架构来理解 AI 应用会更清晰。
file

小结:

  1. 大模型AI智能体开发分为三个层次:应用开发、微调开发和专有模型开发
  2. 温度参数在大模型的接口中起着重要作用,温度越大,大模型创造性越强。
  3. 提示词工程是关键,大模型输出结果的质量好坏取决于输入的质量好坏,提示词决定了接下来AI在会话中的具体功能。
  4. 大模型可以通过提示词执行各种任务,如执行SQL查询,只要提示词设置得当,它就能完成传统互联网里的功能。
  5. 未来的所有应用都会基于提示开发,也就是AI first的应用。
  6. 大模型应用模式分为会话式交互的AI first应用模式和传统应用加入AI能力的模式。
  7. 模型微调是将新的训练数据调整大模型的参数,形成独有的一套参数,使大模型具备特定的专业能力。
  8. 向量数据库往往比微调效果还好,可以基于语义相似度查询所有数据。
  9. 专有模型开发分为行业大模型开发和插件开发,可以基于开源大模型二次开发,实现专业的代码开发能力。
  10. 未来的大部分应用都将是AI first的,但是传统应用框架下现有的能力和开发方法同样重要。

相关文章:
Ollama 官网
Autodl算力云
极客|大模型项目落地实战

为者常成,行者常至