<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[monkeyboy_tech的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/monkeyboy_tech</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; monkeyboy_tech]]></copyright><item><title><![CDATA[从main方法来看Kyuubi的启动]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/167804809</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/167804809</guid><author>monkeyboy_tech</author><pubDate>Tue, 13 Oct 2026 14:26:04 +0800</pubDate><description><![CDATA[本文以Kyuubi 1.9.2为例，解析其服务启动流程。通过bin/kyuubi start脚本定位到主类org.apache.kyuubi.server.KyuubiServer，分析main方法：打印版本信息、注册信号处理器、加载默认配置，随后调用startServer启动服务。服务初始化时嵌入Kinit、GC、Metrics等辅助服务，并根据配置启动Backend（会话管理）与Frontend（请求接入）服务，最终启动服务器。整个过程体现了Kyuubi的模块化设计与高可用支持。]]></description><category></category></item><item><title><![CDATA[Apache Kyuubi中的扩展配置]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/166573240</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/166573240</guid><author>monkeyboy_tech</author><pubDate>Thu, 24 Sep 2026 10:29:26 +0800</pubDate><description><![CDATA[Kyuubi作为企业级大数据网关，不仅支持分布式多租户，还通过可插拔插件提供增强功能。核心插件KyuubiSparkSQLExtension实现自定义SQL语法（如ZORDER）、小文件合并等优化；RangerSparkExtension则集成Ranger实现细粒度权限控制，支持行级、列级数据安全。两者均基于Spark扩展机制，配置灵活，可按需启用或排除规则，显著提升查询性能与安全性。]]></description><category></category></item><item><title><![CDATA[Apache kyuubi中的 Ranger授权]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/166350199</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/166350199</guid><author>monkeyboy_tech</author><pubDate>Tue, 22 Sep 2026 11:08:40 +0800</pubDate><description><![CDATA[Kyuubi作为企业级大数据网关，结合Apache Ranger实现细粒度权限控制与数据脱敏。通过配置spark.sql.extensions=org.apache.kyuubi.plugin.spark.authz.ranger.RangerSparkExtension，Kyuubi在Spark上注入多条优化规则（如RuleApplyRowFilter、RuleApplyDataMaskingStage0等），在Analyzer和Optimizer阶段动态校验用户权限，基于AccessResource与A]]></description><category></category></item><item><title><![CDATA[底层分析:hermes Agent 的 Self-Improving 是怎么实现的]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/161960921</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/161960921</guid><author>monkeyboy_tech</author><pubDate>Sat, 13 Jun 2026 20:39:57 +0800</pubDate><description><![CDATA[本文分析了Hermes Agent的自我进化机制，重点关注其自动生成skill的能力。通过代码解析，发现当对话涉及多次工具调用时，系统会将这些调用沉淀为SOP形式的skill，并写入Memory持久化存储。文章追踪了程序入口（hermes_cli.main），详细介绍了会话管理机制（包括内存会话历史、SQLite持久化存储和sessionId全局标识），并解析了AIAgent核心类如何通过工具加载和记忆管理实现智能对话。项目采用插件系统支持自定义扩展，并通过多线程运行agent处理流程，展现了AI Agen]]></description><category></category></item><item><title><![CDATA[Spark中怎么做Spark canonicalize归一化]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/161824715</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/161824715</guid><author>monkeyboy_tech</author><pubDate>Tue, 09 Jun 2026 11:40:12 +0800</pubDate><description><![CDATA[本文分析了Spark 4.0在查询计划缓存过程中对逻辑计划进行归一化处理的实现机制。主要包含两个层面：用户可通过SparkSessionExtensions自定义归一化规则；Spark内部通过doCanonicalize方法实现归一化，包括对子节点、Alias表达式和列引用进行统一处理（如标准化ExprId、表达式名称等）。通过这种归一化处理，Spark能够判断不同但语义相同的查询计划是否等价，从而决定是否复用已缓存的InMemoryRelation，避免重复计算。文章还通过示例展示了不同会话中相同语义查询]]></description><category></category></item><item><title><![CDATA[Starrocks BE 在Mac编译以及遇到的问题解决]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/161504938</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/161504938</guid><author>monkeyboy_tech</author><pubDate>Fri, 29 May 2026 08:29:32 +0800</pubDate><description><![CDATA[本文介绍了在MacOS系统上通过Docker容器编译StarRocks 4.x时遇到的问题及解决方案。由于StarRocks不支持直接Mac编译，作者采用挂载源码到Docker容器中的方式，分别尝试了CentOS和Ubuntu两种Linux环境。在CentOS中遇到了thrift版本不一致、内存不足和链接器问题，最终因CentOS停止维护而放弃。改用Ubuntu环境后，虽然解决了thrift版本问题并采用lld链接器，但仍遇到条件编译错误，原因是aarch64架构与x86_64的条件编译不匹配。最终通过修改]]></description><category></category></item><item><title><![CDATA[Prompt Engineering 和 Context Engineering 和 Harness Engineering 区别和联系]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/161392796</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/161392796</guid><author>monkeyboy_tech</author><pubDate>Mon, 25 May 2026 14:28:35 +0800</pubDate><description><![CDATA[AI行业快速发展，各类智能体(agent)不断涌现，其核心原理仍基于大模型基模和三大基础工程：Prompt Engineering（告诉模型做什么）、Context Engineering（优化上下文处理）、Harness Engineering（确保模型可控执行）。Prompt工程通过分层设计提升效率；Context工程解决上下文窗口限制问题；Harness工程则构建外部约束机制。随着基模能力增强，这三者的复杂度会降低，但深入理解模型边界仍是掌控智能体的关键。企业应聚焦这三大工程而非盲目追逐基模迭代。]]></description><category></category></item><item><title><![CDATA[Nanobot 从 Channel 消息处理看python协程的使用]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/160181076</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/160181076</guid><author>monkeyboy_tech</author><pubDate>Wed, 15 Apr 2026 14:16:32 +0800</pubDate><description><![CDATA[asyncio.run_coroutine_threadsafe(coro, loop) 用于在主线程或其他工作线程中安全地提交协程到异步事件循环（loop）中执行的函数。它不会自动将新循环设置为当前线程的默认循环，主要用于需要手动管理循环、在不同线程中创建独立循环，或避免默认循环策略限制的场景。它将协程（coroutine）封装为任务（Task）对象，并立即调度该任务在事件循环中并在后台执行，从而允许在等待其完成的同时执行其他代码。用于将指定的事件循环实例（loop）设置为当前OS线程的默认事件循环。]]></description><category></category></item><item><title><![CDATA[Nanobot 从 AgentLoop 启动看怎么驱动大模型运行]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/160154443</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/160154443</guid><author>monkeyboy_tech</author><pubDate>Tue, 14 Apr 2026 19:07:53 +0800</pubDate><description><![CDATA[：发空内容，metadata 带 _stream_end、_resuming（供 UI 区分是彻底结束还是工具轮次中间暂停）。on_stream(delta)：把模型增量以 OutboundMessage 发出，metadata 带 _stream_delta: True。这个是所有Agent驱动的主循环方法，也是消息传递的主入口，它从 MessageBus 拉入站消息，再异步分发到真正的处理逻辑，用来进行渲染，支持颜色、表格、面板、语法高亮和 Markdown ，以更好的进行个性化的展示。]]></description><category></category></item><item><title><![CDATA[Nanobot的system_prompt示例]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/160146601</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/160146601</guid><author>monkeyboy_tech</author><pubDate>Tue, 14 Apr 2026 14:10:13 +0800</pubDate><description><![CDATA[【代码】Nanobot的system_prompt示例。]]></description><category></category></item><item><title><![CDATA[Nanobot 从 gateway 启动命令来看个人助理Agent的实现]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/160020611</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/160020611</guid><author>monkeyboy_tech</author><pubDate>Fri, 10 Apr 2026 13:37:34 +0800</pubDate><description><![CDATA[本文分析了nanobot gateway命令的实现细节。该命令用于启动AI助手网关进程，采用Typer、Rich等现代CLI工具构建交互界面。核心功能包括： 参数处理：支持自定义端口、工作区路径、日志级别和配置文件路径 核心组件初始化： 消息总线(MessageBus)管理进程内消息队列 根据配置实例化LLM Provider 会话管理器(SessionManager)实现对话持久化 定时任务服务： 通过CronService管理定时任务 任务触发时构建消息并调用AI处理 支持结果通知和响应评估 系统采用a]]></description><category></category></item><item><title><![CDATA[Nanobot 从onboard启动命令来看个人助理Agent的实现]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159952881</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159952881</guid><author>monkeyboy_tech</author><pubDate>Wed, 08 Apr 2026 11:19:08 +0800</pubDate><description><![CDATA[Nanobot是一款基于Typer、Rich、Questionary等工具的轻量级AI助手CLI工具。其onboard命令用于初始化配置和工作区，支持通过参数或交互式向导设置配置文件路径、工作区目录等。配置处理采用pydantic进行数据验证，向导界面利用Questionary和prompt_toolkit实现交互式操作，支持配置LLM提供商、聊天通道等功能。该命令会根据用户选择决定是否保存配置，提供灵活且美观的命令行体验。]]></description><category></category></item><item><title><![CDATA[Nanobot 轻量级的个人AI助手]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159921700</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159921700</guid><author>monkeyboy_tech</author><pubDate>Tue, 07 Apr 2026 14:35:12 +0800</pubDate><description><![CDATA[Nanobot是一款超轻量级的个人AI助手，灵感来源于OpenClaw,该项目实现了从飞书 钉钉等聊天应用发送命令到Nanbot，从而实现用户只需要通过 手机操作就能让大模型干活的理想生活。该项目也实现了怎么用Tool以及MCP服务以及Skill的能力，于此同时也实现了如何在上下文爆炸的情况如何进行有效的压缩。通过这个项目能够让想要了解和认知大模型能干什么,怎么做，以及它的边界在哪里提供了一系列的思路。至此，可以在feishu上给Nanobot发送消息，并进行。对于deepseek模型，可以去。]]></description><category></category></item><item><title><![CDATA[Spark DynamicJoinSelection 规则根据AQE统计信息动态调整Join策略]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159426139</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159426139</guid><author>monkeyboy_tech</author><pubDate>Tue, 24 Mar 2026 14:36:29 +0800</pubDate><description><![CDATA[摘要：本文分析了Spark 3.5.3中AQE框架基于运行时Shuffle统计信息动态调整join策略的三种优化场景。当检测到大量空分区时，添加NO_BROADCAST_HINT避免广播负优化；当分区数据较小时，添加PREFER_SHUFFLE_HINT选择更高效的hash join；若同时满足则直接采用SHUFFLE_HASH策略。这些优化仅在用户未手动指定HINT时触发，通过智能调整join策略提升执行效率。决策流程通过检查子节点的Shuffle统计信息，结合分区空置率和数据量大小进行判断。]]></description><category></category></item><item><title><![CDATA[从 SortExec 的排序来谈 Spark Tungsten 计划中的缓存友好特性]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159414440</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159414440</guid><author>monkeyboy_tech</author><pubDate>Tue, 24 Mar 2026 08:19:00 +0800</pubDate><description><![CDATA[Spark Tungsten（钨丝计划）通过缓存敏感计算优化排序性能，将排序键和指针存储在一起，优先比较排序键前缀（存储在连续内存的LongArray中），仅在必要时访问实际数据。支持Radix Sort和TimSort两种算法：前者直接排序8字节前缀（O(n)复杂度且缓存友好），后者在键相同时需访问数据（可能缓存未命中）。该优化利用了CPU缓存局部性原理，显著提升处理效率，但String类型因长度不定无法使用前缀比较器。核心思路是通过减少随机内存访问来提高CPU缓存命中率。]]></description><category></category></item><item><title><![CDATA[Parquet文件中的索引]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159288676</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159288676</guid><author>monkeyboy_tech</author><pubDate>Fri, 20 Mar 2026 19:52:29 +0800</pubDate><description><![CDATA[Parquet文件由RowGroup、ColumnChunk和Page三级结构组成，以&quot;PAR1&quot;魔数开头。数据区包含多个RowGroup，每个RowGroup包含多个列的数据块(ColumnChunk)，数据块又细分为多个Page。文件末尾的元数据区(Footer)记录了Schema、行数、列统计信息等关键元数据，采用Thrift格式序列化，并以4字节长度标记结尾。这种分层结构支持高效的列式存储和查询优化。]]></description><category></category></item><item><title><![CDATA[Spark的cache和checkpoint的区别--从代码和原理级别分析]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159201962</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159201962</guid><author>monkeyboy_tech</author><pubDate>Wed, 18 Mar 2026 10:45:03 +0800</pubDate><description><![CDATA[本文基于Spark 3.5.3分析cache和checkpoint机制的区别。在Driver端，cache仅做标记配置，实际缓存操作发生在Executor端；而checkpoint会在Driver端执行实际checkpoint操作并清除血缘关系。两者数据可相互读取：checkpoint优先使用缓存数据，cache优先使用checkpoint数据。cache数据在Executor退出或RDD被GC时清除，checkpoint数据可通过配置在RDD被GC时清理。执行过程中，任务会优先查找本地或远程BlockMa]]></description><category></category></item><item><title><![CDATA[StarRocks的内部存储 segement 杂谈]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159006749</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/159006749</guid><author>monkeyboy_tech</author><pubDate>Fri, 13 Mar 2026 12:24:03 +0800</pubDate><description><![CDATA[StarRocks的Segment采用列式存储与多级索引设计：列数据独立存储为多个Page，支持智能编码和LZ4压缩。多级索引包括Ordinal（行号定位）、ZoneMap（范围过滤）、Bitmap（等值）和BloomFilter（高基数过滤）。通过排序键快速定位数据：首先利用ZoneMap找到对应Segment，再通过前缀索引和Ordinal索引定位Page，最终计算行号偏移获取数据。Segment文件包含数据页、列索引、短键索引和元数据Footer。此外，删除向量通过Ordinal索引关联行号，实现高效]]></description><category></category></item><item><title><![CDATA[Rust 的 mod(模块) 说明]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/158936637</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/158936637</guid><author>monkeyboy_tech</author><pubDate>Wed, 11 Mar 2026 23:45:15 +0800</pubDate><description><![CDATA[Rust中的模块(Module)是代码组织的基本单元。创建模块有三种方式：1)直接在代码中使用mod关键字定义内联模块；2)使用单独文件作为模块；3)通过包含mod.rs的目录定义模块，其中mod.rs用于声明子模块并控制可见性。默认情况下所有项都是私有的，需要使用pub关键字来公开模块内容。通过use语句可以导入模块中的项，而pub use可以重新导出内容供外部使用。]]></description><category></category></item><item><title><![CDATA[Starrocks 主键查询和分区裁剪/bucket裁剪]]></title><link>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/158844673</link><guid>https://blog.youkuaiyun.com/monkeyboy_tech/article/details/158844673</guid><author>monkeyboy_tech</author><pubDate>Mon, 09 Mar 2026 15:03:32 +0800</pubDate><description><![CDATA[本文介绍了StarRocks中的分区裁剪和tablet裁剪机制。分区裁剪通过过滤条件与分区信息求交集，剔除不相关分区；tablet裁剪则基于主键哈希计算定位特定tablet。两者配合显著减少了数据扫描范围，提升了查询效率。文章详细分析了Range分区和List分区的裁剪逻辑，并解释了哈希分桶算法的实现细节，包括CRC32哈希计算和bucket定位方法。这些优化技术共同构成了StarRocks高效查询处理的关键组成部分。]]></description><category></category></item></channel></rss>