MolyKit 是一个用于在 Makepad 框架中构建跨平台 AI 聊天应用的工具包,本技能整理了使用 MolyKit 的最佳实践。
用途
该技能适用于以下场景:使用 Makepad 构建 AI 聊天界面;集成 OpenAI 或其他 LLM API;为原生和 WASM 实现跨平台异步;创建聊天组件(消息、提示输入、头像);处理 SSE 流式响应。
主要能力
MolyKit 提供:跨平台异步工具(PlatformSend、spawn()、ThreadToken);开箱即用的聊天组件(Chat、Messages、PromptInput、Avatar);用于接入 AI 服务商的 BotClient trait;支持 SSE 流式传输的 OpenAI 兼容客户端;消息、机器人和工具调用的协议类型;MCP(模型上下文协议)支持。
跨平台异步模式
PlatformSend 仅在原生平台隐含 Send,在 WASM 上所有类型都实现该 trait。BoxPlatformSendFuture 和 BoxPlatformSendStream 是用于跨平台使用的装箱类型。spawn() 用于平台无关的任务启动:在原生平台使用 tokio(要求 Send),在 WASM 上使用 wasm-bindgen-futures(不要求 Send)。AbortOnDropHandle 在句柄被丢弃时中止其 future,可用于在组件销毁时取消任务。ThreadToken 用于在 WASM 上存储非 Send 类型,通过令牌访问线程本地值。
BotClient 与 BotContext
BotClient trait 定义了 AI 服务商集成接口,包含 send(发送消息并流式返回响应)、bots(获取可用机器人/模型)和 clone_box(克隆以便传递)方法。BotContext 是带已加载机器人的可共享包装器,提供 load、bots、get_bot 和 client 方法,便于同步 UI 访问。
协议类型
Message 结构包含 from(来源:用户、系统、机器人或应用)、metadata 和 content。MessageContent 包含 text(主内容,markdown)、reasoning(AI 推理/思考)、citations(来源 URL)、attachments、tool_calls 和 tool_results。MessageMetadata 包含 is_writing(是否仍在流式传输)和 created_at。BotId 是全局唯一标识,格式为 <len>;<id>@<provider>,例如 BotId::new("gpt-4", "api.openai.com") 生成 "5;gpt-4@api.openai.com"。
组件模式
Slot 组件支持运行时内容替换,可通过 replace 替换内容或 restore 恢复默认。Avatar 组件支持文本/图片切换,根据 Picture 类型显示字素或依赖图片。PromptInput 组件基于 CommandTextInput,包含发送/停止图标、任务状态和交互性,提供 submitted、reset、set_send、set_stop、enable、disable 方法。Messages 组件用于会话视图,包含消息列表和 BotContext,提供 set_messages、scroll_to_bottom、is_at_bottom 方法。UiRunner 模式用于异步到 UI 的更新,通过 defer_with_redraw 从异步上下文更新组件。
SSE 流式传输
parse_sse 函数将 SSE 字节流解析为消息流,按 "\n\n" 分割,提取 "data:" 内容,过滤注释和 [DONE] 消息。在 BotClient::send 中使用时,通过 stream! 宏发送请求、解析事件、反序列化 Completion 并累积内容,逐块 yield 结果。
最佳实践
使用 PlatformSend 实现跨平台(同一代码在原生和 WASM 上运行);使用 spawn() 而非 tokio::spawn 实现平台无关任务启动;使用 AbortOnDropHandle 在组件销毁时取消任务;在 WASM 上使用 ThreadToken 处理非 Send 类型;使用 Slot 允许 BotClient 提供自定义组件;使用 read()/write() 模式通过 WidgetRef 安全访问;使用 UiRunner::defer_with_redraw 从异步上下文更新组件;处理 ClientResult 的部分成功(可能同时有值和错误)。
参考文件
llms.txt 包含完整的 MolyKit API 参考。
限制
资料未提供 MolyKit 的收费、价格、平台支持范围、性能效果或具体安装步骤等信息。