资讯动态

TensorZero 推理演示:通过 Rust 客户端同时驱动 HTTP Gateway 与嵌入式 Gateway

发布时间:2026/9/15 10:18:31 来源:尧图企业网站定制
TensorZero 推理演示通过 Rust 客户端同时驱动 HTTP Gateway 与嵌入式 Gateway【免费下载链接】tensorzeroTensorZero is an open-source LLMOps platform that unifies an LLM gateway, observability, evaluation, optimization, and experimentation.项目地址: https://gitcode.com/GitHub_Trending/te/tensorzero本篇技术指南围绕 TensorZero 仓库中的官方推理演示inference_demo展开介绍如何用同一份 Rust 示例代码分别对接独立部署的 HTTP Gateway 服务器与进程内运行的嵌入式 Gateway两种推理模式。读完本文后你将掌握cargo run --example inference_demo的完整用法、全部命令行参数的含义、两种模式在源码层面的构建差异ClientBuilderMode以及流式输出的底层处理机制并能把该演示无缝接入 haiku-hidden-preferences 示例环境进行真实推理。演示目标一种客户端两种 Gateway 模式TensorZero 的 Rust 客户端tensorzero-client可以在两种完全不同的模式下运行推理而调用方代码几乎不需要改动。inference_demo正是为了展示这一点而设计的HTTP Gateway 模式客户端通过 HTTP 请求访问一个独立运行的 TensorZero Gateway 服务器例如由docker compose up启动的容器推理请求被发送到服务器由服务器统一处理路由、模板渲染、模型调用与可观测性记录嵌入式 Gateway 模式客户端在自身进程内直接启动一个嵌入式 Gateway不启动任何 HTTP 服务器只对外发起两类出站请求——向模型提供商如 OpenAI的推理请求以及向 ClickHouse 的写入请求。这种方式适合测试、离线批处理或希望最小化部署组件的场景。示例入口源码位于 crates/tensorzero-client/examples/inference_demo/main.rs其文档说明位于 crates/tensorzero-client/examples/inference_demo/README.md。前置准备启动配套的 TensorZero 环境演示文档要求先启动配套的示例环境。在tensorzero_repository/examples/haiku-hidden-preferences目录下执行docker compose up该命令会拉起三个服务见 examples/haiku-hidden-preferences/docker-compose.yml服务镜像端口作用clickhouseclickhouse:lts8123HTTP/ 9000Native存储推理记录与反馈的开发用数据库gatewaytensorzero/gateway3000加载 config/tensorzero.toml提供推理 APIuitensorzero/ui4000TensorZero 可视化界面可观测性、优化入口其中 Gateway 通过--config-file /app/config/tensorzero.toml挂载配置并通过TENSORZERO_CLICKHOUSE_URL环境变量连接 ClickHouse。该配置中定义了两个演示函数write_haikutype chat生成俳句默认变体为gpt_4o_mini模型为openai::gpt-4o-mini-2024-07-18judge_haikutype json用gpt-4o对俳句打分输出符合 output_schema.json 的 JSON并定义布尔型指标haiku_scorelevel inferenceoptimize max。下面的演示命令都使用judge_haiku作为目标函数输入是一个 JSON 对象包含topic俳句主题与haiku待评判的俳句文本。模式一对运行中的 Gateway 服务器执行推理在仓库根目录下执行cargo run --example inference_demo -- --gateway-url http://localhost:3000 --function-name judge_haiku --streaming {topic: Rivers, haiku: Endless roaring flow. Mountains weep streams for oceans. Carve earth like giants}各参数含义如下--gateway-url http://localhost:3000指定正在运行的 TensorZero Gateway 服务器地址对应源码中ClientBuilderMode::HTTPGateway { url: Url }--function-name judge_haiku指定要调用的 TensorZero 函数名--streaming开启流式输出默认关闭见下文流式输出机制一节末尾的位置参数是函数输入以 JSON 字符串形式传入。在该模式下示例会通过 ClientBuilder 构建一个 HTTP 客户端将ClientInferenceParams序列化后 POST 到 Gateway 的推理端点。由于推理逻辑模板渲染、变体选择、模型调用、结果写入 ClickHouse全部由远端服务器完成客户端只需处理 HTTP 往返与响应解析因此在HTTPGateway模式下config()返回None——客户端本身并不持有配置参见 crates/tensorzero-client/src/lib.rs 中ClientExt::config的实现。模式二通过嵌入式 Gateway 在进程内推理不依赖独立服务器直接在示例进程内启动嵌入式 GatewayCLICKHOUSE_URLhttp://127.0.0.1:8123/tensorzero cargo run --example inference_demo -- --config-path examples/haiku-hidden-preferences/config/tensorzero.toml --function-name judge_haiku --streaming {topic: Rivers, haiku: Endless roaring flow. Mountains weep streams for oceans. Carve earth like giants}与模式一相比差异集中在三点以--config-path代替--gateway-url示例读取tensorzero.toml并启动嵌入式 Gateway对应源码中ClientBuilderMode::EmbeddedGateway需要显式提供CLICKHOUSE_URL环境变量嵌入式 Gateway 需要自行连接 ClickHouse 以写入推理记录其值必须与 docker-compose 中 Gateway 的配置一致即http://127.0.0.1:8123/tensorzero注意端口为宿主机的 8123模型凭据通过环境变量注入与 docker-compose 中的 Gateway 容器通过env_file加载.env内含OPENAI_API_KEY不同本地进程直接读取当前 shell 环境中的凭据。从源码看嵌入式模式下的客户端构建还支持一组可选环境变量main.rs环境变量对应字段说明TENSORZERO_CLICKHOUSE_URLclickhouse_urlClickHouse 连接地址TENSORZERO_POSTGRES_URLpostgres_configPostgres 连接地址示例通过PostgresConfig::Url封装TENSORZERO_VALKEY_URLvalkey_urlValkey/Redis 连接地址用于缓存、限流等CLICKHOUSE_URL演示内部约定本文档演示命令实际使用的变量直接作为clickhouse_url传入此外EmbeddedGateway模式还支持timeout所有 Gateway 处理的总超时超时可能导致进行中的 LLM 请求被中止、verify_credentials示例设为true即校验模型凭据等参数。命令行参数全景inference_demo使用clap解析参数见 main.rs完整参数如下参数类型必填默认值说明--config-file PATHPathBuf与--gateway-url二选一无tensorzero.toml路径启用嵌入式 Gateway 模式--gateway-url URLUrl与--config-file二选一无运行中的 Gateway 服务器地址启用 HTTP Gateway 模式--streamingbool否false是否将输出流式打印到控制台--function-name NAMEString是无要调用的 TensorZero 函数名input位置参数String是无函数输入的 JSON 字符串约束规则在 main.rs 中强制校验--gateway-url与--config-file不能同时指定也不能都缺省否则程序会记录错误并以非零状态退出。推理调用与输入构造的源码解析构建客户端后示例将位置参数解析为 JSON构造一次推理调用let res client .inference(ClientInferenceParams { function_name: Some(args.function_name), stream: Some(args.streaming), input: Input { messages: vec![InputMessage { role: Role::User, content: vec![InputMessageContent::Template(Template { name: user.to_string(), arguments: input, })], }], ..Default::default() }, ..Default::default() }) .await .expect(Failed to run inference);这里有一个值得注意的设计输入并非直接拼装成对话文本而是以InputMessageContent::Template形式声明使用名为user的模板块渲染——这正是 TensorZero 的模板化输入模型模板*.minijinja与参数分离最终消息文本由 Gateway 侧的配置如 user_template.minijinja渲染得到。stream字段透传--streaming标志控制响应形式。响应分流非流式与流式调用结果InferenceOutput有两种形态main.rs非流式InferenceOutput::NonStreaming(data)完整响应就绪后一次性以日志形式打印Inference output: {:?}流式InferenceOutput::Streaming(mut stream)逐块消费tokio_stream流并将文本块实时write到 stdout 并立即flush实现边生成边打印的效果。流式输出机制--streaming 标志背后原文档特别说明--streaming标志控制输出是随取随得地流式打印到控制台还是仅在完整响应可用后才打印。从源码看流式响应按InferenceResponseChunk分派处理InferenceResponseChunk::Chat(c)遍历c.content中的内容块只提取ContentBlockChunk::Text类型并写入 stdout——这是普通聊天补全的增量文本InferenceResponseChunk::Json(c)将c.raw原始 JSON 片段直接写入 stdout——这是 JSON 模式如judge_haiku的json_mode on下的增量输出读取过程中任何Err(e)都会以tracing::error!记录但流式循环不会中断。正是这个机制让judge_haiku这类 JSON 函数的推理结果形如{reasoning: ..., score: true|false}能够以流式方式逐字符呈现在终端上。两种模式的选型建议与完整闭环结合 examples/haiku-hidden-preferences/README.md 的完整示例流程inference_demo的两种模式各有适用场景HTTP Gateway 模式适合与Gateway UI ClickHouse的 docker-compose 环境配合推理记录、反馈haiku_score、后续的 SFT 微调与变体评估全部落在同一套持久化栈中便于在http://localhost:4000的 UI 中观察结果嵌入式 Gateway 模式适合快速验证配置正确性、离线批量推理或 CI 场景无需拉起服务器一条命令即可确认tensorzero.toml、模板与凭据是否配置正确代价是需要在本地环境变量中准备好 ClickHouse 地址与模型密钥。若希望把演示扩展到完整的写俳句 → 判分 → 反馈 → 微调闭环可在 docker-compose 环境运行 haiku.ipynb并使用--function-name write_haiku替换上述命令中的函数名即可用同一示例直接驱动write_haiku变体。小结inference_demo以极简的形态展示了 TensorZero Rust 客户端的核心能力同一份推理代码可通过ClientBuilderMode在 HTTP Gateway 与嵌入式 Gateway 之间自由切换模板化输入、流式输出、JSON 模式等特性贯穿其中。理解这一示例是掌握tensorzero-client编程接口crates/tensorzero-client/src/lib.rs与ClientBuilderMode配置语义crates/tensorzero-core/src/client/mod.rs的最佳起点。【免费下载链接】tensorzeroTensorZero is an open-source LLMOps platform that unifies an LLM gateway, observability, evaluation, optimization, and experimentation.项目地址: https://gitcode.com/GitHub_Trending/te/tensorzero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价