执行计划跑偏,你了解背后的根因吗?

AI编程助手任务执行引擎:PIR方法论与文件系统记忆实践 在AI辅助编程领域,大语言模型(LLM)的上下文窗口限制和任务规划能力不足是制约其处理复杂开发任务的主要瓶颈。通过引入工程化的任务管理方法论,可以显著提升AI编码的可靠性和可扩展性。PIR(规划-迭代-解决)循环提供了一种结构化的工作流,将复杂任务分解为可验证的原子化步骤,而文件系统作为外部记忆体则突破了上下文长度的限制,实现了任务状态的持久化存储。这种技术方案的核心价值在于将AI的代码生成能力与软件工程的最佳实践相结合,使AI助手能够像人类工程师一样处理多文件、跨模块的复杂开发场景,如系统重构、新功能模块 阅读详情

关于作者:

Nickyoung,数据库领域从业者。PostgreSQL ACE,IvorySQL 专家顾问委员会成员。

公众号“👉PostgreSQL 运维之道”。

还在以最终 cost 来判断计划是否最优?那就大错特错了!!!本篇老杨和大家一起抽丝剥茧,从源码入手分析计划跑偏的原因。

问题现象

一个简单查询运行 240s,从执行计划看耗时主要在 nestloop join,Outter 扫描了 2293 行,inner loop 扫描了 2293 次,耗时 103.1 * 2293 = 236408ms

test=> explain analyze select count(*),zone_id from instance_info where instanceid in (SELECT instanceid
FROM
    instance_info
wherevisible = 1
GROUPBY
    instanceid
HAVING
    COUNT(DISTINCT zone_id) > 1) andvisible = 1groupby zone_id;
                                                                   QUERY PLAN                                                                    
-------------------------------------------------------------------------------------------------------------------------------------------------
 GroupAggregate  (cost=232.45..232.47 rows=1 width=12) (actual time=244941.317..244942.725 rows=4.00 loops=1)
   Group Key: instance_info.zone_id
   Buffers: shared hit=3
   ->  Sort  (cost=232.45..232.45 rows=1 width=4) (actual time=244940.890..244941.590 rows=4588.00 loops=1)
         Sort Key: instance_info.zone_id
         Sort Method: quicksort  Memory: 193kB
         Buffers: shared hit=3
         ->  Nested Loop  (cost=200.01..232.44 rows=1 width=4) (actual time=124.292..244935.769 rows=4588.00 loops=1)
               Join Filter: ((instance_info.instanceid)::text = (instance_info_1.instanceid)::text)
               Rows Removed by Join Filter: 20185277
               ->  Foreign Scan  (cost=100.01..116.12 rows=1 width=146) (actual time=25.421..137.939 rows=2293.00 loops=1)
                     Relations: Aggregate on (instance_info instance_info_1)
               ->  Foreign Scan on instance_info  (cost=100.00..116.30 rows=2 width=150) (actual time=1.290..103.183 rows=8805.00 loops=2293)
 Planning:
   Buffers: shared hit=173
 Planning Time: 1.516 ms
 Execution Time: 244953.762 ms
(17 rows)

test=>

一般遇到这种情况,肯定是尝试“关闭”nestloop 试试看,走了 Hashjoin 后执行耗时仅 287ms,性能提升快 1000 倍。

test=> set enable_nestloop tooff;
SET
test=> explain analyze select count(*),zone_id from instance_info where instanceid in (SELECT instanceid
FROM
    instance_info
wherevisible = 1
GROUPBY
    instanceid
HAVING
    COUNT(DISTINCT zone_id) > 1) andvisible = 1groupby zone_id;
                                                                  QUERY PLAN                                                                  
