光明之路_Trae开发宣传_济宁聚会 9.12日《光明之路》讲演稿
配套 PPT:
光明之路_Trae开发宣传_济宁聚会.pptx(13 页)建议时长:约 18--20 分钟(每页标注了参考时间)
场合:济宁 Trae 聚会
光明项目repo:GitHub - skywalk163/light · GitHub
开场白(约 1 分钟)
大家好,今天我分享的主题是《光明之路------用 Trae 开发一门中文编程语言》。
这个标题有两层意思:一是"光明"真的是一门编程语言,一门用中文关键字写代码的语言;二是这条路确实是一步一步走出来的------从 8 月的品牌焕新,到 9 月用这门语言去复刻一个 AI 智能体框架,全程都是用 Trae 开发的。
在座的如果用过 Trae 写小工具、改 bug,那今天你看到的是:Trae 不止能帮你改代码,它还能帮你研发一门语言。过程中我们沉淀了一套"任务书 + 契约 + 并行分发"的打法,最后我会把这些小技巧总结给大家,可以直接带走。
P1 封面 --- 约 0.5 分钟
(放 PPT,先别急着讲,停 1--2 秒)
"光明"是我们的名字,也是这个项目的名字。屏幕上是一小段光明代码------设 版本 为 "v7.0",段 主():,输出("你好,光明!")。注意,它全是中文。右下角那句"打印 语言.自举率",指的是这个编译器有 72.41% 是用它自己写的。一会儿我会解释"自举"是什么意思。
今天的主线就一句话:一门用中文思考的语言,是怎么用 Trae 一路开发、测试、升级到现在的。
术语小贴士
- 自举(Bootstrap):用一门语言自己写自己的编译器,就像"用自己的爪子把自己提起来"。
- 光明(LightLang):本项目开发的中文编程语言,代码全中文关键字。
P2 目录 --- 约 0.5 分钟
我的分享分五块:
- 先认识光明这门语言;
- 再看它最近两个月用 Trae 开发的真实历程;
- 重点讲我们的核心打法------任务分发的三个特点;
- 讲一个我们引以为傲的案例:用光明去复刻 DeepSeek Harness;
- 最后总结 Trae 好在哪,以及 AI 开发的小技巧。
术语小贴士
- Harness:直译是"缰绳/夹具",AI 圈子里指"给大模型套上工具、让它能动手做事"的智能体框架。
P3 光明是什么 --- 约 1.5 分钟
先回答"光明到底是什么"。
它是一门全中文关键字 的编程语言。左下这句是它的设计哲学:借鉴中文"3000 常用字覆盖各学科"的思路------用最少的核心字,组合出无限的表达。具体就是30 个 L0 核心字,像"若、否、当、遍"这些控制流字,"设、段、类"这些定义字,永久冻结、永不修改,全部高层语法都由它们组合出来。
右边的数字是它的家底:
- 30 个核心字,构成稳定内核;
- 109 个标准库模块,数学、网络、加密、中文分词、Agent 循环......应有尽有;
- 711 项原生腿能力,内置函数加运行时函数,直接编进 C 运行时;
- 72.4% 自举率,编译器大部分是它自己写的;
- 三后端、两种方言------白话体像日常说话,给青少年入门;文言体精炼,给商用大项目。
术语小贴士
- L0 核心字:光明语言最底层、永久冻结的 30 个关键字,所有复杂语法都由它们组合而来。
- 标准库(stdlib):语言自带的常用功能集合,不用自己造轮子,直接导入就能用。
- 原生腿(Native Leg):光明里"原生实现"的能力------内置函数(builtin)和运行时函数(runtime)直接编进 C/LLVM,不依赖 Python 解释器;团队还通过"原生腿覆盖"把标准库的 Python 实现逐步替换成纯光明实现。
- 自举率:编译器代码里由语言自己实现的部分所占比例,72.4% 意味着编译器的"核心骨架"是光明自己写的。
- 白话体 / 文言体:光明提供的两套"说话风格"------白话体像日常中文对话,低门槛;文言体像古文一样精炼、适合大型工程。
- LLVM 原生编译:把光明代码编译成机器码,编译出来的程序不依赖 Python 运行时。
P4 真实历程 --- 约 1.5 分钟
这条时间线,是我今天最想给大家看的:一个真实项目,两个月,七大步,每一步都是"Trae 并行分发 + 契约合入"的产物。
- 8 月 · 品牌焕新:项目原名"段言",更名为"光明",品牌名在代码、文档、Playground 里分三批清理干净;
- 8 月 · 能力筑基:分布式、地板自举、并发内核、内置直调四批任务,把语言的内核能力补齐;
- 8 月 · 原生腿批次 R10--R13:把标准库里的 Python 实现一批批"翻译"成纯光明实现,对拍测试每批全绿;
- 9 月 · lightharness:开始用光明复刻 DeepSeek Harness,这是故事的转折点------语言第一次被拿来写"AI 工具本身";
- 9 月 · 语言升级:写 lightharness 时踩出 11 条语言缺陷(L-068~L-078),登记成账本,分 D1--D3 批次修掉;
- 9 月 · 6 路并行:0.88 验证机全量测试跑出 145 个失败,拆成 6 路并行,一次收敛干净。
术语小贴士
- 原生腿覆盖:给标准库"换腿"------把用 Python 写的模块,改写成纯光明(.light)实现,让标准库真正"用光明写光明"。
- Playground:在线写代码的实验场,光明用它做网页端快速试玩。
- 0.88 验证机:团队里一台 FreeBSD 系统 + clang 编译器的远端验证机器(环境代号 0.88),专门用来做跨平台全量回归,补 Windows 本机测不到的平台差异。
P5 核心工作流 --- 约 1.5 分钟
这是我们的七步流水线,也是整个项目能运转起来的引擎:
- 需求 → 先做差距分析,搞清楚"现在差在哪";
- 任务书 → 把需求写成一份"任务书":目标、范围、契约、验收标准全写清楚;
- 并行派单 → 拆成多路,每一路交给一个独立的 agent 会话,一路一分支;
- 开发自测 → 每个 agent 改完先在自己分支上跑测试,对拍验证;
- 契约合入 → 走 PR 合并,契约不变,冲突天然少;
- 回归闸门 → 合入前跑基线检查,只拦"新增"的失败;
- 交付报告 → 每批交付"改了啥、验了啥、遗留啥",配上查收记录。
这套流程的关键词是"契约 "和"并行"------下面三个特点就是围绕它们展开的。
术语小贴士
- 任务书:给 AI 的"单份作业说明书",把目标、范围、接口约定、验收标准一次写清,agent 拿到就能独立开工。
- PR(Pull Request,合并请求):把分支代码合回主线的申请过程,合入前会被检查和评审。
- 回归(Regression):改完代码后重跑全部测试,确保没把原本好的功能改坏。
- CI(持续集成):代码一提交就自动触发测试和检查,问题越早暴露越好。
P6 特点① 任务书制 --- 约 1.5 分钟
第一个特点是外发任务 + 任务书。
左边的五要素就是一份任务书的标配:目标与背景、任务拆分、共享契约、验收标准、交付要求。为什么这么写?因为 agent 没有"上下文记忆",它每次开工都是"新员工第一天"------你把作业写清楚,它就能直接干活,不用反复追问。
右边是真实案例:lightharness 的 E 批次任务书。我们把"复刻 deepseek-harness 核心能力"拆成 E1 到 E5 五个任务,共享 5 条契约:工具事件格式、会话 API、审批事件、agent 钩子、路由认证规则。
术语小贴士
- 外发任务:把一个需求写成任务书,"外发"给一个独立的 agent 会话去执行,是团队最主要的派单方式。
- 共享契约:任务之间提前约定好的接口格式------事件结构长什么样、API 路由叫什么、钩子函数怎么签名,大家照这个对接。
- agent 钩子(Hook):在 agent 循环的固定位置留出的"插槽"(比如调用工具前、调用工具后),各任务往插槽里注册自己的逻辑,互不干扰。
P7 特点② 并行分发 --- 约 2 分钟
第二个特点是并行分发 。核心判断标准就一句话:任务粒度 = 一个 agent 会话能独立完成的范围。
左边是 E1--E5 的依赖图:E1 工具系统、E2 会话持久化、E5 压缩与计量,三个任务零依赖,完全并行;E3 和 E4 依赖 E1/E2 的契约,就先搭 UI 框架,接口定好一天对接完。五个任务同时开工,一次集成全过。
右边是更"硬核"的例子:0.88 验证机全量测试跑出 145 个失败,我们把它按文件映射成 6 路------环境健康、stdlib 对齐、测试方言、运行时真 bug、语言升级、缺陷账收敛。每路一个 agent 会话,互不碰对方文件,最后 145 个失败全部有归属:已修、已 xfail、已登记待修,没有一个"无人认领"的红灯。
并行的底气来自两条纪律:分支纪律 (每人只动自己那路的文件)和基线闸门(只拦新增失败)。
术语小贴士
- xfail:给测试打上"预期失败"标记,已知的暂时性限制先标出来,不让它拖红整条 CI。
- 基线闸门(check_regression.py):维护一份"已知失败清单",CI 时只拦截清单之外的"新增"失败,避免存量问题反复误伤。
- 验证机:独立于本机的远端测试环境,用于跑本地覆盖不到的跨平台回归。
P8 特点③ 缺陷账 --- 约 2 分钟
第三个特点是我个人最喜欢的:缺陷账,开发即测试。
左边是语言升级的"正向飞轮",专业说法叫 Dogfooding------吃自家狗粮:我们用光明写 lightharness,写着写着就踩到语言本身的缺陷,比如不支持十六进制字面量、没有闭包。每踩一个,就登记一条缺陷账(L-068 到 L-078,一共 11 条),每条带上最小复现和期望行为,然后安排 D 批次并行修复。语言每强一点,我们就能写出更复杂的工具------飞轮就这样转起来。
lightharness 的 README 里那句话是最好的注脚:"复刻的目的不是照抄代码,而是检验这门语言------凡是写不出来、写出来是错的、绕不过去的地方,就是光明需要改进的清单。"
右边是 11 条缺陷的节选:类方法边界、JSON 布尔序列化、默认参数字面量、字典安全访问、转字符串、错误消息中文化、类型判型内置化、hex 字面量、空 保留字、列表方法不全、闭包。每修一条,都补最小复现测试 + 双后端验证,保证不再复发。
术语小贴士
- Dogfooding(吃自家狗粮):自己用自己做的产品,用出问题就修,产品因此越来越成熟。
- 缺陷账:像记账一样把发现的语言缺陷登记在册,每条含"复现方式 / 期望行为 / 当前绕法",统一排期根治,而不是随手绕过去。
- 闭包(Closure):嵌套函数能"记住"外层变量的能力。光明最初不支持闭包,团队只能用"类 + 绑定方法"绕行,修好后才能写有状态的回调。
- 绑定方法(Bound Method):对象上带着自身状态的方法,闭包出现之前用它给回调传状态。
- hex 字面量 :以
0x开头的十六进制数写法,例如0x4E00直接表示"一"的 Unicode 码点。
P9 lightharness --- 约 1.5 分钟
第四部分是 lightharness,这是整个项目最"浪漫"的一页------用一门语言去复刻 AI 智能体框架。
DeepSeek Harness 是 DeepSeek 开源的 agent 智能体框架,全插件化架构,60 多个包。lightharness 用光明把它 1:1 复刻出来,一开始只有"能聊天的网页",现在已经是"能调用工具做事的 agent harness":
- E1 工具系统:bash、读文件、写文件、搜索四大工具,还带路径安全护栏;
- E2 会话持久化:JSONL 存储,刷新不丢;
- E4 权限与审批 :四种权限预设 + 危险命令检测,
rm -rf /直接拒绝; - E5 压缩与令牌计量:按 5 种模型单价估算花费,超长对话自动压缩;
- E3 Web UI:三栏布局、工具调用卡片、移动端适配。
188 个回归测试全绿。而更重要的是互相成就:lightharness 踩出的每条缺陷都成为光明升级的输入,光明每升一级,lightharness 就能删掉一条"绕法"。
术语小贴士
- agent 循环:大模型与工具之间反复"思考 → 调用工具 → 看结果 → 再思考"的循环,是智能体的心脏。
- JSONL:每行一个 JSON 对象的存储格式,方便追加记录和回放历史,常用于会话日志。
- 令牌计量(Token 计量):把对话消耗的 token 数换算成具体花费,避免不知不觉烧钱。
- 上下文压缩:对话太长时,把旧内容压成摘要再继续,防止超出模型上下文窗口。
- 危险命令检测 :对
rm -rf /这类高危命令直接拒绝执行的安全机制。
P10 质量保障 --- 约 1.5 分钟
AI 写代码,最大的疑虑是"它写的对不对"。我们的答案就四个字:让 AI 验证 AI。
- 对拍测试:同一功能写两个实现(Python 转译腿 vs 原生光明),喂同样的输入,逐条比对输出,行为一致才算过;
- 反跑判据:这是我们的"照妖镜"------故意把实现改成空壳,如果测试立刻变红,就证明这个测试真的在拦截;如果没红,说明测试是摆设,重写;
- 基线闸门:只拦新增失败,不误伤存量;
- 双环境验证:本地 Windows + 0.88 FreeBSD 双跑,平台差异当场现形。
每批任务交付还标配"三件套":交付报告 (改了啥、验了啥、遗留啥)、查收记录 (逐条核对验收)、集成验收清单(反跑 12 项 + 前端 5 项逐项打勾)。
术语小贴士
- 对拍测试(Cross-check):两个实现跑同样的输入、逐条比对输出,是验证"转译/重写"是否正确最直接的方法。
- 反跑判据:故意把实现改坏(改成空壳),测试必须变红,以此证明测试有真实的拦截能力。
- 转译腿(Transcode Leg):先按 Python 语义"转译"出一版实现作为参照,再与原生光明实现对拍。
- 集成验收清单:把验收动作一条条列成清单,逐项打勾,防止"觉得行了"但没真验证。
P11 为什么是 Trae --- 约 1.5 分钟
聊了这么多,回到最实际的问题:为什么是 Trae,而不是别的工具,甚至不是一个人力团队?
六条理由:
- 上下文与记忆:Trae 跨会话记得项目约束和历史决策,任务越做越顺,不用每次都重新交代背景;
- 并行 agent:一个需求拆 N 路,N 个会话同时开工,这直接支撑了我们前面讲的并行分发;
- 中文友好:任务书、代码、报告全中文,对一个中文编程语言项目来说零损耗;
- 规划先行:它能先出方案再动手,任务书、契约这些"文档活"都由 AI 自动产出;
- 测试驱动:让 AI 写测试来验证 AI 写的代码,就是我们"让 AI 验证 AI"的底层能力;
- 可视化一站:Web UI、图表、文档、甚至今天这份 PPT,都在同一个会话里完成。
最后还有一条红线:安全 。敏感信息只进 .env、不进代码,提交前自动检查------这是写进项目记忆里的硬规矩,Trae 每次都遵守。
术语小贴士
- .env 文件:存放密钥、Token、IP 等敏感配置的本地文件,不提交进版本库,代码里只读环境变量。
- 并行 agent:一次派多个独立的 AI 会话同时处理不同子任务,互不干扰、最后合流。
P12 小技巧 --- 约 2 分钟
最后,把这套打法浓缩成 8 条小技巧,大家拿回去就能用:
- 任务书思维:目标、范围、契约、验收一次写清,agent 拿来就干;
- 契约先行:先定接口格式再分头实现,这是并行不打架的前提;
- 粒度适中:任务 = 一个 agent 会话能独立完成的量,太大容易跑偏,太小浪费;
- 让 AI 写测试:对拍 + 反跑双保险,先证明测试有效,再让测试证明代码正确;
- 建立账本:缺陷、已知问题统一登记,不让坑消失,要根治;
- 双环境验证:本地 + 远端验证机双跑,平台差异当场现形;
- 分支纪律:一路一分支、PR 合入、回归闸门只拦新增;
- 交付报告:改了什么、验证什么、遗留什么,可追溯、可查收。
一句话总结:把 AI 当团队成员------给它任务书、契约和验收标准,再收它的交付报告。
术语小贴士
- 分支纪律:每个任务在独立分支上开发,互不污染,最后统一 PR 合入。
P13 结语 --- 约 0.5 分钟
(语气放缓)
一门中文编程语言,用 AI 持续迭代;
一个 AI 智能体框架,用这门语言复刻;
语言因此更强,工具因此更懂语言。
这大概就是"人机协作"最理想的样子------AI 不是替我们写代码,而是和我们一起,把一件原本不可能完成的事,一步步做成。
任务书、共享契约、并行分发、缺陷账、对拍反跑------这套打法,你也能带走。
谢谢大家!济宁 Trae 聚会,我们下次见。
附录 A:备用 Q&A 提示
- Q:光明是玩具语言吗?
答:它已经自举、有 LLVM 原生编译、109 个标准库、能用它写出 agent 智能体框架并跑 188 个回归测试,且正在被用于真实工具的研发。 - Q:145 个失败是怎么"6 路并行"收敛的?
答:先把失败按文件归类,映射到 6 个主题(环境/stdlib/测试方言/运行时/语言/账本),每路一个独立会话,只动自己文件,最后统一回归 + 基线更新。 - Q:Trae 和直接用 DeepSeek/其他模型有什么区别?
答:区别在"工程化"------任务书、记忆、并行会话、代码审查、可视化,这些让 AI 从"问答工具"变成"能协作的团队成员"。 - Q:普通人能用这套打法吗?
答:能。任务书思维和反跑判据对任何项目都适用,从小脚本到大型工程,粒度不同、逻辑相同。
附录 B:术语速查表
| 术语 | 一句话解释 |
|---|---|
| 自举(Bootstrap) | 用一门语言自己写自己的编译器 |
| L0 核心字 | 光明最底层、永久冻结的 30 个关键字 |
| 白话体 / 文言体 | 光明两套书写风格:口语化入门 / 精炼化工程 |
| 标准库 | 语言自带的功能集合,不用造轮子 |
| 原生腿 | 编进 C/LLVM 的原生能力,不依赖 Python;"原生腿覆盖"= 把标准库 Python 实现换成纯光明 |
| 三后端 | 自研解析器 / ANTLR / LLVM 原生三条编译路径 |
| 任务书 | 给 AI 的单份作业说明书:目标/范围/契约/验收 |
| 共享契约 | 任务间提前约定的接口格式,保证并行不打架 |
| 外发任务 | 把需求写成任务书,外发给独立 agent 会话执行 |
| 并行分发 | 一个需求拆多路,每路一个 agent 会话同时开工 |
| 分支纪律 | 一路一分支、互不污染、统一 PR 合入 |
| 基线闸门 | check_regression.py,只拦"新增"失败、不误伤存量 |
| 缺陷账 | 语言缺陷登记册:复现/期望/绕法,统一根治 |
| Dogfooding | 自己用自己做的产品,用出问题就修 |
| 对拍测试 | 两个实现跑同样输入、逐条比对输出 |
| 反跑判据 | 把实现改成空壳,测试必须变红,证明测试有效 |
| 转译腿 | 按 Python 语义转译出参照实现,与原生光明对拍 |
| xfail | 预期失败标记,已知限制不拖红 CI |
| 验证机 / 0.88 | 远端 FreeBSD + clang 的跨平台全量回归环境 |
| CI | 持续集成:代码一提交自动跑测试 |
| PR | 合并请求:分支合回主线的过程 |
| agent 循环 | 模型与工具"思考→调用→看结果→再思考"的循环 |
| Harness | 给大模型套工具、让它能动手做事的智能体框架 |
| JSONL | 每行一个 JSON 的日志格式,方便追加与回放 |
| 令牌计量 | 把 token 消耗换算成花费 |
| 上下文压缩 | 旧内容压成摘要,防止超上下文窗口 |
| 危险命令检测 | 对 rm -rf / 等高危命令直接拒绝 |
| 闭包 | 嵌套函数"记住"外层变量的能力 |
| 绑定方法 | 带对象状态的方法,闭包之前的绕法 |
| .env | 存放敏感配置的本地文件,不进版本库 |