当前位置:首页>python>我用 Python 调通了第一个大模型 API

我用 Python 调通了第一个大模型 API

  • 2026-08-18 23:11:49
我用 Python 调通了第一个大模型 API

从本周开始,我计划通过自学和费曼输出的方式,花费30到40周,系统性的学习AI Agent开发,最终实现如下几个小目标:

  • 不依赖框架手写一个最小 Agent Loop

  • 独立搭建并评测一个 RAG 系统

  • 使用 LangGraph 构建带状态、记忆和人工审核的工作流

  • 通过 MCP 或普通 API 接入外部工具和数据

  • 为 Agent 建立日志、评测、安全和成本控制机制

希望各位大佬指点和批评

第一个阶段的学习Agent 基础。首周的核心概念是:LLM、Token、消息角色、Python SDK、环境变量、流式响应等等。

通过本周的学习,我能够理解和应用怎样与大模型通信,并完成一个支持流式输出、错误提示和基础日志的命令行聊天程序。

1. 调通一个 API,为什么比想象难

第一周的任务清单很短:用 Python 写一个能调通大模型 API 的程序,做到密钥走环境变量、能切换模型、超时和认证失败有清楚提示、每次调用都记录耗时和用量。

实际写起来,时间几乎都耗在四件"不像功能"的事上:API Key 怎么安全地走环境变量而不写进代码;怎么在 DeepSeek、GLM 之间切换却不改业务代码;超时、认证失败这些异常怎么分类成清楚提示;流式输出和每次调用的耗时、Token 用量怎么处理。

2. 我的核心做法

从零写一个大模型调用程序,不能再把 API 调用当成"一段 HTTP 请求",它涉及配置管理、错误分类、流式协议、用量记账四件事。

我的做法:用"抽象基类 + 工厂函数"让换模型不改核心逻辑;用 .env 文件管密钥;按 HTTP 异常类型分类提示;每次调用记录模型、耗时和 Token 用量。

3. 动手前,先搞懂 6 个基础概念

在写代码前,先搞清楚几个绕不开的概念(这部分来自我第一周的学习笔记)。

什么是 LLM、Token、上下文窗口?

LLM(大语言模型)本质是一个基于 Transformer 的"续写机器"——你给它一段话,它一个字一个字地猜下一个字应该是什么。猜得足够准,看起来就像"理解"了你。

模型不认字,只认数字。所以文本要先被分词器切成一个个 Token(最小语义单元)。1 个 Token 大约等于 1.5~2 个常用汉字。Token 是计费单位,也是上下文窗口的计量单位

上下文窗口可以理解为模型的"工作记忆"——它决定模型一次能"看到"多少内容。窗口大小 = 系统提示 + 用户输入 + 对话历史 + 模型输出,总和不能超。超出会被截断("遗忘"最早的信息)。

类比:上下文窗口就是 AI 助手面前的桌子大小。桌子就这么大,资料堆不下就得拿走最旧的那份。

三种消息:System / User / Assistant

角色
职责
谁来写
System
定规则(身份、输出格式、行为边界)
开发者预设
User
提需求
用户
Assistant
给结果
模型

一句话:System 把框划死,User 只管提需求,Assistant 在框里干活,Assistant 的回答又会变成下一轮的上下文。

API Key / Base URL / Model

  • API Key:身份通行证,错了 → 401
  • Base URL:服务地址,错了 → 404 / 连接失败
  • Model:用哪个"大脑",如 deepseek-chatglm-4,错了 → 模型不存在

同步 vs 流式

  • 同步:等模型把整段话生成完,一次性返回。首字延迟高,但实现简单。
  • 流式:模型边生成边分块推送(SSE 协议,data: {...} 一行行来)。首字延迟极低,体验好,但代码要处理增量拼接。

注意:流式响应(交付阶段分块)和流式推理(计算阶段实时)不是一回事,但流式响应是流式推理的最佳载体。现在主流产品都用流式。

推理请求的完整流程:分词 → 预填充(GPU 并行处理输入)→ 解码(逐个生成 Token)→ 反分词(拼回文字)。我们调 API 时,这几步都在服务端发生,我们只管发请求、收结果。

4. 能跑的最小版本:5 段核心代码

下面是这一周我沉淀下来的核心代码。业务代码不绑定任何一家模型。

① 定义统一的返回结构和抽象基类

所有 Provider(DeepSeek、GLM…)都遵守同一个接口:

from abc import ABC, abstractmethodfrom dataclasses import dataclass@dataclassclassLMResponse:    content: str    latency_ms: float    success: bool    usage: dict | None = None# Token 用量(prompt/completion/total),拿不到时保持 NoneclassLLMProvider(ABC):# 所有模型厂商(DeepSeek、GLM…)都必须实现这两个方法# 业务代码只认这个抽象基类,不认具体厂商 —— 这就是"换模型不改核心"的根基    @abstractmethoddefchat(self, system_prompt: str, user_prompt: str) -> LMResponse: ...    @abstractmethoddefchat_stream(self, system_prompt: str, user_prompt: str): ...

