当前位置: 首页 > news >正文

RustGLM SDK:智谱 AI 自然语言大模型 Zhipu ChatGLM Rust SDK

RustGLM - 智谱 AI 自然语言大模型 Zhipu ChatGLM Rust SDK

RustGLM 是面向智谱 AI 开放平台的优秀高效的非官方异步 Rust SDK,提供强类型 GLM-5 请求、SSE 和 ToolStream 聚合、双向 Realtime WebSocket 会话、Batch API 操作、知识库管理,以及基于官方 Rust MCP SDK 的 MCP 客户端。

RustGLM 项目面向生产后端。网络策略、持久化、凭据、重试和客户端生命周期均由应用显式控制。

已废弃旧RustGLM 0.1.x的版本,目前最新的 RustGLM 1.0.0 已发表至Crates.io上。

快速开始

添加默认 SDK 与 Tokio 运行时:

[dependencies] rustglm = "1.0.0" tokio = { version = "1", features = ["macros", "rt-multi-thread"] }

设置凭据并运行补全示例:

$env:ZHIPU_API_KEY ="key_id.secret"cargo run--example chat_completion
use rustglm::{ChatCompletionRequest, ChatMessage, ZhipuClient}; # async fn run() -> rustglm::Result<()> { let client = ZhipuClient::new("key_id.secret")?; let request = ChatCompletionRequest::new("glm-5.2") .message(ChatMessage::user("用一段话解释 Rust 所有权。")); let response = client.chat_completion(&request).await?; println!("{}", response.text().unwrap_or_default()); # Ok(()) # }

要求

Cargo 包名和 Rust crate 名均为rustglm

副作用契约

RustGLM 不会进行隐式磁盘 I/O。

examples 示例演示文件夹 里面的方法可能显式读取环境变量或本地文件。这些属于应用层行为,并非 SDK 执行。

Feature flags

默认 feature 保留广泛的智谱 API 能力,同时使独立 MCP 协议客户端保持按需启用。

Feature默认启用API 能力
agents官方 Agent、Assistant 端点和本地 Agent 运行时
audioGLM-4-Voice、转录、语音和音色操作
batch强类型 Batch API 创建、列表、查询和取消
files文件上传、下载、删除、解析、OCR 和版面分析
images图像生成
mcp基于rmcp的独立 Streamable HTTP MCP 客户端
ragRetrieval Agent、知识库与文档管理
realtime强类型双向 WebSocket 客户端
tools托管工具类型、Web 操作和 ToolStream 聚合
video视频生成
full启用包括mcp在内的全部 feature

最小 HTTP 聊天客户端:

[dependencies] rustglm = { version = "1.0.0", default-features = false } tokio = { version = "1", features = ["macros", "rt-multi-thread"] }

选择部分企业 API:

[dependencies] rustglm = { version = "1.0.0", default-features = false, features = ["batch", "mcp", "rag", "realtime", "tools"] } tokio = { version = "1", features = ["macros", "rt-multi-thread"] }

全部 API:

[dependencies] rustglm = { version = "1.0.0", features = ["full"] }

认证

ZhipuClient::newZhipuConfig::newRealtimeConfig::new均直接接收凭据。

请勿提交凭据。应用应自行从进程环境、密钥管理器或工作负载身份提供方读取密钥。

强类型 GLM-5 聊天

标记类型、封闭能力 trait 和请求 typestate 会阻止通过强类型 API 发送不支持的操作。请求在包含用户或工具输入前,无法传给强类型补全方法。

use rustglm::{Glm52, ReasoningEffort, Thinking, TypedChatRequest, ZhipuClient}; # async fn run() -> rustglm::Result<()> { let client = ZhipuClient::new("key_id.secret")?; let request = TypedChatRequest::<Glm52>::new() .system("Answer with evidence.") .thinking(Thinking::enabled()) .reasoning_effort(ReasoningEffort::High) .user("Summarize the incident report."); let response = client.typed_chat_completion(&request).await?; println!("{}", response.text().unwrap_or_default()); # Ok(()) # }

支持的聊天模型

下表描述编译期强类型 API。新发布或私有模型 ID 仍可通过原始ChatCompletionRequest使用。

