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

注:目前常用的AI客户端只有CherryStudio工具的知识库支持训练本地素材

1.2.3 在CherryStudio中配置密钥

  配置密钥是为了能够让CherryStudio使用AI供应商(这里是硅基流动)的模型

  1. 步骤1:在siliconflow网站登录后,拷贝自己的密钥,如下图所示:

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

1.3 训练本地知识库(EverEdit的语法着色规则)

  1. CherryStudio中新建本地知识库,如下图所示:

    注:如果已经创建过EverEdit本地知识库,就不用重复创建了。

  2. EverEdit自带的语法文件丢给CherryStudio消化,如下图所示:
      知识库有两部分,一是EverEdit内置的语法着色文件,二是EverEdit的语法着色规则介绍文件(帮助文档)。
      消化完成后,会出现绿色的“√”符号

1.3.1 在CherryStudio中使用本地知识库(EverEdit)和DeepSeek在线模型生成zig语法着色文件

1.3.1.1 打开知识库开关,并选择本地知识库,如下图所示:

  1. CherryStudio的导航栏选择“助手”按钮,切换到助手模式

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

1.3.1.2 提问让AI生成zig语法文件,并不断进行修正

  1. 让AI生成一份EverEdit编辑器的zig语法着色文件

    注:以上是和AI的对话记录,用户内容部分即本人在CherryStudio聊天窗口中输入的内容, 下同。

  2. 顺手让AI生成1份Zig源代码用于测试

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();
}
  1. 将AI生成的zig.mac语法着色文件保存到EverEdit安装目录下的syntax目录

  2. 参考配置EverEdit语法着色zig语法进行配置

  3. 告诉AI哪里出了错误,如下所示:


    注:后面还有一些错误调试,就不一一列举了。

  4. 最终的着色结果

    注:一般的编辑器都没有部署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. ElasticSearch业务逻辑案例

    ElasticSearch业务逻辑案例 一.业务难题 我们有一个索引: myindex/mytype(为了方便,我们下文以a/b表示) 索引类型中的一个字段group之前是a.b.c(历史遗留问题), ...

  2. 内存回收导致关键业务抖动案例分析-论云原生OS内存QoS保障

    蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 云原生场景,相比于传统的IDC场景,业务更加复杂 ...

  3. 老旧业务重构案例——IM系统如何设计

    一年半之前刚来到这个团队,便遭遇了一次挑战: 当时有个CRM系统,老是出问题,之前大的优化进行了4次小的优化进行了10多次,要么BUG重复出现,要么性能十分拉胯,总之体验是否糟糕!技术团队因此受到了诸 ...

  4. AI的博弈论,一份插图教程

    介绍 我想先问一个简单的问题--你能认出下图中的两个人吗? 我肯定你说对了.对于我们这些早期数学发烧友来说,电影<美丽心灵>(A Beautiful Mind)已经深深地印在了我们的记忆中 ...

  5. 跨域的案例 以百度接口/手写接口为例,还有jQuery写法

    仅在js部分输入即可 百度接口的案例 <script> function fn(data){ console.log(data) } </script> <script ...

  6. 超越Mask-RCNN:谷歌大脑的AI,自己写了个目标检测AI

    这是一只AI生出的小AI. 谷歌大脑的Quoc Le团队,用神经网络架构搜索 (NAS) ,发现了一个目标检测模型.长这样: △ 看不清请把手机横过来 它的准确率和速度都超过了大前辈Mask-RCNN ...

  7. 让 AI 为你写代码 - 体验 Github Copilot

    前几天在群里看到有大神分享 Copoilot AI 写代码,看了几个截图有点不敢相信自己的眼睛.今天赶紧自己也来体验一下 Copoilot AI 写代码到底有多神奇. 申请 现在 Copoilot 还 ...

  8. 【Shell案例】【wc、awk、cat、管道】1、统计文件的行数

    描述写一个 bash脚本以输出一个文本文件 nowcoder.txt中的行数示例:假设 nowcoder.txt 内容如下: #include <iostream> using names ...

  9. 分布式文件系统FastDFS详解

    上一篇文章<一次FastDFS并发问题的排查经历>介绍了一次生产排查并发问题的经历,可能有些人对FastDFS不是特别的了解,因此计划写几篇文章完整的介绍一下这个软件. 为什么要使用分布式 ...

  10. Linux下FastDFS分布式存储-总结及部署记录

    一.分布式文件系统介绍分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System.一种允许文件通过网络在多台主机上分享的文件系 ...

随机推荐

  1. geocodeCN:一个批量将地址转为地理坐标的插件

    目录 1. 介绍 2. 使用步骤: 2.1 安装 2.2 配置 2.3 坐标匹配 2.4 生成图层 2.5 导出为CSV 3. 说明 1. 介绍 这是一个QGIS插件,主要用于批量地理编码,即将地址转 ...

  2. Vue3 组合式API

    1.入口 创建实例时,配置setup方法,然后其内部书写组合式API代码,通过组合式API生产的数据和返回,需要暴漏出去才能给HTML使用 <script> //组合式(解构赋值) con ...

  3. OceanBase 的探索与实践

    作者:来自 vivo 互联网数据库团队- Xu Shaohui 本文总结了目前我们遇到的痛点问题并通过 OceanBase 的技术方案解决了这些痛点问题,完整的描述了 OceanBase 的实施落地, ...

  4. 微软中文输入法带来的一点小坑,导致arcgispro输入中文异常

    有同事反映,在Pro中新建要素类时,没办法设定名称为"新建",会自己变成不完整的拼音. 查看了一下,确有此事. 在相同的界面里还有其他输入框,却没有这种情况. 研究了一下,发现是输 ...

  5. 【双堆懒删除】codeforces 1294 D. MEX maximizing

    前言 双堆懒删除 当需要维护若干元素中的最大值(或最小值)时,可以用一个堆维护,但是堆只擅长处理堆顶元素,对堆中任意元素的处理就束手无策了.此时,可以引入另外一个堆,我们定义原来的堆为保存堆 \(ex ...

  6. Flutter null safety 无法运行

    Flutter空安全问题 在pub上有一些库导入之后无法运行,这是因为健全的空安全 解决方法 1.在命令行中添加参数 flutter run --no-sound-null-safety 2.在IDE ...

  7. 【WEB前端】【报错解决】This request has been blocked; the content must be served over HTTPS.

    问题描述 部署WEB项目后,开启了强制HTTPS,产生如下错误: Mixed Content: The page at 'https://ask.mllt.vip/index.php/data1.ht ...

  8. 【C#】【ffmpeg】外部调用线程执行ffmepg读取返回的信息乱码问题

    起因 C#使用FFmpeg获取电脑音视频可以用设备,当返回内容包含中文时,出现乱码问题 解决方案 ffmpeg本身的输出都是使用的错误输出,所以设置的是StandardErrorEncoding,如果 ...

  9. Qt数据库应用2-数据导出到xls

    一.前言 导入导出数据到csv由于语法简单,适用场景有限,于是乎还是必须再造一个轮子导出数据到xls,在经历过数十年的项目实战经验中不断调整和优化.尤其记得当初第一个版本v0.01大概在2011年左右 ...

  10. Qt编写安防视频监控系统67-跨平台及国产系统

    一.前言 得益于Qt的超强跨平台特性,本系统也是跨平台的,亲测的系统包括windows全系列.ubuntu全系列.centeos.国产系统UOS.国产系统银河麒麟.中标麒麟.嵌入式linux.树莓派. ...