Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。
以下是其主要特点和功能概述:
1. 简化部署:Ollama 目标在于简化在 Docker 容器中部署大型语言模型的过程,使得非专业用户也能方便地管理和运行这些复杂的模型。
2.轻量级与可扩展:作为轻量级框架,Ollama 保持了较小的资源占用,同时具备良好的可扩展性,允许用户根据需要调整配置以适应不同规模的项目和硬件条件。
3. API支持:提供了一个简洁的 API,使得开发者能够轻松创建、运行和管理大型语言模型实例,降低了与模型交互的技术门槛。
4. 预构建模型库:包含一系列预先训练好的大型语言模型,用户可以直接选用这些模型应用于自己的应用程序,无需从头训练或自行寻找模型源。
5. 模型导入与定制:
从 GGUF 导入:支持从特定平台(如GGUF,假设这是一个模型托管平台)导入已有的大型语言模型。从 PyTorch 或 Safetensors 导入:兼容这两种深度学习框架,允许用户将基于这些框架训练的模型集成到 Ollama 中。自定义提示:允许用户为模型添加或修改提示(prompt engineering),以引导模型生成特定类型或风格的文本输出。
6. 跨平台支持:提供针对 macOS、Windows(预览版)、Linux 以及 Docker 的安装指南,确保用户能在多种操作系统环境下顺利部署和使用 Ollama。
7. 命令行工具与环境变量:
命令行启动:通过命令 ollamaserve 或其别名 serve、start 可以启动 Ollama 服务。
环境变量配置:如 OLLAMA_HOST,用于指定服务绑定的主机地址和端口,默认值为 127.0.0.1:11434,用户可以根据需要进行修改。
一、本地部署
ollama run llama3
部署完成:
其他模型:
二、调用本地大模型API
在第一步部署完之后,就会有这个标志了,就已经开启api服务了。
http://localhost:11434/api/generate
接下来,我们尝试使用代码去调用它。运行下面这个python代码。
import requests
# 发送 API 请求获取回复
url = "http://localhost:11434/api/generate"
payload = {"model": "llama3", "prompt": "中文回答,你是谁"}
response = requests.post(url, json=payload)
response_json = response.json()
print(response_json)
结果报错:
D:\lamma>python 1.py
Traceback (most recent call last):
File "E:\Anaconda3\Lib\site-packages\requests\models.py", line 960, in json
return complexjson.loads(self.content.decode(encoding), **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:\Anaconda3\Lib\json\__init__.py", line 346, in loads
return _default_decoder.decode(s)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:\Anaconda3\Lib\json\decoder.py", line 340, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 91)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\lamma\1.py", line 6, in <module>
response_json = response.json()
^^^^^^^^^^^^^^^
File "E:\Anaconda3\Lib\site-packages\requests\models.py", line 968, in json
raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Extra data: line 2 column 1 (char 91)
这是由于,大模型的输出是流式的,所以改成非流式就可以了。
import requests
# 发送 API 请求获取回复
url = "http://localhost:11434/api/generate"
payload = {"model": "llama3", "prompt": "中文回答,你是谁" ,"stream":False}
response = requests.post(url, json=payload)
response_json = response.json()
print(response_json)
这个看起来还是不舒服,怎么才能又快又看着舒服呢。
那就是只打印回答的文本,和修改为流式输出。