介绍 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 的首个面向 Agent 的 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:聊天、文本补全、嵌入和 Agent 工具使用

通过 LM Studio SDK 公开的核心 API 包括

  • 与 LLM 聊天 (.respond())
  • Agent 工具使用 (.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:在循环中运行工具

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

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 存储库上提交 issue。我们也感谢你的点赞 🙏⭐️。