ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【元宝搜索开发者征文大赛】AI 写的 Python 代码用了过时 API?用元宝搜索“发现 → 查证 → 修好”

【元宝搜索开发者征文大赛】AI 写的 Python 代码用了过时 API?用元宝搜索“发现 → 查证 → 修好”

用 AI 写代码时,有一类错误很难一眼看出来:代码语法没问题,但用的 API 在新版本里已经被弃用或删除了。这篇文章记录我用元宝搜索搭的一个小流程:先发现可能过时的调用,再用元宝去官方文档查证,最后把查到的原文交回给 AI,让它自己修好。除了自己写脚本调用 API,第六节还演示了不写代码的用法:在 Claude 里接官方元宝搜索 MCP、在 WorkBuddy 里装官方元宝搜索 Skill,完全可以根据教程一步步完成接入。

图1按变更发生的年份分组,统计本批题目里模型写错的情况;OpenAI 条目按弃用公告的年份计。每组只有 6–9 题,样本很小;而且 pandas 3.0 删除的 API 多数早在 2.1/2.2 就已标记弃用。这张图只描述本次样本,不能外推为所有模型和 API 的一般规律。

一、需求从哪里来:AI 记得的是旧版本

用大模型写 Python 脚本,最隐蔽的一类错误不是语法错误,而是写法本身在某个版本之后已经被删除或弃用。比如:

  • pandas 3.0 更新说明列出了DataFrame.applymap、fillna(method=...)和旧频率别名的移除;
  • Python 3.13 更新说明列出了telnetlib、cgi、imghdr等模块的移除;
  • Python 3.14 的策略文档写明,set_event_loop_policy()已弃用,并将在 3.16 删除。

这类代码在旧环境里能跑,升级之后才开始告警或报错。我原来的做法是:出问题以后自己定位是哪个库、哪个版本改的,再去翻 What’s New。一段 AI 生成的代码里可能有十几个调用,逐个查一遍很费时间,所以平时通常不查。

这次的服务对象是用 AI 辅助写 Python 的开发者,我自己就是其中之一。被测模型是我手边一个内网部署的 Qwen3.8-27B-FP8(vLLM 部署,推理强度 medium)。

二、为什么需要搜索:越新的变更,越只能靠外部资料

模型的知识停在训练结束的那一天。训练之后才发生的变更,它不可能知道;就算问它“这个 API 过时了吗”,它也只能用同一份旧记忆来回答。能当判断依据的,只有各库当前的官方文档和更新日志。

所以在这个流程里,元宝搜索是运行时调用:拿到一段代码后,针对其中的 API 实时去官方文档里查。调用参数如下:

  • Site:把结果限定在该库的官方域名,如docs.python.org、pandas.pydata.org、numpy.org。社区帖子和博客不作为证据。
  • Cnt=10:每次取 10 条结果。
  • Mode=0:只要自然网页结果。本任务需要的是 API 文档,不需要天气、行情这类垂直结果。
  • 不设置Freshness:原因见第七节,实测加了时间限制反而查不到官方文档。

整个流程分三步,各步的分工如下:

步骤负责方做什么
发现Pythonast静态分析找出代码用到的模块、属性、方法和关键字参数,并记录变量由哪个库创建
查证元宝搜索 SearchPro按Site限定在官方域名内检索,结果原样缓存,附 RequestId
修好大模型(本文为本地 Qwen)读元宝返回的官方原文,改成当前推荐的写法
确认人工,或在目标环境中运行核对替代写法是否正确,必要时实际运行一遍

图2用set_event_loop_policy这一个调用把流程串起来:从代码里抽出符号,用元宝搜到官方原文,再据此判断它已弃用。完整的状态和适用版本,以 Python 3.14 策略文档为准。

三、第一步:发现——AI 写的代码,哪些可能过时

1. 一套有标准答案的测试题

我从 Python 3.12/3.13/3.14、pandas 2.0/3.0、NumPy 2.0、LangGraph 1.0 和 OpenAI 的官方变更说明中,挑出28 项真实的 API 变更,每一项都记录了官方原文链接作为标准答案。另外加了 4 道对照题(读 JSON、用 pathlib 遍历目录、pandas 分组求平均、requests 发 POST),用来观察误报。完整的旧写法、新写法和官方出处见配套的 API 变更与来源。

