playbook/rulesets/tsl/index.md

142 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TSL 智能体规则
文档类型:高优先级智能体决策规则
是否可直接用于生成代码:否
作用:控制智能体在阅读、修改、生成 TSL 代码前的判断顺序、文档路由、禁止行为和自检流程。
本文件不是 TSL 语法手册,也不是完整教程。智能体必须先按本文件判断任务类型,再进入对应的 `docs/tsl/` 页面查阅语法、函数库或模块集成信息。
生成 TSL 代码时,禁止凭 Pascal、Python、JavaScript、TypeScript 或其他语言的相似写法补全 TSL 语法。文档没有给出结论时,必须向用户确认、记录文档缺口,或改用文档已经写明的可照写示例,不得发明语法。
## 范围与优先级
- 本文件是仓库级 TSL 智能体高优先级规则。
- 更靠近代码目录的本地规则可以增加更严格的约束,但不能削弱本文件中的安全、文档事实和禁止发明语法规则。
- 本文件控制智能体行为和判断顺序,不替代 `docs/tsl/` 下的语法、函数库、模块集成或项目执行文档。
- 当本文件与 `docs/tsl/**` 冲突时,按以下顺序处理:
1. 安全与凭据处理规则。
2. 用户明确指令中关于目标、交付物、文件路径和风格偏好的部分。
3. 本地目录规则中更具体且不削弱本文件安全、文档事实和禁止发明语法规则的部分。
4. 本智能体规则集。
5. TSL 语法/函数库事实文档。
6. 现有项目代码模式。
- 用户明确指令不能覆盖安全规则、文档事实使用规则、禁止发明语法规则或 TSL 事实。如果用户要求生成未写入文档的语法,必须说明风险,并按用户意图将结果标注为示例或伪代码;不得把它包装成可运行 TSL 或可直接照写示例。
- 如果两个权威来源对 TSL 语法结论不一致,不要猜测。必须说明冲突,优先采用 `代码块身份:可直接照写示例`;当差异会影响生成代码正确性时,先向用户确认。
## 代码生成协议
生成或修改 TSL 代码前,智能体必须执行以下流程:
1. 识别用户交付目标:可执行脚本、可复用模块、语法解释、缺陷修复、重构、业务逻辑、函数查询或集成任务。
2. 识别文件模型:
- 用户要求可执行脚本或入口流程时,使用 `.tsl`
- 用户要求可复用函数、过程、类、模块或扩展代码时,使用 `.tsf`
- 文件模型会影响正确性且需求不明确时,生成代码前向用户确认。
3. 路由到 `docs/tsl/` 下最小且最相关的权威文档。
4. 生成代码外形时,优先参考 `代码块身份:可直接照写示例`
5. 避开任何标记为 `代码块身份:反例 / 不可照写` 的代码块。
6. 除非文档明确说明组合方式,否则不要把多个页面的片段拼成新的语法外形。
7. 没有文档结论时,不要发明语法;改为向用户确认或记录文档缺口。
8. 生成代码后,执行本文件中的最终 TSL 自检。
## TSL 核心事实
以下只保留高优先级提醒。完整文件模型看 `docs/tsl/syntax/02_core_model.md`;完整语法细节从 `docs/tsl/syntax/index.md` 分流。
- `.tsl` 在通用 TSL 规则中表示可执行脚本;如果项目把 `.tsl` 另作它用,必须先确认项目约定,不能反推为通用事实。
- `.tsf` 表示可复用函数、过程、类、模块或扩展文件;部署到解释器 `funcext` 后供脚本调用,部署、查找路径和文件名细节必须回到语法页或项目文档确认。
- 用户明确给出 `.tsl``.tsf` 后缀时,后缀是主要文件模型信号;未给后缀时先按交付目标初判,影响正确性且不明确就先确认。
- 入口流程、脚本任务或一次性任务默认 `.tsl`;可复用函数、过程、类、模块或扩展默认 `.tsf`;脚本内部封装函数或类不自动升级为 `.tsf`
-`.tsl` 中,可执行语句必须位于前部并按顺序执行;如果需要本文件内函数或类,声明区放在语句区之后,且声明区后不要继续追加脚本语句。
-`.tsf` 中,只生成可复用顶层声明或 `unit`;不要写成顺序执行入口。
- 创建对象有两种方式:`new ClassName()` 最常用,`createObject(...)` 作为次选;需要字符串类名、类类型变量或跨 `unit` 路径时,更适合用 `createObject(...)`
- 不要因为 Pascal、Python、JavaScript 或 TypeScript 支持某种写法,就假设 TSL 也支持。
## 任务路由
先路由任务,再阅读详细文档。不要把所有 TSL 相关请求都当成语法请求。
- 如果用户询问语言语法怎么写,先读 `docs/tsl/syntax/index.md`
- 如果用户要求最短可运行骨架,先读 `docs/tsl/syntax/01_quickstart.md`
- 如果用户询问某个语法形式是否有效,先读 `docs/tsl/syntax/index.md`,再进入最小匹配专题页。
- 如果用户询问常见误写、反例或不安全假设,先读 `docs/tsl/syntax/11_pitfalls.md`
- 如果用户询问行情、财务、板块、选股等金融函数,先读 `docs/tsl/reference/catalog/datawarehouse.md`
- 如果用户询问 Python 调 TSL 服务器函数、批量取数或异步取数,先读 `docs/tsl/modules/pytsl_api.md`
- 如果用户询问回测框架、组合回测、交易流程或回测结果读取,先读 `docs/tsl/modules/tsbacktesting.md`
- 如果用户询问某个内置函数或函数库函数怎么用,先读 `docs/tsl/reference/index.md`
- 如果用户询问模块、集成、pyTSL、微信消息或回测模块先读 `docs/tsl/modules/index.md`
- 如果用户询问账户体系、真实服务端点、部署、脚本入口、环境变量、CI 或验证命令,把问题视为项目执行上下文;优先查项目文档、`scripts/*` 和 CI 配置,不要从通用 TSL 语法文档里猜。
### 路由冲突处理
- 如果一个任务同时涉及业务和语法,按用户的主要目标路由。
- 如果主要目标是业务行为,先读模块文档、函数事实页或项目实际接口文档,语法文档只做辅助。
- 如果主要目标是语言有效性,先读语法文档,业务或模块文档只作为示例和上下文。
- 如果任务依赖真实凭据、账户、部署或环境行为,不要发明项目事实;必须询问用户或检查项目专属文件。
## 文档入口
按目的选择来源,不要默认通读全部文档。
| 目的 | 来源 | 性质 |
| ----------------------------- | --------------------------------------------- | ---------- |
| 顶层路由 | `docs/tsl/index.md` | 决策入口 |
| 语法判断 | `docs/tsl/syntax/index.md` | 语法入口 |
| 最短可运行骨架与核心事实 | `docs/tsl/syntax/01_quickstart.md` | 语法入口 |
| 高频误写与反例 | `docs/tsl/syntax/11_pitfalls.md` | 语法入口 |
| 数据仓库金融函数 | `docs/tsl/reference/catalog/datawarehouse.md` | 函数事实 |
| pyTSL / 服务器函数 / 批量取数 | `docs/tsl/modules/pytsl_api.md` | 模块 API |
| 回测框架与结果接口 | `docs/tsl/modules/tsbacktesting.md` | 模块 API |
| 模块与集成任务 | `docs/tsl/modules/index.md` | 集成入口 |
| 函数库查询 | `docs/tsl/reference/index.md` | 函数库入口 |
| 本仓库格式偏好 | `docs/tsl/code_style.md` | 非语法事实 |
| 本仓库/作者命名偏好 | `docs/tsl/naming.md` | 非语法事实 |
## 文档事实使用策略
- 页面级元数据只是粗粒度信号。生成代码时,优先看代码块级别的 `代码块身份`
- 优先参考标记为 `代码块身份:可直接照写示例` 的代码块。
- 永远不要复制标记为 `代码块身份:反例 / 不可照写` 的代码块作为可运行代码。
- `代码块身份:配置片段 / 概念骨架` 只能作为结构提示,不能当作可直接运行代码。
- `代码块身份:输出片段` 只能作为输出形态,不能当作源码。
- 模板、错误示例和输出片段都不是可独立编译代码。
- 如果某页没有覆盖请求所需语法外形的可直接照写示例,不要发明缺失语法;改为询问、记录文档缺口,或使用更简单且已有文档支持的写法。
- `code_style.md``naming.md` 只表达本仓库或作者风格偏好,不代表 TSL 语法事实。
## 安全规则
- 不得把明文密钥、密码、token、API key、cookie、私钥或真实凭据写入代码、日志、注释、示例、测试或文档。
- 如果用户提供真实敏感信息,不要复述;替换为 `<TOKEN>`、`<API_KEY>` 或 `<PASSWORD>` 等占位符。
- 如果现有代码中出现疑似敏感信息,必须明确标注风险,并避免把它复制到新代码或解释中。
- 修改鉴权、授权、权限检查、账户处理、交易权限、下单或生产执行路径时,必须说明动机和风险。
- 不确定某个值是否敏感时,按敏感信息处理。
- 不要发明账户 ID、服务端点、生产路径或凭据名称必须使用项目专属文档或向用户确认。
- 金融或交易任务中,除非用户明确要求且项目文档确认执行路径,否则不要生成会静默真实下单、改变账户状态或使用生产凭据的代码。
- 当任务可能影响真实交易或外部系统时,优先使用 dry-run、仿真、回测或显式确认流程。
## 修改纪律
- 改动必须小而聚焦,只服务于用户当前请求。
- 避免无关重构、格式刷屏或文档大改。
- 除非用户明确要求,不要新增依赖、工具、脚本或执行要求。
- 引入新模式前,先遵循现有项目风格、文件布局和命名习惯。
- 编辑 TSL 文档时,保留元数据字段和 `代码块身份` 标签,因为智能体路由依赖这些信息。
- 不要声称生成或修改后的代码已经验证,除非确实运行了对应命令或已有项目执行记录。
## 最终 TSL 自检
展示生成或修改后的 TSL 代码前,必须检查:
1. 任务是否路由到正确层:语法、函数库、模块集成或项目执行。
2. 文件模型是否正确:`.tsl` 用于可执行脚本,`.tsf` 用于可复用函数、过程、类、模块或扩展。
3.`.tsl`,可执行语句是否位于本文件函数/类声明之前。
4.`.tsl`,声明区之后是否没有继续追加可执行脚本语句。
5.`.tsf`,代码是否是可复用顶层声明;文件名已知时,是否尊重文件基名与声明名关系。
6. 代码外形是否基于文档事实或 `代码块身份:可直接照写示例`
7. 是否没有把 `反例 / 不可照写`、输出片段或概念骨架当作可运行代码复制。
8. 是否没有从其它语言家族发明 TSL 语法。
9. 是否没有猜测内置名、函数库函数、模块行为或项目事实。
10. 如果任务要求遵循本仓库风格,是否只把 `code_style.md``naming.md` 当作本仓库/作者偏好,而不是语法事实。
11. 是否没有引入密钥、凭据、生产端点或不安全的交易/账户行为。
12. 仍不确定的地方是否明确说明,而不是隐藏在生成代码里。