文本模型标记类型ThinkingReasoning effortToolStream
glm-5.2Glm52
glm-5.1Glm51
glm-5.1-highspeedGlm51Highspeed
glm-5-turboGlm5Turbo
glm-5Glm5
glm-4.7Glm47
glm-4.7-flashGlm47Flash
glm-4.7-flashxGlm47FlashX
glm-4.6Glm46
glm-4.5-airGlm45Air
glm-4.5-airxGlm45AirX
glm-4.5-flashGlm45Flash
glm-4-flash-250414Glm4Flash250414
glm-4-flashx-250414Glm4FlashX250414
视觉模型标记类型ThinkingToolStream
glm-5v-turboGlm5vTurbo
autoglm-phoneAutoGlmPhone
glm-4.6vGlm46v
glm-4.6v-flashGlm46vFlash
glm-4.6v-flashxGlm46vFlashX
glm-4v-flashGlm4vFlash
glm-4.1v-thinking-flashGlm41vThinkingFlash
glm-4.1v-thinking-flashxGlm41vThinkingFlashX

ReasoningEffortThinking、ToolStream、工具和视觉输入只会暴露给声明相应能力的标记类型,从而阻止不受支持的字段通过强类型 API 到达传输层。

当新发布字段尚未获得强类型 builder 时,ChatCompletionRequest仍可作为前向兼容的原始请求使用。

ToolStream

ToolStream 将碎片化 SSE 函数调用增量合并为完整的强类型调用,同时保留文本、推理、用量和流错误。

use futures_util::StreamExt; use rustglm::{Glm52, ToolStreamEvent, TypedChatRequest, ZhipuClient}; # async fn run() -> rustglm::Result<()> { let client = ZhipuClient::new("token")?; let request = TypedChatRequest::<Glm52>::new().tool_stream().user("Check the deployment status."); let mut stream = client.typed_chat_tool_stream(&request).await?; while let Some(event) = stream.next().await { if let ToolStreamEvent::ToolCallCompleted(call) = event? { println!("{} {}", call.name, call.arguments); } } # Ok(()) # }

Batch API

batchfeature 提供强类型补全窗口和状态。Batch 输入文件通过filesAPI 显式上传。

use rustglm::{BatchCreateRequest, ZhipuClient}; # async fn run() -> rustglm::Result<()> { let client = ZhipuClient::new("token")?; let request = BatchCreateRequest::new("input-file-id", "/v4/chat/completions"); let batch = client.create_batch(&request).await?; let current = client.batch(&batch.id).await?; println!("{:?}", current.status); # Ok(()) # }

可用方法为create_batchbatchesbatchcancel_batch。不在1..=100范围内的列表限制会在网络 I/O 前返回BatchError::InvalidLimit

知识库与 RAG

ragfeature 遵循官方知识库 OpenAPI 路径,涵盖知识库 CRUD、容量、检索、文档列表和详情、内存文件上传、URL 摄取、删除、文档图片和重新嵌入。RagDocumentUpload::from_bytes有意不提供基于路径的构造函数;调用方控制文件读取、大小限制、加密、租户边界和保留策略。

use rustglm::{KnowledgeCreateRequest, KnowledgeEmbeddingModel, ZhipuClient}; # async fn run() -> rustglm::Result<()> { let client = ZhipuClient::new("token")?; let created = client.create_knowledge_base(&KnowledgeCreateRequest::new( "engineering-runbooks", KnowledgeEmbeddingModel::Embedding3Pro, )).await?; println!("{}", created.data.expect("successful response").id); # Ok(()) # }

MCP 客户端

mcpfeature 是独立的 Model Context Protocol 客户端,与在模型请求中配置托管 MCP 工具的McpTool不同。协议帧、初始化、工具、资源、提示词和 Streamable HTTP 传输由官方 Rust MCP SDK(rmcp)提供。

use rustglm::McpClientConfig; # async fn run() -> rustglm::Result<()> { let mut client = McpClientConfig::new("https://mcp.example.com/mcp") .bearer_token("tenant-token").header("x-tenant-id", "acme")?.connect().await?; for tool in client.list_tools().await? { println!("{}", tool.name); } client.close().await?; # Ok(()) # }

安全默认值:仅接受绝对httphttps端点;授权显式配置并从Debug输出中脱敏;SDK 创建的 HTTP 客户端禁用重定向;SSE 重试和过期会话自动初始化默认关闭;可注入调用方配置的reqwest::Client控制代理、TLS、DNS、超时和策略。