② 密钥只从环境变量读,读不到立即报错

密钥存在项目根目录的 .env 文件里(务必加进 .gitignore,绝不提交):

# .env (密钥存这里,绝不提交 git,务必加进 .gitignore)DEEPSEEK_API_KEY=sk-你的keyGLM_API_KEY=你的keyLLM_PROVIDER=deepseek      # 指定当前用哪家模型

程序入口调一次 load_dotenv(),把 .env 读进环境变量,之后代码里用 os.environ.get(...) 就能拿到相关配置:

import osfrom dotenv import load_dotenvload_dotenv()   # 把 .env 读进环境变量,整个程序入口调一次就够classDeepSeekProvider(LLMProvider):def__init__(self, timeout: float | None = None):# 只从环境变量读 Key,代码里永远不出现明文密钥        self.api_key = os.environ.get("DEEPSEEK_API_KEY")ifnot self.api_key:# Fail Fast:读不到立刻报错,别等请求发出去拿 401 才发现raise RuntimeError("环境变量 DEEPSEEK_API_KEY 未设置")        self.base_url = "https://api.deepseek.com"        self.model = "deepseek-chat"# 超时可配置,方便后面用 LLM_TIMEOUT=0.5 测"短超时"分支        self.timeout = float(timeout or os.environ.get("LLM_TIMEOUT"60))

关键设计:Fail Fast——别等请求发出去拿到 401 才发现 Key 是 None,初始化时就检查。timeout 也做成可配置,方便后面测超时分支。

③ 异常分类:认证失败、超时、网络,分开提示

defchat(self, system_prompt, user_prompt):    start = time.time()try:        r = httpx.post(f"{self.base_url}/chat/completions",            headers={"Authorization"f"Bearer {self.api_key}"},   # 标准鉴权头            json={"model": self.model, "messages": [                {"role""system""content": system_prompt},      # System:定规则                {"role""user""content": user_prompt},          # User:提需求            ]},            timeout=self.timeout,        )        r.raise_for_status()                    # 4xx/5xx 转 HTTPStatusError,交给下面的 except 分类        data = r.json()return LMResponse(            content=data["choices"][0]["message"]["content"],     # 取出模型回复正文            usage=data.get("usage"),             # 记录 Token 用量,用于算成本            latency_ms=(time.time() - start) * 1000,            success=True,        )except httpx.HTTPStatusError as e:# 服务端返回了错误状态码,按码区分原因        code = e.response.status_code        msg = "认证失败:API Key 错误或无权限"if code in (401403elsef"HTTP {code}"except httpx.TimeoutException:# 请求超过 self.timeout 秒还没完成        msg = f"请求超时({self.timeout}s)"except httpx.ConnectError:# 根本连不上服务器:断网、域名错、被防火墙挡        msg = "网络连接失败"except Exception as e:# 兜底:没预料到的错误,至少别让程序裸崩        msg = f"未知错误:{type(e).__name__}{e}"# 走到这说明出错了:返回一个 success=False 的响应,而不是抛异常给调用方return LMResponse(content=msg, usage=None,                      latency_ms=(time.time() - start) * 1000, success=False)

④ 工厂函数:换模型 = 改一个环境变量

defmake_provider(name: str | None = None) -> LLMProvider:# 不传 name 就读环境变量 LLM_PROVIDER,默认 deepseek    name = name or os.environ.get("LLM_PROVIDER""deepseek")if name == "deepseek":return DeepSeekProvider()if name == "glm":return GlmProvider()raise ValueError(f"未知 provider: {name}")# 换模型 = 改环境变量,业务代码一行都不用动

业务代码里永远是 agent = AgentCore(make_provider())换模型不改一行核心逻辑

⑤ 流式输出:解析 SSE 的 data: 行

defchat_stream(self, system_prompt, user_prompt):try:# with 块:建立连接 → 收 SSE 流 → 自动关闭,异常也会在这段抛with httpx.stream("POST"f"{self.base_url}/chat/completions",                          headers={"Authorization"f"Bearer {self.api_key}"},                          json={"model": self.model, "stream"True"messages": [...]},                          timeout=self.timeout) as r:            r.raise_for_status()# SSE 协议:每行一条 data: {...},逐行解析for line in r.iter_lines():                line = line.strip()ifnot line.startswith("data: "):continue# 不是数据行(空行、心跳),跳过                chunk = line[6:]   # 去掉 "data: " 前缀if chunk.strip() == "[DONE]":break# 结束标记,停止读取                delta = json.loads(chunk)["choices"][0]["delta"]                content = delta.get("content")# 第一个 chunk 的 content 常为 None(只带 role),必须过滤# 否则下游 full += None 会崩if content isnotNone:yield contentexcept httpx.HTTPStatusError as e:# 流式下的认证失败:yield 一句提示给调用方显示,而不是抛异常yieldf"\n[错误] 认证失败"if e.response.status_code in (401403elsef"\n[错误] HTTP {e.response.status_code}"except httpx.TimeoutException:yieldf"\n[错误] 请求超时"

说明

  1. 数据怎样进入程序system_prompt + user_prompt 拼成 messages,POST 给 /chat/completions
  2. 模型在何处参与判断:模型在服务端,我们只发请求、收结果;本地不做推理。
  3. 结果怎样返回:同步返回完整 content;流式逐块 yield,由调用方拼接打印。
  4. 程序怎样处理失败:按异常类型分流,每种错误给出一句明确中文提示,绝不把堆栈甩给用户。

5. 跑起来长什么样

输入示例

System: 你是一个乐于助人的 AI 助手。User:   请介绍一下你自己。

输出示例

[deepseek-chat] 5338ms | usage={'prompt_tokens': 96, 'completion_tokens': 342,'total_tokens': 438, ...}你好!我是 DeepSeek,一个由深度求索公司开发的 AI 助手。很高兴认识你!...

流式输出

>>> 开始流式测试...流式调用模型: deepseek-chat ...好的,我用流式方式讲一个关于猫的笑话:一只猫走进图书馆……------------------------------

本次模型和关键配置

  • 模型:deepseek-chat(DeepSeek)/ glm-4(智谱,OpenAI 兼容接口)
  • 依赖:httpxpython-dotenv
  • 配置:.env 文件存 DEEPSEEK_API_KEY / GLM_API_KEY / LLM_PROVIDER

调用日志agent_logs.json 节选):

