技术教程 · 阅读约 8 分钟

用 30 行 Python 让 AI 帮你分析 Codex Session 的 TTFT 和 TPS——自己的性能数据自己掌握

用 30 行 Python 让 AI 帮你分析 Codex Session 的 TTFT 和 TPS——自己的性能数据自己掌握

很多人用 Codex 的时候有个困惑:感觉"有时候快,有时候慢",但说不清楚到底慢在哪。

实际上 Codex 客户端会记录完整的 session 日志,里面藏着每次请求的首字延迟(TTFT)和每秒 token 数(TPS)。只是没人帮你把这些数据提出来、喂给 AI 分析。

今天我们就做这件事:用 Python 解析本地 Codex session 日志,然后调用 LLM 接口,让模型帮你总结性能瓶颈、给出优化建议。


先搞清楚两个指标

TTFT(Time To First Token):从发送请求到收到第一个 token 的时间。这个指标主要反映网络延迟 + 模型调度时间。TTFT 高,用户感知上就是"卡了一下才开始输出"。

TPS(Tokens Per Second):模型实际生成 token 的速度。这个主要受模型大小和服务端负载影响。

两者是独立的问题,分开优化。


第一步:提取 Codex session 数据

Codex 的 session 记录通常在本地 ~/.codex/sessions/ 目录下,每个 session 是一个 JSON 文件。结构大致如下:


{

  "session_id": "abc123",

  "requests": [

    {

      "timestamp": "2025-07-10T14:23:01Z",

      "model": "gpt-4o",

      "ttft_ms": 320,

      "total_tokens": 850,

      "duration_ms": 4200

    }

  ]

}

我们先写一个解析脚本,把所有 session 的性能数据聚合出来:


import json

import os

from pathlib import Path



def load_sessions(session_dir: str = "~/.codex/sessions") -> list[dict]:

    """加载所有 session 日志,提取性能指标"""

    base = Path(session_dir).expanduser()

    records = []



    for f in base.glob("*.json"):

        try:

            data = json.loads(f.read_text())

            for req in data.get("requests", []):

                duration_ms = req.get("duration_ms", 0)

                total_tokens = req.get("total_tokens", 0)

                tps = (total_tokens / duration_ms * 1000) if duration_ms > 0 else 0

                records.append({

                    "session_id": data.get("session_id", f.stem),

                    "timestamp":  req.get("timestamp", ""),

                    "model":      req.get("model", "unknown"),

                    "ttft_ms":    req.get("ttft_ms", 0),

                    "tps":        round(tps, 2),

                    "total_tokens": total_tokens,

                })

        except Exception:

            continue



    return records


第二步:让 AI 帮你分析

数据提出来了,接下来把它喂给模型,让它帮你做统计分析和给建议。

这里用 OpenAI 格式的接口,改一个 base_url 就能切换到国内直连的服务,不需要改其他任何代码:


from openai import OpenAI

import statistics



def analyze_with_ai(records: list[dict]) -> str:

    # 只需改这一行,就能用国内直连、价格便宜 60%+ 的 API

    client = OpenAI(

        api_key="你的 API Key",

        base_url="https://api2everything.xyz/v1",

    )



    # 整理成摘要,避免 token 浪费

    ttft_values = [r["ttft_ms"] for r in records if r["ttft_ms"] > 0]

    tps_values  = [r["tps"]     for r in records if r["tps"] > 0]

    models_used = list({r["model"] for r in records})



    summary = f"""

共分析 {len(records)} 条请求记录。



TTFT 统计(毫秒):

  - 平均值:{statistics.mean(ttft_values):.0f}

  - 中位数:{statistics.median(ttft_values):.0f}

  - 最大值:{max(ttft_values)}

  - P90:{sorted(ttft_values)[int(len(ttft_values)*0.9)]:.0f}



TPS 统计(tokens/s):

  - 平均值:{statistics.mean(tps_values):.1f}

  - 中位数:{statistics.median(tps_values):.1f}

  - 最小值:{min(tps_values):.1f}



使用的模型:{', '.join(models_used)}

"""



    response = client.chat.completions.create(

        model="gpt-4o-mini",   # 分析任务用小模型,省钱

        messages=[

            {

                "role": "system",

                "content": "你是一位 LLM 性能优化专家,擅长分析 API 调用的延迟数据并给出实用建议。",

            },

            {

                "role": "user",

                "content": f"以下是我的 Codex 使用数据,请帮我分析性能状况,识别瓶颈,并给出 3 条具体优化建议:\n{summary}",

            },

        ],

    )

    return response.choices[0].message.content





if __name__ == "__main__":

    records = load_sessions()

    if not records:

        print("没找到 session 数据,请检查 ~/.codex/sessions/ 目录")

    else:

        print(f"加载了 {len(records)} 条记录,正在分析...\n")

        result = analyze_with_ai(records)

        print(result)


实际跑出来的效果

把上面两段代码合并保存为 analyze_codex.py,直接运行:


python analyze_codex.py

模型会输出类似这样的分析:

你的 P90 TTFT 达到 1200ms,明显高于正常水平(通常 < 500ms),建议排查高峰时段的请求集中情况。TPS 均值 42 tokens/s 处于中等水平,gpt-4o 的 TPS 显著低于 gpt-4o-mini,对于不需要强推理的任务可以降级模型以提升响应速度……

这比你自己去看一堆数字有效得多。


几个可以继续扩展的方向

  • 按时间段分组,看不同时间段的性能差异(早上 vs 深夜)
  • 加上模型对比维度,自动推荐性价比最高的模型选择
  • 接入 Webhook,每周自动发一次摘要报告

关于 API 费用

上面代码用了 gpt-4o-mini 做分析,本身就很便宜。如果你还在用官方 API,可以考虑换到 无量 Api——同样的 OpenAI 格式,国内直连无需代理,价格比官方便宜 65% 左右(SVIP 打 7.7 折),支持 GPT-4o、Claude 4、Gemini、DeepSeek 等 300+ 模型。

注册就送 ¥1 余额,余额永久有效,改一行 base_url 就能用,迁移成本几乎为零。


跑完之后你的 TTFT 数据好看吗?或者遇到什么解析问题?评论区聊聊,我尽量回。

觉得有用的话点个赞,这类工具向的内容我会继续写。