当前位置:首页>python>Python搭AI Agent实战指南,太实用了!小白上手也能做!

Python搭AI Agent实战指南,太实用了!小白上手也能做!

  • 2026-04-15 20:32:42
Python搭AI Agent实战指南,太实用了!小白上手也能做!

很多人说自己在做AI Agent,但仔细一问,大多数只是在包装一个聊天框。...

很多人说自己在做AI Agent,但仔细一问,大多数只是在包装一个聊天框。

真正的AI Agent和聊天机器人的区别是什么?

简单说:聊天机器人能说,Agent能做。它可以查天气、查数据库、算价格、发邮件,然后把这些拼在一起,交给你一个完整结果。

但"能做"背后还有更大的差距:聊天机器人的输出是文字,Agent的输出是动作。文字可以忽略,动作会产生真实影响。

这篇文章用Python,从Agent的底层原理讲到生产级实现,附上真实落地案例和数据。全程有可运行代码,不是概念科普。


先理解Agent在干什么

先把这个问题想清楚,后面的代码才能看明白。

Agent的核心是一个循环,叫做Agent Loop:

代码示例
用户输入

模型推理(我需要调工具吗?)

├── 不需要 → 直接输出最终回复

└── 需要 → 输出工具调用指令(工具名 + 参数)

你写的Python代码执行工具

把执行结果塞回对话历史

模型继续推理(可能再调一次工具,也可能输出最终答案)

最终回复用户

关键在中间那步:执行工具的是你写的代码,不是模型。模型只是决策者,它说"去查一下北京天气",然后你写的函数真的去调了天气API,把结果喂回给模型,模型才知道怎么回答"适合出门"还是"带雨伞"。

这个机制叫Function Calling(或Tool Use),是现在主流大模型都支持的标准能力。搞清楚这个,Agent的架构就清楚了。


三个不可少的组件

搭一个能干活的Agent,需要三样东西:

工具定义(Tool Schema):用结构化的JSON格式告诉模型,有哪些工具可以用、每个工具是做什么的、需要传什么参数。模型读这份定义,决定什么时候调哪个工具。 执行层(Execution Layer):你写的Python函数,工具被模型触发时真正执行的代码。可以是查数据库、调API、做计算、发通知——任何Python能做的事都行。 结果整合(Result Integration):把工具执行结果格式化,塞回对话历史,让模型在下一轮推理时能看到。这步如果做错,模型要么看不到结果,要么格式解析出错。

三个组件缺一不可。很多人的Agent效果差,根源不是模型不够强,是这三个组件里有一个写得不好。


第一个Agent:从零跑起来

先把环境装好:

bash代码示例
pip install openai python-dotenv

然后是一个完整的最简Agent,只有一个天气工具:

python代码示例
import os

import json

from openai import OpenAI

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

# 工具定义:告诉模型有什么工具可以用

tools = [

{

"type": "function",

"function": {

"name": "get_weather",

"description": "获取指定城市的当前天气信息,包括温度、天气状况和湿度。适用于用户询问天气、是否适合出行等场景。",

"parameters": {

"type": "object",

"properties": {

"city": {

"type": "string",

"description": "城市名称,使用中文,如:北京、上海、深圳"

},

"unit": {

"type": "string",

"enum": ["celsius", "fahrenheit"],

"description": "温度单位,默认摄氏度"

}

},

"required": ["city"]

}

}

}

]

# 工具实现:真正去执行的函数

def get_weather(city: str, unit: str = "celsius") -> str:

# 真实项目里这里接天气API(如和风天气、心知天气)

# 这里用模拟数据演示

weather_data = {

"北京": {"temp": 22, "condition": "晴天", "humidity": "45%", "advice": "适合出行,无需带雨具"},

"上海": {"temp": 26, "condition": "多云", "humidity": "70%", "advice": "稍热,建议带水"},

"广州": {"temp": 30, "condition": "小雨", "humidity": "85%", "advice": "记得带伞"},

"成都": {"temp": 18, "condition": "阴天", "humidity": "60%", "advice": "温度舒适,轻薄外套即可"},

}

data = weather_data.get(city, {"temp": 20, "condition": "晴天", "humidity": "50%", "advice": "天气不错"})

temp = data["temp"] if unit == "celsius" else round(data["temp"] * 9/5 + 32, 1)

unit_label = "°C" if unit == "celsius" else "°F"

