隆重推出 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 schema。

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:循环运行工具

除了“标准”的 LLM API,如 .respond(),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 时,我们希望听到您的反馈。哪些方面运作良好?哪些方面不好?您希望接下来看到哪些功能?当然,还有您是否遇到错误。

请在相应的 Github 仓库中提出问题。我们也感谢您的点赞 🙏⭐️。