网淘吧来吧,欢迎您!

Offload Tasks to LM Studio Models

2026-03-31 新闻来源:网淘吧 围观:16
电脑广告
手机广告

LM Studio 模型

当质量满足要求时,将任务卸载到本地模型。基础 URL:http://127.0.0.1:1234。认证:Authorization: Bearer lmstudio。实例 ID =loaded_instances[].id(同一模型可以有多个实例,例如keykey:2)。

关键术语

  • 模型:来自 GET models 的键;用于聊天和可选的加载。
  • lm_studio_api_url:默认http://127.0.0.1:1234(路径为 /api/v1/...)。
  • response_id/previous_response_id:聊天返回 response_id;将其作为 previous_response_id 传递以实现有状态对话。
  • instance_id对于卸载操作,请仅使用GET /api/v1/models接口返回的对应模型实例的loaded_instances[].id值。切勿假定它等同于模型键;在存在多个实例的情况下,ID可能形如"键名:2"。LM Studio文档说明:列表接口(loaded_instances[].id)与卸载接口(instance_id)。

前注中的触发说明;下方为具体实现。

Offload Tasks to LM Studio Models

前提条件

LM Studio 0.4+版本,服务器运行于:1234端口,模型文件已存储于磁盘;通过API进行加载/卸载操作(即时加载可选);运行脚本需Node环境(使用curl亦可)。

快速开始

最简路径:先列出模型,然后进行一次对话。将<模型>替换为GET /api/v1/models接口返回的某个键名,并将<任务>替换为任务文本。

curl -s -H 'Authorization: Bearer lmstudio' http://127.0.0.1:1234/api/v1/models
node scripts/lmstudio-api.mjs <model> '<task>' --temperature=0.5 --max-output-tokens=200

保持状态的多轮对话:传递--previous-response-id=<标识符>参数,该标识符来自前次脚本输出。或使用--stateful参数以自动保持response_id。可选参数--log <路径>用于记录请求/响应日志。

node scripts/lmstudio-api.mjs <model> 'First turn...' --previous-response-id=$ID1
node scripts/lmstudio-api.mjs <model> 'Second turn...' --previous-response-id=$ID2

完整工作流程

步骤0:预检

GET<基础地址>/api/v1/models;非200状态码或连接错误 = 服务器未就绪。

exec command:"curl -s -o /dev/null -w '%{http_code}' -H 'Authorization: Bearer lmstudio' http://127.0.0.1:1234/api/v1/models"

步骤1:列出模型并选择

GET /api/v1/models 以列出模型。解析每个条目:key(键)、type(类型)、loaded_instances(已加载实例)、max_context_length(最大上下文长度)、capabilities(能力)。如果某个模型已具备 loaded_instances.length > 0 且适合任务,则跳至步骤5;否则为聊天选择一个键(并可选在步骤3中加载)。根据任务选择:视觉任务 -> capabilities.vision;嵌入任务 -> type=embedding;上下文任务 -> max_context_length。优先选择已加载的模型;追求速度则优先选择较小的模型,追求推理能力则优先选择较大的模型。注意 loaded_instances[].id 以便后续可选卸载。

示例 — 列出模型:

exec command:"curl -s -H 'Authorization: Bearer lmstudio' http://127.0.0.1:1234/api/v1/models"

解析 models[](key, type, loaded_instances, max_context_length, capabilities, params_string)。如果某个模型具备 loaded_instances.length > 0 且适合任务,则跳至步骤5;否则为聊天选择键(并可选加载)。注意 loaded_instances[].id 以便后续可选卸载。

步骤2:模型选择

从GET响应中选取键;在聊天中用作模型(可选加载)。约束条件:视觉任务 -> capabilities.vision;嵌入任务 -> type=embedding;上下文任务 -> max_context_length。优先选择已加载的(loaded_instances 非空),追求速度则优先选择较小的模型/追求推理能力则优先选择较大的模型;回退到主要模型。如果不确定,则使用该键对应的第一个已加载实例,或适合任务的最小已加载模型。可选进行POST加载;否则在首次聊天时即时加载。

步骤三:加载模型(可选)

可选操作:通过 POST 请求 /api/v1/models/load { model, context_length?, ... }。或者运行脚本 scripts/load.mjs <模型名>。JIT(即时加载):首次对话时自动加载;显式加载仅用于特定配置选项。

