乐于分享
好东西不私藏

Hermes Agent 源码-预算控制与限流

Hermes Agent 源码-预算控制与限流

Hermes Agent 源码解析

第 14 讲:预算控制与限流——IterationBudget、Credits Tracker、Rate Guard 与费用估算管线

基于 Hermes Agent v0.16.0 源码 · 2026-06-27

一、为什么预算控制是 Agent 系统的生命线

前十三讲我们覆盖了 Hermes 从核心架构到认证系统的全链路。这一讲聚焦一个看似低调却决定性的子系统:预算控制与限流

在一个 AI Agent 系统中,一次对话可能触发数十次 API 调用。如果没有预算控制,一个陷入死循环的 Agent 可以在几分钟内消耗掉数百美元。Hermes 的预算体系不是简单的计数器——它是多层防御架构,从迭代次数到费用估算,从限流熔断到工具循环检测,形成了完整的成本控制闭环。

📦 本讲核心文件

agent/iteration_budget.py(62 行)— 迭代预算计数器

agent/credits_tracker.py(794 行)— 积分追踪与通知策略

agent/nous_rate_guard.py(325 行)— 跨会话限流熔断

agent/usage_pricing.py(908 行)— 费用估算管线

agent/error_classifier.py — 计费/限流错误分类

二、IterationBudget:线程安全的迭代预算计数器

iteration_budget.py 仅 62 行代码,却是 Hermes 预算体系的第一道防线。每个 AIAgent 实例(父 Agent 或子 Agent)持有一个独立的 IterationBudget 对象,通过 consume/refund 模式控制迭代次数。

class IterationBudget:
    def __init__(self, max_total: int):
        self.max_total = max_total
        self._used = 0
        self._lock = threading.Lock()

    def consume(self) -> bool:
        """Try to consume one iteration. Returns True if allowed."""
        with self._lock:
            if self._used >= self.max_total:
                return False
            self._used += 1
            return True

    def refund(self) -> None:
        """Give back one iteration (e.g. for execute_code turns)."""
        with self._lock:
            if self._used > 0:
                self._used -= 1

关键设计细节:

🔹 线程安全:所有状态变更通过 threading.Lock 保护,Gateway 多会话并发场景下不会数据竞争

🔹 Refund 机制execute_code(程序化工具调用)的迭代通过 refund() 返还——程序化调用不消耗模型推理预算,因为它们不经过 LLM 决策

🔹 父子独立预算:父 Agent 默认 max_iterations=90,子 Agent 默认 delegation.max_iterations=50,各自独立计数

conversation_loop.py 中,预算检查是主循环的退出条件之一:

while (api_call_count < agent.max_iterations
       and agent.iteration_budget.remaining > 0)
       or agent._budget_grace_call:
    ...
    if agent._budget_grace_call:
        agent._budget_grace_call = False
    elif not agent.iteration_budget.consume():
        _turn_exit_reason = "budget_exhausted"
        agent._safe_print(
            f"\u26a0\ufe0f Iteration budget exhausted "
            f"({used}/{max_total} used)")
        break

Grace call 机制是精妙的设计:当预算耗尽时,Agent 获得一次额外调用机会——这允许模型在最后一次响应中完成未竟的工具调用或给出总结,而不是粗暴截断。

⚠️ 预算耗尽的优雅退出

当 Ollama 运行时上下文过小导致工具调用失败时,Hermes 会调用 iteration_budget.refund() 返还本次迭代,然后退出循环——避免因为基础设施问题浪费用户预算。

三、Credits Tracker:Nous 积分状态机

credits_tracker.py 是 Hermes 对 Nous Portal 积分系统的深度集成。它不是简单的余额展示——而是一个完整的积分状态机,包含解析、策略评估、通知发射三个层次。

1. 积分头解析管线

Nous Portal 在每个 API 响应中注入 x-nous-credits-* 系列头字段。CreditsTracker 的解析器实现了严格验证

头字段 类型 说明
x-nous-credits-version int Schema 版本,必须为 1
x-nous-credits-remaining-micros int 总余额(微美元)
x-nous-credits-subscription-micros int (signed) 订阅余额(可为负/债务)
x-nous-credits-paid-access "true"/"false" 付费访问状态(字符串!)
x-nous-credits-purchased-micros int 充值余额
x-nous-tool-pool-micros int 工具池余额

解析器使用 钱安全的 int 解析int() 直接转换,绝不使用 int(float(...))——后者在超过 2^53 时会静默损坏大金额值。任何字段解析失败都会导致整个解析返回 None(fail-hard-on-bad-input)。

2. 积分策略引擎

evaluate_credits_notices() 是一个纯函数,接收积分状态和锁存器,返回需要显示和清除的通知列表。核心策略包含四个条件分支:

通知类型 触发条件 级别
Usage gauge used_fraction >= 50%/75%/90% info / warn
Grant spent uf >= 1.0 and purchased > 0 info
Depleted paid_access == false error
Restored paid_access 翻回 true success (TTL 8s)

