当前位置:首页>python>12个Python文件带你入门AI Agent开发(三)

12个Python文件带你入门AI Agent开发(三)

  • 2026-06-28 13:20:52
12个Python文件带你入门AI Agent开发(三)

系列衔接:上篇我们深入解析了 DeepAgents 多Agent协调工作的原理——多个智能体分工协作、任务拆解、子节点并行执行,构成了现代生产级Agent系统的骨架。但再精妙的架构,也需要从最基础的一块砖砌起。今天这篇零基础实战篇,我们从12个Python文件入手,手把手带你从单Agent对话、工具调用、记忆管理,一步步搭建出完整的Agent系统,为理解多Agent协作打下坚实的编码基础。


上篇理论,本篇落地。但实战之前,我决定先带你“徒手”拆解并重构一个完整的Agent系统——通过12个文件的阶梯式编码,从空白目录到可运行的智能体,每一步都清晰可见。这既是入门,也是体系化的起点。

🔍 项目概览

根目录下共有 12个Python文件,分为两大类别:

类别
文件数量
功能定位
对应多Agent能力
核心Agent
 🎯
5个
从简单对话到完整功能
单Agent是协调的基础单元
调试工具
 🔧
7个
环境检查与问题排查
保障多Agent系统稳定运行

学习路径总览

入门阶段 ──→ 进阶阶段 ──→ 高级阶段 ──→ 调试阶段  │              │            │             │  ├─ LLM调用     ├─ 工具调用   ├─ 工具+记忆  ├─ 环境检查  └─ 基础对话    └─ 状态管理   └─ 完整Agent  └─ API测试

🎯 第一部分:核心Agent学习路径

📚 1. lc_agent_demo.py —— LLM调用入门

定位:这是整个项目的起点,教你如何调用大模型。这是一切Agent能力的根基——多Agent系统中的每个子Agent,本质上都是这样一个LLM调用的封装。

核心代码