Realtime WebSocket

realtimefeature 通过双向 WebSocket 提供强类型客户端请求和服务器事件。音视频作为调用方拥有的字节切片传入,并在内存中编码。

use rustglm::{RealtimeConfig, RealtimeRequest, TypedRealtimeSession}; # async fn run() -> rustglm::Result<()> { let mut connection = RealtimeConfig::new("token").connect().await?; let session = TypedRealtimeSession::default().instructions("Be concise.").server_vad(); connection.send_request(&RealtimeRequest::session_update(session)?).await?; connection.send_request(&RealtimeRequest::append_audio(&[0_u8; 320])?).await?; while let Some(event) = connection.next_typed_event().await { if let Some(text) = event?.delta_text() { print!("{text}"); } } # Ok(()) # }

该 API 还支持强类型会话工具、函数调用输出、响应选项、转录会话、客户端/服务端 VAD、取消、音频提交/清空、视频帧和显式关闭连接。

错误

SdkErrorRustGLM重要的一个部分,其公共错误封装。领域错误是显式枚举,可直接匹配,无需解析展示字符串。

userustglm::{BatchError,SdkError};fnclassify(error:SdkError){matcherror{SdkError::Batch(BatchError::InvalidLimit(limit))=>eprintln!("invalid batch limit: {limit}"),SdkError::Api(api)=>eprintln!("HTTP {} request_id={:?}",api.status,api.request_id),other=>eprintln!("{other}"),}}

该封装区分配置、校验、传输、超时、API、解码、流、WebSocket、不支持能力、Agent、工具、Batch、RAG 和 MCP 失败。ApiError保留 HTTP 状态、厂商代码、消息、请求 ID 和原始响应体。

HTTP 策略

HttpConfig控制请求超时、连接超时、连接池空闲超时、user agent、默认请求头、重试策略,以及可选的调用方构建reqwest::Client

重试默认关闭。启用RetryPolicy是应用的显式决定;只有配置的状态码及连接/超时失败会被重试。

API 覆盖范围

下表是公开 SDK 操作的索引,依据公开客户端接口整理,而非假定服务商能力。接受serde_json::Value的方法有意保留与快速变化的服务商 Schema 的兼容性。

能力领域Feature公开方法
聊天与流核心;ToolStream 需toolschat_completionchat_completion_streamchat_tool_streamtyped_chat_completiontyped_chat_completion_streamtyped_chat_tool_stream
异步与向量 API核心async_chatasync_resultembeddingreranktokenizer
图像与视频imagesvideocreate_imagecreate_image_asynccreate_video
音频与音色audioglm_4_voicetranscribespeechclone_voicevoicesdelete_voice
托管工具toolsweb_searchread_web_pagemoderate
文件与文档处理filesupload_filefilesfile_contentdelete_filecreate_file_parse_taskfile_parse_resultparse_file_syncocrparse_layout
Batchbatchcreate_batchbatchesbatchcancel_batch
官方 Agent 与 Assistantagentsofficial_agentofficial_agent_streamofficial_agent_async_resultofficial_agent_conversationassistantassistantsassistant_conversations
知识库与检索ragcreate_knowledge_baseknowledge_basesknowledge_baseupdate_knowledge_basedelete_knowledge_baseknowledge_capacityretrieve_knowledgeknowledge_documentsupload_knowledge_documentupload_knowledge_urlsknowledge_documentdelete_knowledge_documentknowledge_document_imagesreembed_knowledge_documentretrieval_agent_stream
通用协议入口核心ZhipuClientOpenAiCompatibleClient上的request_json
独立 MCPmcpMcpClientConfig::connect,以及由rmcp提供的强类型工具、资源、提示词和 Streamable HTTP 操作
RealtimerealtimeRealtimeConfig::connect、强类型请求/事件、VAD、媒体缓冲、函数调用输出、取消与显式关闭

服务商已发布字段尚未获得强类型 builder 时,使用ChatCompletionRequest。只有在配置好的服务商 Base URL 下需要新相对路径时才使用request_json;它会拒绝绝对 URL 与父级路径段。

RustGLM 则提供服务商无关的本地 Agent 运行时、OpenAI 兼容客户端、通用rmcp协议客户端和支持视频的 Realtime 会话。