题目用自然语言描述需求,不提示 API 名称,例如“pandas 用前一个有效值向下填充缺失值。只给代码。”。需要说明的是,这 28 题是有意挑出来的、确实发生过变更的 API,不是随机抽取的日常任务,所以下面的比例只描述这批样本。

2. 结果:28 道变更题里有 9 道写成了过时写法

Qwen 回答 32 题共用时 30 秒。9 份回答用了过时写法:telnetlib、set_event_loop_policy、sqlite3.version、df.applymap、fillna(method='ffill')、freq='H'、groupby(..., axis=1)、np.trapz、create_react_agent。

统计方法是:每道题预先写好匹配过时写法的正则,再人工逐份阅读确认。初版正则漏掉了groupby([...], axis=1),因为列表推导式里的括号把匹配截断了;人工抽查时发现后修正,结果从 8 份变为 9 份。

2023 年前后的老变更,模型基本都写对了:datetime.now(timezone.utc)、pd.concat、np.nan、ast.Constant用的都是新写法。OpenAI 那道题也直接用了 Responses API(官方弃用说明列出的 Assistants API 停用日期为 2026 年 8 月 26 日)。

3. 从代码里自动抽出要查的调用

用ast解析代码,处理三种情况:

  • 由别名能确定所属库的调用:np.trapz→numpy.trapz;
  • 接收者是变量的方法调用:df = pd.read_csv(...)之后的df.applymap,根据赋值关系把df归到 pandas;
  • 关键字参数:fillna(method=...)。

一开始没有记录“变量由哪个库创建”,导致df.append在 numpy 和 pandas 下各查了一次。加上赋值追踪后,同一段示例代码的查询次数从 17 降到了 12。

四、第二步:查证——用元宝去官方文档里找证据

1. 调用方式

查询词由“库名 + 符号 + deprecated removed”组成,控制在 64 个字符以内(接口会截断更长的 Query)。调用代码只用标准库:

importgetpassimportosfromresearch_clientimportcollect,decode_pages api_key=os.environ.get("YUANBAO_API_KEY","").strip()ifnotapi_key:api_key=getpass.getpass("Yuanbao API Key: ").strip()ifnotapi_key:raiseSystemExit("需要提供服务 API KEY")query="pandas applymap deprecated removed"params={"Query":query,"Mode":0,"Cnt":10,"Site":"pandas.pydata.org"}record=collect({"id":"applymap-demo","label":query,"request":params},api_key)ifrecord["status"]!=200:raiseRuntimeError(f"SearchPro HTTP{record['status']}")pages=decode_pages(record["response"])# 有业务错误时抛出异常root=record["response"].get("Response",record["response"])print({"RequestId":root.get("RequestId"),"results":len(pages)})

这段代码需要在配套代码的根目录运行,会直接发起一次请求,可能消耗额度。research_client.py把请求发到POST https://api.wsa.cloud.tencent.com/SearchPro,鉴权使用Authorization: Bearer <API KEY>。密钥通过环境变量或隐藏输入读取,不写进正文,也不写进证据文件。开通与鉴权步骤见腾讯云官方接入说明。

实验脚本另有一层缓存:每次调用都把请求体、HTTP 状态、耗时、RequestId 和原始响应保存成 JSON,不保存鉴权头。请求参数相同就直接读缓存,不再调用接口。

2. 元宝找得到吗:28 次定向查询,次次都返回官方文档

每项变更用一条设计好的查询。28 次查询全部返回了 10 条官方域名内的结果,Site约束在这批样本里完全有效。186 次调用全部返回 HTTP 200,端到端耗时中位数 493 ms(范围 268–896 ms)。

图3中,①圈出的是单次查询的official=10,②圈出的是统计行“命中官方文档 28/28,检出变更 20/28”。纸面里嵌的是data/logs/probe.txt的真实终端回放截图。

3. 能不能自动读懂这些证据:这一步的瓶颈在我的规则

为了自动给出结论,我写了一套句子级规则:在包含目标符号的句子里找removed、deprecated、弃用等状态词。用这套规则判断,28 项里检出了 20 项。

