- 人工智能
- 大模型
- LLM 网关
- AI Agent
- 即时通讯
【免费下载链接】openclaw-zero-token
OpenClaw: Use All Major AI Models NO API Token! Claude/ChatGPT/Gemini/DeepSeek/Doubao/Grok/Qwen/Manus/Kimi
导读:本文讲解 OpenClaw 仓库中 extensions/open-prose/skills/prose/alts/arabian-nights.md 定义的实验性语言寄存器(Register)——一套将 OpenProse 函数式关键字映射为《一千零一夜》叙事词汇的"皮肤层"语法。读完本文,你将理解 register(寄存器/词汇表变体)的机制、完整的
djinn/tale/bazaar/frame等关键字对照表、可运行的程序改写示例,以及它如何与 prose.md 的执行语义配合,用于对同一套 .prose 程序做多风格基准测试(benchmarking)。
什么是 OpenProse 的"寄存器"(Register)
OpenProse 是一门面向 AI 会话的编程语言:每个session语句都会通过 Task 工具真实地派生一个子代理(subagent)去执行任务,程序的递归、并行、错误处理等语义由 prose.md 中的 OpenProse VM 规范统一定义。为了让同一门语言能以不同"文体"呈现,OpenProse 提供了若干实验性替代寄存器:它们不是新语言,而是一张"关键字翻译表"。
Arabian Nights 寄存器正是其中之一,位于 extensions/open-prose/skills/prose/alts/,与 folk.md(民俗/童话)、homer.md(荷马史诗)、borges.md(博尔赫斯)、kafka.md(卡夫卡)等寄存器并列,供与函数式寄存器做对照基准测试。
该寄存器的文档自述非常直白(见 arabian-nights.md):
This is a skin layer.It requires
prose.mdto be loaded first. All execution semantics, state management, and VM behavior are defined there. This file only provides keyword translations.
也就是说:执行语义、状态管理、VM 行为全部由 prose.md 决定,本文件只提供关键字翻译。在这个叙事视角下,程序变成谢赫拉莎德(Scheherazade)讲述的故事,递归变成"故事中的故事",代理变成被契约束缚、必须服务的神灵(djinn)。
如何使用(How to Use)
按文档 arabian-nights.md 的规定,使用该寄存器需要严格遵循加载顺序:
- 先加载
prose.md(获得执行语义); - 再加载本文件(获得关键字翻译);
- 解析
.prose文件时,接受 Arabian Nights 关键字作为函数式关键字的别名(alias); - 所有执行行为保持完全一致——改变的只是表面语法。
设计约束同样继承自 OpenProse 语言宗旨:"structured but self-evident"(结构清晰且不言自明)——只不过这次是通过讲故事的透镜来做到"不言自明"。
值得强调的是,从 prose.md 的 CLI 路由看,OpenProse 程序统一通过prose run <file.prose>/prose compile <file>等命令运行;寄存器不引入新的 CLI 入口,它只是在加载 VM 后额外提供一组词汇表,这正符合"皮肤层"的定位。
完整翻译对照表(Complete Translation Map)
文档正文(arabian-nights.md)给出了六张完整的对照表,以下完整继承并补充语义说明。表中"Reference"列是该映射的隐喻依据,实际执行语义仍以函数式关键字为准。
核心结构(Core Constructs)
| 函数式 | 一千零一夜 | 隐喻依据 |
|---|---|---|
agent | djinn | 被束缚而必须服务的神灵,负责许愿 |
session | tale | 一个被讲述的故事,一个叙事单元 |
parallel | bazaar | 众多声音、众多摊位,同时开张 |
block | frame | 一个包含其他故事的故事(框架故事) |
补充说明:
block → frame的映射与 OpenProse VM 的调用栈模型高度契合。在 prose.md 中,block的调用会 push 一个栈帧、绑定参数、执行块体、pop 栈帧;而《一千零一夜》的框架故事(frame story)正是"一个故事套着更多故事"——文档将其视为"递归的自然隐喻"。
组合与绑定(Composition & Binding)
| 函数式 | 一千零一夜 | 隐喻依据 |
|---|---|---|
use | conjure | 从别处召唤而来 |
input | wish | 向神灵提出的请求 |
output | gift | 神灵回赠的礼物 |
let | name | 命名即拥有力量(与 folk 寄存器相同) |
const | oath | 不可违背的誓言,一经封印 |
context | scroll | 写下来并传递下去的卷轴 |
补充说明:
const → oath的映射直指 OpenProse 的不可变绑定语义。在 compiler.md 的实现状态表中,const绑定与let绑定的关键区别在于不可重新赋值,而"不可违背的誓言"恰好是"不可变性"的完美隐喻。
控制流(Control Flow)
| 函数式 | 一千零一夜 | 隐喻依据 |
|---|---|---|
repeat N | N nights | "一千零一夜……" |
for...in | for each...among | 穿梭于商贾之间、穿梭于故事之间 |
loop | telling | 讲述在继续 |
until | until | 保持不变 |
while | while | 保持不变 |
choice | crossroads | 故事分岔之处 |
option | path | 故事可能走向的一条路 |
if | should | 叙事性条件判断 |
elif | or should | 延续的条件判断 |
else | otherwise | 另一种讲述 |
补充说明:
until、while之所以"保持不变",是因为它们已被 shared-appendix.md 统一列为"无需翻译的关键字"——同理还有**...**判定标记、map/filter/reduce/pmap管道算子、max约束修饰符、as别名,以及sonnet/opus/haiku模型名。这意味着你可以在阿拉伯之夜程序里继续直接写loop until **the code is bug-free**这样的条件循环。
错误处理(Error Handling)
| 函数式 | 一千零一夜 | 隐喻依据 |
|---|---|---|
try | venture | 踏上旅程 |
catch | should misfortune strike | 故事转向黑暗 |
finally | and so it was | 不可避免的结局 |
throw | curse | 宣告厄运 |
retry | persist | 英雄再次尝试 |
补充说明:
retry → persist对应 prose.md 中 session 的retry: N与backoff: "exponential"属性——失败后重试最多 N 次,并应用退避延迟。
会话属性(Session Properties)
| 函数式 | 一千零一夜 | 隐喻依据 |
|---|---|---|
prompt | command | 向神灵下达的命令 |
model | spirit | 由哪位神灵来应答 |
实操改写示例:从函数式到一千零一夜
文档在翻译表之后给出了四组可运行的对照示例,并给出了"推荐改写目标"清单(见 arabian-nights.md):session示例改写成tale、parallel示例改写成bazaar、loop示例改写成telling、try/catch/finally示例改写成venture/should misfortune strike/and so it was、choice示例改写成crossroads/path。全部示例完整继承如下。
条件判断(Conditionals)
函数式版本(可在 examples/25-conditionals.prose 中找到同类范式):
# Functional if **has security issues**: session "Fix security" elif **has performance issues**: session "Optimize" else: session "Approve"一千零一夜版本:
# Nights should **has security issues**: tale "Fix security" or should **has performance issues**: tale "Optimize" otherwise: tale "Approve"这里的**...**判定标记(discretion marker)属于 shared-appendix 中"不变关键字",由 VM 依据全部先前会话输出做语义化智能判断,而非字面解析——详见 prose.md 的判定评估方法。
可复用块:框架故事(Reusable Blocks / Frame Stories)
函数式版本(对应 examples/14-composition-blocks.prose 的block+do模式):
# Functional block review(topic): session "Research {topic}" session "Analyze {topic}" do review("quantum computing")一千零一夜版本:
# Nights frame review(topic): tale "Research {topic}" tale "Analyze {topic}" tell review("quantum computing")注意两处改写:block → frame、do → tell(do的叙事化替换)。块定义支持参数与字符串插值({topic}在执行前被替换为变量值,见 prose.md),也支持递归调用自身——这与"故事中的故事"的框架叙事结构一一对应,是文档判定"frame 关键字对可复用块尤其贴切"的直接原因(谢赫拉莎德的框架故事里装着上千个故事)。
固定迭代(Fixed Iteration)
函数式版本(对应 examples/20-fixed-loops.prose 的repeat模式):
# Functional repeat 1001: session "Tell a story"一千零一夜版本:
# Nights 1001 nights: tale "Tell a story"repeat N → N nights是文档中作者自认为"最令人愉悦"的一处映射——"For a thousand and one nights..."。执行语义不变:按 prose.md 的循环语义,身体严格顺序执行恰好 N 次。
不可变绑定(Immutable Binding)
函数式版本:
# Functional const config = { model: "opus", retries: 3 }一千零一夜版本:
# Nights oath config = { spirit: "opus", persist: 3 }这里演示了"嵌套翻译":外层const → oath,对象字面量内的model → spirit、retries → persist也一并翻译;其中opus属于 shared-appendix.md 中保持不变的三模型名(sonnet/opus/haiku)之一。oath语义与函数式const完全一致:一经绑定不可重新赋值。
为什么要用一千零一夜(The Case For Arabian Nights)
文档给出的正面论据(arabian-nights.md)可归纳为六点,其中前三点的说服力最强:
- 框架叙事即递归(Frame narrative is recursion):故事套故事完美映射嵌套程序调用;
- 神灵/愿望/礼物三件套:
agent/input/output的映射极其干净; - 传统底蕴深厚:《一千零一夜》全球知名;
- Bazaar 代表并行:众多商贩、众多摊位、同时活跃——比喻生动;
- Oath 代表 const:不可违背的誓言是"不可变性"的完美隐喻;
- "1001 nights" 作为循环次数妙趣横生。
从实现角度佐证第 1 点:OpenProse VM 确实用调用栈管理block的递归调用(含execution_id、depth等栈帧字段,默认递归深度上限 100,见 prose.md),框架故事结构可以原样映射到这套栈式执行模型上。
反对理由与风险(The Case Against Arabian Nights)
文档同样诚实地列出了反对论据(arabian-nights.md):
- 文化敏感性问题:必须审慎处理,避免落入"东方主义"(Orientalist)刻板印象;
- "Djinn" 发音困扰:不熟悉的用户可能不确定该读 jinn / djinn / genie;
- 部分映射略显牵强:"Bazaar" 表并行虽生动但不直观;
- "Should misfortune strike" 太长:作为
catch的别名不够简洁。
这些反对理由与 folk 寄存器的顾虑(文化知识门槛、难以搜索、可能显得矫饰,见 folk.md)形成了很好的对照,也解释了为什么这些寄存器统一定位为"experimental / draft"并仅用于基准测试,而非替代函数式主语法。
核心概念速查(Key Arabian Nights Concepts)
| 术语 | 含义 | 用于 |
|---|---|---|
| Scheherazade | 为求生而讲述故事的说书人 | (程序的作者) |
| Djinn | 被束缚而必须服务的超自然神灵 | agent→djinn |
| Frame story | 包含其他故事的故事 | block→frame |
| Wish | 向神灵提出的请求 | input→wish |
| Oath | 不可违背的承诺 | const→oath |
| Bazaar | 市场,众多商贩 | parallel→bazaar |
被否决的备选方案(Alternatives Considered)
文档为四个核心词提供了详细的选词推敲过程(arabian-nights.md),完整继承如下——这部分展示了该寄存器设计的词源学严谨性:
对djinn(agent)的备选
| 关键字 | 被否决的原因 |
|---|---|
genie | 迪士尼联想,不够文学 |
spirit | 已被用于model |
ifrit | 过于具体(是 djinn 的一种) |
narrator | 过于元叙事,谢赫拉莎德才是用户 |
对tale(session)的备选
| 关键字 | 被否决的原因 |
|---|---|
story | 不错,但tale更具文学性 |
night | 保留给repeat N nights |
chapter | 更偏向西方/小说化 |
对bazaar(parallel)的备选
| 关键字 | 被否决的原因 |
|---|---|
caravan | 有顺序意味(一个接一个) |
chorus | 希腊传统,传统不对口 |
souk | 知名度较低 |
对scroll(context)的备选
| 关键字 | 被否决的原因 |
|---|---|
letter | 太小/太私密 |
tome | 太大 |
message | 太平淡 |
这种"列出候选 + 说明否决理由"的选词模式在该系列寄存器中一以贯之——例如 folk 寄存器为sprite(agent)同样列出了spark/wisp/herald/courier/envoy的否决理由(见 folk.md)。
结论与适用场景(Verdict)
文档最终结论(arabian-nights.md):该寄存器被保留(Preserved)用于基准测试。一千零一夜寄存器提供了与递归、嵌套程序自然契合的叙事框架,其中djinn/wish/gift三件套尤其优雅。它最适合:
- 深度嵌套的程序(故事中的故事);
- 感觉像在"许愿"的工作流;
- 喜爱叙事框架的用户。
而frame关键字对可复用块尤其贴切——谢赫拉莎德的框架故事中装着千个故事。
在 OpenProse 寄存器家族中的定位
从仓库结构看,该寄存器属于 extensions/open-prose/skills/prose/alts/ 目录下的实验性寄存器家族,每个寄存器共享同一套 shared-appendix.md(不变关键字 + 统一对照改写模式),并要求先加载 prose.md 才能生效。兄弟寄存器各具气质:
- folk.md:民俗/剧场风(
sprite/scene/ensemble/act); - homer.md:荷马史诗风(
hero/trial/host/book); - borges.md:博尔赫斯式的博学/形而上学风;
- kafka.md:卡夫卡式的官僚/荒诞风(
clerk/proceeding)。
按照 shared-appendix 的对照改写模式,所有寄存器都要求"保留函数式版本完整,只改写寄存器专属别名",从而保证同一套业务逻辑可以用六种文体分别呈现、供可学习性(learnability)、可记忆性(memorability)、出错率(error rates)与用户偏好(preference)四个维度的基准实验(这一实验框架在 folk.md 中有明确表述)。
延伸阅读
- OpenProse 执行语义规范(VM):所有寄存器的语义底座,含完整语法文法、并行策略、错误传播与调用栈管理;
- 编译器/校验器规范:语法验证与规范化规则;
- 共享附录:不变关键字清单与统一对照改写模式;
- OpenProse 技能入口(SKILL.md):激活时机、命令路由与示例索引;
- 函数式示例程序:examples/14-composition-blocks.prose、examples/16-parallel-reviews.prose、examples/20-fixed-loops.prose、examples/22-error-handling.prose、examples/24-choice-blocks.prose——可作为改写为 Arabian Nights 语法的对照蓝本。
- 人工智能
- 大模型
- LLM 网关
- AI Agent
- 即时通讯
【免费下载链接】openclaw-zero-token
OpenClaw: Use All Major AI Models NO API Token! Claude/ChatGPT/Gemini/DeepSeek/Doubao/Grok/Qwen/Manus/Kimi
相关推荐
OpenClaw 内置 OpenProse Skill:用 .prose 编程语言编排多智能体工作流
OpenClaw 内置 OpenProse Skill:用 .prose 编程语言编排多智能体工作流 OpenProse 是一套以 .prose 文件为程序、以
人工智能大模型LLM 网关AI Agent即时通讯OpenClaw OpenProse 插件使用指南:用 .prose 程序编排多智能体工作流
OpenClaw OpenProse 插件使用指南:用 .prose 程序编排多智能体工作流 OpenProse 是一个面向 AI 会话的编程语言扩展:它以 .
人工智能大模型LLM 网关AI Agent即时通讯OpenProse 示例库与编排模式全解析:从语法速查到多智能体工作流实战
OpenProse 示例库与编排模式全解析:从语法速查到多智能体工作流实战 本篇指南围绕 OpenProse(一种用于编排 AI 会话的编程语言)在 openc
人工智能AI Agent即时通讯后端本地部署语音
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考