示例

仓库包含 36 个可运行 rust examples 示例。当前每个 HTTP 端点领域都有聚焦示例;通常一起使用的操作会放进同一个生命周期示例。cargo check --all-targets --all-features可在不联系服务商的情况下编译检查全部示例。

聊天、模型与向量

示例演示的公开 API
chat_completionchat_completion
chat_streamchat_completion_stream
typed_chattyped_chat_completion、Thinking、推理强度
multimodal_chat视觉内容片段与图片 URL 输入
function_calling函数 Schema 与Tool::function
tool_streamtyped_chat_tool_stream与聚合后的函数调用增量
async_chatasync_chatasync_result
embeddingEmbeddingRequestembedding
rerankRerankRequestrerank
tokenizerTokenizerRequesttokenizer
openai_compatibleOpenAiCompatibleConfigChatProvider

媒体、文件与文档处理

示例演示的公开 API
image_generationcreate_imagecreate_image_async
video_generationcreate_video、异步任务 ID
speechSpeechRequestspeech
transcriptionTranscriptionRequesttranscribe
glm_4_voiceGLM-4-Voice 输入与 WAV 输出
voice_managementclone_voicevoicesdelete_voice
file_managementupload_filefilesfile_contentdelete_file
file_parsingcreate_file_parse_taskfile_parse_resultparse_file_sync
document_understandingocrparse_layout

Batch、托管工具与 RAG

示例演示的公开 API
web_searchweb_search
hosted_toolsread_web_pagemoderate
file_batch上传 JSONL 并调用create_batch
batch_managementBatch 创建、列表、查询和取消
knowledge_basecreate_knowledge_base
knowledge_management知识库列表、详情、更新、容量与删除
knowledge_documents文档列表、上传、URL 导入、详情、图片、重嵌入与删除
knowledge_retrievalretrieve_knowledge
retrieval_agentretrieval_agent_stream

Agent、MCP 与 Realtime

示例演示的公开 API
official_agent强类型官方 Agent v1 调用
official_agent_lifecycleAgent 流、异步结果与会话操作
assistantsAssistant 调用、列表与会话
custom_agent带应用工具的本地 Agent 运行时
interactive_chat多轮运行时与可选语义记忆
mcp_clientMCP 工具、资源、提示词与关闭连接
realtime_audio_videoRealtime PCM/WAV、可选 JPEG 帧与强类型事件

通过cargo run --example <name> -- <参数>运行示例。MCP 客户端为按需 feature,请使用cargo run --example mcp_client --features mcp -- <endpoint>。大多数智谱示例需要ZHIPU_API_KEYopenai_compatible使用OPENAI_COMPATIBLE_BASE_URLOPENAI_COMPATIBLE_API_KEY。运行示例可能消耗额度、创建远程资源,或删除命令行中明确指定的资源。

CI 与发布

CI 工作流 验证:

发布工作流会在v*tag 推送时运行。手动运行时,请在 Actions 页面选择要发布的提交或分支,并在tag输入中填写v<Cargo.toml version>。工作流会检出页面所选版本,不再假定 tag 已经存在;它会拒绝版本不匹配,执行全部发布门禁,构建.crate、写入SHA256SUMS,然后创建缺失的附注 tag。已有 tag 只有在指向本次验证的提交时才会被接受。最后,工作流会在配置CARGO_REGISTRY_TOKEN时可选发布到 crates.io,并创建或更新 GitHub Release。

发布步骤:

# 请先更新 Cargo.toml 与发布说明;Cargo.toml 当前版本为 1.0.0。gittag-sv1.0.0-m"RustGLM v1.0.0"gitpush origin v1.0.0

也可以在main分支上手动运行Release工作流,并将tag填为v1.0.0,无需预先创建 tag。tag 使用普通的v1.0.0格式,而不是RustGLM v1.0.0

仓库中不保存 API Key 或 registry token。仅在需要发布 crates.io 时,将CARGO_REGISTRY_TOKEN配置为 GitHub Actions secret。

测试与覆盖率

cargofmt--all----checkcargotest--all-targets --no-default-featurescargotest--all-targetscargotest--all-targets --all-featurescargoclippy --all-targets --all-features ---DwarningsRUSTDOCFLAGS="-D warnings"cargodoc --all-features --no-depscargopackage--locked