3. 智能抑制逻辑

🔹 Free tier 抑制:当使用免费模型时(:free 后缀),depleted 通知被抑制——免费用户没有积分可消耗,显示错误横幅只会造成恐慌

🔹 充值余额抑制:当账户有充值余额(purchased_micros > 0)时,usage gauge 被完全抑制——显示"90% 已用"对用户毫无意义,因为充值余额仍在

🔹 Escalating 通知:usage gauge 使用升级机制(50% → 75% → 90%),同一时刻只显示最高达到的档位,恢复时自动降级

4. Cold-start 种子机制

conversation_loop.py 中,seed_credits_at_session_start() 在会话开始时从 /api/oauth/account 获取积分状态。TUI/桌面端在会话打开时种子,CLI 在第一轮对话时种子——fail-open 设计确保种子失败不影响对话。

四、Nous Rate Guard:跨会话限流熔断器

nous_rate_guard.py 解决了 Hermes 最棘手的限流问题:重试放大效应

问题场景:Nous Portal 返回 429 → Hermes SDK 重试 3 次 × Hermes 应用层重试 3 次 = 最多 9 次 API 调用,每次调用都消耗 RPH(Requests Per Hour)配额。如果每个 Hermes 会话(CLI、Gateway、Cron)都独立重试,限流会指数级恶化。

解决方案:跨会话熔断器

Rate Guard 将限流状态写入共享文件 ~/.hermes/rate_limits/nous.json,所有会话在发起请求前检查该文件。文件内容通过原子写入(tempfile + rename)保证一致性:

state = {
    "reset_at": reset_at,       # 绝对时间戳
    "recorded_at": now,         # 记录时间
    "reset_seconds": reset_at - now  # 剩余秒数
}

# Atomic write: write to temp file + rename
fd, tmp_path = tempfile.mkstemp(dir=state_dir, suffix=".tmp")
with os.fdopen(fd, "w") as f:
    json.dump(state, f)
atomic_replace(tmp_path, path)

1. Reset 时间解析优先级

Rate Guard 从三个来源提取 reset 时间,优先级递减:

1. x-ratelimit-reset-requests-1h — 每小时 RPH 窗口(最有价值)

2. x-ratelimit-reset-requests — 每分钟 RPM 窗口

3. retry-after — 通用 HTTP 头

🔹 所有来源均不可用时,回退到 300 秒(5 分钟)默认冷却

2. 真伪限流鉴别

Nous Portal 背后有多个上游提供商(DeepSeek、Kimi、MiMo 等)。一个 429 可能意味着:

(a) 调用者自己的 RPM/RPH/TPM 桶耗尽 — 真正的限流

(b) 上游提供商对特定模型容量不足 — 瞬时问题,几秒后恢复

如果误判 (b) 为 (a),熔断器会阻塞所有 Nous 请求数分钟,即使调用者的账户完全健康。Rate Guard 通过两个信号鉴别:

def is_genuine_nous_rate_limit(
    *, headers, last_known_state
) -> bool:
    # Signal 1: current 429 response headers
    state = _parse_buckets_from_headers(headers)
    if _has_exhausted_bucket(state):
        return True
    # Signal 2: last-known-good state from previous
    # successful response
    if last_known_state is not None
       and _has_exhausted_bucket_in_object(last_known_state):
        return True
    return False  # treat as transient, no breaker trip

判断标准:任何桶 remaining == 0 且 reset 窗口 >= 60 秒。短于 60 秒的 reset 窗口被视为瞬态抖动(上游抖动、二级节流),不值得触发跨会话熔断器。

五、Usage Pricing:费用估算管线

usage_pricing.py(908 行)实现了完整的费用估算管线,覆盖 40+ 模型的价格数据。这是 Hermes 的计费路由解析器——不仅计算费用,还决定如何计算费用。

1. 计费路由解析

resolve_billing_route() 根据 provider + model + base_url 确定计费模式:

Provider Billing Mode 价格来源
openai-codex subscription_included $0(订阅含)
openrouter official_models_api /v1/models API
nous official_models_api /v1/models API
anthropic official_docs_snapshot 本地快照
custom/local unknown 无法估算

2. 官方文档快照定价

对于 Anthropic、OpenAI、Google、DeepSeek、Bedrock 等提供商,Hermes 维护了本地定价快照(_OFFICIAL_DOCS_PRICING 字典)。每个 PricingEntry 包含:

@dataclass(frozen=True)
class PricingEntry:
    input_cost_per_million: Optional[Decimal] = None
    output_cost_per_million: Optional[Decimal] = None
    cache_read_cost_per_million: Optional[Decimal] = None
    cache_write_cost_per_million: Optional[Decimal] = None
    request_cost: Optional[Decimal] = None
    source: CostSource = "none"
    source_url: Optional[str] = None
    pricing_version: Optional[str] = None