但回头翻没检出的那几项,我发现元宝返回的内容里其实就有证据,只是我的规则没认出来:

  • sqlite3.version:返回的简体中文 3.12 文档里写着“sqlite3.version¶ 此模块字符串形式的版本号……Deprecated since version 3.12, will be removed in version 3.14”。规则按句号切句,把符号和状态词切到了两句里。
  • fillna(method=):返回的 2.1/2.2 文档里写着“Deprecated since version 2.1.0: Use ffill or bfill instead”,但这句话写在method参数的说明里,和fillna不在同一个句子。

当然,也有真的没拿到关键句的情况。比如'H'、'ME'这类频率别名的变更,写在 What’s New 长页面的中后部,没有出现在返回的摘要里。

所以这里得到的教训是:判断这一步,与其自己写规则,不如把元宝返回的原文直接交给模型去读。下一节的实验就是这么做的。

五、第三步:修好——把元宝查到的原文交回给 AI

1. 实验设计

拿 Qwen 写错的 9 份代码,让它自己修。每份分两种条件,各修 3 次:

  • A 组:只提醒。“请检查这段代码是否用了已弃用或已删除的 API(以各库截至 2026 年的最新版本为准),如果有,请改成当前推荐的写法。”
  • B 组:提醒 + 元宝原文。同样的提醒,再附上这个 API 的元宝搜索结果里排名前 3 的官方页面摘要(标题、链接、passage),原样粘贴,不经过我的规则筛选。

B 组给模型的内容大致是这样:

下面这段代码是针对这个需求写的:<原题> <原代码> 以下是用元宝搜索在官方文档中检索到的资料(查询:python asyncio set_event_loop_policy deprecated): [1] 策略 来源:https://docs.python.org/zh-cn/3.14/library/asyncio-policy.html 摘要:……自 3.14 版本弃用: set_event_loop_policy() 函数已弃用,并将在 Python 3.16 中删除。…… [2] …… [3] …… 请检查这段代码是否用了已弃用或已删除的 API……输出修正后的完整代码。

评分方法:去掉注释后,旧 API 不再出现、没有引入其他用例里的过时写法、代码能被ast解析,就算“改成了新写法”。另外,我人工逐条核对了每一次的替代写法是否正确。注释要先去掉,是因为有一次模型已经改用socket,只是在注释里写了一句“telnetlib 在 Python 3.13 中已移除,改用 socket”;第一版评分把它误判成没改,修正后 A 组从 17 更正为 18。

2. 结果

用例变更时间A:只提醒B:提醒 + 元宝原文B 组改成的写法
set_event_loop_policyPython 3.14(2025-10)0/33/3asyncio.run(main(), loop_factory=...)或asyncio.Runner
sqlite3.versionPython 3.14(2025-10)0/33/3sqlite3.sqlite_version
create_react_agentLangGraph 1.0(2025-10)0/33/3from langchain.agents import create_agent
telnetlibPython 3.133/33/3telnetlib3
df.applymappandas 3.03/33/3df.map
fillna(method=)pandas 3.03/33/3.ffill()
freq='H'pandas 3.03/33/3freq="h"
groupby(axis=1)pandas 3.03/33/3df.T.groupby(...).sum().T
np.trapzNumPy 2.03/33/3np.trapezoid
合计18/2727/27两组都没有引入新的过时写法

3. 这组结果说明了什么

只提醒就能修好的,是模型其实知道的变更。pandas 3.0 删掉的applymap、fillna(method=),早在 2.1 版就已标记弃用。提醒一句,模型马上就改对了,说明它记得这些变更,只是第一遍写代码时没想起来。

只提醒修不好的,正好是最新的变更。Python 3.14 和 LangGraph 1.0 都是 2025 年 10 月发布的。这三处只提醒时 0/3,模型每次都保留了旧写法。把元宝查到的官方原文给它之后,3/3 都改对了。比如sqlite3.version,只提醒时模型保留了它,只是在旁边多打印一行sqlite_version;看到元宝返回的那句“will be removed in version 3.14”后,才把旧常量删掉。

这正是接入搜索的价值所在:模型记忆里没有的新变更,只能靠检索把官方原文带进来。

4. 修好之后,再实际跑一遍

静态检查只能说明“旧写法不见了”。要确认“改对了”,最终还得在目标环境里运行。下面以pd-applymap这题为例走一遍:原回答在注释里已经提到map,实际调用的却仍是df.applymap(lambda x: x * 2),输入是回答自带的三行 DataFrame(A=[1,2,3]、B=[4,5,6])。