仓库提供统一覆盖率命令,并由 CI 强制执行最低门槛:

cargocoverage# 输出摘要并检查 90% 行覆盖率门槛cargocoverage-lcov# 生成 target/rustglm-lcov.info,并检查相同门槛

最近一次工作区实测快照(2026-07-24):

测试RegionsFunctionsLines行覆盖率门槛
94 个通过、2 个真实服务测试忽略92.72%88.33%94.02%90.00%

全 feature 测量包含所有库模块,包括可选的 MCP 与 Realtime。知识库/RAG 行覆盖率为 96.63%;成功的 MCP 协议操作需要已初始化的对端,因此其离线行覆盖率为 51.60%。完整模块表、指标解释与 HTML 报告命令见 COVERAGE.md。

覆盖率命令会运行离线单元测试与集成测试,并编译全部 36 个示例,但不会执行示例的main函数,也不会运行被忽略的真实服务测试。请显式运行需要凭据的检查:

$env:ZHIPU_API_KEY ="key_id.secret"cargo test--test live_zhipu----ignored--nocapture cargo test--test live_realtime----ignored--nocapture

CI 会重新生成数据,并将lcov.infocoverage-summary.txt发布为构建产物;评估具体提交时应以该产物为准,不应把上面的快照视为永久承诺。

官方 API 参考

快速开始
错误码

许可证

Apache License 2.0。参见 LICENSE。

http://www.jsqmd.com/news/1268941/

相关文章:

  • 南京品牌出海赛道,GEO城市合伙人选型推荐哪家靠谱?技术、权益与收益三维透视 - 企业新闻快传
  • TMS320F240xA DSP时钟、低功耗与GPIO实战配置与避坑指南
  • 端到端AI视频不是“点按钮”,而是“调神经环路”:基于Transformer-LSTM混合架构的实时渲染延迟压测报告(实测<117ms端到端抖动)
  • 使用up8ai.com部署Codex中转API
  • 如何高效使用Python大麦网自动抢票工具:实战配置与优化指南
  • 计算机Django毕设实战-基于 Python Web 的网络化在线考核平台设计 轻量化校园在线考试题库管理系统实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • AI云原生实战10-K8s HPA撑不住了?KEDA事件驱动让AI推理服务缩容到0,GPU成本砍半
  • 解决viral-clips-crew常见问题:TypeError与API密钥错误终极方案
  • 自动化模型导入解决方案:3大核心模块实现游戏角色定制零门槛
  • VideoCaptioner终极指南:5分钟掌握AI视频字幕自动生成与翻译
  • 微服务GraphQL架构设计指南:基于Apollo Federation的最佳实践
  • yansongda/pay 3.7.16:如何优雅解决微信商户转账的复杂集成难题?
  • NGX_HTTP_LOWLEVEL_BUFFERED
  • 2026 南京名包回收商家怎么挑?易奢福 11 区 131 家门店规模领先 - 奢侈品回收实体店
  • 【AI文件夹自动整理终极指南】:20年运维专家亲授,3步实现99.6%准确率的智能归档系统
  • GetQzonehistory:3分钟快速备份QQ空间全部历史说说的完整指南
  • Radioconda设备驱动安装全攻略:Windows/Linux/macOS系统适配
  • Midscene.js:基于视觉语言模型的跨平台自动化架构设计与技术实现
  • HungaBunga参数详解:brain=True模式如何提升模型选择效率
  • 嵌入式实时系统捕获单元FIFO与中断机制深度解析
  • ESPHome Flasher 终极指南:高效烧录ESP芯片的完整解决方案
  • 如何用ES-Client解决Elasticsearch管理的三大核心痛点?
  • Wordpress博客Argon主题美化
  • 【经验】VSCode连接远程服务器及远程docker
  • MixTeX:无需GPU的终极LaTeX OCR解决方案,让公式识别变得简单
  • TMS320C80 MVP多任务内核设计:消息传递与异构计算协同机制解析
  • Ubuntu 14.04安装32位Chrome浏览器完整指南
  • JAVASE之类和对象(1)
  • 广告投放系统风险防控架构设计与实战
  • 如何用5分钟拯救你即将消失的珍藏小说?novel-downloader终极解决方案