----------------------------------------------------------------------------------------------------------------------------------------------
 GroupAggregate  (cost=232.44..232.46 rows=1 width=12) (actual time=273.475..274.907 rows=4.00 loops=1)
   Group Key: instance_info.zone_id
   Buffers: shared hit=3
   ->  Sort  (cost=232.44..232.45 rows=1 width=4) (actual time=273.006..273.722 rows=4588.00 loops=1)
         Sort Key: instance_info.zone_id
         Sort Method: quicksort  Memory: 193kB
         Buffers: shared hit=3
         ->  Hash Join  (cost=216.13..232.43 rows=1 width=4) (actual time=160.901..271.843 rows=4588.00 loops=1)
               Hash Cond: ((instance_info.instanceid)::text = (instance_info_1.instanceid)::text)
               ->  Foreign Scan on instance_info  (cost=100.00..116.30 rows=2 width=150) (actual time=4.691..109.722 rows=8805.00 loops=1)
               ->  Hash  (cost=116.12..116.12 rows=1 width=146) (actual time=156.185..156.186 rows=2293.00 loops=1)
                     Buckets: 4096 (originally 1024)  Batches: 1 (originally 1)  Memory Usage: 144kB
                     ->  Foreign Scan  (cost=100.01..116.12 rows=1 width=146) (actual time=21.939..155.037 rows=2293.00 loops=1)
                           Relations: Aggregate on (instance_info instance_info_1)
 Planning Time: 0.242 ms
 Execution Time: 287.414 ms
(16 rows)

test=> 

为什么优化器走了效率更差的 nested loop?

统计信息不准?优化器代价计算偏差?

问题分析

从 nestloop 和 Hashjoin 对应 path 的最终 cost 来看

GroupAggregate  (cost=232.45…232.47)

GroupAggregate  (cost=232.44…232.46)

后者对应 path 最终的 startup_cost 和 total_cost 都要小,为什么优化器没有选择 Hashjoin 这条路径?

所以这里会有一个误区:老杨也曾以为优化器选择最优执行计划,肯定是生成每种路径后,比较最终的 cost,最终 cost 最小的为最优计划。

事实上在 add_path 生成路径的过程中,每个节点都会进行 cost 比较,可能采用 new_path,或者保留 old_path,或者都保留。比如说在生成 Joinpath 时,可能只保留了一种 JoinMethod 进入下一计划节点,生成最终执行计划。

01.png

那么这个案例中有没有可能是 Hashjoin 在 Joinpath 环节被“淘汰了”?

Nested Loop  (cost=200.01…232.44 rows=1 width=4)

Hash Join  (cost=216.13…232.43 rows=1 width=4)

从 cost 来看,两种路径的 cost 比较接近,由于之前研究过这里,我已经大概猜到问题的原因了。

在 add_path 生成路径时,首先使用模糊 cost 比较来决定路径的去留。

cost 模糊比较函数为compare_path_costs_fuzzily
[1]
:

path1 即 new_path 为 HashPath,path2 即 old_path 为 NestPath。

  • 首先比较两条路径的 disabled_nodes。

enable_nestloop 和 enable_hashjoin 均为 on,所以 disabled_nodes 均为 0。

  • 若未果,再比较 total_cost,并通过模糊系数将路径 cost 提升 1%,和另外一条路径比较。

    232.43 > 232.44 _ 1.01 和 232.44 > 232.43 _ 1.01 均不成立,total_cost 模糊近似。

  • 若未果,再比较 startup_cost,并通过模糊系数将路径 cost 提升 1%,和另外一条路径比较。

    216.13 > 200.01 * 1.01 所以返回 COSTS_BETTER2。

经过比较确定两条路径中更优路径为 NestPath。 那么 HashPath 就被淘汰了,然后进行后续 SORT 和 AGG 节点的 path 生成。

static PathCostComparison
compare_path_costs_fuzzily(Path *path1, Path *path2, double fuzz_factor)
{
#define CONSIDER_PATH_STARTUP_COST(p)  \
 ((p)->param_info == NULL ? (p)->parent->consider_startup : (p)->parent->consider_param_startup)

/* Number of disabled nodes, if different, trumps all else. */
if (unlikely(path1->disabled_nodes != path2->disabled_nodes))
 {
if (path1->disabled_nodes < path2->disabled_nodes)
   return COSTS_BETTER1;
else
   return COSTS_BETTER2;
 }

/*
  * Check total cost first since it's more likely to be different; many
  * paths have zero startup cost.
  */
if (path1->total_cost > path2->total_cost * fuzz_factor)
 {
/* path1 fuzzily worse on total cost */
if (CONSIDER_PATH_STARTUP_COST(path1) &&
   path2->startup_cost > path1->startup_cost * fuzz_factor)
  {
   /* ... but path2 fuzzily worse on startup, so DIFFERENT */
   return COSTS_DIFFERENT;
  }
/* else path2 dominates */
return COSTS_BETTER2;
 }
if (path2->total_cost > path1->total_cost * fuzz_factor)
 {
/* path2 fuzzily worse on total cost */
if (CONSIDER_PATH_STARTUP_COST(path2) &&
   path1->startup_cost > path2->startup_cost * fuzz_factor)
  {
   /* ... but path1 fuzzily worse on startup, so DIFFERENT */
   return COSTS_DIFFERENT;
  }
/* else path1 dominates */
return COSTS_BETTER1;
 }
/* fuzzily the same on total cost ... */
if (path1->startup_cost > path2->startup_cost * fuzz_factor)
 {
/* ... but path1 fuzzily worse on startup, so path2 wins */
return COSTS_BETTER2;
 }
if (path2->startup_cost > path1->startup_cost * fuzz_factor)
 {
/* ... but path2 fuzzily worse on startup, so path1 wins */
return COSTS_BETTER1;
 }
/* fuzzily the same on both costs */
return COSTS_EQUAL;

#undef CONSIDER_PATH_STARTUP_COST
}

