API 端点
生成补全
[参数]
示例
[生成补全 (流式)]
[生成补全 (非流式)]
[生成补全 (JSON 模式)]
[生成补全 (带图片)]
[生成补全 (原始模式)]
[生成补全 (可复现输出)]
[生成补全 (带选项)]
[加载模型]
对话补全
[参数]
示例
[对话补全 (流式)]
[对话补全 (非流式)]
[对话补全 (带历史消息)]
[对话补全 (带图片)]
[对话补全 (可复现输出)]
创建模型
[参数]
示例
[检查 Blob 是否存在]
[创建 Blob]
列出本地模型
显示模型信息
复制模型
删除模型
拉取模型
推送模型
生成嵌入
规约 模型名称 模型名称遵循 model:tag
格式,其中 model
可以具有可选的命名空间,如 example/model
。一些例子是 orca-mini:3b-q4_1
和 llama2:70b
。标签是可选的,如果未提供,则默认为 latest
。标签用于识别特定版本。
持续时间 所有持续时间以纳秒为单位返回。
流式响应 某些端点以 JSON 对象形式流式传输响应,并可以选择返回非流式响应。
生成补全
生成给定提示的响应,该响应将使用所提供的模型。这是一个流式端点,因此会有一系列响应。最终响应对象将包括来自请求的统计数据和额外数据。
参数
model
:(必填)[模型名称]
prompt
:生成响应的提示
images
:(可选)base64编码的图像列表(适用于多模态模型,如llava
)
高级参数(可选):
format
:返回响应的格式。目前唯一接受的值是json
options
:文档中列出的额外模型参数 [Modelfile],如temperature
system
:系统消息(覆盖在Modelfile
中定义的内容)
template
:使用的提示模板(覆盖在Modelfile
中定义的内容)
context
:来自先前/generate
请求的context参数,可以用来保持短暂的会话记忆
stream
:如果为false
,则响应将作为单个响应对象返回,而不是对象流
raw
:如果为true
,则不会对提示应用格式。如果在请求中指定了完整的模板提示,您可以选择使用raw
参数
keep_alive
:控制模型在请求后保持在内存中的时间(默认:5m
)
JSON 模式 通过设置format
参数为json
启用JSON模式。这将把响应结构化为一个有效的JSON对象。参见下面的JSON模式[示例]。
注意:如果不在prompt
中指导模型使用JSON,则模型可能会生成大量的空白。
示例 生成补全(流式) 请求 1 2 3 4 curl http://localhost:11434/api/generate -d '{ "model": "llama2", "prompt": "Why is the sky blue?" }'
响应 返回一系列JSON对象:
1 2 3 4 5 6 { "model": "llama2", "created_at": "2023-08-04T08:52:19.385406455-07:00", "response": "The", "done": false }
流的最终响应还包括关于生成的额外数据:
total_duration
:生成响应的时间
load_duration
:加载模型的时间(纳秒)
prompt_eval_count
:提示中的令牌数量
prompt_eval_duration
:评估提示的时间(纳秒)
eval_count
:响应中的令牌数量
eval_duration
:生成响应所花费的时间(纳秒)
context
:此响应中使用的会话的编码,这可以在下一个请求中发送以保持会话记忆
response
:如果响应是流式的,则为空;如果不是流式的,则会包含完整响应
要计算每秒生成的令牌速度(token/s),请将eval_count
/ eval_duration
。
1 2 3 4 5 6 7 8 9 10 11 12 13 { "model": "llama2", "created_at": "2023-08-04T19:22:45.499127Z", "response": "", "done": true, "context": [1, 2, 3], "total_duration": 10706818083, "load_duration": 6338219291, "prompt_eval_count": 26, "prompt_eval_duration": 130079000, "eval_count": 259, "eval_duration": 4232710000 }
生成补全 (非流式) 请求 当流关闭时,可以一次性收到响应。
1 2 3 4 5 curl http://localhost:11434/api/generate -d '{ "model": "llama2", "prompt": "Why is the sky blue?", "stream": false }'
响应 如果stream
设置为false
,响应将是一个单一的JSON对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 { "model": "llama2", "created_at": "2023-08-04T19:22:45.499127Z", "response": "The sky is blue because it is the color of the sky.", "done": true, "context": [1, 2, 3], "total_duration": 5043500667, "load_duration": 5025959, "prompt_eval_count": 26, "prompt_eval_duration": 325953000, "eval_count": 290, "eval_duration": 4709213000 }
生成补全 (JSON 模式)
当设置format
为json
时,输出总是一个格式良好的JSON对象。在提示模型响应时也很重要。
请求 1 2 3 4 5 6 curl http://localhost:11434/api/generate -d '{ "model": "llama2", "prompt": "What color is the sky at different times of the day? Respond using JSON", "format": "json", "stream": false }'
响应 1 2 3 4 5 6 7 8 9 10 11 12 13 { "model": "llama2", "created_at": "2023-11-09T21:07:55.186497Z", "response": "{\n\"morning\": {\n\"color\": \"blue\"\n},\n\"noon\": {\n\"color\": \"blue-gray\"\n},\n\"afternoon\": {\n\"color\": \"warm gray\"\n},\n\"evening\": {\n\"color\": \"orange\"\n}\n}\n", "done": true, "context": [1, 2, 3], "total_duration": 4648158584, "load_duration": 4071084, "prompt_eval_count": 36, "prompt_eval_duration": 439038000, "eval_count": 180, "eval_duration": 4196918000 }
response
的值将是包含类似于以下内容的JSON字符串:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 { "morning": { "color": "blue" }, "noon": { "color": "blue-gray" }, "afternoon": { "color": "warm gray" }, "evening": { "color": "orange" } }
生成补全 (含图片) 向多模态模型(如llava
或bakllava
)提交图像,提供base64编码的images
列表:
请求 1 2 3 4 5 6 curl http://localhost:11434/api/generate -d '{ "model": "llava", "prompt":"What is in this picture?", "stream": false, "images": ["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"] }'
响应 1 2 3 4 5 6 7 8 9 10 11 12 13 { "model": "llava", "created_at": "2023-11-03T15:36:02.583064Z", "response": "A happy cartoon character, which is cute and cheerful.", "done": true, "context": [1, 2, 3], "total_duration": 2938432250, "load_duration": 2559292, "prompt_eval_count": 1, "prompt_eval_duration": 2195557000, "eval_count": 44, "eval_duration": 736432000 }
生成补全 (原始模式) 在某些情况下,您可能希望绕过模板系统并提供完整的提示。在这种情况下,您可以使用raw
参数禁用模板。另请注意,原始模式将不返回上下文。
Request 1 2 3 4 5 6 curl http://localhost:11434/api/generate -d '{ "model": "mistral", "prompt": "[INST] why is the sky blue? [/INST]", "raw": true, "stream": false }'
生成补全 (可复现输出) 对于可复制的输出,将temperature
设置为0并且seed
设置为一个数字:
请求 1 2 3 4 5 6 7 8 curl http://localhost:11434/api/generate -d '{ "model": "mistral", "prompt": "Why is the sky blue?", "options": { "seed": 123, "temperature": 0 } }'
响应 1 2 3 4 5 6 7 8 9 10 11 12 { "model": "mistral", "created_at": "2023-11-03T15:36:02.583064Z", "response": " The sky appears blue because of a phenomenon called Rayleigh scattering.", "done": true, "total_duration": 8493852375, "load_duration": 6589624375, "prompt_eval_count": 14, "prompt_eval_duration": 119039000, "eval_count": 110, "eval_duration": 1779061000 }
生成补全 (带选项) 如果您希望在运行时为模型设置自定义选项,而不是在Modelfile中,您可以使用options
参数。这个示例设置了所有可用选项,但您可以单独设置任何一个并省略您不想覆盖的选项。
请求 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 curl http://localhost:11434/api/generate -d '{ "model": "llama2", "prompt": "Why is the sky blue?", "stream": false, "options": { "num_keep": 5, "seed": 42, "num_predict": 100, "top_k": 20, "top_p": 0.9, "tfs_z": 0.5, "typical_p": 0.7, "repeat_last_n": 33, "temperature": 0.8, "repeat_penalty": 1.2, "presence_penalty": 1.5, "frequency_penalty": 1.0, "mirostat": 1, "mirostat_tau": 0.8, "mirostat_eta": 0.6, "penalize_newline": true, "stop": ["\n", "user:"], "numa": false, "num_ctx": 1024, "num_batch": 2, "num_gqa": 1, "num_gpu": 1, "main_gpu": 0, "low_vram": false, "f16_kv": true, "vocab_only": false, "use_mmap": true, "use_mlock": false, "rope_frequency_base": 1.1, "rope_frequency_scale": 0.8, "num_thread": 8 } }'
响应 1 2 3 4 5 6 7 8 9 10 11 12 13 { "model": "llama2", "created_at": "2023-08-04T19:22:45.499127Z", "response": "The sky is blue because it is the color of the sky.", "done": true, "context": [1, 2, 3], "total_duration": 4935886791, "load_duration": 534986708, "prompt_eval_count": 26, "prompt_eval_duration": 107345000, "eval_count": 237, "eval_duration": 4289432000 }
加载模型 如果提供了空的提示,模型将被加载到内存中。
请求 1 2 3 curl http://localhost:11434/api/generate -d '{ "model": "llama2" }'
响应 返回一个单一的JSON对象:
1 2 3 4 5 6 { "model": "llama2", "created_at": "2023-12-18T19:52:07.071755Z", "response": "", "done": true }
对话补全
使用所提供的模型生成聊天中的下一条消息。这是一个流式端点,因此会有一系列响应。可以使用"stream": false
禁用流式传输。最终响应对象将包括来自请求的统计数据和额外数据。
参数
model
:(必填)[模型名称]
messages
:聊天的消息,这可以用来保持聊天记忆
message
对象具有以下字段:
role
:消息的角色,可以是system
、user
或assistant
content
:消息的内容
images
(可选):要包含在消息中的图像列表(适用于多模态模型,如llava
)
高级参数(可选):
format
:返回响应的格式。目前唯一接受的值是json
options
:文档中列出的额外模型参数 [Modelfile],如temperature
stream
:如果为false
,则响应将作为单个响应对象返回,而不是对象流
keep_alive
:控制模型在请求后保持在内存中的时间(默认:5m
)
示例 对话补全 (流式) 请求 Send a chat message with a streaming response.
1 2 3 4 5 6 7 8 9 curl http://localhost:11434/api/chat -d '{ "model": "llama2", "messages": [ { "role": "user", "content": "why is the sky blue?" } ] }'
响应 返回一个 JSON 流式对象:
1 2 3 4 5 6 7 8 9 10 { "model": "llama2", "created_at": "2023-08-04T08:52:19.385406455-07:00", "message": { "role": "assistant", "content": "The", "images": null }, "done": false }
最终响应:
1 2 3 4 5 6 7 8 9 10 11 { "model": "llama2", "created_at": "2023-08-04T19:22:45.499127Z", "done": true, "total_duration": 4883583458, "load_duration": 1334875, "prompt_eval_count": 26, "prompt_eval_duration": 342546000, "eval_count": 282, "eval_duration": 4535599000 }
对话补全 (非流式) 请求 1 2 3 4 5 6 7 8 9 10 curl http://localhost:11434/api/chat -d '{ "model": "llama2", "messages": [ { "role": "user", "content": "why is the sky blue?" } ], "stream": false }'
响应 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { "model": "registry.ollama.ai/library/llama2:latest", "created_at": "2023-12-12T14:13:43.416799Z", "message": { "role": "assistant", "content": "Hello! How are you today?" }, "done": true, "total_duration": 5191566416, "load_duration": 2154458, "prompt_eval_count": 26, "prompt_eval_duration": 383809000, "eval_count": 298, "eval_duration": 4799921000 }
对话补全 (带历史消息) 发送带有对话历史的聊天消息。您可以使用相同的方法使用多次发送或思维链提示来启动对话。
请求 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 curl http://localhost:11434/api/chat -d '{ "model": "llama2", "messages": [ { "role": "user", "content": "why is the sky blue?" }, { "role": "assistant", "content": "due to rayleigh scattering." }, { "role": "user", "content": "how is that different than mie scattering?" } ] }'
响应 返回一个 JSON 流式对象:
1 2 3 4 5 6 7 8 9 { "model": "llama2", "created_at": "2023-08-04T08:52:19.385406455-07:00", "message": { "role": "assistant", "content": "The" }, "done": false }
最终响应:
1 2 3 4 5 6 7 8 9 10 11 { "model": "llama2", "created_at": "2023-08-04T19:22:45.499127Z", "done": true, "total_duration": 8113331500, "load_duration": 6396458, "prompt_eval_count": 61, "prompt_eval_duration": 398801000, "eval_count": 468, "eval_duration": 7701267000 }
对话补全 (带历史消息) 请求 发送带有图片的聊天消息。
1 2 3 4 5 6 7 8 9 10 curl http://localhost:11434/api/chat -d '{ "model": "llava", "messages": [ { "role": "user", "content": "what is in this image?", "images": ["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"] } ] }'
响应 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 { "model": "llava", "created_at": "2023-12-13T22:42:50.203334Z", "message": { "role": "assistant", "content": " The image features a cute, little pig with an angry facial expression. It's wearing a heart on its shirt and is waving in the air. This scene appears to be part of a drawing or sketching project.", "images": null }, "done": true, "total_duration": 1668506709, "load_duration": 1986209, "prompt_eval_count": 26, "prompt_eval_duration": 359682000, "eval_count": 83, "eval_duration": 1303285000 }
对话补全 (可复现输出) 请求 1 2 3 4 5 6 7 8 9 10 11 12 13 curl http://localhost:11434/api/chat -d '{ "model": "llama2", "messages": [ { "role": "user", "content": "Hello!" } ], "options": { "seed": 101, "temperature": 0 } }'
响应 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { "model": "registry.ollama.ai/library/llama2:latest", "created_at": "2023-12-12T14:13:43.416799Z", "message": { "role": "assistant", "content": "Hello! How are you today?" }, "done": true, "total_duration": 5191566416, "load_duration": 2154458, "prompt_eval_count": 26, "prompt_eval_duration": 383809000, "eval_count": 298, "eval_duration": 4799921000 }
创建模型
从[Modelfile
]创建模型。建议将modelfile
设置为Modelfile的内容,而不仅仅是设置path
。这是远程创建所必需的。远程模型创建还必须使用[创建 Blob]显式地在服务器上创建任何文件blobs,字段如FROM
和ADAPTER
,并将值设置为响应中指示的路径。
参数
name
:要创建的模型的名称
modelfile
(可选):Modelfile的内容
stream
(可选):如果为false
,则响应将作为单个响应对象返回,而不是对象流
path
(可选):Modelfile的路径
示例 创建新模型 从Modelfile
创建新模型。
请求 1 2 3 4 curl http://localhost:11434/api/create -d '{ "name": "mario", "modelfile": "FROM llama2\nSYSTEM You are mario from Super Mario Bros." }'
响应 返回一个 JSON 流式对象。注意,最终的JSON对象显示"status": "success"
。
1 2 3 4 5 6 7 8 9 10 11 {"status":"reading model metadata"} {"status":"creating system layer"} {"status":"using already created layer sha256:22f7f8ef5f4c791c1b03d7eb414399294764d7cc82c7e94aa81a1feb80a983a2"} {"status":"using already created layer sha256:8c17c2ebb0ea011be9981cc3922db8ca8fa61e828c5d3f44cb6ae342bf80460b"} {"status":"using already created layer sha256:7c23fb36d80141c4ab8cdbb61ee4790102ebd2bf7aeff414453177d4f2110e5d"} {"status":"using already created layer sha256:2e0493f67d0c8c9c68a8aeacdf6a38a2151cb3c4c1d42accf296e19810527988"} {"status":"using already created layer sha256:2759286baa875dc22de5394b4a925701b1896a7e3f8e53275c36f75a877a82c9"} {"status":"writing layer sha256:df30045fe90f0d750db82a058109cecd6d4de9c90a3d75b19c09e5f64580bb42"} {"status":"writing layer sha256:f18a68eb09bf925bb1b669490407c1b1251c5db98dc4d3d81f3088498ea55690"} {"status":"writing manifest"} {"status":"success"}
检查 Blob 是否存在
确保用于FROM或ADAPTER字段的文件blob在服务器上存在。这是检查您的Ollama服务器,而不是Ollama.ai。
查询参数
示例 请求 1 curl -I http://localhost:11434/api/blobs/sha256:29fdb92e57cf0827ded04ae6461b5931d01fa595843f55d36f5b275a52087dd2
响应 如果blob存在,则返回200 OK,如果不存在,则返回404 Not Found。
创建 Blob
在服务器上从文件创建blob。返回服务器文件路径。
查询参数
示例 请求 1 curl -T model.bin -X POST http://localhost:11434/api/blobs/sha256:29fdb92e57cf0827ded04ae6461b5931d01fa595843f55d36f5b275a52087dd2
响应 如果blob成功创建,则返回201 Created;如果使用的摘要不符合预期,则返回400 Bad Request。
列出本地模型
列出可在本地获取的模型。
示例 请求 1 curl http://localhost:11434/api/tags
响应 将返回一个JSON对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 { "models": [ { "name": "codellama:13b", "modified_at": "2023-11-04T14:56:49.277302595-07:00", "size": 7365960935, "digest": "9f438cb9cd581fc025612d27f7c1a6669ff83a8bb0ed86c94fcf4c5440555697", "details": { "format": "gguf", "family": "llama", "families": null, "parameter_size": "13B", "quantization_level": "Q4_0" } }, { "name": "llama2:latest", "modified_at": "2023-12-07T09:32:18.757212583-08:00", "size": 3825819519, "digest": "fe938a131f40e6f6d40083c9f0f430a515233eb2edaa6d72eb85c50d64f2300e", "details": { "format": "gguf", "family": "llama", "families": null, "parameter_size": "7B", "quantization_level": "Q4_0" } } ] }
显示模型信息
显示有关模型的信息,包括详细信息、Modelfile、模板、参数、许可证和系统提示。
参数
示例 请求 1 2 3 curl http://localhost:11434/api/show -d '{ "name": "llama2" }'
响应 1 2 3 4 5 6 7 8 9 10 11 12 { "modelfile": "# Modelfile generated by \"ollama show\"\n# To build a new Modelfile based on this one, replace the FROM line with:\n# FROM llava:latest\n\nFROM /Users/matt/.ollama/models/blobs/sha256:200765e1283640ffbd013184bf496e261032fa75b99498a9613be4e94d63ad52\nTEMPLATE \"\"\"{{ .System }}\nUSER: {{ .Prompt }}\nASSSISTANT: \"\"\"\nPARAMETER num_ctx 4096\nPARAMETER stop \"\u003c/s\u003e\"\nPARAMETER stop \"USER:\"\nPARAMETER stop \"ASSSISTANT:\"", "parameters": "num_ctx 4096\nstop \u003c/s\u003e\nstop USER:\nstop ASSSISTANT:", "template": "{{ .System }}\nUSER: {{ .Prompt }}\nASSSISTANT: ", "details": { "format": "gguf", "family": "llama", "families": ["llama", "clip"], "parameter_size": "7B", "quantization_level": "Q4_0" } }
复制模型
复制一个模型。从现有模型创建一个新名称的模型。
示例 请求 1 2 3 4 curl http://localhost:11434/api/copy -d '{ "source": "llama2", "destination": "llama2-backup" }'
响应 如果成功,返回 200 OK;如果源模型不存在,则返回 404 Not Found。
删除模型
删除一个模型及其数据。
参数
示例 请求 1 2 3 curl -X DELETE http://localhost:11434/api/delete -d '{ "name": "llama2:13b" }'
响应 如果删除成功,返回 200 OK;如果要删除的模型不存在,则返回 404 Not Found。
拉取模型
从ollama库下载模型。被取消的拉取将从中断的地方恢复,多次调用将共享相同的下载进度。
参数
name
:要拉取的模型的名称
insecure
:(可选)允许与库建立不安全的连接。只有在开发过程中从您自己的库拉取时才使用此选项。
stream
:(可选)如果为false
,则响应将作为单个响应对象返回,而不是对象流
示例 请求 1 2 3 curl http://localhost:11434/api/pull -d '{ "name": "llama2" }'
响应 如果没有指定stream
,或者设置为true
,将返回一系列JSON对象:
第一个对象是模型的清单:
1 2 3 { "status": "pulling manifest" }
然后是一系列下载响应。在任何下载完成之前,可能不包括completed
键。要下载的文件数量取决于清单中指定的层数。
1 2 3 4 5 6 { "status": "downloading digestname", "digest": "digestname", "total": 2142590208, "completed": 241970 }
在所有文件下载完毕后,最终响应为:
1 2 3 4 5 6 7 8 9 10 11 12 { "status": "verifying sha256 digest" } { "status": "writing manifest" } { "status": "removing any unused layers" } { "status": "success" }
如果stream
设置为false,则响应是一个单一的JSON对象:
1 2 3 { "status": "success" }
推送模型
将模型上传到模型库。需要先在ollama.ai注册并添加公钥。
参数
name
:要推送的模型的名称,格式为<namespace>/<model>:<tag>
insecure
:(可选)允许与库建立不安全的连接。只有在开发过程中向您的库推送时才使用此选项。
stream
:(可选)如果为false
,则响应将作为单个响应对象返回,而不是对象流
示例 请求 1 2 3 curl http://localhost:11434/api/push -d '{ "name": "mattw/pygmalion:latest" }'
响应 如果没有指定stream
或设置为true
,将返回一系列JSON对象:
1 { "status": "retrieving manifest" }
然后是:
1 2 3 4 5 { "status": "starting upload", "digest": "sha256:bc07c81de745696fdf5afca05e065818a8149fb0c77266fb584d9b2cba3711ab", "total": 1928429856 }
接下来是一系列上传响应:
1 2 3 4 5 { "status": "starting upload", "digest": "sha256:bc07c81de745696fdf5afca05e065818a8149fb0c77266fb584d9b2cba3711ab", "total": 1928429856 }
最后,当上传完成时:
1 2 {"status":"pushing manifest"} {"status":"success"}
如果stream
设置为false,则响应是一个单一的JSON对象:
生成嵌入
从模型生成嵌入
参数
model
:生成嵌入的模型名称
prompt
:生成嵌入的文本
高级参数:
options
:文档中列出的额外模型参数 [Modelfile],如temperature
keep_alive
:控制模型在请求后保持在内存中的时间(默认:5m
)
示例 请求 1 2 3 4 curl http://localhost:11434/api/embeddings -d '{ "model": "all-minilm", "prompt": "Here is an article about llamas..." }'
响应 1 2 3 4 5 6 { "embedding": [ 0.5670403838157654, 0.009260174818336964, 0.23178744316101074, -0.2916173040866852, -0.8924556970596313, 0.8785552978515625, -0.34576427936553955, 0.5742510557174683, -0.04222835972905159, -0.137906014919281 ] }
Ollama 模型文件
注意:Modelfile
语法仍在开发中
模型文件是创建和共享模型的蓝图。
目录
[格式]
[示例]
[指令]
FROM (必需)
PARAMETER (参数)
TEMPLATE (模板)
[SYSTEM (系统)]
[ADAPTER (适配器)]
[LICENSE (许可证)]
[MESSAGE (消息)]
[备注]
格式 Modelfile
的格式如下:
1 2 # comment INSTRUCTION arguments
指令
描述
[FROM
](必需)
定义使用的基础模型。
[PARAMETER
]
设置模型运行时的参数。
[TEMPLATE
]
要发送到模型的完整提示模板。
[SYSTEM
]
指定在模板中设置的系统消息。
[ADAPTER
]
定义要应用于模型的(Q)LoRA适配器。
[LICENSE
]
指定法律许可证。
[MESSAGE
]
指定消息历史记录。
示例 基本Modelfile
一个创建mario蓝图的Modelfile
示例:
1 2 3 4 5 6 7 8 FROM llama2 # sets the temperature to 1 [higher is more creative, lower is more coherent] PARAMETER temperature 1 # sets the context window size to 4096, this controls how many tokens the LLM can use as context to generate the next token PARAMETER num_ctx 4096 # sets a custom system message to specify the behavior of the chat assistant SYSTEM You are Mario from super mario bros, acting as an assistant.
使用方法:
将其保存为文件(例如Modelfile
)
ollama create choose-a-model-name -f <文件位置例如./Modelfile>
ollama run choose-a-model-name
开始使用模型!
更多示例可在[示例目录]中找到。
有两种方法查看[ollama.com/library]中模型的Modelfile
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 > ollama show --modelfile llama2:13b # Modelfile generated by "ollama show" # To build a new Modelfile based on this one, replace the FROM line with: # FROM llama2:13b FROM /root/.ollama/models/blobs/sha256:123abc TEMPLATE """[INST] {{ if .System }}<<SYS>>{{ .System }}<</SYS>> {{ end }}{{ .Prompt }} [/INST] """ SYSTEM """""" PARAMETER stop [INST] PARAMETER stop [/INST] PARAMETER stop <<SYS>> PARAMETER stop <</SYS>>
指令 FROM (必需) FROM
指令定义创建模型时使用的基础模型。
从llama2构建
可用的基础模型列表: https://github.com/ollama/ollama#model-library
从二进制文件构建
应指定二进制文件的位置,位置应为绝对路径或相对于Modelfile
的路径。
参数 PARAMETER
指令定义运行模型时可以设置的参数。
1 PARAMETER <parameter> <parametervalue>
有效参数及其值
参数
描述
值类型
示例使用
mirostat
启用 Mirostat 采样以控制复杂度。(默认:0,0=禁用,1=Mirostat,2=Mirostat 2.0)
int
mirostat 0
mirostat_eta
影响算法响应生成文本反馈的速度。较低的学习率将导致调整速度较慢,而较高的学习率将使算法更具响应性。(默认:0.1)
float
mirostat_eta 0.1
mirostat_tau
控制输出的一致性与多样性之间的平衡。较低的值将导致文本更加集中和一致。(默认:5.0)
float
mirostat_tau 5.0
num_ctx
设置用于生成下一个令牌的上下文窗口大小。(默认:2048)
int
num_ctx 4096
repeat_last_n
设置模型向后查看的距离,以防止重复。(默认:64,0=禁用,-1=num_ctx)
int
repeat_last_n 64
repeat_penalty
设置对重复的惩罚强度。较高的值(例如 1.5)将更强烈地惩罚重复,而较低的值(例如 0.9)将更宽容。(默认:1.1)
float
repeat_penalty 1.1
temperature
模型的温度。增加温度将使模型回答更具创造性。(默认:0.8)
float
temperature 0.7
seed
设置用于生成的随机数种子。将此设置为特定数字将使模型对同一提示生成相同的文本。(默认:0)
int
seed 42
stop
设置用于停止的序列。当遇到此模式时,LLM 将停止生成文本并返回。可以通过在 modelfile 中指定多个单独的 stop
参数来设置多个停止模式。
string
stop “AI assistant:”
tfs_z
尾部自由采样用于减少输出中不太可能的令牌的影响。较高的值(例如 2.0)将更多地减少影响,而值为 1.0 时禁用此设置。(默认:1)
float
tfs_z 1
num_predict
生成文本时预测的最大令牌数。(默认:128,-1=无限生成,-2=填充上下文)
int
num_predict 42
top_k
降低生成无意义文本的概率。较高的值(例如 100)将提供更多样的回答,而较低的值(例如 10)将更为保守。(默认:40)
int
top_k 40
top_p
与 top-k 一起工作。较高的值(例如 0.95)将导致文本更多样化,而较低的值(例如 0.5)将生成更集中和保守的文本。(默认:0.9)
float
top_p 0.9
TEMPLATE TEMPLATE
是传递给模型的完整提示模板。它可能包括(可选的)系统消息、用户的消息和模型的响应。注意:语法可能是模型特定的。模板使用 Go [模板语法]。
模板变量
变量
描述
{{ .System }}
用于指定自定义行为的系统消息。
{{ .Prompt }}
用户提示消息。
{{ .Response }}
模型的响应。生成响应时,此变量之后的文本将被省略。
1 2 3 4 5 6 TEMPLATE """{{ if .System }}<|im_start|>system {{ .System }}<|im_end|> {{ end }}{{ if .Prompt }}<|im_start|>user {{ .Prompt }}<|im_end|> {{ end }}<|im_start|>assistant """
SYSTEM SYSTEM
指令指定要在模板中使用的系统消息(如果适用)。
1 SYSTEM """<system message>"""
ADAPTER ADAPTER
指令是一个可选指令,指定应用于基础模型的任何 LoRA 适配器。此指令的值应为绝对路径或相对于 Modelfile 的路径,且文件必须是 GGML 文件格式。适配器应该从基础模型调整,否则行为是未定义的。
1 ADAPTER ./ollama-lora.bin
LICENSE LICENSE
指令允许您指定与此 Modelfile 一起使用的模型共享或分发的法律许可证。
1 2 3 LICENSE """ <license text> """
MESSAGE MESSAGE
指令允许您指定模型在响应时使用的消息历史记录。使用 MESSAGE 命令的多次迭代来构建对话,这将引导模型以类似的方式回答。
1 MESSAGE <role> <message>
有效角色
角色
描述
system
为模型提供 SYSTEM 消息的另一种方式。
user
用户可能询问的示例消息。
assistant
模型应如何响应的示例消息。
示例对话 1 2 3 4 5 6 MESSAGE user Is Toronto in Canada? MESSAGE assistant yes MESSAGE user Is Sacramento in Canada? MESSAGE assistant no MESSAGE user Is Ontario in Canada? MESSAGE assistant yes
Notes
Modelfile
不区分大小写 。在示例中,使用大写指令是为了便于将其与参数区分开来。
指令可以按任意顺序排列。在示例中,首先是 FROM
指令,以保持易读性。
OpenAI 兼容性
注意: OpenAI 兼容性是实验性的,可能会有重大调整,包括破坏性更改。要完全访问 Ollama API,请查看 Ollama [Python 库]、[JavaScript 库] 和 [REST API]。
Ollama 提供与 [OpenAI API] 的部分兼容性,以帮助将现有应用程序连接到 Ollama。
使用方式 OpenAI Python 库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from openai import OpenAI client = OpenAI( base_url='http://localhost:11434/v1/', # required but ignored api_key='ollama', ) chat_completion = client.chat.completions.create( messages=[ { 'role': 'user', 'content': 'Say this is a test', } ], model='llama2', )
OpenAI JavaScript 库 1 2 3 4 5 6 7 8 9 10 11 12 13 import OpenAI from 'openai' const openai = new OpenAI({ baseURL: 'http://localhost:11434/v1/', // required but ignored apiKey: 'ollama', }) const chatCompletion = await openai.chat.completions.create({ messages: [{ role: 'user', content: 'Say this is a test' }], model: 'llama2', })
curl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 curl http://localhost:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "llama2", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "Hello!" } ] }'
端点 /v1/chat/completions
支持的功能
支持的请求字段
备注
设置 seed
将始终将 temperature
设置为 0
finish_reason
将始终是 stop
对于提示评估被缓存的完成,usage.prompt_tokens
将为 0
模型 在使用模型之前,本地拉取 ollama pull
:
默认模型名称 对于依赖于默认 OpenAI 模型名称(如 gpt-3.5-turbo
)的工具,请使用 ollama cp
将现有模型名称复制到一个临时名称:
1 ollama cp llama2 gpt-3.5-turbo
之后,可以在 model
字段中指定这个新的模型名称:
1 2 3 4 5 6 7 8 9 10 11 curl http://localhost:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-3.5-turbo", "messages": [ { "role": "user", "content": "Hello!" } ] }'
# GPU 支持 Nvidia Ollama 支持具有计算能力 5.0+ 的 Nvidia GPU。
检查您的计算兼容性以查看您的卡是否受支持: https://developer.nvidia.com/cuda-gpus
计算能力
系列
卡片
9.0
NVIDIA
H100
8.9
GeForce RTX 40xx
RTX 4090
RTX 4080
RTX 4070 Ti
RTX 4060 Ti
NVIDIA 专业版
L4
L40
RTX 6000
8.6
GeForce RTX 30xx
RTX 3090 Ti
RTX 3090
RTX 3080 Ti
RTX 3080
RTX 3070 Ti
RTX 3070
RTX 3060 Ti
RTX 3060
NVIDIA 专业版
A40
RTX A6000
RTX A5000
RTX A4000
RTX A3000
RTX A2000
A10
A16
A2
8.0
NVIDIA
A100
A30
7.5
GeForce GTX/RTX
GTX 1650 Ti
TITAN RTX
RTX 2080 Ti
RTX 2080
RTX 2070
RTX 2060
NVIDIA 专业版
T4
RTX 5000
RTX 4000
RTX 3000
T2000
T1200
T1000
T600
T500
Quadro
RTX 8000
RTX 6000
RTX 5000
RTX 4000
7.0
NVIDIA
TITAN V
V100
Quadro GV100
6.1
NVIDIA TITAN
TITAN Xp
TITAN X
GeForce GTX
GTX 1080 Ti
GTX 1080
GTX 1070 Ti
GTX 1070
GTX 1060
GTX 1050
Quadro
P6000
P5200
P4200
P3200
P5000
P4000
P3000
P2200
P2000
P1000
P620
P600
P500
P520
Tesla
P40
P4
6.0
NVIDIA
Tesla P100
Quadro GP100
5.2
GeForce GTX
GTX TITAN X
GTX 980 Ti
GTX 980
GTX 970
GTX 960
GTX 950
Quadro
M6000 24GB
M6000
M5000
M5500M
M4000
M2200
M2000
M620
Tesla
M60
M40
5.0
GeForce GTX
GTX 750 Ti
GTX 750
NVS 810
Quadro
K2200
K1200
K620
M1200
M520
M5000M
M4000M
M3000M
M2000M
M1000M
K620M
M600M
M500M
GPU 选择 如果您的系统中有多个 NVIDIA GPU 并且希望限制 Ollama 使用的子集,您可以将 CUDA_VISIBLE_DEVICES
设置为 GPU 的逗号分隔列表。可以使用数字 ID,但顺序可能会变化,因此 UUID 更可靠。您可以通过运行 nvidia-smi -L
来发现您的 GPU 的 UUID。如果您想忽略 GPU 并强制使用 CPU,请使用无效的 GPU ID(例如,“-1”)
笔记本电脑挂起/恢复 在 Linux 上,挂起/恢复周期后,有时 Ollama 无法发现您的 NVIDIA GPU,并回退到 CPU 上运行。您可以通过重新加载 NVIDIA UVM 驱动程序来解决这个驱动程序错误:sudo rmmod nvidia_uvm && sudo modprobe nvidia_uvm
AMD Radeon Ollama 支持以下 AMD GPU:
系列
卡片及加速器
AMD Radeon RX
7900 XTX
7900 XT
7900 GRE
7800 XT
7700 XT
7600 XT
7600
6950 XT
6900 XTX
6900XT
6800 XT
6800
Vega 64
Vega 56
AMD Radeon PRO
W7900
W7800
W7700
W7600
W7500
W6900X
W6800X Duo
W6800X
W6800
V620
V420
V340
V320
Vega II Duo
Vega II
VII
SSG
AMD Instinct
MI300X
MI300A
MI300
MI250X
MI250
MI210
MI200
MI100
MI60
MI50
概览 Ollama 利用 AMD ROCm 库,该库不支持所有 AMD GPU。在某些情况下,您可以强制系统尝试使用类似的 LLVM 目标。例如,Radeon RX 5400 是 gfx1034
(也称为 10.3.4),但 ROCm 当前不支持此目标。最接近的支持是 gfx1030
。您可以使用环境变量 HSA_OVERRIDE_GFX_VERSION
与 x.y.z
语法。例如,要强制系统在 RX 5400 上运行,您应设置环境变量 HSA_OVERRIDE_GFX_VERSION="10.3.0"
。如果您有不受支持的 AMD GPU,可以尝试使用下面列出的受支持类型。
目前已知的受支持 GPU 类型为以下 LLVM 目标。此表显示了映射到这些 LLVM 目标的一些示例 GPU:
LLVM 目标
示例 GPU
gfx900
Radeon RX Vega 56
gfx906
Radeon Instinct MI50
gfx908
Radeon Instinct MI100
gfx90a
Radeon Instinct MI210
gfx940
Radeon Instinct MI300
gfx941
gfx942
gfx1030
Radeon PRO V620
gfx1100
Radeon PRO W7900
gfx1101
Radeon PRO W7700
gfx1102
Radeon RX 7600
AMD 正在努力增强 ROCm v6,以在未来版本中扩大对 GPU 系列的支持,从而增加对更多 GPU 的支持。
通过 [Discord] 或提交 [问题] 获得更多帮助。
GPU 选择 如果您的系统中有多个 AMD GPU 并且希望限制 Ollama 使用的子集,您可以将 HIP_VISIBLE_DEVICES
设置为 GPU 的逗号分隔列表。您可以使用 rocminfo
查看设备列表。如果您想忽略 GPU 并强制使用 CPU,请使用无效的 GPU ID(例如,“-1”)
容器权限 在某些 Linux 发行版中,SELinux 可能阻止容器访问 AMD GPU 设备。在主机系统上,您可以运行 sudo setsebool container_use_devices=1
,以允许容器使用设备。
Ollama 通过 Metal API 支持在 Apple 设备上的 GPU 加速。