{"model""deepseek-chat","input""请介绍一下你自己。","latency_ms"5338.0,"usage": {"prompt_tokens"96"completion_tokens"342"total_tokens"438},"success"true}

流式调用拿不到 usage(SSE 默认不回用量),日志里标 "unknown"明确标记未知

6. 最小版本能做什么,不能做什么

本轮已实现

  • 单轮问答、单轮代码生成、流式输出演示。
  • 需要在 2~3 家 OpenAI 兼容接口的模型间切换。

本轮未考虑

  • 多轮对话:本版本不维护对话历史,每轮都从零开始(第 4 周 Agent Loop 会处理)。
  • 结构化输出:模型返回的还是自然语言,要 JSON 得自己解析或用 Structured Output(第 2 周)。
  • 高并发 / 生产环境:同步 httpx.post 会阻塞,需要异步客户端 + 重试 + 熔断(本文只覆盖单次调用)。
  • 超长上下文:超出模型上下文窗口会被截断,需要自己截断历史或用 RAG。
  • 有副作用的操作当前版本没有"有副作用的操作",不需要人工确认;从第 3 周接入工具(发邮件、写数据库)开始,所有副作用操作必须预留人工确认。

7. 本周三个要点

  1. 抽象基类 + 工厂函数是"换模型不改核心"的关键——业务代码只认 LLMProvider 接口,不认任何具体厂商。
  2. 密钥、超时、模型选择都走环境变量,代码和截图里永远不出现 Key,配置变更不需要改代码。
  3. 异常要分类处理:认证失败(401/403)、超时、网络断开、未知错误,各给一句人话,而不是甩一堆英文堆栈。同时记录每次调用的模型、耗时、Token 用量,缺了就标 unknown

8. 下一篇预告 

下一周我会聊一个更让新手崩溃的问题:为什么大模型总不按你要求的格式回答? 同样一个问题,这次返回 JSON,下次返回一段散文,下游代码直接炸。我会用 Pydantic + Structured Output 让模型稳定吐出程序能消费的结构化数据。

这一周如果你也想跟着跑一遍,请关注我并私信我,我会把我的代码共享给你,建个虚拟环境跑一次——亲手调通第一个 API。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 14:43:28 HTTP/2.0 GET : https://f.mffb.com.cn/a/509399.html
  2. 运行时间 : 0.628430s [ 吞吐率:1.59req/s ] 内存消耗:4,616.02kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=69343cc6b6c320e8d61a3ed5d5daff16
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000691s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001342s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.066252s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.100986s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001134s ]
  6. SELECT * FROM `set` [ RunTime:0.042563s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.010091s ]
  8. SELECT * FROM `article` WHERE `id` = 509399 LIMIT 1 [ RunTime:0.046111s ]
  9. UPDATE `article` SET `lasttime` = 1787294608 WHERE `id` = 509399 [ RunTime:0.074211s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.021530s ]
  11. SELECT * FROM `article` WHERE `id` < 509399 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.023701s ]
  12. SELECT * FROM `article` WHERE `id` > 509399 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.026309s ]
  13. SELECT * FROM `article` WHERE `id` < 509399 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.049710s ]
  14. SELECT * FROM `article` WHERE `id` < 509399 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.015784s ]
  15. SELECT * FROM `article` WHERE `id` < 509399 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.010782s ]
0.629832s