- 博客(152)
- 收藏
- 关注
原创 Java中如何枚举正则表达式捕获组的名字
摘要:Java正则表达式支持命名捕获组,但官方API未提供直接枚举命名组的方法。通过分析Pattern类源码发现其包含一个包内方法"namedGroups",可返回命名组与索引的映射Map。利用反射机制调用该方法获取命名组信息后,即可按需访问各个命名捕获组的数据,为日志解析等场景提供便利。
2025-05-29 14:36:16
327
原创 从开源日志解析引擎到“Botu“
本文回顾了网络安全行业中日志采集与处理技术的发展历程,从早期基于Lex&Yacc的解析技术,到借鉴Arcsight的脚本语言解决方案,再到大数据时代采用LogStash等开源工具。作者介绍了自主研发的Botu脚本语言,这是一款专注于数据解析与封装的DSL工具,具备接近通用编程语言的语法结构、动态执行优化能力和高效的数据封装特性。Botu已开源并提供10种常见安全设备的日志解析模板,旨在提升AI时代网络安全研究的效率。相比主流工具,Botu在解析性能和易用性上有显著优势,特别适合需要处理大量日志的安全
2025-05-29 08:31:34
826
原创 3.3.6 VO-O语法- 流程算子
运行时,流程引用算子会装载子流程,并按照端口的连接情况,将数据传输给子流程。流程自驱算子的意思是,它会遍历输入的数据集,使用数据集中的每一条数据依次替换子流程中的变量,并驱动子流程运行。彼此之间不共享任何数据。与流程引用的不同之处在于,流程引用算子内的子流程只会被装载一次,子流程内的算子会自行批量处理输入子流程的数据集。并行流程算子表示其容器内的算子在运行时是并行的,即每个算子都会被分配一个独立的线程,数据流在算子间流转。流程编写者可以根据实际的业务情况在流程编写时选用不同的流程算子,优化流程的调度运行。
2025-04-15 20:51:54
859
原创 LLM实现text2SQL实战总结
LLM在组织内部应用的一类重要场景就是利用LLM的NL2SQL能力,简化用户对数据库的访问。本文主要介绍如何使用LLM生成SQL语句,不涉及到如何训练提升LLM的SQL生成能力。开启正文之前,我们先明确一下这类功能在组织内服务的目标群体。我们将服务目标定位为没有太多IT技术背景的业务及运营人员。这些人访问数据库的需求,伴随着业务的发展,会超过特定服务软件提供的功能边界。服务软件的开发周期很难适配应用需求的迫切性。另外,熟练的使用服务软件获取使用者期望的信息也需要一定的学习成本。
2025-04-15 13:06:15
952
原创 3.3.5 VO-O语法- 高级语法
VO语言还提供了一些个性化的高级语法特性,这些语法特性有别于传统的编程语言。但可以更好的帮助开发者实现高效、稳定的生产级数据流程。
2025-03-10 22:29:06
809
原创 回答我:数据库 -- Deepseek + NL2SQL
这个技术能够将使用者输入的通过自然语言描述的问题转换为可以回答问题的SQL语句,通过执行SQL语句返回数据结果并回答使用者的问题。在模板的json输出格式中我们看到,模板还要求LLM给出SQL语句的列说明,这也是因为从数据库中检索出的数据如果没有输出列说明,LLM在最后进行问题总结时是无法知道列的含义的。流程中除了之前我们描述的获取数据库Schema,通过Prompt模板拼接Prompt、调用Deepseek回答问题以及执行SQL语句外,其它部分都是为了能够将信息串接在一起而进行的技巧性的数据处理。
2025-03-10 11:44:20
1947
原创 3.3.4 VO-O语法- 算子分类(二)
文本格式化、文本抽取、文本替换、Html转Xml、按大小拆分文本、按段落拆分文本、按章节拆分文本、语种识别、文本向量化、分词、命名实体识别、摘要、关系识别、翻译、大语言模型应用等。列添加、列删除、行列转换、列集拆分、过滤、采样、聚合、去重、排序、并集、交集、差集、补集、联结、特征统计、扁平化等。CSV、Excel、Json、XML、Protobuf、Avro、Parquet、ORC、全文读取等。格式转换、黑白化、马赛克、浮雕、缩放、水印、人脸识别、OCR、物体识别、向量化、图像生成、图像分类等。
2025-02-14 19:03:41
1408
原创 3.3.4 VO-O语法- 算子分类(一)
VO语言目前拥有400+个算子,并且仍在不断的开发扩展中。算子的功能丰富,多样,很难用某个维度简单、易用的对算子进行分类。以下是VO语言按照内置的算子开发维度给出的算子分类。
2025-02-14 19:02:22
991
原创 3.3.3 VO-O语法- 语法算子(二)
从其内部看,是一个可以容纳内嵌流程的标准容器算子。上下文变量的名字必须是输入数据集的列名,且只会将数据集的第一条信息作为代表拼装入异常信息。也可以编写逻辑只在迭代结束后输出数据,这时候就需要内嵌流程不是去连接数据输出端口了,而是去连接退出端口了。使用Loop算子有一个特别需要注意的事项就是,内嵌流程必须与输入端口与迭代输出端口有连接。首次迭代时,内嵌流程收到的数据集来自前置算子,迭代过程中再次收到的数据则来自内嵌流程的上一迭代的输出了。Loop算子是一个容器算子,其可以实现对其内部子流程的循环迭代运行。
2025-02-13 22:45:40
783
原创 3.3.3 VO-O语法- 语法算子(一)
与其它编程语言一样,VO语言也支持条件控制、循环遍历等“块”级语法。不过,这些“块”级语法都是通过语法算子来实现的。
2025-02-13 11:09:13
229
原创 3.3.2 VO-O语法- 算子- 容器算子
而内部可见和外部可见则分别指只能在容器内看到的端口或只能从容器外看到的端口了。运行流程后,算子的输出结果可通过查看对应的调试端口进行展示,该结果将留存在系统中,方便开发者回溯、查看。容器算子在外观上与原子算子最大的区别就是所有容器算子都有一个容器托盘。双击容器算子可以进入到容器算子内部。可在容器算子内部的空间面板上继续编写容器内部的流程逻辑。容器算子内部的嵌套流程如果需要将结果写出到容器外部,需要与输出端口建立连接。容器算子的输出端口并不一定总是向外写出数据,也有可能用来满足容器算子的内部控制需要。
2025-02-11 19:29:46
335
原创 3.3.2 VO-O语法- 算子-原子算子
算子是VO语言最核心的概念,是可视化编程的基础。在编程时,每个算子都以一个独立图元的方式进行表达。其主要分为原子算子和容器算子两种结构类型。
2025-02-11 19:26:06
831
原创 3.3.1 VO-O语法- 概念术语(二)
上下文变量的作用域为算子,即不同算子的上下文变量即使同名,执行时也不会混淆。输入算子的数据集中的每条记录的"id"列的值都会替换掉SQL语句的上下文变量,生成一个具体可执行的SQL语句。以确保流程执行时,所有算子参数的值都是明确的。在执行数据流程为变量设置值时,控件变量将以变量的控件类型展示界面,并接收使用者设置的变量值。该种模式的变量,可以让使用者在设置流程的变量时,不必担心输错参数值。控制流的引入可以为并行运行的算子加入同步控制,比如要求流程执行时,必须等数据表被清空后才能执行表插入操作。
2025-02-10 17:33:54
736
原创 3.3.1 VO-O语法- 概念术语(一)
因此,多个输入端口接收到的数据集其实是同一个数据集,如果后置多个算子需要对数据集进行修改,那么就会引发数据集的并发写冲突问题。此种应用场景下,需要在当前算子的后面补充一个“数据集复制”算子,然后通过该算子的输出端口与后置的多个输入端口建立数据连接,确保每个输入端口得到的数据集是一个被复制后的独立数据集。,但是要求所有的输出端口的数据集结构必须完全相同,否则编辑器会报错,并无法建立相应的数据连接;在容器算子内,也会表达为从容器输入端口到嵌套算子输入端口或从嵌套算子输出端口到容器输出端口的连接。
2025-02-10 12:27:01
825
原创 3.3 VO-O(算子)语法
VO-O语法部分是VO语言的特色部分。其核心概念主要有两个,“算子”以及“数据连接”。使用者通过拖拽“算子”图元、配置“算子”参数、构建“算子”间的“数据连接”,最终形成一个具有数据流转关系的流程图。该流程图可被理解为是由VO语言编写的一段程序。VO-O语法基于“可视化”及“数据科学领域专用”两个理念,为语法加入了很多特有性质。除此外,其还提供了很多通用编程语言中的“块”级语法概念,如:条件控制、循环控制等。不过这些语法概念都是通过特定的算子进行支持的。下面,就详细介绍一下VO-O语法。
2025-02-09 18:46:17
145
原创 Deepseek访问受限?换种方式轻松使用
流程中,将Deepseek算子换成“OpenAI会话”算子,这里需要注意,不要换成OpenAI的其它算子。“请求地址”,“模型”,输入成图中的样子。近期由于Deepseek模型太火,以至于Deepseek网站对外提供的API接口接口访问受限。由于图中的Deepseek算子访问的Deepseek官方API资源受限,所以目前无法正常使用。之前因为安装Deepseek算子升级过系统的朋友,还需要再升级一次,这个新的升级包补充了些内容。好了,可以在线体验Deepseek模型的能力了。去七牛云注册一个账号。
2025-02-09 18:42:03
1995
原创 3.2 VO-E(表达式)语法(二)
.”是成员运算符,其左侧的对象可以是变量、函数、数组表达式或成员表达式;算数运算表达式支持的算数运算符都是二元运算符,按执行的优先顺序为:乘法(*)、除法(/)、模(%)优于加法(+)、减法(-)运算。数组表达式也支持复杂结构数据的访问表达,如:二维数组a,其表达式可写为a[1][2],表示获取二维数组的第二列第三行的值;逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有"and"、"or"以及"not"三种运算符,需要注意,VO语言的逻辑运算符不支持"&&"、"||"以及"!
2025-02-08 11:51:07
518
原创 3.2 VO-E(表达式)语法(一)
VO-E语法兼容了部分Java语言的基础概念,如:数据类型、常量、变量、函数以及表达式等。通过VO-E语法,VO语言可以实现对数据的细粒度控制。(VO-E语法解释器已经开源,有兴趣的朋友可以进入社区获取项目链接)。
2025-02-08 11:45:25
531
原创 3.1 可视化算子编程语言
HuggingFists的VO编程语言与常见的其它编程语言有一定的区别。一部分采用表达式语法(简称:VO-E),用于处理细微的,算子级别处理不了的数据。两种不同的语法联合构成了VO语言,使其拥有了对数据从宏观到微观的各类数据处理能力。其中,VO-E部分是VO语言的语法基础,其定义了编程语言的数据类型、函数以及表达式等基础概念;可以将VO语言理解为一种由Java解释执行的,面相数据科学的,领域性语言。[建议阅读“表达式语法”章节时,最好有一点Java语言的基础,了解面向对象的概念将有助于你理解该章节的内容。
2025-02-07 19:10:40
269
原创 可视化编程语言外篇--探索性思考
在“数智时代”的浪潮中,数据科学工具的需求正从传统的结构化数据处理扩展到全结构数据(结构化、半结构化、非结构化)的综合处理。本文探讨了低代码数据科学工具的发展历程,并介绍了作者团队开发的HuggingFists系统,该系统通过可视化工作流(Workflow)技术,支持全结构数据的采集、处理和分析,同时整合了AI模型(如HuggingFace)和云端服务。本文还提出了一个创新概念——VO(可视化算子)编程语言,这是一种领域特定语言(DSL),旨在通过直观的拖拽式操作,帮助非专业用户快速完成复杂的数据任务。
2025-02-07 09:56:08
1163
原创 疯狂SQL转换系列- SQL for Milvs2.4
目前其2.4版本的SDK接口已与之前的2.2版本有了较大的差别,功能上也有了一定的调整。由于Milvus文档有些内容写的不是特别详实,亦或时间仓促,我们没有正确理解其功能含义,转换工作可能存在一些问题,还请发现问题的朋友多多指出。Milvus2.4的SDK相较Milvus2.2有了不少改变,主要是方法参数上的变动比较大。我们选择Milvus2.4版本进行语法支持的主要原因是,2.4版本是Milvus目前最新的版本,该版本引入了可以建立多个向量索引的能力。技术中,用到了多向量检索的技术,而。
2025-02-06 12:28:05
821
原创 2.3 HuggingFists的容器节点
如图中的 MortenFlow,Component1 组件有两个输出端口,没有输入端口,这表明 Component1 是用来产生数据的,它是数据的源头。Component2, Component3 及 Component4 组件都有输入及输出端口,只是数量上有所不同, 这表明它们都是数据处理组件,从组件的输入端口读入数据,处理后,再将数据 从输出端口写出;使用者按照 MORTEN 提供的组件接口分别实现抽取组件、转换组件及装载组件后,配置为 MortenNode 的一个数据流就可以实现 ETL 的工作了。
2025-02-06 09:50:32
496
原创 动态加载Jar包引发的“java.util.zip.ZipException: invalid distance too far back”
该问题是因为Jar包内的资源文件在被访问后,会被保存在装载插件的类装载器中。那么,一种合适的解决问题的办法就是,我们需要确保两次读取资源文件的类装载器不同就可以。那么当你升级Jar包插件并再次装载插件时,可能会碰到读取jar包内文件的代码处抛出“java.util.zip.ZipException: invalid distance too far back”异常的情况。在插件内部,我们可以在加载文件之前,构造一个新的类装载器,确保由这个类装载器来装载我们要读取的资源文件。
2024-11-26 17:27:24
515
1
原创 1.2.2 HuggingFists安装说明--Windows版安装说明
可以通过这两个按钮停止/删除服务,停止的话下次还可以直接通过这个按钮打开,但是会消耗系统的资源;删除的话每次要通过startUp.bat启动,每次重新分配系统资源。3. 启动docker desktop, 默认是运行linux镜像,HuggingFists提供的是linux镜像。以后启动可以通过startUp.bat启动,前提是先把docker desktop启动。5. docker desktop相关(了解容器化相关知识的可以忽略)安装时直接点OK,然后等待安装结束。硬件环境:至少4核8G。
2024-11-26 17:18:03
1138
原创 1.2.3 HuggingFists安装说明-MacOS安装
1. 安装Docker环境。若已安装Docker Desktop可以跳过此步骤。下载Docker Desktop 对应Mac对应版本(注意是Apple M系芯片或者Intel芯片)3. 启动HuggingFists。在HuggingFists目录下执行命令行:docker compose up -d。4. 停止HuggingFists。在Hugging Fists目录下执行 docker compose down。安装成功后,Docker Desktop界面如下。硬件环境:至少4核8G。
2024-09-28 22:23:07
911
原创 HuggingFists数据服务发布--功能闭环
如图中的服务接口管理所示。对于已经部署了各类业务系统,有数据流重构但无法组织各类系统服务商提供支持的场景,可以使用HuggingFists的这一功能特点快速的给予支撑。HuggingFists社区版的愿景是在数智时代下让使用者能够更便捷的应用各类AI技术处理数据并发现数据中的价值。现实世界中,不管是在互联网还是组织内部的私有网络中,都存在着大量以Web API的形式对外开放的特有、特色功能。支持以配置的方式添加一个第三方的WebAPI接口,并可使用系统内置的“数据服务调用”算子在流程中调用此接口。
2024-09-28 16:01:53
527
原创 2.2 HuggingFists中的编程语言
通常情况下,使用者不需要有编程经验,也无需了解太多VO语言的语法概念,只要简单通过界面拖拽算子,设置参数就可以完成一个数据处理流程的编写。这是一个很大的工程,但HuggingFists为了尽量给用户一个统一访问数据库数据源的方式,还是做了这样的一个转换工作。但是,这种方式只适合较小的功能扩展,比如:对数据进行特别的公式计算,特别的抽取等。除了VO语言外,HuggingFists还支持SQL、Python、Javascript等语言,使用者可以在适当的时候运用这些语言来增强数据处理的能力。
2024-09-26 23:02:37
574
原创 1.2.1 HuggingFists安装说明-Linux安装
需要注意的是,当使用Windows操作系统克隆项目时,Linux脚本文件中的'\n'会被替换为'\r\n'。当拷贝项目到Linux系统下时,由于'\n'的不同,脚本会无法执行。未安装docker的,执行安装脚本 bash install.sh,会自动安装containerd。测试系统是否正确安装。安装结束后,可通过访问url地址:“http://服务器IP:38172” 打开工具使用界面。linux版本下可以查看install.sh文件,文件中的命令基于centos7编写,ubuntu用户需要自行调整。
2024-09-26 12:07:23
1099
原创 2.1 HuggingFists系统架构(二)
图中有一个带虚线的数据库,该数据库为一个向量数据库。当使用者需要构建能够根据问题自由选择可用工具的AI Agent时,需要部署向量数据库。HuggingFists会将AI Agent需要的工具插入向量数据库,并使用向量数据库的匹配能力检索对应的工具。从架构图可知,HuggingFists主要分为服务器(Server)、计算节点(Node)以及数据库(Storage)三部分。为部署方便,HuggingFists社区版将这三部分集成在了一起,缺省情况下只提供了一个计算节点(Node)。
2024-09-25 20:07:30
567
原创 2.1 HuggingFists系统架构(一)
HuggingFists的前端主体开发语言为Html+Javascript,后端的主体开发语言为Java。在算子部分有一定份额的Python代码,用于整合Python在数据处理方面强大能力。
2024-09-25 13:47:30
1965
原创 1.1 HuggingFists简介(二)
HuggingFists提供的低代码编程环境,可以大幅降低非计算机专业科研人员的学习成本,丰富的算子库,可以在很大程度上让科研人员自己尝试对数据的处理和分析,更快的找到科研的思路与方向。但对于对外曝露接口供第三调用的能力,HuggingFists持关闭原则的,即若有其它系统希望通过接口与HuggingFists交互,则需要购买HuggingFists的商业版。对于一些实施时需要与用户数据环境对接的综合业务系统,可以使用HuggingFists作为一个数据开发模块,便捷的完成与用户环境的数据对接。
2024-09-24 13:22:50
877
原创 1.1 HuggingFists简介(一)
Sengee是DataYoo团队开发的一款低代码数据中台产品,能够支持全结构与全流程的数据管理与开发。HuggingFists可视为Sengee的一个功能子集,其侧重支持与AI模型整合应用的场景。而Sengee则可以适用更大更复杂的数据应用场景。Sengee采用了流程设计与计算相隔离的设计理念。用户只要掌握Sengee平台提供的低代码流程编写方式就可以将流程运行在Oyez(单机)、Gosooz(Spark)以及Moz(Flink)等不同的计算引擎中。
2024-09-24 13:18:35
1197
原创 HuggingFists算子能力扩展-PythonScript
如果需要引用第三方的包方法,则需要完成三方包的安装、部署并将安装好的环境映射到HuggingFists的Docker镜像中。无需特别关注的是,Python脚本算子已经完成了将输入的数据转换为Python语言可接收的数据结构。在“一般”属性页内,点击“设置”按钮,为Python脚本算子定义输出端口以及输出端口的输出结构。portName表示数据要写出的端口的名字,该端口必须是一个我们之前定义好的输出端口;row表示一条处理后的数据,字典对象,其结构应符合对应输出端口的结构定义。扩展平台尚不支持的算子功能。
2024-09-12 20:19:46
422
原创 无代码情报处理漫谈
情报处理与行业及业务紧密相关。本文并未给出明确、完整的情报处理流程,更多阐述了情报处理中碰到不同结构的数据时的不同处理手段。也给出了笔者团队基于HuggingFists系统的无代码情报处理解决方案。欢迎有兴趣的朋友使用系统,并可通过文章给出的视频的结尾二维码加入技术交流群,与我们探讨交流。HuggingFists Linux版:https://github.com/Datayoo/HuggingFists。
2024-09-12 11:28:15
956
原创 FTPClient报“Connection refused”的另一种情况
第二个问题,需要在调用该方法返回数据流并关闭流后,调用completePendingCommand,确保文件读取动作结束后,其它命令可用。仔细分析两个客户端程序的Jar包依赖后发现,可以正常工作的客户端的jar包版本为3.8.0,而无法正常工作的jar包版本为3.6。使用Apache的commons-net包构建了一个FTP服务器,并使用包里的FTPClient远程连接FTP服务器。目前看,未来,当遇到类似FTPClient不明所以的问题时,可考虑jar包版本的差异问题,作为一个可行的解决方案。
2024-09-03 12:39:46
841
原创 通义千问报错“撞脸”OpenAI?
从搜索结果看,搜索出的内容都是与OpenAI相关的内容,错误描述非常相似。没办法,硬着头皮按OpenAI相关错误去解决问题吧,确实解决不了。只能尝试调整角色名称,好在后续报出的错误没查到雷同的信息。只能按照错误提示挨个试,从角色"tool"换成"function", 搞定。笔者团队一个月前为能够使系统可以支持AI Agent的应用,集成了通义千问的模型接口,特别是集成了其可以通过推理调用外部工具的能力。,体验还是非常不错的。
2024-08-16 13:13:26
1314
原创 LLM智能体工程落地思考(二)
于是,去年下半年,开始陆续出现了一些以LangChain作为基础的低代码类RPA工具,如:Flowise,LangGraph以及国内最近非常火的Dify等工具。这些工具的出现,进一步降低了LLM的应用成本和搭建AI Agent的成本。通过组件拖拽,可视化的构建数据处理流程和AI的应用逻辑,可降低对实施人员的编程能力要求,使得有经验的业务人员有机会参与工程落地;有别于现在流行的RPA类低代码平台,HuggingFists采用的是传统的数据科学工具的架构,即HuggingFists是面向数据集来处理的。
2024-08-01 21:32:49
1346
原创 LLM智能体工程落地思考(一)
但AI Agent能胜任更多种任务,成为AI工程落地的重要手段的观点,笔者是深以为然的。但该技术只能做到初步激活客户的私有数据,利用LLM的总结归纳能力,完成垂域知识的问答。当然,不管AI Agent的实现形式是怎样的,工程落地都会面临一类通用的问题,就是如何使AI Agent与客户的环境相结合,从而完成与环境的信息交换。众所周知的是,当我们需要与客户的环境对接时,必然会产生定制开发的成本。那么这就意味着AI Agent的工程成本至少要与项目的预算基本持平才能够不断帮助客户实现AI Agent的垂域落地。
2024-08-01 21:27:52
966
原创 如何使用ElasticSearch搭建LLM-RAG系统
在之前的案例视频中我们演示了使用Milvus向量数据库和腾讯向量数据库实现RAG的场景应用。今天我们演示下利用ES的向量数据存储能力来实现RAG,包括三个部分:连接ES数据库并建表;数据写入ES向量数据库流程;问答对话流程。具体操作可参照下面的视频:《玩转数据之使用ElasticSearch搭建RAG》
2024-05-06 08:15:00
2479
原创 HuggingFists-如何复用流程(二)
我们仍然使用上一篇文章中介绍的子流程示例,进行少许改造,流程图如下:该流程仍表达了对输入的数据流添加一个列,并将数据流输出。不同之处在于图中右侧的蓝色框部分。这里没有为添加的列给出明确的名字,而是以${col}的变量形式进行了代替。”${变量名}”为HuggingFists的变量表达式,允许使用者在执行流程的时候为其赋值,而不必在流程定义时就明确其值。看流程左下部的蓝色框部分,当使用者在算子属性部分填充入变量表达式时,就会在“变量”页自动添加一个变量,可为其设置显示名及缺省值。
2024-04-15 14:26:29
474
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人