return json.dumps({

"city": city,

"temperature": f"{temp}{unit_label}",

"condition": data["condition"],

"humidity": data["humidity"],

"advice": data["advice"]

}, ensure_ascii=False)

# 工具映射:函数名 → 函数对象

TOOL_FUNCTIONS = {"get_weather": get_weather}

# Agent主循环

def run_agent(user_message: str):

messages = [{"role": "user", "content": user_message}]

while True:

response = client.chat.completions.create(

model="gpt-4o-mini",

messages=messages,

tools=tools,

tool_choice="auto"

)

msg = response.choices[0].message

messages.append(msg)

# 没有工具调用,说明模型认为已经有足够信息,输出最终答案

if not msg.tool_calls:

return msg.content

# 有工具调用,执行每个工具并把结果返回给模型

for tool_call in msg.tool_calls:

func_name = tool_call.function.name

func_args = json.loads(tool_call.function.arguments)

result = TOOL_FUNCTIONS[func_name](**func_args)

messages.append({

"role": "tool",

"tool_call_id": tool_call.id,

"content": result

})

# 测试

print(run_agent("北京今天天气怎么样?我想出去跑步,合适吗?"))

运行这段代码,你会看到模型自动调用了get_weather,拿到数据后给出完整建议。这就是最基础的Agent Loop。


升级到多工具协作

真实项目里,一个Agent通常需要几个工具配合。下面这个例子,Agent同时有三个工具:查天气、搜产品数据库、做数学计算。用户一句话可能触发多个工具。

python代码示例
tools = [

{

"type": "function",

"function": {

"name": "get_weather",

"description": "获取指定城市的天气信息",

"parameters": {

"type": "object",

"properties": {

"city": {"type": "string", "description": "城市名称,中文"}

},

"required": ["city"]

}

}

},

{

"type": "function",

"function": {

"name": "search_products",

"description": "搜索产品数据库,返回产品名称、价格和库存状态。适用于用户询问产品价格、寻找特定商品时。",

"parameters": {

"type": "object",

"properties": {

"query": {"type": "string", "description": "搜索关键词,如:MacBook Pro、AirPods"},

"category": {"type": "string", "description": "产品分类,可选:electronics、accessories"}

},

"required": ["query"]

}

}

},

{

"type": "function",

"function": {

"name": "calculate",

"description": "执行数学计算,返回计算结果。适用于价格合计、折扣计算等数值运算场景。",

"parameters": {

"type": "object",

"properties": {

"expression": {

"type": "string",

"description": "数学表达式,如:18999 + 1899,或 18999 * 0.9"

}

},

"required": ["expression"]

}

}

}

]

def search_products(query: str, category: str = None) -> str:

# 真实项目里连接数据库或调商品API

products_db = {

"MacBook Pro 16": {"price": 18999, "stock": "有货", "category": "electronics"},

"MacBook Pro 14": {"price": 14999, "stock": "有货", "category": "electronics"},

"AirPods Pro 3": {"price": 1899, "stock": "有货", "category": "accessories"},

"AirPods 4": {"price": 1099, "stock": "预售", "category": "accessories"},

"iPad Pro 13": {"price": 9999, "stock": "有货", "category": "electronics"},

"Magic Keyboard": {"price": 799, "stock": "有货", "category": "accessories"},

}

results = [

{"name": k, "price": v["price"], "stock": v["stock"]}

for k, v in products_db.items()

if query.lower() in k.lower()

]

if not results:

return json.dumps({"results": [], "message": "未找到匹配产品"}, ensure_ascii=False)

return json.dumps({"results": results, "count": len(results)}, ensure_ascii=False)

def calculate(expression: str) -> str:

try:

# 生产环境用更安全的解析库,如 simpleeval

# 这里为演示用 eval,实际部署需替换

allowed_chars = set("0123456789+-*/.() ")

if not all(c in allowed_chars for c in expression):

return json.dumps({"error": "表达式包含不允许的字符"})

result = eval(expression)

return json.dumps({"expression": expression, "result": result, "formatted": f"¥{result:,.2f}"})

except Exception as e:

return json.dumps({"error": f"计算出错: {str(e)}"})

TOOL_FUNCTIONS = {

"get_weather": get_weather,

"search_products": search_products,

"calculate": calculate

}

测试一句话,背后会触发3次工具调用:

