- 博客(129)
- 收藏
- 关注
原创 OpenClaw 技能系统机制深度解析
在 OpenClaw 中,技能(Skill)是一种让 AI 智能体获得特定能力的机制。与传统 MCP 或 Function Calling 的工具注册方式不同,OpenClaw 采用声明式设计——技能不是作为自定义工具注册给大模型,而是通过系统提示词让 AI 主动扫描和选择。OpenClaw 的技能系统采用了独特的声明式设计渐进式披露:系统提示词中只加载技能简介,按需通过 Read 工具读取完整内容静态快照:会话启动时生成技能列表,运行期间固定不变工作区隔离。
2026-03-27 10:15:42
232
原创 OpenClaw 上下文构建与存储机制源码解读
Session(会话)存储:消息历史的持久化与加载Memory(记忆)系统:跨会话知识的存储与检索上下文注入:两部分数据如何拼接到 LLM 请求中组件生命周期注入方式单会话运行时从 .jsonl 加载,注入 messagesMEMORY.md 等 Bootstrap 文件跨会话构建时注入到 System Promptmemory_search 结果按需运行时作为 tool_result 注入OpenClaw 通过分层存储 + 按需注入的架构,既保证了对话的连续性,又实现了跨会话知识的持久化。
2026-03-27 10:12:59
184
原创 OpenClaw 子智能体结果传递机制详解
OpenClaw 采用事件驱动的多智能体协作机制,子智能体通过 runSubagentAnnounceFlow 自动将执行结果推送给主智能体。核心流程包括:子智能体完成任务后触发通知,主智能体通过内部事件接收结果。系统支持嵌入式 PI 等待、通知重试和幂等性保证,并通过 sessions_spawn 工具创建子智能体。主智能体收到系统提示指导处理完成事件,区分 OpenClaw 子智能体和 ACP 外部会话的不同处理方式。该架构实现了高效的异步任务分发与结果收集。
2026-03-27 10:08:55
217
原创 OpenClaw 子智能体(Subagent)系统提示词深度解析
子智能体(Subagent)是 OpenClaw 框架中的重要概念,允许主智能体 spawn(生成)子代理来处理特定任务。子代理是临时性的,专注于分配的任务,完成后结果会自动上报给父代理。这种设计实现了任务的并行处理和层级化管理。
2026-03-27 10:00:13
162
原创 OpenClaw 智能体系统提示词深度解析
OpenClaw 是一个强大的 AI 智能体框架,提供了完整的系统提示词架构,用于构建可在沙箱环境中运行的 AI 助手。其提示词设计涵盖了工具使用、安全控制、记忆管理、会话管理等多个维度。以下是 OpenClaw 系统提示词构建的核心源码(TypeScript),已添加详细中文注释:完整提示词模板以下是完整的系统提示词模板(英文原版),其中包含占位符标记 :主提示词(中文版)占位符提示词详解以下是与主提示词中占位符对应的详细提示词,分为英文和中文两个版本:Prompt:说明: 技能部分要求
2026-03-27 08:37:08
226
原创 探索 PI 框架:构建 AI 编程代理的利器
本文介绍了Anthropic推出的PI框架(PI Framework),这是一个用于构建AI编程代理的开源框架。文章通过15个实战demo,系统讲解了PI框架的核心功能,包括Agent代理、Session会话管理和Tool工具使用等基础概念,以及会话持久化、分叉分支、上下文压缩等高级功能。PI框架提供了简洁的API设计,支持会话状态管理、多项目复用和AI行为干预,为开发者构建智能编程代理提供了完整解决方案。文中还提供了相关文档和示例代码的参考链接,帮助开发者快速上手。
2026-03-26 00:12:45
272
原创 使用枚举来实现单例模式
单例模式的实现方式有很多种,详情可以参考单例模式的7种实现方式及分析,从线程安全以及懒加载等角度来看其中第6种(double check)和第7种(静态内部类)的实现方式都是值得推荐并且应用广泛的,但是它们(包括第1到第7种)都有一个痛点,就是无法阻止通过反射或者序列化来破解单例对象的唯一性反射破解下列代码以double check方式实现的单例模式为示例,详情如下:代码publi...
2019-09-17 00:38:07
957
原创 java中的单例模式为什么需要懒加载?
想必很多朋友在java中都使用过单例模式,在网上搜索的时候也都查到过各种单例模式的实现,比如我之前写的一篇博客:单例模式的7种实现方式及分析(https://blog.csdn.net/xyc_csdn/article/details/78165948),在这些博客中基本都会提到一个词,就是“懒加载”,但是也没有具体解释,让人感到头大。但是当你细想的时候你就会发现有些不对劲,因为JVM加载一个类...
2019-09-11 23:07:21
1183
原创 git忽略target目录
1、目录结构2、.gitignore文件*.class.DS_Storeapplication.pid# Mobile Tools for Java (J2ME).mtj.tmp/# Package Files #*.jar*.war*.ear# virtual machine crash logs, see http://www.java.com/en/downlo...
2019-08-22 22:49:08
12359
1
原创 代码实践之Job如何从MySql获取数据
相信很多人都写过Job,特别是对于从MySql进行大数据量(百万级、千万级甚至亿级)的频繁读取,在这种场景下如何从数据库查询数据就不是一个简单的问题了,查询效率至关重要!我们先看一下最常见也是应用最广泛的写法:select * from tableName where ... limit m,n;这种写法对于用户从前端读取数据的场景下是满足需求的,因为m和n的值都不会很大,最多两位数,...
2019-08-18 17:29:17
443
原创 在java中如何正确的判断字符串是否为"空"
其实对于字符串判空来说不是什么有难度的操作,甚至是低难度的,只是对于’\u0000’这个字符有的人可能还是比较陌生,而它就是这篇博客的重点!我们先看一下’\u0000’打印出来的效果是什么样的吧,如下:打印代码public static void main(String[] args) { System.out.println("----\u0000----");}打...
2019-08-11 13:52:44
1475
原创 从项目迁移看项目分层
最近在进行.net项目的转java工作,尽管本身是个.net小白,但得益于这两个语言的相似性,在语法上并没有碰到什么大的困难,有时候有问题也有一些同事可以请教,最大的问题反而是非语言层面的,例如其中的一点:项目分层! 其实我一向认为一个运行中的项目,不管它的代码多么差,但是只要它能正常稳定的完成预期的工作,那它就是一段好代码,我们也轻易不要去优化它。可是现在我们需要转项目,到了不得不动它的...
2019-04-08 15:41:37
297
原创 记一次Hive平台清洗数据
场景(简化)现有文章表Article和评论表Comment;一篇文章可以有多个评论;文章表Article主要字段(articleId);评论表Comment主要字段(commentId,articleId,content,createTime,lastChangeTime);问题描述发现很多文章下出现了评论内容一样的评论,所以需要对文章的评论进行数据清洗,即同一文章下相同内容的点评只保...
2019-01-03 16:10:01
4567
原创 关于Map.getOrDefault方法的一个小坑
场景对于某些情况下,我们不希望Map返回的值为null,所以理所当然的想到了getOrDefault方法,我之前的想法是getOrDefault方法会在get到的结果为null时返回默认值,然而却不是。代码Map<String, Integer> map = new HashMap<>();map.put("a", null);map.put("b", 2);...
2018-12-20 19:18:45
7750
5
原创 关于"Specified key was too long; max key length is xxx bytes"
场景给MySql数据库表Varchar类型字段加索引时报错:“Specified key was too long; max key length is xxx bytes”;原因字段太长导致无法加索引;解决修改字段长度,注意编码格式,例如你的字段长度为100(指的是字符数),而编码是utf-8,那么最大占用3乘100=300 byte,如果编码是utf8mb4则最大占用4乘100=40...
2018-09-21 19:50:19
43651
原创 SqlServer数据库迁移至MySql注意点——
先看区别SqlServertinyint:范围(0,255),存储大小为 1 字节MySqltinyint:有符号范围 ~ (-128,127),无符号范围 ~ (0,255),存储大小为 1 字节故当SqlServer表中含有Tinyint类型字段时,迁入到MySql需要将字段的无符号选择勾上,否则取值范围不一致(除非你的取值可以保证在(0,127)之内)...
2018-09-20 21:12:41
703
原创 utf-8和utf8mb4
MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode编码(例如:Emoji表情等),utf8mb4是utf8的超集。utf8utf8mb4最大字符长度3字节4字节兼容性差好存储空间消耗少多...
2018-09-20 20:59:10
851
原创 SqlServer判断函数是否存在并打印字符串
if exists (select * from sysobjects where xtype='fn' and name='函数名') print '存在函数xxx';else print '不存在函数xxx'; print '进行创建...';
2018-09-17 14:28:13
1492
原创 Hive平台UDF调用实践之乱码
应用场景 从Hive数据仓库批量捞取数据通过UDF中HttpURLConnection调用至服务端;问题 服务端拿到的中文数据部分存在乱码;排查1、查询MySql数据库,发现源数据非乱码且编码格式为UTF-8;2、查询Hive数据仓库,发现数据非乱码且编码格式为UTF-8;3、初步判断乱码发生在HttpURLConnection调用过程中;解决修...
2018-09-14 14:05:01
1386
原创 MQ百万级数量调用注意点
注意消息的过期时间,大数据量的情况下消息的过期时间需要设置长一点;MQ最好可以提供版本号功能,对于批量调用失败的批处理可以根据版本号作废已经放入消息队列中的消息;...
2018-09-14 13:52:40
1076
原创 【强制】表单、 AJAX 提交必须执行 CSRF 安全过滤。
CSRF(Cross - site request forgery) 跨站请求伪造是一类常见编程漏洞。对于存在CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL ,只要受害者用户一访问,后台便在用户 不知情情况下对数据库中用户参数进行相应修改。 具体思路:1、跳转页面前生成随机token,并存放在session中2、form中将token放在隐藏域中,保存时将...
2018-09-07 15:13:03
1117
原创 字符串连接工具类
JoinTypepackage org.eve.framework.string.join;/** * 连接类型 * * @author xiayc * @date 2018/9/7 */public enum JoinType { /** * 连接符:_ * aaa_bbb_ccc */ STR_STR;}Strin...
2018-09-07 15:07:36
746
原创 如何获取Class的根路径
package org.eve.framework.nuwatest.resource;/** * @author xiayc * @date 2018/9/6 */public class ClassRootPath { public static void main(String[] args) { //获取ClassRootPath类的根路径 ...
2018-09-06 15:10:58
763
原创 ClassLoader的getResource和getResources
package org.eve.framework.nuwatest.resource;import java.io.IOException;import java.net.URL;import java.util.Enumeration;public class ResourceTest { public static void main(String[] args)...
2018-09-06 14:54:46
2064
原创 动态代理的注意点(一)
估计很多人都使用过动态代理,特别是处理事务时,动态代理是一个很好的解决方案,但是其中有一些注意点我们还是需要了解一下;举例伪代码如下:UserService { void a(){ this.b(); } void b(){ }}OrderService { UserService userService;...
2018-09-05 17:52:42
407
原创 Gson工具类
maven依赖 <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> ...
2018-08-23 16:53:47
1290
原创 红黑树-插入
前言本篇博客我们说一说如何从无到有创建一颗红黑树,并在创建红黑树的过程中理解其构造原理。红黑树规则首先我们复习一下红黑树的五项规则,如下: - 规则一:每个节点或者是黑色,或者是红色; - 规则二:根节点是黑色; - 规则三:每个叶子节点(NIL/NULL)是黑色; - 规则四:如果一个节点是红色的,则它的子节点必须是黑色的; - 规则五:从一个节点到该节点的子孙节点的所有路...
2018-05-05 16:12:57
4794
1
原创 红黑树-起步
定义说到红黑树(R-B Tree),首先要知道它是一颗二叉查找树(二叉查找树(Binary Search Tree),又称二叉排序树(Binary Sort Tree),亦称二叉搜索树,下文统称为二叉查找树),其次才作为一颗红黑树。所以它不仅要满足二叉查找树的规则,而且要满足红黑树的规则。如下: - 二叉查找树 - 规则一:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;...
2018-05-04 10:20:21
260
原创 红黑树-旋转
此篇博客我们讨论红黑树的旋转(左旋和右旋),为了更好的理解旋转,我们只关注红黑树中关于二叉查找树部分的规则,而不关注红黑树中关于本身红黑树定义部分的规则。二叉查找树规则 规则一:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;规则二:若右子树不空,则右子树上所有结点的值均大于它的根结点的值;规则三:左、右子树也分别为二叉查找树;左旋 现有红黑树结构如下:...
2018-05-02 21:07:37
727
1
原创 使用synchronized的注意点(补充)
在这篇博客https://blog.csdn.net/xyc_csdn/article/details/78159259中我提到了一些使用synchronized时的注意点,但是还是比较浅薄,特别通过最近的面试,认识到以前的总结还是有些不足,所以在这里再次完善一下。先看代码abstract class AbstractSynchronized { protected...
2018-04-12 21:00:50
1432
原创 单例模式的7种实现方式及分析
第一种代码package com.xiayc.singleton;/** * 饿汉模式 * @author xyc * */public class Hungry { private Hungry() { } private volatile static Hungry singleton = new Hungry(); public static Hungr
2017-10-06 16:48:35
1774
2
原创 多线程Object之wait、notify
代码package com.xiayc.waitnotify;import java.util.ArrayList;import java.util.List;/** * 1、wait、notify和notifyAll方法是Object类提供的,换句话说Java中所有的对象都有这三个方法; * 2、wait、notify和notifyAll方法要配合synchronized关键字同步操作才有意
2017-10-06 16:17:38
345
原创 java多线程之volatile
在了解之前我们需要先了解一下Java内存模型(区别与JVM的内存模型)。Java内存模型 Java 内存模型来屏蔽掉各种硬件和操作系统的内存差异,达到跨平台的内存访问效果。JLS(Java语言规范)定义了一个统一的内存管理模型JMM(Java Memory Model) Java内存模型规定了所有的变量都存储在主内存中,此处的主内存仅仅是虚拟机内存的一部分,而虚拟机内存也仅仅是计算机物理内存的
2017-10-05 15:16:32
351
原创 synchronized锁的重入问题
我们知道通过synchronized关键字修饰的方法或代码块在同一时刻只能被一个线程访问,还有一种就是锁的重入问题,就是一个线程可以访问多个被synchronized修饰的方法或代码块,代码如下:代码package com.xiayc.sync;public class ReentrantSynchronized { public class Super{ public sy
2017-10-05 14:32:01
624
原创 使用synchronized的注意点
在http://blog.csdn.net/xyc_csdn/article/details/78155932这篇博客中详细讲了一下synchronized关键字的使用方法。在这里补充几个使用synchronized时需要注意的点。先看代码ObjectLock.javapackage com.xiayc.sync;public class ObjectLock ...
2017-10-04 20:22:53
572
原创 Java多线程之synchronized
一、什么是synchronized synchronized是java提供的关键字,被synchronized修饰的代码在同一时刻只能被一个线程访问。用于解决java代码中多个线程的共享存储空间的访问冲突问题,有效避免了同一个数据对象被多个线程同时访问。二、synchronized的使用方式使用synchronized关键字修饰在成员方法/静态方法前,如:public synchronize
2017-10-03 19:39:55
474
原创 浅谈CountDownLatch的用法
CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。 CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下。CountDownLat
2017-09-16 11:06:29
675
原创 Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings.
错误描述:IntellijIDEA创建SpringBoot项目报错Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings. Error message: connect timed out解决方案:修改https://start.spring.io为http:/
2017-09-11 20:52:00
3072
原创 关于netty的HttpUtil.isTransferEncodingChunked(HttpMessage)方法已过时解决方案
在使用最新的netty5时发现HttpUtil.isTransferEncodingChunked(HttpMessage)方法已过时,已经不能用,真的很坑爹。 解决方案就是使用HttpHeaderUtil.isTransferEncodingChunked(HttpMessage)方法代替。
2017-09-09 21:28:32
813
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