在 Python3.12.3、pandas3.0.0环境中运行原回答,实际报错:

AttributeError: 'DataFrame' object has no attribute 'applymap'

只把.applymap(换成.map(,输入和lambda x: x * 2都保持不变:

importpandasaspd df=pd.DataFrame({"A":[1,2,3],"B":[4,5,6]})result=df.map(lambdax:x*2)print(result)

再次运行成功,实际输出为:

A B 0 2 8 1 4 10 2 6 12

迁移复现脚本直接读取保存的原回答,实测 JSON 和日志保留了原代码、唯一的替换点、运行环境和输出。

六、不写代码也能用:在 Claude 和 WorkBuddy 里接入元宝搜索

前面的实验都是我写 Python 脚本直接调用 API 完成的。元宝搜索官方还提供了MCP和Skill两种接入方式:日常写代码时不用自己写脚本,在常用的 AI 工具里配置一次就能用。我把同一份 Qwen 写错的代码放进 Claude 和 WorkBuddy 里各走了一遍。代码里有set_event_loop_policy和sqlite3.version两处,正是第五节里“只提醒修不好”的两项。

1. Claude:配置官方元宝搜索 MCP

官方 MCP 的地址是https://api.wsa.cloud.tencent.com/Mcp(Streamable HTTP,见官方说明),提供一个SearchPro工具,参数和 API 相同。在 Claude Code 里,一条命令就能加上:

claude mcpadd--scopeuser--transporthttp yuanbao-search https://api.wsa.cloud.tencent.com/Mcp--header"Authorization: Bearer <你的 API Key>"

用claude mcp list确认状态,看到Connected就配好了(图5)。Claude 桌面应用和命令行共用这份配置,之后新开的会话会自动加载它。

接着在 Claude 桌面应用里新开一个会话,让它检查这份代码。提问的核心要求有三条:

  1. 只用元宝搜索查证,不让模型凭记忆下结论;
  2. Site设为docs.python.org,证据只取官方文档,理由见第四节;
  3. 每条结论附官方链接和原文,查证完直接把代码改成推荐写法。

Claude 调用了yuanbao-search的SearchPro,并引用了元宝返回的官方原文(图6)。

sqlite3.version这一项,元宝返回的前 3 条结果都来自docs.python.org,原文写明“3.12 弃用、3.14 删除”(图7)。这里有个细节:排在前面的是 3.12 版文档,只写了“将在 3.14 删除”;明确写“已删除”的 3.15 版文档排在第 9 条。这正是第七节查询词技巧第 5 条提醒的:给结论前,先看清页面对应的版本。

最后,Claude 给出结论并直接改了代码(图8):删掉sqlite3.version,把事件循环策略改成asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)。它也如实说明了验证范围:本机没有 Python 3.14,只在 3.12 上用-W error::DeprecationWarning把弃用警告当作报错,跑通了修改后的代码。

改动前后的关键部分(完整文件见仓库的 examples/hands-on/):

-if sys.platform == "win32": - asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) - -print(f"sqlite3 module version: {sqlite3.version}") +# sqlite3.version 已在 3.14 移除(它是 pysqlite 的版本号,不是 SQLite 库版本) print(f"SQLite library version: {sqlite3.sqlite_version}") @@ - asyncio.run(main()) + # 事件循环策略在 3.14 弃用,改用 asyncio.run() 的 loop_factory 指定循环实现 + if sys.platform == "win32": + asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop) + else: + asyncio.run(main())

2. WorkBuddy:安装官方元宝搜索 Skill

元宝搜索在 SkillHub 上有官方 Skill,页面标明支持 WorkBuddy。安装只需要把页面给出的这句话发给 WorkBuddy:

请根据 https://skillhub.cn/install/skillhub.md,安装 `@user_f26e0ccb/tencent-yuanbao-standard-search`。

WorkBuddy 会先安装 skillhub 命令行工具,再安装 Skill。在我这台 Windows 电脑上,安装脚本第一次失败了:临时目录路径C:\里的冒号被 tar 当成了远程主机。WorkBuddy 自己改用 POSIX 风格的临时目录重试成功,整个过程大约 4 分钟(图9)。