python代码示例
print(run_agent("帮我找一下MacBook Pro 16和AirPods Pro 3的价格,算算一起买多少钱,打九折的话呢"))

模型会自动:

1. 调search_products查MacBook Pro 16的价格

2. 调search_products查AirPods Pro 3的价格

3. 调calculate算出 (18999+1899) 的原价合计

4. 调calculate算出打九折后的价格

5. 整合四次调用结果,给出清晰回答

用户完全不需要知道背后发生了什么,一句话得到完整答案。


生产级实现:错误处理 + 安全控制

上面的代码在测试环境够用。上生产还需要:轮次限制、错误捕获、超时控制、权限管理。

权限分级管控

不是所有工具都一样安全。读取类操作随便调,写入类操作要记日志,危险操作(删除、转账、发邮件)需要人工确认。

python代码示例
# 权限配置表:每个工具的安全级别

TOOL_PERMISSIONS = {

"get_weather": {

"level": "read", # 只读,随意调

"rate_limit": 60, # 每分钟最多60次

"require_confirm": False

},

"search_products": {

"level": "read",

"rate_limit": 30,

"require_confirm": False

},

"calculate": {

"level": "compute",

"rate_limit": 100,

"require_confirm": False

},

"send_email": {

"level": "write",

"rate_limit": 10,

"require_confirm": True, # 需要人工确认

"reason": "发送邮件操作不可逆,需要确认"

},

"delete_order": {

"level": "dangerous",

"rate_limit": 3,

"require_confirm": True,

"reason": "删除订单数据不可恢复,必须人工审批"

}

}

# 调用计数器(实际项目用Redis等持久化存储)

tool_call_counts = {}

def execute_tool_safely(func_name: str, func_args: dict) -> str:

"""带权限检查的工具执行"""

perm = TOOL_PERMISSIONS.get(func_name)

if not perm:

return json.dumps({"error": "未授权工具,拒绝执行", "tool": func_name})

if func_name not in TOOL_FUNCTIONS:

return json.dumps({"error": f"工具不存在: {func_name}"})

# 频率限制检查

count_key = func_name

tool_call_counts[count_key] = tool_call_counts.get(count_key, 0) + 1

if tool_call_counts[count_key] > perm.get("rate_limit", 999):

return json.dumps({"error": "调用频率超限,请稍后重试"})

# 危险操作:拦截,等待人工确认

if perm.get("require_confirm"):

# 真实项目里这里发通知(钉钉/企微/邮件)给审批人

# 把待审批操作存入数据库,等待回调

return json.dumps({

"status": "pending_approval",

"message": f"此操作需要人工确认:{perm.get('reason', '安全审批')}",

"tool": func_name,

"args": func_args,

"approval_required": True

})

# 正常执行

try:

return TOOL_FUNCTIONS[func_name](func_args)

except TypeError as e:

return json.dumps({"error": f"参数错误: {str(e)}"})

except Exception as e:

return json.dumps({"error": f"工具执行失败: {str(e)}"})

完整的生产级Agent主函数

python代码示例
import time

import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')

logger = logging.getLogger(__name__)

def run_agent_production(user_message: str, max_rounds: int = 10, verbose: bool = False) -> str:

"""

生产级Agent,带完整错误处理

Args:

user_message: 用户输入

max_rounds: 最大工具调用轮次,防止无限循环

verbose: 是否打印调试信息

"""

messages = [

{

"role": "system",

"content": """你是一个智能助手,可以使用工具查询天气、搜索产品和进行计算。

工具使用规范:

1. 查产品前先确认用户的需求,避免无效搜索

2. 计算前先确认已获取所有需要的数值

3. 如果工具返回错误,告知用户并尝试其他方式解决

4. 如果用户的需求超出工具能力范围,直接说明"""

},

{"role": "user", "content": user_message}

]

total_tokens = 0

start_time = time.time()

for round_num in range(max_rounds):

try:

response = client.chat.completions.create(

model="gpt-4o-mini",

messages=messages,

tools=tools,

tool_choice="auto",

timeout=30

)

except Exception as e:

logger.error(f"API调用失败(第{round_num+1}轮): {e}")

return f"服务暂时不可用,请稍后重试。(错误:{type(e).__name__})"

# 统计token消耗

if hasattr(response, 'usage') and response.usage:

total_tokens += response.usage.total_tokens

msg = response.choices[0].message

messages.append(msg)