debug 做下验证:

在生成 Joinpath 时,依次生成 MergePath、NestPath、HashPath 并进行 cost 模糊比较。

这里省去 MergePath 和 NestPath 的比较过程,NestPath 胜出。

当生成 HashPath 后,和 NestPath 比较 Total_cost 差异并未达到 1%。而进一步比较 startup_cost,明显差异大于 1%所以返回 COSTS_BETTER2,即 NestPath 胜出。

02.png

case COSTS_BETTER2:当前满足 outercmp == BMS_EQUAL 等条件,将 accept_new 置为 false.

03.png

accept_new 为 false,所以拒绝并且回收了 new_path,也就是 HashPath 被淘汰了。

04.png

经过 cost 精确比较,角逐出 cheapest_total_cost 和 cheapest_startup_cost 都为 NestPath。

05.png

最终,使用 best_path 去生成执行计划。

06.png

到这里,大家已经感觉到这个 cost 模糊比较有坑了吧,特别当两条路径的 cost 差别比较小,total_cost 或者 startup_cost 差别小于 1%时,可能会导致选错路径,最终生成了一个次优计划。

STD_FUZZ_FACTOR 默认就是 1.01,是不是可以把它调整得更小,这样就能更精准?但得慎重,这里也是优化器最核心的部分,弄不好真是牵一发则动全身。我觉得这个模糊比较目前看起来不太优雅,甚至后续版本有可能去除这里的逻辑,当然各位有想法的话可以发到社区和 Tom Lane 一众大佬 solo 下。

当然不能指望优化器一直都是最正确的,这是违背现实的,我之前也写了很多篇文章,多次分享相关的内容。

ok,那么为什么这个 case 走了不优计划,大家应该都清楚了。可能已经有朋友看出来还有点小问题,Foreign table 预估扫描 1 行,实际扫描了 2000+行,肯定是统计信息不准啊?

大家思考下 Foreign table 有统计信息吗?

sure,篇幅问题,我简述下原理:Foreign table 只是表映射,没有物理元组,它的统计信息,是通过 fdw 访问目的端表进行采集的。 但是只能手动挡,因为 Foreign table 没法进行 vacuum/autovacuum,需要手动 analyze 触发。

示例的表我做了下 analyze,更新了下统计信息,各种 path 的 cost 差异比较大,默认走了 Hashjoin。

因此,一定要定时收集外表统计信息,不然可能会拖垮整个实例。

小结

本篇我们分析了一例执行计划跑偏的根本原因,从中看得到当路径间的 cost 接近时(1%以下),可能在 add_path 时 cost 模糊比较中会选择次优路径,生成不优计划。

当然遇到这样的场景可以尝试各种 hint 手段去干预,不过可以考虑利用强化学习来实现自动化的 hint 干预,让数据库自动管理执行计划。我在之前的文章《AI4DB 试玩-Bao/Balsa 适配 PG18》中研究过类似的模型,并在 PCC2025 大会中做了分享。

当然专业的事要专业的人来做,我们的好友崔鹏博士已有相关的 AI4DB 课题研究和落地,将会在 HOW2026 大会中与大家见面,敬请期待。


HOW 2026 议题招募中