这个 Skill 从环境变量TENCENTCLOUD_WSA_APIKEY读取 Key。在 Windows 里把它设为用户环境变量,然后重启 WorkBuddy:

[Environment]::SetEnvironmentVariable("TENCENTCLOUD_WSA_APIKEY","<你的 API Key>","User")

配置好以后,用“帮我搜索……”“联网搜索”这类说法就能触发。Skill 的脚本scripts/websearch.py调用的也是 SearchPro 接口,同样支持--site参数,所以下一节的查询词技巧在这里一样适用。

3. 三种接入方式怎么选

方式适合谁怎么配置本文用在哪里
API要批量运行、需要缓存和统计自己写 HTTP 请求,Bearer 鉴权第三到五节的全部实验
MCP用 Claude、Cursor 等支持 MCP 的工具写代码一条命令或一段 JSON本节的 Claude 演示
Skill用 WorkBuddy 等 Agent 产品一句安装提示,加一个环境变量本节的 WorkBuddy 演示

三种方式背后都是同一个 SearchPro 接口,所以“用Site锁定官方域名”“查文档不加Freshness”这些技巧都通用。截图里的 Windows 用户名、账号邮箱和本机路径都已打码。

七、拿去就能用:速查表与查询词技巧

1. 本次实测中 AI 写错的 API 速查表

AI 写的旧写法现在的写法从哪个版本开始只提醒能改对吗
asyncio.set_event_loop_policy(...)asyncio.run(main(), loop_factory=...)Python 3.14 弃用❌ 需要查文档
sqlite3.versionsqlite3.sqlite_version(注意两者含义不同)Python 3.14 删除❌ 需要查文档
from langgraph.prebuilt import create_react_agentfrom langchain.agents import create_agentLangGraph 1.0 弃用❌ 需要查文档
import telnetlib第三方库,如telnetlib3Python 3.13 删除✅
df.applymap(f)df.map(f)pandas 3.0 删除✅
df.fillna(method="ffill")df.ffill()pandas 3.0 删除✅
freq="H"freq="h"pandas 3.0 删除✅
df.groupby(keys, axis=1)df.T.groupby(keys).sum().T(按业务语义检查)pandas 3.0 删除✅
np.trapz(y, x)np.trapezoid(y, x)NumPy 2.0 弃用✅

另外 19 项变更,本批模型都写对了,完整清单见 API 变更与来源。

2. 用元宝查版本变更的查询词技巧

下面每一条都有本次的调用记录支撑:

  1. 一定要用Site锁定官方域名。28 次定向查询,次次返回 10 条官方页面。
  2. 查询写成“库名 + 版本号 + whatsnew + API 名 + removed”。groupby(axis=1)用普通写法只搜到函数签名,改成pandas 3.0 whatsnew groupby axis removed后,2.1.0 的 What’s New 里那句“Deprecated axis=1 in DataFrame.groupby() … do frame.T.groupby(…) instead”就排进了前面。
  3. 查文档不要加Freshness。同样的查询加上Freshness=y1,官方页面从 10 条降到 0–3 条。更新日志和 API 文档往往不是近期发布的,时间限制会把它们过滤掉。
  4. API 名用英文原名,返回的中文文档可以直接用。在 4 个补查的用例里,中文查询词的命中都不比英文好;但返回结果里中文官方文档很多,在 1117 条 Python 文档结果中,简体和繁体中文共 530 条。这些官方中文原文可以直接给读者看,也可以直接贴给模型。
  5. 注意 URL 里的版本号。1117 条 Python 文档结果中,有 357 条(32%)来自 3.11 及更早版本。旧版文档里写的“Deprecated since 2.1”,在 3.0 里可能已经删除,给结论前要看清页面版本。
  6. 判断交给模型,别自己写死规则。我的规则漏判了sqlite3.version、fillna的证据,但把同样的摘要原样贴给模型后,这两项都改对了。

图10用书套的隐喻表达翻译版占绝大多数,英文原版约 95 条。蓝色的 32% 是全部 Python 文档结果中 3.11 及更早版本的占比,不是只在翻译版内部计算的;书堆面积不作为比例尺。

八、实际效果与局限