if verbose:

logger.info(f"第{round_num+1}轮推理完成,工具调用:{len(msg.tool_calls) if msg.tool_calls else 0}个")

# 无工具调用,返回最终答案

if not msg.tool_calls:

elapsed = round(time.time() - start_time, 2)

if verbose:

logger.info(f"完成!总轮次:{round_num+1},总token:{total_tokens},耗时:{elapsed}s")

return msg.content

# 执行所有工具调用

for tool_call in msg.tool_calls:

func_name = tool_call.function.name

try:

func_args = json.loads(tool_call.function.arguments)

except json.JSONDecodeError:

result = json.dumps({"error": "参数解析失败,JSON格式错误"})

func_args = {}

else:

if verbose:

logger.info(f" 调用工具: {func_name},参数: {func_args}")

result = execute_tool_safely(func_name, func_args)

if verbose:

logger.info(f" 返回结果: {result[:100]}{'...' if len(result) > 100 else ''}")

messages.append({

"role": "tool",

"tool_call_id": tool_call.id,

"content": result

})

logger.warning(f"达到最大轮次限制({max_rounds})")

return f"任务处理超出限制,请将问题拆分后重试。"

工具描述是核心竞争力

很多人做的Agent效果差,根源不是模型选错了,是工具描述写得不清楚。

模型是靠工具描述来决定"什么时候用这个工具"的。描述写得模糊,模型就会判断错,该用的时候不用,不该用的时候乱用。

反面教材:
python代码示例
"description": "查询数据"

这句话几乎没有信息量。模型不知道查什么数据、什么时候用、参数格式是什么。

正确写法:
python代码示例
"description": "搜索商品数据库,根据商品名称关键词返回匹配的产品信息,包含名称、价格、库存状态。适用于用户询问具体产品价格、寻找特定商品类型时。不适用于比较不同品牌策略或分析市场趋势类问题。"

这个描述做了三件事:说清楚了工具能干什么、什么时候用、什么时候不用。后面那句"不适用于"很关键,帮模型排除了误用场景。

参数描述也要精确:

python代码示例
# 差的写法

"city": {"type": "string", "description": "城市"}

# 好的写法

"city": {

"type": "string",

"description": "城市名称,使用中文全称,如:北京、上海、广州。不要使用缩写或英文。"

}

参数描述里给出格式要求、举例、不接受的格式,模型调用时的参数准确率会明显提升。


System Prompt:被大多数人忽视的关键

工具定义写好了,System Prompt也很重要。它决定了Agent的行为边界和处理风格。

没有价值的System Prompt:
python代码示例
{"role": "system", "content": "你是一个智能助手。"}
实际有用的System Prompt(以电商客服为例):
python代码示例
{

"role": "system",

"content": """你是XX电商平台的智能客服助手,专门处理商品咨询和售后问题。

【你能做的事】

  • 查询商品价格、库存、规格
  • 查询订单状态和物流信息
  • 计算总价、折扣、优惠
  • 发起退款申请(需等待人工审批)

【你不能做的事】

  • 修改订单金额(无权限)
  • 承诺退货时间(需人工确认)
  • 处理超过30天的投诉(转人工)

【处理风格】

1. 先查询,再回答。不要凭感觉猜测产品信息

2. 遇到投诉,先表示理解,再查具体情况

3. 超出范围的问题,直接告知并给出人工客服联系方式

4. 回答简洁,不要重复同样的内容"""

}

这两者的差距非常直接:前者让模型自己猜测该怎么做,后者明确了能力边界、处理规范、特殊情况应对。实测下来,后者的用户满意度和处理准确率要高出20%以上。


真实落地案例:五个已验证场景

案例一:电商客服Agent