2026 年 4 月 27-28 日,由 IvorySQL 社区联合 PGEU(欧洲 PG 社区)、PGAsia(亚洲 PG 社区)共同打造的 HOW 2026(IvorySQL & PostgreSQL 技术峰会) 将再度落地济南。届时,PostgreSQL 联合创始人 Bruce Momjian 等顶级大师将亲临现场。

自开启征集以来,HOW 2026 筹备组已感受到来自全球 PostgreSQL 爱好者的澎湃热情。为了确保大会议题的深度与广度,我们诚邀您在 2026 年 2 月 27 日截止日期前,提交您的技术见解。

投递链接:https://jsj.top/f/uebqBc

ChatGPT提示工程30条核心指令:从跑偏到精准的底层语法 提示工程(Prompt Engineering)是人与大语言模型高效协作的基础技术,其本质是通过结构化指令调控模型的注意力机制、推理路径与输出约束。它并非玄学技巧,而是基于认知负荷理论、信息压缩原理和事实锚定机制的一套可复用工程方法。掌握关键提示结构,能显著抑制幻觉、提升事实准确率、保障格式一致性,并在会议纪要、法律审查、文案润色等高频办公场景中实现一次通过率跃升与人工耗时锐减。本文聚焦经企业实测验证的30条高复用性提示模板,覆盖锚定、结构、校验三层逻辑,特别强调角色定义、步骤拆解、依据溯源等核心热词所代表 阅读详情

相关推荐

Claude Code工程化实践:计划先行、指令预算与TDD验证

AI编程助手不是代码生成器,而是需要工程纪律约束的协作者。其核心原理在于通过结构化决策压缩降低概率衰减风险,利用指令预算管理保障关键规则持续生效,并借助TDD构建不依赖上下文的外部验证闭环。技术价值体现在显著提升单次任务成功率、减少返工与上下文污染、强化团队协作一致性。典型应用场景包括API重构、ORM迁移、安全敏感模块开发及前端UI像素级实现。本文聚焦Claude Code在真实生产环境中的三大支柱:计划先行机制、CLAUDE.md分层预算控制、以及测试驱动的外部验证体系。

weixin_30660027的博客 361

终端智能体任务对齐:从概念到实践,解决AI助手“跑偏”难题

