介绍 lmstudio-python
和 lmstudio-js
今天我们发布 lmstudio-python
(1.0.1)
和 lmstudio-js
(1.0.0)
LM Studio 针对 Python 和 TypeScript 的软件开发工具包。这两个库都采用 MIT 许可证,并在 Github 上公开开发。
此外,我们推出了 LM Studio 的第一个面向代理的 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 模式。
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 专为面向代理的编程而设计,在这种编程中,模型被赋予一个任务和一组工具,然后它将自主尝试完成任务。
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
lmstudio-js
其他 LM Studio 开源软件包括
lms
:LM Studio 的 CLI (MIT) 在 Github 上mlx-engine
:LM Studio 的 Apple MLX 引擎 (MIT) 在 Github 上当您开始使用 SDK 时,我们很乐意听取您的反馈。什么运行良好?什么不好?您希望接下来看到什么功能?当然,还有您是否遇到了 bug。
请在相应的 Github 仓库中提出问题。我们也希望您能点个赞 🙏⭐️。