规模:某中型电商,日均咨询量约1.5万条。 接入前:人工客服团队30人,每人日均处理约500条,高峰期排队时长25-40分钟。 接入后:Agent处理标准化问题(订单查询、物流追踪、价格咨询),复杂投诉转人工。 效果数据
    • Agent自动处理率:
    76%(约1.14万条/天)
    • 平均响应时间:从排队等待到
    1.2秒
    • 人工团队规模从30人缩减到
    14人(其他人转做质检和运营)
    • 用户满意度从3.7/5提升到
    4.1/5(评分来自退出问卷) 工具配置:订单查询、物流查询、商品查询、价格计算、退款申请(拦截等待人工)

    案例二:数据分析助手(内部工具)

    背景:某零售连锁企业,运营部门需要每周出一份销售数据分析报告,以前由数据分析师手工处理,每份报告约需4小时。 Agent工具配置
    • query_database(sql) — 执行SQL查询,返回结果
    • generate_chart(data, chart_type) — 生成图表(调用Python matplotlib)
    • export_report(content, format) — 输出报告文件
    提示词方向:给出数据库结构、本周分析重点(如促销效果、区域对比),让Agent自主设计分析维度、写SQL、生成图表、组织报告。 效果
      • 报告生成时间从
      4小时降到约22分钟(含人工review时间)
      • 分析师从"做报告"转向"审核和解读报告"
      • 覆盖的分析维度从每周3-5个扩展到
      8-12个 关键经验:SQL执行工具要加输出行数限制(LIMIT 1000),防止大数据集拖垮查询。

      案例三:代码审查Agent(开源工具,实测验证)

      工具:开源项目 ai-code-reviewer,基于GPT-4o + Function Calling实现。 测试数据(来自其GitHub Issues中用户反馈汇总):
        • 在500个已知有问题的Python函数上测试
        • SQL注入漏洞检出率:
        89%(人工审查约95%)
        • 内存泄漏检出率:
        73%
        • API接口不规范检出率:
        82%
        • 误报率(没问题但报了问题):约
        14%

        结论:在检出率上略低于资深工程师,但速度快100倍以上,适合做"第一遍过滤",明显有问题的先拦下来,再由人工细看。

        实际部署时的工具配置
        • read_file(path) — 读取代码文件
        • search_symbol(name) — 查找函数/变量定义位置
        • check_dependency(package) — 检查依赖是否有已知安全漏洞
        • annotate_issue(line, message) — 在对应行留下批注

        案例四:内容生产流水线

        背景:自媒体团队,需要每天产出3-5篇文章,以前靠人工选题+写作,每篇约3小时。 Agent流水线(多工具串联)

        1. search_trending_topics(keyword) — 搜索当天热点

        2. fetch_article(url) — 抓取参考资料原文

        3. summarize_content(text) — 提炼关键信息

        4. generate_draft(outline, refs) — 生成初稿

        5. format_output(content, style) — 按照发布平台规范格式化

        效果
          • 从选题到初稿:
          从3小时缩短到约35分钟
          • 初稿直接发布率(无需大改):约60%,其余需要补充细节或调整风格
          • 团队规模3人,原来每天最多3篇,现在可以产出
          8-10篇 坑点记录:Agent自动搜索时容易选到过时内容,需要在工具层加日期过滤(date_from=7_days_ago),强制只搜近期内容。

          案例五:企业知识库问答(RAG + Agent)

          背景:某IT公司,内部有约3000份技术文档,工程师经常要查规范、查接口说明,每次人工找文档平均7分钟。 方案:文档向量化存入向量数据库(Chroma),Agent带两个工具:
          • search_knowledge_base(query) — 语义搜索文档,返回Top-5相关段落
          • get_document(doc_id) — 获取完整文档
          效果
            • 工程师查文档的时间从平均
            7分钟降到1分钟以内
            • 问答准确率(在100个标准问题上测试):
            87%
            • 日均查询量:从接入前约50次/天增长到
            约300次/天(因为太方便了,大家都开始用) 关键设计:搜索工具的描述中明确写了"只返回文档中实际存在的内容,不要推断或补充",这一条直接把幻觉比例从约23%降到约6%。

            三款主流模型对比

            对比维度GPT-4o-miniClaude 3.5 HaikuGemini 2.0 Flash
            Function Calling准确率很高很高很高
            并行工具调用支持支持支持(表现最稳定)
            上下文窗口128K200K1M
            中文理解较好
            价格(每1M token)输入$0.15输入$0.25输入$0.075
            延迟极低
            推荐选择逻辑
              • 通用场景、成本优先:
              Gemini 2.0 Flash,性价比最高,延迟低
              • 需要长上下文(>128K):
              Claude 3.5 Haiku,200K窗口
              • 国内网络不稳定:考虑接入
              阿里千问百度文心的API(国内节点)

              从零开始的完整学习路线

              没有AI开发背景,这样走:

              第一阶段:理解Function Calling(1-2天)

              这是所有Agent的基础。OpenAI的Cookbook里有一篇"Function Calling"的官方示例,花半天过一遍,跑通里面的代码。不要跳过这步,后面会很迷糊。

              第二阶段:跑通本文的第一个Agent(半天)

              把本文"第一个Agent"那段代码复制下来,改成你自己真实业务里用得到的工具——不是天气,而是你们实际有的数据或API。把它跑通,看到它真的在调工具、真的在整合结果。

              第三阶段:加上多工具和错误处理(2-3天)

              把"生产级实现"那段代码加进来,添加第二个、第三个工具。在这个阶段,你会开始遇到真实的问题:工具调用参数不对、结果格式解析失败、模型胡乱触发某个工具。这些问题的解法就是把工具描述写得更精确,把System Prompt写得更清楚。

              第四阶段:接入真实数据源(3-5天)

              把测试用的模拟数据换成你的实际数据库或API。在这个阶段你会遇到网络超时、权限错误、数据格式不一致等问题。本文的错误处理代码能帮你应对大部分情况。

              第五阶段:上线后持续迭代

              最重要的工作不在开发阶段,而在上线后。收集真实用户的对话记录,看哪些工具调用不准、哪些场景Agent回答得差,针对性地优化工具描述和System Prompt。这个过程持续进行,没有终点。

              整个过程,有Python基础的话,1-2周能跑通一个真实可用的版本。


              常见问题速查

              Q:Agent调错了工具怎么办?

              先看工具描述是否足够清晰。八成以上的工具误调问题,根源是描述写得太模糊或者两个工具的description重合度太高。把描述改具体,加上"适用场景"和"不适用场景"。

              Q:max_rounds设多少合适?

              日常对话类任务,5-7轮够了。复杂的多步骤任务,可以设到15。不要设太高,一旦出bug,会白白消耗大量token。先设低一点,根据实际报"达到最大轮次"的频率再调整。

              Q:工具执行失败了,Agent会怎么办?

              模型会收到你返回的错误信息({"error": "..."}),然后决定是重试、用其他工具替代,还是直接告知用户无法完成。所以错误信息要写人话,不要只返回堆栈trace。

              Q:每次调用要花多少钱?**

              一次典型的多工具对话(含3-4次工具调用),用GPT-4o-mini大约消耗3000-6000 token,成本约$0.001-0.002(约0.007-0.014元)。每天1万次调用,月均成本约200-400元。比人工客服便宜几个数量级。


              最后

              做AI Agent不难,入门门槛比很多人想象的低。懂Python、理解HTTP请求,就能搭一个能用的版本。

              但做好AI Agent有难度。工具描述的质量、System Prompt的设计、错误处理的完整性、权限管控的粒度——这些决定了Agent在生产环境里是顺畅好用还是频繁出错。

              上线永远比计划更能暴露问题。先跑起来,再迭代。


              有用AI — 有用才会用,会用才有用。


              有用AI — 有用才会用,会用才有用。
              AI领域连续创业者、落地实战派

              最新文章

              随机文章

              基本 文件 流程 错误 SQL 调试
              1. 请求信息 : 2026-04-16 01:59:07 HTTP/2.0 GET : https://f.mffb.com.cn/a/485946.html
              2. 运行时间 : 0.102490s [ 吞吐率:9.76req/s ] 内存消耗:4,634.23kb 文件加载:140
              3. 缓存信息 : 0 reads,0 writes
              4. 会话信息 : SESSION_ID=54c57d3ee5ff8646de263d5d34ef4056
              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.000516s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
              2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000929s ]
              3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000333s ]
              4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000268s ]
              5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000618s ]
              6. SELECT * FROM `set` [ RunTime:0.000243s ]
              7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000670s ]
              8. SELECT * FROM `article` WHERE `id` = 485946 LIMIT 1 [ RunTime:0.000697s ]
              9. UPDATE `article` SET `lasttime` = 1776275947 WHERE `id` = 485946 [ RunTime:0.005329s ]
              10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000263s ]
              11. SELECT * FROM `article` WHERE `id` < 485946 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000494s ]
              12. SELECT * FROM `article` WHERE `id` > 485946 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000689s ]
              13. SELECT * FROM `article` WHERE `id` < 485946 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000745s ]
              14. SELECT * FROM `article` WHERE `id` < 485946 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003784s ]
              15. SELECT * FROM `article` WHERE `id` < 485946 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002226s ]
              0.104066s