任务对齐是智能体(Agent)领域的核心概念,它关注智能体输出的动作序列是否与用户期望的任务目标精确匹配。其原理在于通过规划-执行-观察的循环架构,结合安全检查和状态管理,确保智能体行为既无冗余也无缺失。这一技术的价值在于提升AI系统的可靠性和用户体验,是实现智能体从“能跑通”到“能交付”的关键。在应用场景上,任务对齐尤其适用于终端(CLI)环境下的自动化运维、部署脚本以及AI编码助手等工具,这些场景对操作的精确性和安全性要求极高。本文聚焦于终端智能体常见的“指令理解偏差”问题,深入探讨了如何利用基准测试(

weixin_30552811的博客 352

Forecast Values 在 SAP 物料主数据里的计划含义与 ABAP 落地思路

摘要: SAP物料主数据中的Forecast Values常被忽视,却直接影响MRP运算和供应链执行。它与历史消耗值(Consumption Values)不同,代表未来期间的预计消耗量,可由系统自动计算或人工修正。实际业务中,人工调整常用于应对季节性减产(如春节)或促销活动(如电商大促),以确保采购和生产计划准确。Forecast Values需与MRP类型、预测参数等主数据配合生效,技术实现涉及MAPR、PROP、PROW等表。建议通过差异分析报表追踪系统预测值与人工修正值,避免计划黑箱操作,同时注意不

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1443

一个可执行 Agent,到底是怎么跑起来的?从目标到执行的完整链路

很多人现在已经知道,Agent 不只是聊天。但更进一步,你还需要知道它到底是怎么工作的。一个可执行 Agent,不是收到任务就直接给答案,而是会沿着“目标、边界、计划、工具、反馈、验证”这条链路,一步步把任务推进到可交付。这条链路越完整,Agent 就越像一个真正能干活的系统。链路缺得越多,它就越像一个会说但不一定会做的模型界面。💬 如果你愿意,我也可以继续把这条执行链路整理成一个更容易复用的 Agent 工作流结构图。📚 完整学习路径:GitHub 搜索👆 点击关注,持续更新 Agent 系列。

爱猫的小学森 471

Autoware.universe部署03:与Carla(二进制版)联调

本文介绍了 Autoware.universe 与 Carla 二进制版的联调过程。Autoware.universe 是一个开源的自动驾驶软件平台,而 Carla 则是一个用于自动驾驶仿真的开源工具。将这两者联调起来可以在仿真环境中测试和验证 Autoware.universe 的功能和性能,为自动驾驶系统的开发和测试提供有力支持。

zardforever123的博客 7371

iStore增强插件 如何重塑家庭网络与存储体验

本文深入解析了iStore增强插件如何重塑家庭数字生活体验。它通过集成智能流控、一键式文件共享、媒体服务器及智能家居网关等功能,将复杂的网络配置、存储管理与设备协同简化为图形化操作,有效解决了家庭网络卡顿、数据割裂与使用门槛高等核心痛点,让普通用户也能轻松打造高效、稳定、安全的家庭数字中枢。

prometheus9mon的博客 651

YashanDB|执行计划突然变差?小心统计信息时间戳不一致!

某局点在使用 YashanDB 时,出现了 CPU 长时间 100% 的情况,业务受影响严重。经过分析发现,根源是某些 SQL 执行计划发生变化,背后竟是统计信息中的 analyze time 不一致惹的祸!观察到 SQL 执行计划中,sub_account_id 的选择性非常低(实际数据分布极稀疏);在现网中,客户通过将错误索引设为 invisible,成功规避了错误执行计划。或者刷新列统计信息,确保 hist_head$ 与 tab$ 中时间一致;时间戳不一致,会导致优化器忽略某些信息,使用默认值。

2501_91591875的博客 418

别再到处找模板了!手把手教你用Vue3+Element Plus搭建一个‘能跑起来’的管理后台原型

本文详细介绍了如何利用Vue3和Element Plus在72小时内快速搭建一个功能完整的管理后台原型。从环境准备到项目获取、依赖安装、原型定制、数据模拟以及构建优化,手把手教你打造一个可直接演示的后台系统,特别适合创业者快速验证产品逻辑。

weixin_26854555的博客 183

AIOPS自治运维实战:从异常检测到根因定位的架构设计与避坑指南

在运维领域,异常检测与根因定位是保障系统稳定性的核心技术。异常检测通过分析监控数据识别系统偏离正常状态的行为,其原理通常基于统计分析、机器学习或深度学习模型,对时序数据进行模式识别与偏差度量。根因定位则是在异常发生后,通过拓扑分析、因果推断等方法,快速定位故障源头,是故障恢复的关键。这些技术的核心价值在于将运维从被动响应转向主动预防,大幅降低平均修复时间(MTTR),提升系统可用性。在实际应用场景中,它们构成了AIOPS(智能运维)的智能大脑,是实现运维自动化的基础。本文聚焦于AIOPS的自治运维与可验证进

weixin_30855099的博客 412

微信聊天记录数据库解密实战:从WCDB到sqlcipher4的关键步骤解析

本文详细解析了微信桌面版聊天记录数据库的解密实战过程。通过逆向分析,定位了微信从WCDB框架到sqlcipher4加密的关键步骤,并成功提取了数据库密钥。文章重点介绍了如何通过动态调试、字符串定位等方法,追踪并验证sqlcipher4的加密密钥,最终实现对加密数据库文件的解密操作,为安全研究和数据恢复提供了技术参考。

weixin_29322553的博客 1071

风控IV、AUC、KS python计算代码

df_temp:数据集,Y:是否逾期标签,feas_list:需要计算IV的 变量。2、 按月和不同Y 下的 IV计算。

暮雨听轩的专栏 1618

LangChain智能体核心机制拆解:从零构建自主任务执行引擎

大语言模型(LLM)作为当前AI应用的核心,其强大的理解和生成能力为自动化任务处理提供了可能。然而,LLM本身缺乏执行外部操作、访问实时信息或处理结构化数据的能力。为了解决这一局限,智能体(Agent)架构应运而生,它通过将LLM的推理能力与专用工具(Tools)相结合,实现了从“思考”到“行动”的闭环。其核心原理在于设计一个决策-执行循环:智能体解析用户指令和上下文,规划步骤并选择合适工具;工具作为具体功能单元执行操作;执行器(Executor)则负责协调整个流程,管理迭代并处理结果。这种架构的技术价值在

weixin_30606461的博客 451

网络攻防实验——网络监听

利用CAIN实现ARP监听。

Trieyes_of_feng的博客 3197

多智能体LLM系统零回放调试:基于知识的轨迹分析与根因定位

在复杂软件系统和分布式应用中,调试与故障诊断是保障系统稳定性的关键技术。传统调试方法依赖过程回放与日志追踪,但在非确定性的大语言模型多智能体协作场景下,复现问题变得异常困难。基于知识的调试方法通过将系统交互轨迹结构化,结合任务领域知识、智能体行为模型与交互协议,构建静态分析框架,实现无需回放的根因定位。其技术价值在于显著提升复杂系统调试效率,并能随智能体规模扩展。该方法适用于自动化工作流、协同创作工具等场景,为开发者提供了精准定位多智能体LLM交互偏差的工程实践方案,有效应对轨迹分析与知识推理的挑战。

weixin_30301449的博客 414

损失函数大汇总(四十五)(clDice Loss附公式推导与代码)

clDice Loss是一种针对细长结构分割任务的拓扑保持损失函数,通过比较预测区域和真实区域的中心线重叠情况来评估分割质量。与传统Dice Loss关注区域重叠不同,clDice Loss重点考察连通性和骨架拓扑结构,能有效避免血管断裂、分支错误连接等问题。该损失函数包含两个核心指标:预测骨架在真实区域中的覆盖比例(Topology Precision)和真实骨架被预测区域覆盖的比例(Topology Sensitivity),通过调和平均得到最终评估值。由于传统骨架提取算法不可导,实际实现采用可微的so

悦学共鸣,温柔以待,汇聚光芒,共同成长 452

Power domain 划分该如何下手

假如PD1比PD3更always on的话,我们只需要插入普通buffer即可,因为PD3 on,PD1也肯定是ON,PD1 off,PD3肯定时off,PD1能cover PD3的电源情况,因此使用普通buffer也可,但是处于省电角度,我们还是使用AO buffer;在我们做多power domain时,在切分power domain时,需要谨慎,稍有不慎,就会出现congestion以及timing问题,那问题来了,我们在切分power domain时有什么考究么,今天小编就和大家一起讨论讨论。

芯冰乐 207

AutoGPT关卡设计建议AI助手

AutoGPT标志着AI从被动响应迈向自主任务驱动的新阶段。通过‘思考—行动—观察—反馈’闭环,结合任务分解、工具调用与长期记忆,它能独立完成复杂目标。尽管存在成本、安全与幻觉挑战,其在教育、科研和办公场景中已展现强大辅助潜力,预示着人机协作的全新范式。

weixin_31620365的博客 383

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

gsd-core 变更解读:`roadmap annotate-dependencies` 对 Plans-block 标题变体的完整匹配与 Wave 依赖标注修复

本文聚焦 gsd-core 仓库中编号为 #3794 的一次缺陷修复(对应存档变更集 `.changeset/archived/vivid-jaguars-tumble.md`):`roadmap annotate-dependencies` 命令此前只能识别 `Plans:` 后紧跟空行的 Plans-block,导致 `Plans: 2 plans`、`**Plans:** 2 plans`

gitblog_00322的博客 369

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

AI时代,那些藏在安全背后的数学理论

AI执行系统的安全挑战需要超越传统正确率指标。当AI从信息处理转向现实操作,错误将带来不可逆后果(如资金损失、数据删除)。本文提出七个关键视角:1)风险=概率×损失,罕见大错比高频小错更危险;2)历史无事故不等于零风险;3)极端场景错误往往代价最大;4)多人审批可能重复同一错误;5)模型置信度≠现实安全概率;6)最后防线应保持简单刚性;7)安全设计需限制错误扩散距离。真正的安全系统不追求完美正确率,而是构建能阻断最坏结果的防御机制,在承认错误必然性的前提下控制破坏范围。(149字)

