介绍 lmstudio-pythonlmstudio-js

2025-03-03

undefined

LM Studio SDK 来了!

今天我们发布 lmstudio-python (1.0.1)lmstudio-js (1.0.0)
LM Studio 针对 PythonTypeScript 的软件开发工具包。这两个库都采用 MIT 许可证,并在 Github 上公开开发。

此外,我们推出了 LM Studio 的第一个面向代理的 API:.act() 调用。您给它一个提示和工具,模型将自主进行多个执行“回合”,直到完成任务(或放弃)。

在您自己的代码中使用 LM Studio 的功能

SDK 允许您利用我们为 LM Studio 桌面应用程序构建的相同 AI 系统功能。开放这些 API 一直是我们的计划,我们在软件堆栈设计时就考虑到了这一点:LM Studio 使用相同的公共 lmstudio-js API 实现其核心功能。您的应用程序现在也可以做到这一点。

构建您自己的本地 AI 工具

我们的目标是让您能够构建自己的工具,同时(希望)省去您解决我们已经在开发 LM Studio 过程中解决的问题:这包括自动软件依赖管理(CUDA、Vulkan)、多 GPU 支持(NVIDIA、AMD、Apple)、多操作系统支持(Windows、macOS、Linux)、默认 LLM 参数选择等等。

使用 lmstudio-pythonlmstudio-js 的应用程序将能够在任何运行 LM Studio 的计算机上运行(无论是在前台还是在无头模式下)。

您的第一个应用

SDK 适用于 Python 和 TypeScript。您可以通过 pip 或 npm 安装它

pip install lmstudio

在 Python 中,在您的脚本、工具或甚至 Python REPL 中使用 lmstudio 包。

在 TypeScript 中,在您的 Node.js 或浏览器应用程序中导入 @lmstudio/sdk 包。

核心 API:聊天、文本补全、嵌入和代理工具使用

通过 LM Studio SDK 暴露的核心 API 包括:

  • 与 LLM 聊天 (.respond())
  • 代理工具使用 (.act())
  • 结构化输出 (Pydantic, zod, JSON schema)
  • 图像输入
  • 推测解码 (适用于 MLX 和 llama.cpp)
  • 文本补全 (.complete())
  • 嵌入 (.embed())
  • 低层配置 (GPU、上下文长度等)
  • 内存中的模型管理 (.load(), .unload())

TypeScript 中,SDK API 既可以在 Node 环境中使用,也可以在浏览器中使用(需要启用 CORS)。在 Python 中,我们同时支持便捷的同步 API 和基于会话的异步 API,用于作用域资源管理。

有关 API 的完整列表,请参阅 PythonTypeScript 的 API 参考。

API 具有合理的默认值,但也完全可配置

使用 lmstudio-pythonlmstudio-js 的应用程序、工具、脚本将能够运行最新的 llama.cppMLX 模型,而无需配置硬件或软件。系统会根据可用资源自动为给定模型选择正确的推理引擎,并选择参数(例如 GPU 卸载)。

例如,如果您只是想快速提示 任何 模型,请运行此命令

model = lms.llm() # gets the current model if loaded

但是,如果您有更具体的需求,可以加载模型的新实例并手动配置每个参数。有关更多信息,请参阅Python 文档 | TypeScript 文档

使用 Pydantic、zod 或 JSON Schema 强制执行输出格式

在 LLM 的旧时代(大约 2023 年年中),确保模型特定输出格式的最佳方法是恳求式提示,例如:

用户:“请只回复有效的 JSON,不要输出任何其他内容。请在最后一个 } 括号之后不要输出任何东西。”

如今,存在更好的方法——例如语法约束采样 [1] [2],LM Studio 支持 llama.cppMLX 模型。

SDK 提供了 API,可以使用 Pydantic(适用于 Python)或 zod(适用于 TypeScript)来强制执行模型的输出格式。在这两个库中,您也可以使用 JSON 模式。