1. 可以用在哪

  • 新变更的查证和修复:这是元宝在这个流程里最不可替代的一环。模型训练之后才发生的变更,只提醒时 0/3,附上元宝原文后 3/3。
  • 给迁移找依据:每条结论都带官方链接和 RequestId,方便团队复核。

2. 还做不好的地方

  • 全自动扫描的告警噪音大。让规则自己从代码里找问题,27 条告警中只有 5 条成立(18.5%,AI 初审、作者复核)。误报主要有三类:同名陷阱(被删除的是ssl.wrap_socket(),代码里用的是SSLContext.wrap_socket());模块里只是个别成员有变更,却把整个模块标记了;旧版文档页顶部的“不再受支持”横幅被当成了变更说明。这些都是我的规则读证据时出的错,下一步打算把判断交给模型来做。规则一共迭代了四版,告警数从 48 降到 36,再降到 27,各版结果都保留在配套材料里。
  • 少数关键句不在摘要里。写在长页面中后部的变更(如'H'、'ME'频率别名),返回的摘要没有覆盖到。这类情况需要再抓取原页面全文。

3. 统计与测量方法

  • 样本:28 道变更题是有意挑出来的,另有 4 道对照题;修复实验只针对写错的 9 份代码,每种条件各 3 次,只测了一个模型。
  • 修复评分:去掉注释后做正则和ast检查,再人工逐条核对替代写法。完整运行验证只做了applymap一例。telnetlib 有一次 B 组改成了from telnetlib3 import Telnet,这个写法没有实际执行,是否可用未验证。
  • 规则迭代:四版规则都在同一批记录上调试,数字偏乐观;用独立新题验证列入下一步。
  • 耗时:元宝端到端耗时为本机实测,包含网络往返,每个查询只采样一次;修复实验中本地模型单次 0.5–11 秒。

4. 下一步

  1. 判断环节交给模型:把元宝原文和代码一起交给模型,由它判断“被删除的是不是代码里用的那个东西”,替代现在的规则;
  2. 摘要里找不到关键句时,再抓取原页面全文;
  3. 按目标环境的版本挑选证据,旧版文档单独标注;
  4. 换更多模型、更多新题,在目标环境中批量运行修复后的代码。

九、复现与配套材料

配套代码已开源在 GitHub:https://github.com/ngadminq/yuanbao-version-guard,本文对应v1.0版本。代码只用 Python 标准库,要求Python 3.10+:

gitclone https://github.com/ngadminq/yuanbao-version-guard.gitcdyuanbao-version-guard

仓库包含:

  • cases.json:32 道测试题,附官方链接;API 变更与来源:28 项变更的基准、迁移建议与官方出处;
  • version_guard.py:核验工具;evaluate.py:发现与查证实验;fix_experiment.py:修复实验;
  • data/cache/:发现与查证实验的 186 份元宝原始调用记录(不含密钥);data/cache_query_variants/与data/query_variants.json:查询词对照的 12 份记录;data/fix_qwen3.8-27b.json:54 次修复试验的全文与评分;
  • data/review_qwen3.8-27b.csv:告警复核表;viewer/index.html:只读结果查看页,不会发出任何请求;
  • 24 个离线单元测试;README:环境、目录、离线复算、在线调用与错误处理;
  • examples/hands-on/:第六节实操用的代码,修改前后各一份(ai_code_before.py、ai_code_after.py),截图在images/hands-on/;
  • examples/migrate_applymap.py与validation/migration/:迁移验证的脚本,以及报错与输出记录。

缓存已随仓库提供,在仓库根目录依次执行即可离线复算,不需要密钥:

python-munittest-vtest_version_guard python evaluate.py probe python evaluate.py run--nameqwen3.8-27b python render_report.py

修复实验需要一个兼容 OpenAI 接口的模型服务,请换成你自己的服务地址和模型名。已保存的 54 次试验不会重跑,只会补齐缺少的部分:

python fix_experiment.py --base-url http://<你的模型服务>/v1--model<模型名>

如果机器配置了 HTTP 代理,记得把模型服务的地址加进NO_PROXY。我第一次运行时,内网请求被代理拦截,返回的是 502。

图12以事件循环策略py-loop-policy的一次历史请求为例,演示如何追溯:图中的 RequestId 可以和data/cache/13e13f10880b73a1.json对照。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进