步骤四:验证加载(可选)

若为显式加载:通过 GET 请求 models,确认 loaded_instances。若为 JIT:无需验证;首次对话将返回 model_instance_id 和 stats.model_load_time_seconds。

步骤五:调用 API

从技能文件夹执行:node scripts/lmstudio-api.mjs <模型名> '<任务>' [选项]。

exec command:"node scripts/lmstudio-api.mjs <model> '<task>' --temperature=0.7 --max-output-tokens=2000"

状态保持:添加 --previous-response-id=<响应ID>。Curl 方式:POST 请求<基础地址>/api/v1/chat,请求体包含 model, input, store, temperature, max_output_tokens;可选参数 previous_response_id。解析:输出(类型为 message)-> content;以及 response_id, model_instance_id, stats。脚本将输出 content, model_instance_id, response_id, usage。

步骤六:卸载(可选)

对于您使用的模型键:先 GET /api/v1/models,然后针对每个 该模型的 loaded_instances[].id,发送 POST 请求 /api/v1/models/unload,请求体为{"instance_id": "<该ID>"}仅使用响应中的id(除非模型键与该id完全相同,否则不要发送模型键)。或者运行 scripts/unload.mjs <model_key>(脚本先执行GET请求,然后卸载每个实例id)。可选参数 --unload-after(默认关闭);使用 --keep 保持加载状态。仅卸载该模型的实例。JIT+TTL 自动卸载;需要时显式执行。

# One unload per instance_id; repeat for each id in that model's loaded_instances
exec command:"curl -s -X POST http://127.0.0.1:1234/api/v1/models/unload -H 'Content-Type: application/json' -H 'Authorization: Bearer lmstudio' -d '{\"instance_id\": \"<instance_id>\"}'"

步骤7:验证卸载(可选)

卸载后,确认该模型键下没有实例残留。运行下面的jq检查;结果必须为0。如果非零,则从该模型中卸载剩余的 instance_id(s) 并重新运行检查。不要从"模型对象存在"推断;即使loaded_instances数组为空,对象依然存在。

exec command:"curl -s -H 'Authorization: Bearer lmstudio' http://127.0.0.1:1234/api/v1/models | jq '.models[]|select(.key==\"<model_key>\")|.loaded_instances|length'"

期望输出0。如果不是,卸载剩余的 instance_ids 并重新运行。

错误处理

  • 脚本在遇到临时故障时会重试(2-3次尝试,带退避机制)。
  • 未找到模型 -> 从GET响应中选取另一个模型。
  • API/服务器错误 -> GET models,检查URL。
  • 无效输出 -> 重试。
  • 内存问题 -> 卸载或使用更小的模型。
  • 卸载失败 -> instance_id 必须完全来自 GET /api/v1/models 中该模型的 loaded_instances[].id(除非模型键与之匹配,否则不能使用模型键)。

复制粘贴

替换<model>为 GET /api/v1/models 中的一个键,并<task>为任务文本。可选地,根据步骤6进行卸载(instance_id 来自该键的 GET models)。

exec command:"curl -s -H 'Authorization: Bearer lmstudio' http://127.0.0.1:1234/api/v1/models"
exec command:"node scripts/lmstudio-api.mjs <model> '<task>' --temperature=0.7 --max-output-tokens=2000"

LM Studio API 详情

助手/API:见步骤5。输出:content, model_instance_id, response_id, usage。认证:Bearer lmstudio。列表 GET /api/v1/models。加载 POST /api/v1/models/load(可选)。卸载 POST /api/v1/models/unload { instance_id }。

脚本

lmstudio-api.mjs:聊天;选项 --stateful, --unload-after, --keep, --log <路径>, --previous-response-id, --temperature, --max-output-tokens。load.mjs:按键加载模型。unload.mjs:按模型键卸载(所有实例)。test.mjs:冒烟测试(加载、聊天、卸载一个模型)。

注意

  • LM Studio 0.4+。
  • 即时加载(首次聊天时加载;stats 中的 model_load_time_seconds);有状态(response_id / previous_response_id)。

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部
上一篇:Baidu Hot Cn 下一篇:Graphiti

相关文章

您是本站第349255名访客 今日有175篇新文章/评论