Havenlon 创始人 Charles Wong,长期关注 AI 执行控制、物理信任边界、硬件安全与系统治理,记录一个新品类的形成过程。 186

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LLM智能体PIVOT框架:实现规划与执行的动态闭环优化

在人工智能领域,智能体(Agent)的规划与执行一致性是核心挑战。传统智能体采用开环规划,基于初始信息生成完整行动序列后便不再调整,这在动态、不确定的真实环境中极易失效。其原理在于缺乏实时反馈机制,导致规划与执行脱节。为解决这一问题,轨迹精炼技术应运而生,它通过引入执行反馈作为枢轴点,动态修正初始规划,实现了从开环到闭环的转变。这项技术的核心价值在于显著提升了智能体在复杂任务中的鲁棒性和适应性,尤其在自动化办公、复杂问题求解等场景中表现突出。本文探讨的PIVOT框架正是这一理念的工程实践,它通过构建“规划-

weixin_29035147的博客 286

TAPE框架:大模型Agent的规划与约束执行实战指南

在大语言模型(LLM)驱动的智能体(Agent)开发中,如何确保复杂任务被可靠、可控地执行是核心挑战。其原理在于通过结构化的工作流,将模型的生成能力约束在可预测的轨道内。这涉及到任务规划、工具调用与执行验证等关键技术。从技术价值看,这种约束执行机制能显著提升AI应用在生产环境中的稳定性和安全性,避免模型“幻觉”和不可控行为。其应用场景广泛,尤其适用于数据分析报告自动生成、跨平台内容发布等需要多步骤、高可靠性的流程自动化任务。本文探讨的TAPE框架,正是通过“工具引导的自适应规划”和“约束执行”两大支柱,并借

