介绍 lmstudio-python
和 lmstudio-js
•
2025-03-03
今天我们发布了 lmstudio-python
(1.0.1)
和 lmstudio-js
(1.0.0)
LM Studio 针对 Python 和 TypeScript 的软件开发工具包。这两个库都采用 MIT 许可,并在 Github 上开源开发。
此外,我们推出了 LM Studio 的首个面向 Agent 的 API:.act()
调用。你提供提示和工具,模型将自主运行多个执行“轮次”,直到完成任务(或放弃)。
SDK 让你能够利用我们为 LM Studio 桌面应用程序构建的相同 AI 系统功能。开放这些 API 一直是我们的计划,并且我们在架构软件堆栈时就考虑到了这一点:LM Studio 为其核心功能使用了相同的公共 lmstudio-js
API。你的应用程序现在也可以这样做了。
我们的目标是让你能够构建自己的工具,同时(希望)让你不必解决我们在开发 LM Studio 过程中已经解决的问题:这包括自动软件依赖管理(CUDA、Vulkan)、多 GPU 支持(NVIDIA、AMD、Apple)、多操作系统支持(Windows、macOS、Linux)、默认 LLM 参数选择等等。
使用 lmstudio-python
或 lmstudio-js
的应用程序将能够在任何运行 LM Studio 的计算机上运行(无论是在前台还是在无头模式下)。
SDK 适用于 Python 和 TypeScript。你可以通过 pip 或 npm 安装它
pip install lmstudio
在 Python 中,在你的脚本、工具,甚至 Python REPL 中使用 lmstudio
包。
lmstudio-python
开发者文档。在 TypeScript 中,在你的 Node.js 或浏览器应用程序中导入 @lmstudio/sdk
包。
lmstudio-js
开发者文档。通过 LM Studio SDK 公开的核心 API 包括
.respond()
).act()
).complete()
).embed()
).load()
, .unload()
)在 TypeScript 中,SDK API 可以在 Node 环境和浏览器中使用(启用 CORS)。在 Python 中,我们同时支持便捷的同步 API,以及用于作用域资源管理的基于会话的异步 API。
有关 API 的完整列表,请参阅 Python 和 TypeScript 的 API 参考文档。
使用 lmstudio-python
或 lmstudio-js
的应用程序、工具和脚本可以运行最新的 llama.cpp
或 MLX
模型,而无需配置硬件或软件。系统会自动为给定模型选择正确的推理引擎,并根据可用资源选择参数(例如 GPU 卸载)。
例如,如果你只是想要任何模型来快速提示,请运行此命令
model = lms.llm() # gets the current model if loaded
但是,如果你有更具体的需求,你可以加载模型的新实例并手动配置每个参数。请参阅更多 Python 文档 | TypeScript 文档。
回到 LLM 的旧时代(大约 2023 年中期),确保模型输出特定格式的最佳方法是使用诸如以下的恳求进行提示
用户:“请回复有效的 JSON,不要回复其他任何内容。请不要在最后一个 } 括号后输出任何内容”。
如今,存在更好的方法 —— 例如,语法约束采样 [1] [2],LM Studio 对 llama.cpp
和 MLX
模型都支持这种方法。
SDK 公开了 API,可以使用 Pydantic(对于 Python)或 zod(对于 TypeScript)来强制模型的输出格式。在这两个库中,你还可以使用 JSON schema。
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 文档中阅读更多内容。
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 决定下一步操作的组合过程。
执行轮次
• 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)。
这两个库都采用 MIT 许可,并包含最新的贡献指南。如果你想参与开源开发,欢迎加入!
lmstudio-python
on Githublmstudio-js
on Github其他 LM Studio 开源软件包括
lms
:LM Studio 的 CLI (MIT),在 Github 上mlx-engine
:LM Studio 的 Apple MLX 引擎 (MIT),在 Github 上当你开始使用 SDK 时,我们很乐意听取你的反馈。哪些功能运行良好?哪些功能不佳?你希望接下来看到哪些功能?当然,还有你是否遇到错误。
请在各自的 Github 存储库上提交 issue。我们也感谢你的点赞 🙏⭐️。