Python - 使用 Pydantic

from pydantic import BaseModel

# A class based schema for a book
class BookSchema(BaseModel):
    title: str
    author: str
    year: int

result = model.respond("Tell me about The Hobbit",
                       response_format=BookSchema)

book = result.parsed
print(book)
#       ^
#   Note that `book` is correctly typed as
#   { title: string, author: string, year: number }

Python 文档中阅读更多信息。

TypeScript - 使用 zod

import { z } from "zod";

// A zod schema for a book
const bookSchema = z.object({
  title: z.string(),
  author: z.string(),
  year: z.number().int(),
});

const result = await model.respond("Tell me about The Hobbit.",
  { structured: bookSchema }
);

const book = result.parsed;
console.info(book);
//             ^
//   Note that `book` is correctly typed as
//   { title: string, author: string, year: number }

TypeScript 文档中阅读更多信息。

.act() API:循环运行工具

除了像 .respond() 这样的“标准”LLM API 之外,SDK 还引入了一个新的 API:.act()。此 API 专为面向代理的编程而设计,在这种编程中,模型被赋予一个任务和一组工具,然后它将自主尝试完成任务。

LLM “使用工具”意味着什么?

LLM 大多是文本输入、文本输出的程序。所以,您可能会问“LLM 如何使用工具?”答案是,一些 LLM 经过训练,会要求人类为它们调用工具,并期望工具输出以某种格式返回。

想象一下您正在通过电话为某人提供计算机支持。您可能会说:“为我运行这个命令……好的,它输出了什么?……好的,现在点击那里,告诉我它说了什么……”。在这种情况下,您就是 LLM!您正在通过电话另一端的人“间接调用工具”。

在“回合”中运行工具调用

我们引入了执行“回合”的概念,来描述运行工具、将其输出提供给 LLM,然后等待 LLM 决定下一步该做什么的组合过程。

执行回合

 • run a tool →
 ↑   • provide the result to the LLM →
 │       • wait for the LLM to generate a response

 └────────────────────────────────────────┘ └➔ (return)

模型可能会选择多次运行工具,然后才返回最终结果。例如,如果 LLM 正在编写代码,它可能会选择编译或运行程序,修复错误,然后再次运行,反复执行直到获得所需的结果。

考虑到这一点,我们说 .act() API 是一个自动的“多回合”工具调用 API。

在 TypeScript 中,您可以使用描述和函数定义工具。在 Python 中,您甚至可以直接传入一个函数!

import lmstudio as lms

def multiply(a: float, b: float) → float:
    """Given two numbers a and b. Returns the product of them."""
    return a * b

model = lms.llm("qwen2.5-7b-instruct")

model.act(
  "What is the result of 12345 multiplied by 54321?",
  [multiply],
  on_message=print,
)

当 LLM 选择使用工具时,SDK 会运行它并自动(在客户端进程中)将结果提供回 LLM。然后模型可能会再次选择运行工具,例如,发生软件错误,该错误向 LLM 提供了如何继续的信息。

随着执行的进行,SDK 通过回调向开发者提供事件流。这允许您构建交互式 UI,向用户显示 LLM 正在做什么,它正在使用哪个工具,以及它的进展如何。

要开始使用 .act() API,请参阅 .act() (Python).act() (TypeScript)

开源:贡献 SDK 开发

这两个库都是 MIT 许可证,并包含最新的贡献指南。如果您想参与开源开发,欢迎加入!

其他 LM Studio 开源软件包括

  • lms:LM Studio 的 CLI (MIT) 在 Github 上
  • mlx-engine:LM Studio 的 Apple MLX 引擎 (MIT) 在 Github 上

我们期待您的反馈!

当您开始使用 SDK 时,我们很乐意听取您的反馈。什么运行良好?什么不好?您希望接下来看到什么功能?当然,还有您是否遇到了 bug。

请在相应的 Github 仓库中提出问题。我们也希望您能点个赞 🙏⭐️。