weixin_34234721的博客 364

Superpowers 安装与上手教程:3 步让 AI 编程代理学会专业开发流程

你大概遇到过这种场景:让 AI 编程代理开发一个功能,它二话不说直接开写,跑偏、漏测试、返工不断。Superpowers 是一套跨平台的智能体技能框架与软件开发方法论,装好之后,代理会自动遵循「构思 → 规划 → 测试驱动 → 审查 → 交付」的完整流程,而不是凭感觉写代码。 ## 选择平台并快速安装 Superpowers 以插件形式运行在你的编码工具(harness,即承载 AI 代理的

gitblog_01009的博客 1054

Agent 闭环才是真正的护城河:Anthropic “300 个 Agent“ 背后被忽视的秘密

微信公众号:数量不是壁垒,让 agent 自己验证、自己纠错的「闭环回路」才是。

星核AI实验室 522

收藏!从ReAct到Plan模式,带你彻底搞懂AI编程工具背后的架构思维

本文深入探讨了AI编程工具的架构差异,对比了ReAct和Plan模式的优劣。ReAct模式存在局部最优陷阱、错误累加和上下文污染等问题,而Plan模式通过全局DAG任务拆解、人机交互控制、沙箱执行和动态重规划等机制,实现了更稳定高效的复杂任务处理。文章强调,在实际应用中应结合业务场景,采用快慢双链路动态路由策略,合理运用Plan模式,并保持对生产环境的敬畏,从而充分发挥AI工具的价值。

python12345_的博客 590

FLUX.1-dev模型更新频率及维护计划

FLUX.1-dev采用Flow Transformer架构,实现24步内高质量图像生成,显著提升提示词理解与多概念组合能力。支持潜空间编辑、统一多模态对齐和高效推理,具备每季度大版本更新与长期维护计划,为开发者提供高自由度的可控生成体验。

weixin_42509513的博客 609

AI Agent智能体架构解析:从感知到执行的数字任务执行者

在人工智能领域,智能体(Agent)是一个核心概念,它指的是能够感知环境、进行决策并执行动作以实现目标的自主系统。其工作原理基于感知-规划-行动循环,通过集成大语言模型的自然语言理解能力与外部工具调用功能,实现从任务理解到自主执行的完整闭环。这一技术架构的价值在于将AI从被动问答升级为主动执行,显著提升了自动化任务处理的效率和范围。在实际应用场景中,AI智能体可广泛应用于自动化办公、智能客服、数据分析、行程规划等多个领域,通过模拟类似“外卖骑手”的完整工作流——即接收订单(理解需求)、规划路径(任务分解)、

weixin_30616969的博客 387
上一篇: PostgreSQL 18 RETURNING 增强:现代应用的重要进展
下一篇: 改变工作方式的 PostgreSQL 实用模式
IvorySQL
博客等级 码龄5年 745粉丝 566原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值