进阶 lmql.ai 2026-10-11 18:10:44 · 41 阅读

第23章 LMQL Serving 服务部署与实现

Serving 部署服务 构建好聊天应用后,下一步就是把它部署出去,让别人能用上。为此,LMQL 提供了一个简单的 server 实现和配套的客户端 Web UI 作为起点,两者通过 websocket 协议通信。 你可以通过两种方式使用这个实现:(1) 直接用 lmql chat 命令运行你的 .lmql 文件,或者 (2) 在自己的代码中调用 lmql.chat.chatserver。 使用 lmql chat 命令 要在本地启动 LMQL 聊天服务和用户界面,只需运行以下命令: bash lmql chat .lmql 这会在 http://localhost:8089 上启动一个 Web 界面,并自动在默认浏览器中打开。接下来你就可以开始和自己的 LMQL 聊天应用对话了。界面右侧会显示内部的 trace(见下图),实时展示当前聊天应用的完整对话 prompt。 注意:修改 .lmql 文件后服务不会自动重载,需要手动重启 server 才能看到改动。

A simple chatbot launched via lmql chat.

使用 chatserver

或者,如果你想在自己的代码中启动 LMQL chat server,可以使用 lmql.lib.chat.chatserver。该类接收查询文件路径或查询函数作为参数,并返回一个 chat server 对象,可通过 run() 方法启动:

python from lmql.lib.chat import chatserver chatserver('path/to/my-query.lmql').run()

注意,直接传递查询函数时,必须提供异步定义(async def)函数,以便支持并发处理客户端请求。

@message 流式输出

Chat 依赖基于装饰器的输出流式处理。具体来说,只有被 @message 标注的模型输出变量才会被流式传输并在聊天界面中显示给用户。这使得模型输出与聊天输出之间能够清晰分离,同时也支持隐藏内部推理过程。

若要在自定义输出写入器中使用 @message,请确保继承自 lmql.lib.chat 中的 ChatMessageOutputWriter,该类提供了专门处理和流式传输 @message 变量的额外方法。

更高级的用法

对于更高级的服务场景(例如将 Chat 集成到你自己的 Web 应用中),请参考 src/lmql/ui/chat/__init__.py 中 chatserver 的极简实现。该实现非常精简,可轻松适配你的需求和基础设施。对应的 Web UI 实现在 src/lmql/ui/chat/assets/ 中,可作为你自定义客户端实现和 UI 适配的良好起点。

关于其他形式的输出流(例如通过 HTTP 或 SSE),请参阅有关 Output Streaming 的章节。

免责声明:LMQL chat server 是一个简单的代码模板,不包含任何安全特性、认证或成本控制。它仅适用于本地开发和测试,不应直接用于生产环境。在部署你自己的聊天应用之前,请确保实施必要的安全措施、控制成本和实现认证机制。

评论 (0)