from langchain_openai import ChatOpenAImodel = ChatOpenAI(    model="qwen-plus",    api_key=os.getenv("DASHSCOPE_API_KEY"),    openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1")response = model.invoke("Hello, 测试一下")print(response.content)

关键点解读

要点
说明
实际作用
阿里云百炼API
兼容OpenAI协议,无缝切换
国内可直连,无需翻墙
dotenv安全管理
环境变量读取API密钥
避免密钥硬编码泄漏
invoke()方法
同步调用大模型
单次请求-响应模式

适用场景:快速验证模型连接是否正常,构建多Agent前的"Hello World"。


💬 2. lc_chat_agent.py —— 基础对话Agent

定位:在LLM基础上封装成可交互的Agent。这是单Agent的雏形——多Agent协调中每一个子节点,本质上都是这样一个封装后的对话单元。

核心改进

from langchain.agents import create_agentagent = create_agent(    model=model,    tools=[],  # 空工具列表    system_prompt="你是一个友好的AI助手...")response = agent.invoke({"messages": [{"role""user""content""介绍一下什么是AI Agent"}]})

核心概念

概念
说明
与多Agent的关系
create_agent()
将模型包装成Agent
多Agent中每个子节点都是一个agent实例
system_prompt
定义Agent角色和行为
不同子Agent通过不同prompt实现分工
消息格式
符合OpenAI规范的多轮对话
在多Agent中用于传递中间结果

执行流程

用户提问 → Agent思考 → 直接回答

🛠️ 3. lc_tool_agent.py —— 工具调用能力

定位:让Agent具备使用外部工具的能力,这是Agent的核心价值!在多Agent系统中,工具调用是子Agent获取外部信息的关键途径。

工具定义

from langchain_core.tools import toolfrom datetime import datetime@tooldefget_current_time():"""返回当前的日期和时间。当用户问'现在几点'时调用。"""return datetime.now().strftime("%Y-%m-%d %H:%M:%S")@tooldefcalculator(expression: str):"""计算数学表达式。输入应该是一个字符串形式的数学表达式。"""    result = eval(expression, {"__builtins__": {}}, {})returnf"计算结果:{expression} = {result}"

Agent创建

agent = create_agent(    model=model,    tools=[get_current_time, calculator],  # 注入工具    system_prompt="需要实时时间调用get_current_time,计算调用calculator")

工作原理对比

维度
无工具Agent
有工具Agent
信息获取
依赖模型训练数据(可能过时)
可获取实时数据
计算能力
仅能估算(大模型算数不靠谱)
精确计算
能力边界
模型知识范围
无限扩展(可接入任意API)
与多Agent关系
独立工作
可作为子Agent的能力组件

🔄 工具调用完整流程解析

📋 示例场景

用户提问:"现在几点了?"

工具:get_current_time() —— 返回当前时间

完整流程图

🚀 详细步骤拆解

① 用户提问

user_input = "现在几点了?"

用户输入自然语言问题,发送给Agent系统。

② Agent接收问题

Agent将问题包装成标准格式:

{"messages": [{"role""user""content""现在几点了?"}]}

③ 模型分析:是否需要工具?

核心逻辑:模型根据system_prompt和工具描述(docstring)判断是否需要调用工具。

模型思考过程

"用户问'现在几点了?',根据系统提示,我需要调用get_current_time工具来获取实时时间。"

④ 选择工具

模型决定调用get_current_time工具,生成工具调用指令:

{"thought""用户询问当前时间,需要调用get_current_time工具获取实时时间。","tool_name""get_current_time","tool_args": {}  # 此工具不需要参数}

⑤ 调用工具

Agent执行工具函数:

# 执行结果result = get_current_time()  # 返回 "2024-01-15 14:30:45"

⑥ 获取工具返回结果

工具执行完成后,返回结果被封装回对话历史:

{"messages": [        {"role""user""content""现在几点了?"},        {"role""assistant""content"None"tool_calls": [            {"name""get_current_time""args": {}}        ]},        {"role""tool""name""get_current_time""content""2024-01-15 14:30:45"}    ]}

⑦ 模型整合信息

模型再次被调用,此时输入包含:

  • 用户原始问题
  • 工具调用记录
  • 工具返回结果

⑧ 生成最终答案

# 模型生成最终回答final_response = model.invoke({"messages": [        {"role""user""content""现在几点了?"},        {"role""assistant""content"None"tool_calls": [...]},        {"role""tool""name""get_current_time""content""2024-01-15 14:30:45"}    ]})

⑨ 返回给用户

最终答案被格式化并返回给用户:

用户:现在几点了?Agent:现在是2024年1月15日下午2点30分45秒。

📊 另一个例子:计算器工具

用户提问:"23乘以45加100等于多少?"

流程

步骤
操作
数据
① 用户提问
"23×45+100=?"
自然语言输入
② 模型分析
需要计算工具
calculator
③ 选择工具
calculator("23*45+100")
格式化参数
④ 调用工具
eval("23*45+100")
精确计算
⑤ 工具返回
"计算结果:23×45+100 = 1135"
结构数据
⑥ 生成答案
"结果是1135"
自然语言输出

🧠 模型如何决定是否调用工具?

因素
说明
示例
多Agent场景
工具描述
docstring必须清晰准确
"当需要数学计算时调用calculator"
子Agent通过工具描述分工
系统提示
指导Agent行为的指令
"你可以使用以下工具..."
不同子Agent有不同工具集
问题类型
是否需要实时/专业信息
时间、天气、计算等需要工具
路由Agent分析问题类型后分发
模型能力
模型自身知识的局限性
实时信息必须调用工具
子Agent只负责自己擅长的领域

⚡ 工具调用的优势

  1. 突破模型限制 —— 获取实时信息(时间、天气)、执行精确计算
  2. 提高准确性 —— 避免模型幻觉,确保数据可靠
  3. 扩展能力边界 —— 连接外部系统(数据库、API),这是多Agent协作的基础
  4. 可追溯性 —— 每一步操作都有记录,便于调试

🧠 4. lc_mem_agent.py —— 记忆功能

定位:让Agent记住对话历史,实现多轮对话。在多Agent协调中,记忆是子Agent之间传递上下文的关键机制——协调器需要知道每个子Agent完成了什么,子Agent需要知道总任务的目标。

🧠 LangGraph核心概念

LangGraph是一个用于构建状态驱动的Agent工作流的框架,它就像一个"智能导演",负责:

职责
说明
多Agent中的意义
管理状态
追踪对话历史
协调器记录各子Agent执行进度
编排流程
定义执行步骤和顺序
定义子Agent间的执行顺序
持久化记忆
保存和恢复对话状态
长时间任务的状态保持

🔧 代码详细解析

状态定义

from typing import TypedDict, Annotatedfrom langgraph.graph.message import add_messagesclassAgentState(TypedDict):    messages: Annotated[list, add_messages]  # 自动累积消息

逐行解释

代码要素
作用
类比
TypedDict
定义类型化的状态结构
类似于数据库的表结构
Annotated[list, add_messages]
带累加器的消息列表
每次追加而非覆盖
add_messages
消息累加函数
自动拼接对话片段

为什么需要这个?

# ❌ 如果没有add_messages,每次更新会覆盖:state = {"messages": ["新消息"]}  # 旧消息丢失!# ✅ 有了add_messages,自动累积:state = {"messages": ["旧消息1""旧消息2""新消息"]}  # 保留历史

在多Agent协调中,每个子Agent的执行结果都会追加到同一个状态中,协调器基于完整状态做出下一步决策。

Graph构建

from langgraph.graph import StateGraph, END# 1. 创建状态图graph = StateGraph(AgentState)# 2. 定义节点函数defcall_model(state: AgentState):# state包含所有历史消息    response = model.invoke(state["messages"])# 返回新消息,会自动累加到状态中return {"messages": [response]}# 3. 添加节点graph.add_node("agent", call_model)  # 节点名: "agent",执行函数: call_model# 4. 设置入口点graph.set_entry_point("agent")  # 从"agent"节点开始执行# 5. 设置结束点graph.add_edge("agent", END)  # "agent"执行完后结束

核心组件说明

组件
作用
类比
多Agent场景
StateGraph
状态图容器,管理整个工作流
电影剧本
多Agent协调的总控
add_node
添加执行节点(一个节点=一个步骤)
场景
每个子Agent是一个节点
set_entry_point
设置流程开始位置
开场
入口Agent
add_edge
定义节点间的连接关系
场景切换
子Agent间的数据流转
END
特殊节点,表示流程结束
剧终
任务完成信号

💡 多Agent衔接:如果在这个Graph中添加多个node(如"data_reader"、"analyzer"、"reporter"),再用add_edge连接它们,就实现了最简单的多Agent协调!

记忆持久化

from langgraph.checkpoint.memory import InMemorySaver# 创建记忆存储checkpointer = InMemorySaver()  # 内存级别存储,重启后丢失# 编译Graph,注入记忆功能graph = graph.compile(checkpointer=checkpointer)

关键机制

机制
说明
存储级别
InMemorySaver
内存存储,速度快但重启丢失
内存
compile(checkpointer=...)
注入记忆到Graph
编译时绑定
thread_id
区分不同会话(用户隔离)
配置级别

实际调用

# 创建配置(关键:thread_id用于区分不同用户)config = {"configurable": {"thread_id""user_123"}}# 第一轮对话result1 = graph.invoke(    {"messages": [{"role""user""content""我叫张三"}]},    config=config)# 第二轮对话(记忆保留)result2 = graph.invoke(    {"messages": [{"role""user""content""我叫什么名字?"}]},    config=config)# Agent能正确回答:"你叫张三"

🎯 LangGraph在记忆功能中的核心作用

┌─────────────────────────────────────────────────────┐│                    LangGraph 架构                    │├─────────────────────────────────────────────────────┤│                                                     ││  用户输入 ──→ StateGraph ──→ 节点执行 ──→ 输出      ││                 │              │                    ││                 ↓              ↓                    ││           Checkpointer    状态更新                   ││                 │                                   ││                 ↓                                   ││           持久化存储 (InMemorySaver)                 ││                                                     │└─────────────────────────────────────────────────────┘

LangGraph带来的价值

价值
说明
没有LangGraph会怎样
状态管理自动化
无需手动管理对话历史
手动拼接,容易出错
流程可视化
通过节点和边定义执行流程
代码和逻辑混在一起
记忆持久化
支持多种存储后端
每次重启丢失对话
会话隔离
通过thread_id区分用户
所有用户共享上下文
可扩展性
轻松添加节点和分支
改功能要重写整个流程

🔄 执行流程示例

第一轮对话:用户: "我叫张三"  ↓StateGraph收到消息  ↓调用"agent"节点 → model.invoke(["我叫张三"])  ↓返回: "你好张三!很高兴认识你"  ↓Checkpointer保存状态: {"messages": ["我叫张三", "你好张三!"]}  ↓返回结果给用户第二轮对话:用户: "我叫什么名字?"  ↓StateGraph加载历史状态  ↓调用"agent"节点 → model.invoke(["我叫张三", "你好张三!", "我叫什么名字?"])  ↓返回: "你叫张三呀!"  ↓Checkpointer更新状态  ↓返回结果给用户

代码对比 —— 有 vs 无LangGraph:

# ❌ 没有LangGraph:手动管理历史,容易出错history = []history.append({"role""user""content""我叫张三"})response = model.invoke(history)history.append({"role""assistant""content": response.content})# ... 需要重复编写大量样板代码# ✅ 有LangGraph:自动管理历史,专注业务逻辑graph.invoke({"messages": [{"role""user""content""我叫张三"}]}, config=config)

🌟 5. lc_tool_mem_agent.py —— 完整功能Agent

定位:集大成者!工具调用 + 记忆功能的完美结合。这也是多Agent系统中每个子Agent的标准形态——既有能力调用外部工具获取信息,又能记住上下文保持对话连贯性。

架构设计

# 1. 定义工具@tooldefget_current_time(): ...@tooldefcalculator(expression: str): ...# 2. 创建带工具的Agentagent = create_agent(    model=model,    tools=[get_current_time, calculator],    system_prompt="你是一个友好的AI助手...")# 3. 包装成带记忆的GraphclassAgentState(TypedDict):    messages: Annotated[list, add_messages]defcall_model(state: AgentState):    result = agent.invoke({"messages": state["messages"]})return {"messages": [result["messages"][-1]]}graph = StateGraph(AgentState)graph.add_node("agent", call_model)graph.compile(checkpointer=InMemorySaver())

完整的单Agent执行流程

用户输入 → 状态更新 → Agent分析 → 工具调用(可选)→ 状态持久化 → 返回结果

应用场景

场景
说明
多Agent中的应用
多轮对话中使用工具
先查时间再计算
分析Agent查数据后给报告Agent
连续计算
多步数学计算
子Agent链式处理
上下文理解
复杂任务需要回顾历史
协调器追踪各子Agent执行情况

🔧 第二部分:调试工具详解

环境检查系列

6. check_env.py

功能:检查API密钥是否正确加载。

api_key = os.getenv("DASHSCOPE_API_KEY")print(f"API Key: {api_key}")print(f"API Key repr: {repr(api_key)}")

7. check_all_env.py

功能:列出所有与AI开发相关的环境变量。

for key in os.environ:ifany(keyword in key.upper() for keyword in ['API''KEY''LANG']):print(f"{key}={value[:50]}...")

HTTP调试系列

8. test_httpx.py

功能:测试自定义HTTP客户端。

http_client = httpx.Client()model = ChatOpenAI(..., http_client=http_client)

9. test_transport.py

功能:记录HTTP请求头详情,排查认证问题。

classLoggingTransport(httpx.HTTPTransport):defhandle_request(self, request):print("=== Request Headers ===")for key, value in request.headers.items():print(f"{key}{repr(value)}")returnsuper().handle_request(request)

10. test_headers.py

功能:检查请求头中的非ASCII字符问题。

11. test_encoding.py

功能:修复Windows控制台中文输出乱码问题。

import sysif sys.platform == 'win32':import codecs    sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer, 'strict')

API测试系列

12. test_api.py

功能:验证API连接是否正常。

try:    model = ChatOpenAI(...)    response = model.invoke("Hello")print(f"Success: {response.content}")except Exception as e:print(f"Error: {e}")

📊 学习路径建议

┌─────────────────────────────────────────────────────┐│                  学习路径总览                        │├─────────────────────────────────────────────────────┤│                                                     ││  🟢 入门阶段                                         ││  ├── lc_agent_demo.py    → 理解LLM基础调用           ││  └── lc_chat_agent.py    → 掌握Agent封装             ││                                                     ││  🟡 进阶阶段                                         ││  ├── lc_tool_agent.py    → 学会工具调用              ││  └── lc_mem_agent.py     → 理解状态管理              ││                                                     ││  🔴 高级阶段                                         ││  └── lc_tool_mem_agent.py → 构建完整Agent           ││                                                     ││  ⚪ 调试阶段                                         ││  ├── check_env.py        → 环境检查                  ││  ├── test_api.py         → API测试                   ││  └── test_encoding.py    → 编码问题                  ││                                                     │└─────────────────────────────────────────────────────┘

阶段目标与多Agent能力映射

学习阶段
核心文件
掌握能力
多Agent中的应用
入门
1-2
LLM调用 + Agent封装
理解子Agent的最小单元
进阶
3-4
工具调用 + 状态管理
为子Agent赋予工具和记忆
高级
5
完整Agent
构建多Agent的"原子组件"
调试
6-12
排查能力
保障多Agent系统稳定

💡 核心概念总结

Agent三要素

        ┌─────────────────────┐        │      🧠 模型        │        │ 大语言模型作为核心   │        │   推理引擎           │        └──────────┬──────────┘                   │    ┌──────────────┼──────────────┐    │              │              │    ▼              ▼              ▼┌────────┐   ┌────────┐   ┌────────┐│ 🛠️ 工具 │   │ 💾 记忆 │   │ 🔗 协调 ││ 扩展能力 │   │ 维持上下文│   │ 连接多Agent│└────────┘   └────────┘   └────────┘
要素
作用
类比
多Agent中的意义
模型
核心推理引擎
大脑
每个子Agent的大脑
工具
扩展能力边界
手脚
子Agent获取外部数据的手段
记忆
维持对话上下文
短期记忆
子Agent间传递上下文

LangGraph关键组件速查

组件
作用
代码示例
对应多Agent概念
StateGraph
状态图,定义执行流程
StateGraph(State)
协调器工作流
State
状态数据结构
class State(TypedDict)
共享数据池
Node
执行节点
graph.add_node("agent", fn)
单个子Agent
Edge
节点间连接
graph.add_edge("a", "b")
子Agent间的数据流转
Checkpointer
状态持久化
compile(checkpointer=...)
长时间任务的状态保存

🎯 实践建议

  1. 从简单开始 —— 先运行lc_agent_demo.py验证环境是否通
  2. 逐步进阶 —— 每掌握一个文件再进入下一个,不要跳级
  3. 动手修改 —— 尝试添加自己的工具(如天气查询、数据库查询)
  4. 调试技巧 —— 遇到问题先用check_env.py排查环境
  5. 为多Agent打基础 —— 理解单Agent的结构后,将多个agent节点接入同一个StateGraph,就实现了最简单的多Agent协调

✨ 结语

通过这12个文件的学习,你已经掌握了构建AI Agent的核心技能:

  • ✅ LLM调用 —— 与大模型对话的基础
  • ✅ 工具集成 —— 让Agent具备动手能力
  • ✅ 状态管理 —— 用LangGraph编排Agent流程
  • ✅ 记忆机制 —— 让Agent记住你是谁

🚀 下一步预告:理解了单Agent的构建,下一篇我们将把这些独立Agent串起来,用LangGraph构建真正的多Agent协调系统——让多个Agent分工协作、并行执行、共同完成复杂任务!

现在你可以开始构建自己的AI Agent应用了!如果有任何问题,欢迎留言讨论。


📌 关注我,获取更多AI Agent开发干货!


最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 02:19:54 HTTP/2.0 GET : https://f.mffb.com.cn/a/500864.html
  2. 运行时间 : 0.492286s [ 吞吐率:2.03req/s ] 内存消耗:4,977.85kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=72dfd4da06e4f13870f73fea5cc5d8d9
  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.000463s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000610s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.002324s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.010163s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000600s ]
  6. SELECT * FROM `set` [ RunTime:0.015217s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000636s ]
  8. SELECT * FROM `article` WHERE `id` = 500864 LIMIT 1 [ RunTime:0.005226s ]
  9. UPDATE `article` SET `lasttime` = 1783016394 WHERE `id` = 500864 [ RunTime:0.017699s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.001499s ]
  11. SELECT * FROM `article` WHERE `id` < 500864 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.014364s ]
  12. SELECT * FROM `article` WHERE `id` > 500864 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.071017s ]
  13. SELECT * FROM `article` WHERE `id` < 500864 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.043995s ]
  14. SELECT * FROM `article` WHERE `id` < 500864 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.116900s ]
  15. SELECT * FROM `article` WHERE `id` < 500864 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.096827s ]
0.493898s