注意所有金额使用 Decimal 而非 float——避免浮点精度问题。价格以每百万 token 为单位存储,计算时除以 1000000。

3. 用量标准化

normalize_usage() 处理三种不同的 API 用量格式:

Anthropic:input_tokens/output_tokens/cache_read_input_tokens/cache_creation_input_tokens

Codex Responses:input_tokens 包含缓存 token,input_tokens_details.cached_tokens 分离它们

OpenAI Chat Completions:prompt_tokens 包含缓存 token,prompt_tokens_details.cached_tokens 分离它们

标准化后输出 CanonicalUsage 数据类,统一为 input_tokens、output_tokens、cache_read_tokens、cache_write_tokens、reasoning_tokens 五个桶。

4. 费用估算结果

estimate_usage_cost() 返回 CostResult,包含四个状态:

actual:精确费用(来自 provider API)

estimated:估算费用(来自本地快照或 models API)

included:订阅包含(Codex 等)

unknown:无价格数据

六、错误分类:计费耗尽 vs 瞬时限流

error_classifier.py 中的错误分类器是预算控制的关键环节。它必须准确区分计费耗尽(需要切换 provider 或充值)和瞬时限流(等待即可恢复)。

计费耗尽模式_BILLING_PATTERNS):

_BILLING_PATTERNS = [
    "insufficient credits",
    "insufficient_quota",
    "insufficient balance",
    "credit balance",
    "credits exhausted",
    "no usable credits",
    "top up your credits",
    "payment required",
    "billing hard limit",
    "exceeded your current quota",
    "account is deactivated",
    "plan does not include",
    "out of funds",
    "run out of funds",
]

模糊模式_USAGE_LIMIT_PATTERNS)需要二次判断:

🔹 匹配 _USAGE_LIMIT_PATTERNS(如 "usage limit"、"quota")

🔹 同时匹配 _USAGE_LIMIT_TRANSIENT_SIGNALS(如 "try again"、"retry")→ 判定为瞬时限流

🔹 否则 → 判定为计费耗尽

分类结果驱动不同的恢复策略:

分类 恢复策略
billing 立即切换 provider,不重试
rate_limit 退避等待后重试,再失败则切换
overloaded 退避等待后重试
server_error 直接重试

七、工具循环护栏:防止 Agent 空转

即使预算计数器正常工作,Agent 仍可能陷入工具调用死循环——反复执行同一个失败的工具,消耗迭代预算却不产生进展。Hermes 的 tool_loop_guardrails 提供了两层防护:

软警告层(默认开启):

🔹 exact_failure:同一工具完全相同的失败出现 2 次 → 追加引导信息

🔹 same_tool_failure:同一工具不同参数的失败出现 3 次 → 追加引导信息

🔹 idempotent_no_progress:幂等工具连续 2 次无进展 → 追加引导信息

硬停止层(默认关闭,Cron/自主会话推荐开启):

🔹 exact_failure:5 次 → 电路熔断,终止 Agent

🔹 same_tool_failure:8 次 → 电路熔断

🔹 idempotent_no_progress:5 次 → 电路熔断

护栏状态在每轮对话开始时通过 agent._tool_guardrails.reset_for_turn() 重置,确保计数按对话轮次而非全局累计。

💡 配置建议

对于 Cron 定时任务或自主运行的 Agent,建议开启硬停止:tool_loop_guardrails.hard_stop_enabled: true。这样可以防止 Agent 在无人值守时消耗完整的迭代预算。

八、配置项一览

配置项 默认值 说明
agent.max_turns 60 父 Agent 最大迭代次数
delegation.max_iterations 50 子 Agent 最大迭代次数
tool_loop_guardrails.hard_stop_enabled false 工具循环硬熔断
credits_notices true 积分状态通知
display.show_cost false 状态栏显示费用
delegation.max_spawn_depth 1 委托树深度上限(1-3)
code_execution.max_tool_calls 50 程序化执行最大工具调用

九、总结:四层预算防御体系

Hermes 的预算控制不是单一机制,而是四道防线组成的完整体系:

层级 组件 防护目标
L1 迭代限制 IterationBudget 防止单次对话无限迭代
L2 积分监控 CreditsTracker 实时余额感知与预警
L3 限流熔断 RateGuard 跨会话限流协调
L4 循环检测 ToolLoopGuardrails 工具调用死循环熔断

这个体系的核心设计哲学是:预算控制不是事后补救,而是内建在 Agent 运行循环中的第一公民。从 IterationBudget 的 consume/refund 到 CreditsTracker 的 escalating notices,从 RateGuard 的跨会话协调到错误分类器的 billing/rate_limit 鉴别,每一层都针对一个具体的失控场景提供了精确的防护。

下一讲(第 15 讲)System Prompt 怎么动态构建、Prompt Caching 如何节省 token 成本。

第 14 讲完

Hermes Agent 源码解析系列 · 2026-06-27

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