DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件
1 DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件
1.1 背景
AI能力再强,如果不能在企业的自有业务上产生助益,那基本也是一无是处。将企业的自有业务上传到线上训练,那是脑子进水的做法,竞争对手不仅捡了大便宜,自己的企业可能没享受到AI红利就被干死了!
这也是为什么DeepSeek的本地模型及硬件设备会大热,但对中小企业,特别是小微企业来说,硬件设备从几十万~几百万的成本,是无法逾越的障碍!那中小微企业就要在AI的大潮中被时代淘汰吗?
肯定不是,也肯定不能!
自有业务场景:
本文将以一个小众文本编辑器:EverEdit为切入点,训练AI认识EverEdit的语法着色规则,并生成一份新的编程语言(zig)的语法着色文件。
因为EverEdit够小众,所以现成的各种线上线下AI模型都不认识,需要自己进行训练,这很符合中小微企业的自有业务特点。
1.2 准备步骤
1.2.1 AI平台账号准备: 硅基流动注册

1.2.2 下载CherryStudio
注:CherryStudio工具的知识库支持训练本地素材
1.2.3 在CherryStudio中配置密钥
配置密钥是为了能够让CherryStudio使用AI供应商(这里是硅基流动)的模型
-
步骤1:在
siliconflow网站登录后,拷贝自己的密钥,如下图所示:

-
步骤2:在
CherryStudio中配置密钥,如下图所示:

1.3 训练本地知识库(EverEdit的语法着色规则)
- 在
CherryStudio中新建本地知识库,如下图所示:

注:如果已经创建过EverEdit本地知识库,就不用重复创建了。
- 将
EverEdit自带的语法文件丢给CherryStudio消化,如下图所示:
知识库有两部分,一是EverEdit内置的语法着色文件,二是EverEdit的语法着色规则介绍文件(帮助文档)。
消化完成后,会出现绿色的“√”符号

1.3.1 在CherryStudio中使用本地知识库(EverEdit)和DeepSeek在线模型生成zig语法着色文件
1.3.1.1 打开知识库开关,并选择本地知识库,如下图所示:
-
在
CherryStudio的导航栏选择“助手”按钮,切换到助手模式

-
在界面的底部聊天窗口中选择
本地知识库

1.3.1.2 提问让AI生成zig语法文件,并不断进行修正:
- 让AI生成一份EverEdit编辑器的zig语法着色文件

注:以上是和AI的对话记录,用户内容部分即本人在CherryStudio聊天窗口中输入的内容, 下同。
-
顺手让AI生成1份
Zig源代码用于测试
AI生成的源码内容如下:
const std = @import("std"); // 导入标准库// 定义一个结构体
const Point = struct {x: i32,y: i32,// 结构体方法pub fn move(self: *Point, dx: i32, dy: i32) void {self.x += dx;self.y += dy;}
};// 定义一个枚举
const Direction = enum {North,South,East,West,// 枚举方法pub fn opposite(self: Direction) Direction {return switch (self) {.North => .South,.South => .North,.East => .West,.West => .East,};}
};// 定义一个联合体
const Value = union(enum) {Int: i32,Float: f32,Bool: bool,// 联合体方法pub fn print(self: Value) void {switch (self) {.Int => |i| std.debug.print("Int: {}\n", .{i}),.Float => |f| std.debug.print("Float: {}\n", .{f}),.Bool => |b| std.debug.print("Bool: {}\n", .{b}),}}
};// 主函数
pub fn main() void {// 变量声明const a: i32 = 10;var b: i32 = 20;b += a;// 控制流if (b > 15) {std.debug.print("b is greater than 15\n", .{});} else {std.debug.print("b is less than or equal to 15\n", .{});}// 循环var i: u8 = 0;while (i < 5) : (i += 1) {std.debug.print("i = {}\n", .{i});}// 结构体使用var p = Point{ .x = 0, .y = 0 };p.move(5, 10);std.debug.print("Point: ({}, {})\n", .{ p.x, p.y });// 枚举使用const dir = Direction.North;const oppositeDir = dir.opposite();std.debug.print("Opposite of North is {}\n", .{oppositeDir});// 联合体使用const val = Value{ .Int = 42 };val.print();
}
-
将AI生成的
zig.mac语法着色文件保存到EverEdit安装目录下的syntax目录 -
参考配置EverEdit语法着色对
zig语法进行配置 -
告诉AI哪里出了错误,如下所示:




