好了,各位,现在立刻停下来。 我听到“代币”和“模型”这些词像 TikTok 上的 Z 世代俚语一样被乱用,而且多数情况下用得根本不对。
我的话很明确。
现在正是讲清楚基于推理的应用怎么构建、令牌如何生成与使用,以及各部分如何协同运作的时刻。 来杯咖啡,我们马上开始深入探讨。
我本不该从这里说起,但我还是会讲。 当我们说“推理”时,其实指的是大型语言模型(LLM)在大量数据中进行思考的过程。 你不能直接调用LLM。 实际上并不存在所谓“LLM API”,如果你说了,我会给你“妈妈般的严厉注视”。
用于调用推理的 API 会通过推理服务器进行处理并等待结果。
推理服务器负责运行 AI 模型,就如同应用服务器负责运行 Java 及其他开发语言环境一样。 一般情况下,没有推理服务器你不会直接在本地运行模型。 常见方案包括 Ollama、vLLM、NVIDIA Triton 和 HuggingFace 文本生成接口 (TGI)。
现在,和部署应用包到应用服务器类似,您会在推理服务器上部署“AI 包”(模型)。 该服务器通过 API 提供 AI 模型功能,仅包含一组精简的 API 端点(例如 REST 或 gRPC 中的 /generate、/completions 或 /embeddings),专注于文本生成、分词或嵌入等模型推理任务。
要与推理服务器交互,你需要构建一个应用程序。没错,一个传统的应用(当然,也可能是现代的),它会与推理服务器通信。
用户也可以通过浏览器或手机使用应用程序,通常通过普通的API与您开发的应用通信。 就这样! 您拥有完整的消息流,从客户端到应用再到推理服务器,然后返回。
是的,它确实只是重新诠释了三层 Web 应用结构,只不过将数据层替换成了推理层。 我明白,这感觉确实让人有些失望,不是吗?
最简单的 AI 应用形式是三层网络应用,将数据层替换为推理服务器。
这就是推断。 这是一种新的应用工作负载形式,它基于我们一贯重视的运营纪律,现在用令牌、上下文和数据流来代替会话、Cookie 和查询。
人们往往在这里犯错,错误使用词语,违背了术语使用的基本准则。 标记是大型语言模型(LLM)处理的最小文字单元。 它们由推理服务器上的分词器正式生成。
您可以在应用中加入标记器,提前计算令牌数以预测成本和限制本地请求速率,但最终的令牌计数发生在推理层。 令牌是模型的表示形式,而非网络流量;实际上传输的是 JSON 文本。 只有在 API 明确返回令牌 ID 时,您才能看到它们。
默认情况下,基础设施看不到令牌。 它只识别 JSON。 令牌不会在网络上传输。 如果您希望基础设施处理令牌,必须在网关使用相同的标记器进行计数,或者利用模型服务器提供的计数数据。 令牌是 AI 的通用计费单位,但如果您不揭示它们,它们大多存在于推理堆栈内部。
推理并不神秘。 它就是一种带有新调节选项的应用工作负载。 流量是 JSON 格式的。 令牌是模型的基本单位。 嵌入则是向量。 如果混淆了它们,你会设计出错误的控制策略,定错价格,调试也会错层。 比如,把路由按 JSON 大小而不是令牌数量划分,可能会因长上下文请求让模型过载。
如果您希望基础设施能根据令牌作出响应,就必须教它如何处理。 在网关部署一个标记器,或者利用模型服务器提供的计数。 否则,您的路由器只能识别文本,而非令牌,它们会基于文本作出决策,却要承担令牌层面的费用。 请确保标记器与模型匹配(例如,GPT-4的标记器与LLaMA不同),以保证计数准确无误。 标记器不匹配会导致费用或限制计算出错。
把可用性看作既可用又准确,而不仅仅是在线。 跟踪每秒令牌数、首个令牌时间和上下文失败(如超出上下文窗口限制或因上下文饱和导致输出不连贯),就像你此前跟踪每秒查询和缓存命中一样。 认真对待日志记录。 推理流量不是训练数据,除非你明确说明。 如果你保留提示和输出,请务必保护它们。
准确命名事物。 关注正确的层面进行衡量。 在关键环节设置限制,比如在网关应用基于令牌的配额,防止成本失控。 这样,推理过程就会和你的其余系统一样:可预测、经济且稳定可靠。 令牌付费的是模型内部的决策,而非你的网络带宽。 直呼其名,你就能让用户满意,账单更简洁。