
谷歌把 Gemini 1.5 Pro 的 1,000,000 token 上下文推到台前时最抓人的不是“参数又大了”而是它敢把 three.js、JAX 这种大代码库连同一段很长的多模态转写文本一起吞进去然后回答一个位置很偏的问题。原文里“多模态海底捞针”之所以有传播力是因为它把长上下文从 PPT 拉到了可验证的请求上。真到自己复现第一步通常不是写提示词而是被官方额度、多 Key 切换、模型名对照卡住。TaoToken 在这里承担的角色很窄去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 创建 API Key在调用 Gemini 1.5 Pro 的脚本或客户端里把 Base URL 填成 https://taotoken.net/api然后发一条长文档检索请求确认响应、usage 和调用记录都能对上。它不替模型做检索也不替你执行本地代码只提供统一入口和兼容通道。下面按“跑通请求、看调用是否成功”的视角把百万 token 上下文复现路径拆开。1. Gemini 1.5 Pro 的 1M token 上下文复现先卡在 Key 和 Base URL1.1 原文里最值得复现的三个长上下文场景原文最值得拿来动手的不是“硬刚 GPT-5”这种标题话术而是三个能被验证的场景。第一个是长文档检索把一份很长的材料塞进上下文再问一个只出现一次的事实看模型能不能原样找出来。第二个是多模态海底捞针视频、音频或图文混合材料先被模型理解再从里面定位某个细节。第三个是大代码库问答three.js、JAX 这类仓库文件多、调用链长普通上下文窗口很容易只看到局部于是回答会漏掉跨文件关系。复现时最容易误判的地方在于把“模型支持 1M token”理解成“随便发什么都能成功”。长上下文请求是否成功取决于三件事你的材料有没有真的进入请求、模型 ID 有没有选对、通道有没有把请求完整送到模型。原文的演示看起来轻是因为背后已经处理好了输入、模型和调用入口读者自己搭时入口这一层反而最先卡住。1.2 TaoToken 只解决入口不替模型做检索这里要把边界说清楚。TaoToken 提供的是 API Key、统一 Base URL 和兼容通道检索逻辑仍在你的脚本或客户端里。比如你要做“大海捞针”需要自己把长文档拼进请求把问题写清楚然后根据返回判断是否命中。TaoToken 不会替你在文档里搜索也不会把结果二次加工。这样做的好处是链路透明请求成功就是成功失败也能从响应和控制台记录里定位。如果你现在还没有可用 Key直接打开 TaoToken 注册并创建 API Key。创建后别急着写复杂代码先用同一把 Key 发一条最小长文本请求。这样能把问题范围缩小到“Key 是否有效、Base URL 是否填对、模型 ID 是否存在”这三项而不是一上来就在几千行代码里找原因。1.3 先确定你要验证什么再动手写请求验证百万 token 上下文建议先定三个观察点。第一响应里有没有出现你埋进去的“针”也就是那段唯一文本或唯一函数名。第二响应里的 usage 是否显示输入 token 数明显变大不同客户端字段名可能不同但不要只看输出内容。第三调用记录里能不能看到这次请求的模型、时间和状态。只满足第一条还不够因为有些客户端会在本地截断材料只满足第三条也不够因为请求可能失败了但记录仍显示调用过。把这三件事写进验证清单后再选工具。你可以用 Python 脚本也可以用支持自定义 Base URL 的客户端。核心只有两个值Base URL 填https://taotoken.net/apiAPI Key 用YOUR_API_KEY。模型 ID 不要凭记忆写后面会单独讲。2. 在 TaoToken 控制台创建能跑 Gemini 1.5 Pro 的 Key2.1 注册后创建 YOUR_API_KEY别写进仓库打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 完成注册登录进入控制台后找到 API Keys 页面创建一把新的 Key。复制出来时先放在本地环境变量里不要直接写进 Python 文件更不要提交到 Git。本文所有示例都用YOUR_API_KEY占位你实际运行时替换成自己刚创建的值。如果团队里多人共用调用建议每人一把 Key方便后面在控制台看用量时区分。Windows PowerShell 可以这样临时设置环境变量$env:TAOTOKEN_API_KEYYOUR_API_KEY $env:TAOTOKEN_MODEL从模型广场复制的模型 ID python long_context_probe.pymacOS 或 Linux 的写法更直接export TAOTOKEN_API_KEYYOUR_API_KEY export TAOTOKEN_MODEL从模型广场复制的模型 ID python long_context_probe.py环境变量只在当前终端会话有效关掉窗口就没了。这样测试阶段更安全也避免把 Key 留在 shell 历史里。正式使用时再按你的密钥管理方式处理但原则不变代码里只读环境变量不硬编码。2.2 Base URL 填 https://taotoken.net/api不要手滑加 /v1这是最容易出错的一步。官网落地页是给人看的用于注册、创建 Key、看模型广场和用量填进调用工具的 Base URL 是https://taotoken.net/api末尾不要加/v1。很多人看到 OpenAI 兼容客户端习惯性补/v1结果请求路径变成两层轻则 404重则被客户端提示“接口不存在”。本文示例里的base_url统一写https://taotoken.net/api不要在它后面加 UTM也不要加多余斜杠。如果客户端有单独的“API Path”或“完整端点”字段保持默认不要手工拼/chat/completions。让客户端基于 Base URL 去补路径能减少格式错误。你要检查的是最终请求有没有发到 TaoToken 通道而不是在配置项里堆参数。2.3 模型 ID 从模型广场复制不要凭记忆写模型 ID 以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 的模型广场当时列表为准。找到 Gemini 1.5 Pro 对应条目复制它给出的模型 ID填到你的YOUR_MODEL_ID或环境变量TAOTOKEN_MODEL里。不要自己拼日期后缀也不要把热词里的其他模型名当成正式配置。原文标题里的“GPT-5”是传播语境不是你这篇配置里的模型 ID这篇要跑的是 Gemini 1.5 Pro 的长上下文链路。如果模型广场里同一个模型有不同版本或不同能力标签优先选上下文规格满足你材料规模的那一项。选完后先发一条短消息测试确认 Key、Base URL、模型 ID 三者能通再换成长文档。这个顺序看起来慢但比一次性把百万 token 请求发出去、然后在报错里猜原因要快得多。3. 发一个长文档“大海捞针”请求确认 1M token 链路真的通了3.1 Python 最小脚本读大文件、问定位问题、打印 usage下面这个脚本不依赖复杂框架只做一件事把一个本地长文本读进来让 Gemini 1.5 Pro 找唯一一句“针”。它只负责生成请求和打印结果不连接任何生产库也不执行本地业务代码。import os from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlhttps://taotoken.net/api, ) with open(long_context.txt, r, encodingutf-8) as f: corpus f.read() question 请在下面文档中找到唯一一句以【海底捞针】开头的句子并原样返回。找不到就回答“未命中”不要编造。 prompt f你只做检索定位不要总结不要扩写。 文档如下 {corpus} 问题{question} resp client.chat.completions.create( modelos.environ[TAOTOKEN_MODEL], messages[{role: user, content: prompt}], temperature0, ) print(回答) print(resp.choices[0].message.content) print(usage) print(resp.usage)第一次跑时long_context.txt可以先用几千行文本里面埋一句唯一标记。等短文本能命中再逐步换成几万行、几十万行。这样能区分“脚本问题”和“上下文太长导致失败”。模型 ID 仍然从模型广场复制不要在这个文件里写死所谓“固定版本号”。3.2 响应里重点看命中片段和 token 计数请求发出去后第一眼看返回内容有没有原样命中。如果返回了那句唯一文本说明请求至少完整到了模型并且模型在长材料里定位成功。第二眼看 usage输入 token 数应该和你塞进去的材料规模大致匹配。如果输入 token 很小说明客户端可能在本地截断了或者你读文件时只读取了一部分。第三眼再看输出是否稳定把temperature设为 0 后同一请求重复发两次结果应该接近。如果模型回答“未命中”先别怀疑百万 token 能力。按顺序检查材料里是否真的有这句唯一文本文件编码是否正确提示词是否要求“原样返回”Base URL 是否填成了带/v1的地址模型 ID 选的是不是支持长上下文的那一项。把这四个点排掉后再加大材料规模。原文的“海底捞针”演示重点在可验证复现时也要保留这个可验证性。3.3 调用记录里核对模型、时间、状态内容返回正常后回到 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 登录控制台找到调用记录或用量页面。核对三件事这次请求用的模型是不是你从模型广场复制的那个调用时间是否和你刚才执行脚本的时间对得上状态是否成功。只有控制台和本地响应都对上才算“跑通请求、看调用成功”。有时候本地看到返回了内容但记录里模型不是预期值这通常意味着环境变量没刷新或者客户端缓存了旧配置。重新开一个终端再执行一次短测试请求确认记录变化。这个动作不复杂但能避免你后面跑大代码库时把结果归因到错误模型上。4. three.js / JAX 大代码库问答怎么把百万 token 用在刀刃上4.1 先做本地切片再把最相关代码块塞进上下文three.js 和 JAX 这类仓库直接全量塞进去理论上能体现 1M token 的价值但实际问答时噪声也大。更稳的做法是先在本地做一次轻量切片。比如你问的是某个渲染函数的调用链可以先用rg找到相关符号把命中文件和相邻几行代码拼成一个文本再发给模型。模型负责解释调用关系、指出可能的遗漏检索和切片仍然在本地完成。例如在本地仓库执行rg -n setFromSphericalCoords|getWorldPosition|updateMatrixWorld src hits.txt然后把hits.txt和关键文件片段拼进long_context.txt。这样请求里的有效信息密度更高也更容易验证模型有没有真的读到跨文件上下文。不要把整个仓库无脑塞进去除非你这次要验证的就是“全仓库尺度下模型还能不能定位”。4.2 多模态素材先转成文本验证请求格式原文提到多模态海底捞针但你在普通客户端里复现时最稳的路径是先把视频、音频转成字幕或帧描述文本再按长文档检索的方式发请求。如果客户端明确支持图片或文件上传再按该客户端的文档构造请求不要自己编造上传端点也不要在 Base URL 后面乱拼路径。TaoToken 侧只需要保证 Key 和 Base URL 正确多模态请求的格式由你使用的客户端决定。这样做的原因是多模态演示最容易把两类问题混在一起模型没找到细节还是文件根本没被客户端正确解析。先转文本可以把问题收敛到长上下文检索上等到文本链路稳定再换回多模态客户端。原文的“海底捞针”本质是验证定位能力不是要求你一次就把所有输入形态堆满。4.3 不要让 AI 直接连生产库执行 SQL 或命令这一点和长上下文同样重要。无论是 Gemini 1.5 Pro、Codex 还是 Claude Code都只应该生成、解释或对照代码和 SQL。诊断 SQL、系统命令、编译运行必须由你在本地或受控环境执行再把结果贴回对话。不要把生产库连接串交给模型也不要写成“让模型直接连上数据库执行查询”。正确链路是模型生成 SQL 或排查步骤你本地执行把报错和输出贴回去模型再分析。这条边界不会限制百万 token 的价值。大代码库、长日志、历史迁移脚本都可以作为文本材料放进上下文模型照样能做跨文件推理。区别只是执行动作留在你这边模型负责理解和你交互。5. 跑完后去控制台看调用是否成功并处理长上下文常见报错5.1 401、404、400 分别对应 Key、Base URL、模型 ID长上下文请求失败时先按状态码缩小范围。401 通常是 Key 没带上、复制少了字符或者环境变量没生效检查YOUR_API_KEY是否来自刚创建的 Key终端是否重新加载。404 多半是 Base URL 写得不对比如误写成https://taotoken.net/api/v1或者客户端自己补了多余路径本文要求填的是https://taotoken.net/api末尾不要加/v1。400 则常见于模型 ID 不存在或者请求内容超过该模型当前允许的上下文规格。还有一种情况是请求返回 200但内容明显被截断。这时不要只盯着状态码回去看 usage 的输入 token 数。如果输入 token 远小于你的材料规模说明客户端或服务端在发送前做了截断。先把材料缩小到能稳定命中的规模再逐级放大。5.2 上下文超限时先剪材料再确认模型能力1M token 是能力上限不是每次都必须打满。遇到“上下文超限”提示时优先做三件事把长文档按章节切开只发最可能包含答案的部分对代码库先做符号检索只发命中文件和必要依赖对多模态素材先转写关键片段而不是整段原始文件。这样做不是浪费百万 token而是把长上下文用在真正需要跨片段推理的地方。如果剪完仍然报超限再去模型广场确认你选的模型条目上下文规格是否与预期一致。模型 ID 以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 当时列表为准不要拿旧文章里的名字硬套。选对模型后再用同一条“大海捞针”脚本验证一次确认本轮调整有效。5.3 下一步模型对话、Coding Plan、创建 Key 和接入文档刚才那条长文档请求跑通后先去 TaoToken 模型对话 用同一把 Key 发一条测试消息确认模型 ID 和 Base URL 在网页端也一致。如果你准备把 Gemini 1.5 Pro 放进日常代码问答和长文档分析里可以再看看 Coding Plan 是否够用需要新建或轮换 Key在 控制台 API Keys 处理。要是你顺手也要在 Claude Code 里跑长上下文任务环境变量对照见 Claude Code 接入文档。先去控制台把刚才那条长文档请求的调用记录对一遍确认模型、状态和 token 数都对得上再换更大的 three.js 或 JAX 仓库继续试。