注:后面还有一些错误调试,就不一一列举了。
-
最终的着色结果

注:一般的编辑器都没有部署LSP,因此对库函数中的关键字是不识别的,如:std.debug
1.4 附录:AI生成的EverEdit规范的zig语言语法着色文件zig.mac
'******************************************************************************
' @file zig.mac
' @brief Zig 语言语法着色文件
' @author tyysoft & DeepSeek-V3 & CherryStudio
' @date 2025-2-13
' @version 1.0
' @note 本文件定义了 Zig 语言的语法着色规则,包括注释、字符串、关键字、数据类型等的着色
' 通过包含 const.mac 文件获取颜色常量,并使用 Doxygen 风格注释进行说明。
'******************************************************************************' 包含颜色定义文件
Include ".\const.mac"' 创建 Zig 语法着色对象
Dim zig
Set zig = Parser.CreateParser()' 设置最大解析字符数
zig.SetParseMax(1000)' 定义注释
Dim regionLineComment, regionBlockComment
Set regionLineComment = zig.CreateRegion(COLOR_COMMENT1, "+//+", "$", True)
Set regionBlockComment = zig.CreateRegion(COLOR_COMMENT1, "+/*+", "+*/+", True)' 定义字符串
Dim regionString
Set regionString = zig.CreateStringRegion(COLOR_STRING1, """", """", False)' 定义关键字
Dim itemKeyword
Set itemKeyword = zig.CreateWord(COLOR_WORD1, "const var fn if else while for switch case break continue return struct enum union error defer try catch unreachable async await suspend resume using comptime noalias volatile align linksection export extern packed anytype undefined null true false and or xor not pub", True)' 定义数据类型
Dim itemDataType
Set itemDataType = zig.CreateWord(COLOR_WORD2, "i8 i16 i32 i64 u8 u16 u32 u64 f16 f32 f64 bool void anyerror anytype anyframe", True)' 定义函数
Dim itemFunction
Set itemFunction = zig.CreateItem(COLOR_FUNCTION, "\b[a-zA-Z_]\w*\s*\(", True)' 定义数字
Dim itemNumber
Set itemNumber = zig.CreateItem(COLOR_NUMBER, "\b\d+(\.\d+)?\b", False)' 定义操作符
Dim itemOperator
Set itemOperator = zig.CreateItem(COLOR_OPERATOR, "[+\-*/%&|^<>=!]+", False)' 将定义的元素添加到语法着色对象
zig.AddRegion regionLineComment
zig.AddRegion regionBlockComment
zig.AddRegion regionString
zig.AddItem itemKeyword
zig.AddItem itemDataType
zig.AddItem itemFunction
zig.AddItem itemNumber
zig.AddItem itemOperator' 设置代码折叠规则
zig.FoldText "{", False, "}", False' 设置括号匹配
zig.SetPairs "(){}[]"' 定义注释快捷键
zig.CommentLine "//"
zig.CommentBlock "/*", "*/"' 添加自定义高亮(示例:高亮注释中的TODO)
Dim itemTodo
Set itemTodo = zig.CreateItem(COLOR_HIGHLIGHT1, "\bTODO\b", True)
regionLineComment.AddItem itemTodo
regionBlockComment.AddItem itemTodo
作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来源自豆包AI,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.
相关文章:
DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件
1 DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件 1.1 背景 AI能力再强,如果不能在企业的自有业务上产生助益,那基本也是一无是处。将企业的自有业务上传到线上训练,那是脑子进水的做法ÿ…...
Jenkins 配置 Git Parameter 四
Jenkins 配置 Git Parameter 四 一、开启 项目参数设置 勾选 This project is parameterised 二、添加 Git Parameter 如果此处不显示 Git Parameter 说明 Jenkins 还没有安装 Git Parameter plugin 插件,请先安装插件 Jenkins 安装插件 三、设置基本参数 点击…...
力扣-二叉树-110 平衡二叉树
思路 用后序分别求出每一个节点的左子树和右子树高度,然后判断是否符合定义,再判断两个子树是否符合定义 代码 class Solution { public:int getDepth(TreeNode* node){if(node nullptr) return 0;return max( getDepth(node->left), getDepth(no…...
Linux 查看磁盘中的大文件
在 Linux 系统中,你可以使用以下方法来查看磁盘中的大文件信息: 1. 使用 find 命令 find 命令可以递归查找指定目录下的大文件。 find /path/to/directory -type f -size 100M -exec ls -lh {} \;/path/to/directory:要查找的目录路径&…...
网络工程师 (38)流量和差错控制
一、流量控制 流量控制是一种协调发送站和接收站工作步调的技术。它的主要目的是防止发送端发送数据过快,导致接收端缓冲区溢出,从而造成数据丢失。流量控制机制通过调整发送速率来匹配接收端的处理能力。 基本原理 发送站每发出一帧数据,就进…...
vue3多个页面/组件,复用同一段render页面根据接口返回的数据动态渲染逻辑,使用setup+组合式API
组件reusableComponent是可供多个组件复用的 getData请求接口,render渲染数据 <template><render /> </template> <script setup> import operationService from "/views/operation/component/operationService.vue";const prop…...
从零开始:Django初学者的实战之旅
一、概念引入 要基于编程开发一个完整的企业项目不管什么样的项目,基本都有3种不同的开发模式,这几种开发模式,如果把项目类比成建造房子则有如下: 1.原生开发:类似从0开始造房子,从0开始构建项目…...
青果教务系统逆向(js逆向)
首先我们打开f12检查以下登录函数 可以看到登录函数在checkrand中,直接去全局搜索函数 在这里,打个断点直接跳进去 可以看到参数在这里形成 这是我们发起请求需要的参数,把这几个参数加进去直接登录就行 那就一个一个看呗,第一…...
在Linux中Redis不支持lua脚本的处理方法
redis安装在IP为x.x.x.x的服务器上 redis安装 第一步,安装前,检测系统是否安装了redis。若安装了redis,则需要删除redis;若没有安装redis,则需要安装2.6版本以上的redis。 # 确保Redis版本支持Lua脚本。从Redis 2.6…...
WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景
WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景 前言一、依赖项属性基础概念1.1 什么是依赖项属性1.2 依赖项属性与 CLR 属性的区别1.3 依赖项属性的定义与注册 二、依赖项属性的原理深入剖析2.1 依赖项属性系统的工作机制2.2 元数据(Metadata…...
关于 IoT DC3 中设备(Device)的理解
在物联网系统中,设备(Device)是一个非常宽泛的概念,它可以指代任何能够接入系统并进行数据交互的实体。包括但不限于手机、电脑、服务器、网关、硬件设备甚至是某些软件程序等所有能接入到该平台的媒介。 内容 定义 目的 示例 …...
从 0 开始本地部署 DeepSeek:详细步骤 + 避坑指南 + 构建可视化(安装在D盘)
个人主页:chian-ocean 前言: 随着人工智能技术的迅速发展,大语言模型在各个行业中得到了广泛应用。DeepSeek 作为一个新兴的 AI 公司,凭借其高效的 AI 模型和开源的优势,吸引了越来越多的开发者和企业关注。为了更好地…...
Uniapp 获取定位详解:从申请Key到实现定位功能
文章目录 前言一、申请定位所需的 Key1.1 注册高德开发者账号1.2 创建应用1.3 添加 Key 二、在 Uniapp 中配置定位功能2.1 引入高德地图 SDK2.2 获取定位权限 三、实现定位功能3.1 使用 uni.getLocation 获取位置3.2 处理定位失败的情况3.3 持续定位3.4 停止持续定位 四、总结 …...
【6】阿里面试题整理
[1]. ThreadLocal原理 ThreadLocal提供了一种线程隔离的机制,使得每个线程拥有自己独立的变量副本。 它的底层实现是ThreadLocalMap,以ThreadLocal对象为键,变量副本为值的键值对。 为了避免内存泄漏,ThreadLocalMap的Key使用了…...
Spring系统学习——持续更新
spring概述 1.轻量级的开源的JAVAEE框架 2.解决企业应用开发的复杂性 3.两大核心 :IOC(控制反转)和AOP(面向切面) 4.Spring特点: 1.方便解耦,简化开发。2.Aop编程支持3.方便程序测试4.方便和其…...
【自学笔记】机器学习基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 机器学习重点知识点总览一、机器学习基础概念二、机器学习理论基础三、机器学习算法1. 监督学习2. 无监督学习3. 强化学习 四、机器学习处理流程五、机器学习常见问…...
QT笔记——QRadioButton
文章目录 1、概要2、实际的应用2.1、创建多个QRadioButton,只可同时选中其中一个,点击后实现对应的槽函数 1、概要 实现QRadioButton相关的应用;2、实际的应用 2.1、创建多个QRadioButton,只可同时选中其中一个,点击后实现对应的槽函数 创建…...
微服务面试题:远程调用
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
共享设备管理难?MDM助力Kiosk模式一键部署
目录 1. 简化设备部署与配置:实现一键式部署 2. 自动化应用更新与内容推送:确保设备始终保持最新状态 3. 权限控制与设备安全:防止滥用与数据泄露 4. 远程管理与故障诊断:保障设备长期稳定运行 5. 数据分析与报告:…...
C++17 中的 std::reduce:详细教程
文章目录 1. 简介2. 函数签名3. 使用场景3.1 简单的累加操作3.2 自定义归并操作3.3 并行计算的性能优势 4. 注意事项4.1 归并操作的结合律和交换律4.2 默认值的使用 5. 总结 1. 简介 std::reduce 是 C17 标准库中引入的一个算法,用于对范围内的元素进行归并操作。它…...
Navicat导入海量Excel数据到数据库(简易介绍)
目录 前言正文 前言 此处主要作为科普帖进行记录 原先Java处理海量数据的导入时,由于接口超时,数据处理不过来,后续转为Navicat Navicat 是一款功能强大的数据库管理工具,支持多种数据库系统(如 MySQL、PostgreSQL、…...
【Map vs Set】:Java数据存储的“双子星”对决
个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 目录 🍰一、搜索 🍮1.概念 🍮2.模型 🍰二、Map 🍨1.什么是Map? 🍨2.Map的实例化 &…...
储能能量管理监测系统在储能物联网中的应用优势
安科瑞刘鸿鹏 摘要 本文探讨了微电网能量管理系统在现代储能物联网中的应用。随着能源危机和新能源技术的发展,微电网技术成为利用新能源电力的重要方向。微电网能量管理系统通过实时监控、智能预测、协调控制和经济调度等功能,优化能源使用࿰…...
用户管理中心--注册登录功能的设计
文章目录 1.定义接口2.注册逻辑的实现2.1引入依赖2.2注册逻辑2.3测试方法 3.登录逻辑的实现3.1接口的定义与实现3.2记录用户的登录态3.3脱敏处理 1.定义接口 在userService这个接口里面定义我们的userRegister方法,表示的是我们的用户的注册的相关的逻辑࿱…...
【删除tomcat默认管理控制台】
停止Tomcat: ./catalina.sh stop 删除管理控制台应用: 进入Tomcat的webapps目录: cd /path/to/tomcat/webapps List item 删除manager和host-manager文件夹: rm -rf manager host-manager 启动Tomcat: ./catali…...
Java虚拟机面试题:JVM调优
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
MySQL 插入替换语句(replace into statement)
我们日常使用 insert into 语句向表中插入数据时,一定遇到过主键或唯一索引冲突的情况,MySQL的反应是报错并停止执行后续的语句,而replace into语句可以实现强制插入。 文章目录 一、replace into 语句简介1.1 基本用法1.2 使用set语句 二、注…...
基于单片机的多功能热水器设计(论文+源码)
2.1系统方案设计 基于单片机的多功能热水器系统,其系统框图如图2.1所示。主要采用了DS18B20温度传感器,HC-SR04超声波模块,STC89C52单片机,液晶,继电器等来构成整个系统。硬件上主要通过温度传感器进行水温的检测&…...
DeepSeek R1本地部署 DeepSeek Api接口调用 java go版本
1、本地ollama的API接口 接着上一章所本地部署deepseek,这一章我们调用ollama api 对应的curl: curl --request POST \--url http://localhost:11434/api/generate \--header Accept: */* \--header Accept-Encoding: gzip, deflate, br \--header Con…...
使用python脚本提取html网页上的所有文本信息
你可以使用 BeautifulSoup 库来提取 HTML 网页上的所有文本信息。以下是一个示例脚本: 步骤 安装 beautifulsoup4 和 requests(如果尚未安装): pip install beautifulsoup4 requestsPython 脚本: import requests fro…...
