核心内容摘要
身体的诗篇:探索大胆人体艺术的边界与自由
Ollama 服务启动后会提供一系列原生REST API端点。
通过这些Endpoints可以在代码环境下与ollama启动的大模型进行交互、管理模型和获取相关信息。
其中两个endpoint是最重要的分别是POST /api/generatePOST /api/chat其他端点情况POST /api/createPOST /api/tagsPOST /api/showPOST /api/copyDELETE /api/deletePOST /api/pullPOST /api/pushPOST /api/embedGET /api/ps
/api/generate 接口参数概览常规参数参数名类型描述model(必需)模型名称必须遵循model:tag格式如果不提供则将默认为latest。
prompt(必需)用于生成响应的提示。
suffix(可选)模型响应后的文本。
images(可选)base64 编码图像的列表适用于多模态模型如 llava。
高级参数 (可选)参数名类型描述format(可选)返回响应的格式。
格式可以是json或 JSON 模式。
最主要的问题是避免产生大量空格options(可选)文档中列出的其他模型参数例如temperature。
system(可选)系统消息用于覆盖 Modelfile 中定义的内容。
template(可选)要使用的提示模板覆盖 Modelfile 中定义的内容。
stream(可选)如果为false响应将作为单个响应对象返回而不是对象流。
raw(可选)如果为true则不会对提示应用格式。
keep_alive(可选)控制模型在请求后保持加载的时间默认5分钟。
context(可选)(已弃用)从先前请求返回的上下文参数用于保持简短的对话记忆。
对于endpoints来说如果使用代码调用常规的调用方式是通requests库进行调用。
如下所示import requests # type: ignore import json # 设置 API 端点 generate_url http://
192.
168.
1
131:11434/api/generate # 这里需要根据实际情况进行修改 # 示例数据 generate_payload { model: deepseek-r1:7b, # 这里需要根据实际情况进行修改 prompt: 请生成一个关于人工智能的简短介绍。
, # 这里需要根据实际情况进行修改 stream: False, # 默认使用的是True如果设置为False则返回的是一个完整的响应而不是一个流式响应 } # 调用生成接口 response_generate requests.post(generate_url, jsongenerate_payload) if response_generate.status_code 200: generate_response response_generate.json() print(生成响应:, json.dumps(generate_response, ensure_asciiFalse, indent
) else: print(生成请求失败:, response_generate.status_code, response_generate.text)
response 参数格式化解析response字段指的是模型生成的实际输出内容。
对于DeepSeek-R1模型来说response字段中包含think 标签和正常文本think 标签用于表示模型的思考过程或内部推理而正常的文本则是模型生成的实际输出内容。
注意非推理类模型的返回结果中没有think/think标识。
num_ctx / num_predict 输入输出控制num_ctx和num_predict参数都是需要放置在options参数中的其中num_ctx该参数指的是大模型在一次对话中能够看到和记住的最大上下文长度默认配置 2048相当于一次只能向模型输入 2ktoken超过 2k 模型就无法记住。
当prompt特别长时往往会出现问题。
并且现在开源模型往往支持长上下文默认配置会严重限制本地模型能力。
num_predict参数指的是模型响应返回的最大 token 数据量。
我们可以这样测试import requests # type: ignore import json # 设置 API 端点 generate_url http://
127.
0.
1:11434/api/generate # 这里需要根据实际情况进行修改 # 示例数据 generate_payload { model: deepseek-r1:
5b, # 这里需要根据实际情况进行修改 prompt: 请生成一个关于人工智能的简短介绍。
, # 这里需要根据实际情况进行修改 stream: False, # 默认使用的是True如果设置为False则返回的是一个完整的响应而不是一个流式响应 options: { # num_ctx: 7, 慎用可能会导致Ollama服务不稳定建议选择 1024 及以上 num_predict: 10 } } # 调用生成接口 response_generate requests.post(generate_url, jsongenerate_payload) if response_generate.status_code 200: generate_response response_generate.json() print(生成响应:, json.dumps(generate_response, ensure_asciiFalse, indent
) else: print(生成请求失败:, response_generate.status_code, response_generate.text)测试结果生成响应: { model: deepseek-r1:
5b, created_at:
T13:46:
3
2225119Z, response: think\n嗯用户让我生成一个关于人工智能, done: true, done_reason: length, context: [ 151644, 14880, 43959, 46944, 101888, 104455, 9370, 98237, 99534, 100157, 1773, 151645, 151648, 198, 106287, 3837, 20002, 104029, 43959, 46944, 101888, 104455 ], total_duration: 3521795400, load_duration: 3112872000, prompt_eval_count: 13, prompt_eval_duration: 321000000, eval_count: 10, eval_duration: 76000000 }
流式输出功能接下来看流式输出输出其参数和如上代码保持一致只需要在response_generate中添加streamTrue最后再通过流式的方式进行响应结果处理即可。
代码如下所示import requests # type: ignore import json # 设置 API 端点 generate_url http://
127.
0.
1:11434/api/generate # 示例数据 generate_payload { model: deepseek-r1:
5b, prompt: 请生成一个关于人工智能的简短介绍。
, options: { temperature:
6, } } # 调用生成接口 response_generate requests.post(generate_url, jsongenerate_payload, streamTrue) # 在这里添加streamTrue if response_generate.status_code 200: # 处理流式响应 for line in response_generate.iter_lines(): if line: try: # 解码并解析每一行的 JSON response_json json.loads(line.decode(utf-
) if response in response_json: print(response_json[response], end, flushTrue) # 检查 response_json 字典中是否存在键 done并且其值是否为 True。
如果这个条件成立表示生成的响应已经完成。
if response_json.get(done, False): print(\n\n完整响应:, json.dumps(response_json, ensure_asciiFalse, indent
) except json.JSONDecodeError as e: print(fJSON 解析错误: {e}) else: print(生成请求失败:, response_generate.status_code, response_generate.text)测试结果
Ollama 模型生命周期管理默认情况下通过Ollama run启动一个模型后会将其在VRAM(显存)中保存5分钟。
主要作用是为了做性能优化通过保持模型在显存中可以避免频繁的加载和卸载操作从而提高响应速度特别是在连续请求的情况下。
我们可以通过ollama stop命令立即卸载某个模型。
而在生成请求中一种高效的方式是通过keep_alive参数来控制模型在请求完成后保持加载在内存中的时间。
其可传入的参数规则如下参数类型示例描述持续时间字符串10m 或 24h表示保持模型在内存中的时间单位可以是分钟m或小时h。
以秒为单位的数字3600表示保持模型在内存中的时间单位为秒。
任何负数-1 或 -1m表示保持模型在内存中负数值将使模型持续加载。
00表示在生成响应后立即卸载模型。
import requests # type: ignore import json # 设置 API 端点 generate_url http://
127.
0.
1:11434/api/generate # 示例数据 generate_payload { model: deepseek-r1:
5b, prompt: 请生成一个关于人工智能的简短介绍。
, stream: False, keep_alive: 10m, # 设置模型在请求后保持加载的时间 options: { temperature:
6, } } # 调用生成接口 response_generate requests.post(generate_url, jsongenerate_payload) if response_generate.status_code 200: generate_response response_generate.json() print(生成响应:, json.dumps(generate_response, ensure_asciiFalse, indent
) else: print(生成请求失败:, response_generate.status_code, response_generate.text) if generate_response[eval_duration] ! 0: tokens_per_second generate_response[eval_count] / generate_response[eval_duration] * 10**9 print(fTokens per second: {tokens_per_second}) else: print(eval_duration is zero, cannot calculate tokens per second.)此时就可以在服务器控制台查看到keep_alive在工程化的项目中往往需要根据请求的频率来设置如果请求不频繁可以使用默认值或较短的时间以便在不使用时释放内存。
而如果应用程序需要频繁调用模型可以设置较长的keep_alive时间以减少加载时间。
很关键非常影响服务器的性能和应用程序的用户体验。
大家一定要注意。