BT AI 开发入口
BT AI 开发入口
功能
BT 官网为通用编码 AI、智能 IDE 和文档工具提供一套按需读取的官方知识接口。它完整覆盖 BT 语言语义、语法、标准库、Web 开发、bt_app 桌面开发、网络与设备、扩展和 FFI,同时避免每次把完整知识库放入模型上下文。
给 AI 单独提供一个网址时,统一使用:
https://btlang.org/ai
该入口会要求 AI 先搜索,再读取单个函数文档、单个稳定知识块或确实需要的模块。接口只返回公开文档,不接收用户问题、项目源码、模型配置、账号、API Key 或其他私有数据。
语法
GET https://btlang.org/ai GET https://btlang.org/llms.txt # 自动发现兼容别名,正文与 /ai 相同 GET https://btlang.org/ai/manifest GET https://btlang.org/ai/search?q={query}&limit={limit} GET https://btlang.org/ai/index GET https://btlang.org/ai/block/{module_id}/{block_name} GET https://btlang.org/ai/knowledge/{module_id} GET https://btlang.org/md/docs/{path} GET https://btlang.org/ai/bundle/{knowledge_version}
推荐读取顺序:
1. 首次只读 /ai;
2. 用 /ai/search 查询 API 名、模块名或运行时名;
3. 搜索结果是 symbol 时直接使用响应中的完整函数契约,是 doc 时读取 markdown_url,是 block 时读取 content_url;
4. 只有系统设计或语义不确定时才读取整个模块;
5. 完整索引和离线包只供客户端缓存、离线开发或知识工具集成。
参数
路径参数
| 字段 | 类型 | 必填 | 默认值 | 有效范围或可选值 | 含义 |
|---|---|---|---|---|---|
module_id | String | 知识模块和知识块接口是 | 无 | 清单 modules[].id 中的稳定 ID | 要读取的知识模块。 |
block_name | String | 知识块接口是 | 无 | 搜索结果 content_url 中的稳定块名称 | 要读取的单个知识块。 |
path | String | 精确文档接口是 | 无 | 搜索结果 markdown_url 中的文档路径 | 要读取的函数或主题 Markdown。 |
knowledge_version | String | 完整包接口是 | 无 | 清单的 knowledge_version | 要下载的不可变离线包版本。 |
查询参数
| 字段 | 类型 | 必填 | 默认值 | 有效范围或可选值 | 含义 |
|---|---|---|---|---|---|
q | String | 搜索接口是 | 无 | 1 至 100 个字符;建议使用空格分隔的 API、模块或运行时关键词 | 全部非空关键词都必须命中同一条索引记录。 |
limit | Int | 否 | 8 | 1..20;非法值回退为 8,大于 20 按 20 | 最多返回的搜索结果数量。 |
条件请求头
| 字段 | 类型 | 必填 | 默认值 | 有效范围或可选值 | 含义 |
|---|---|---|---|---|---|
If-None-Match | String | 否 | 无 | 上次响应的 ETag,支持弱标签和逗号分隔列表 | 清单、索引、知识块、模块或离线包未变化时返回 304 Not Modified。 |
If-Modified-Since | String | 否 | 无 | 上次响应的 Last-Modified | 未同时发送 If-None-Match 且发布时间一致时返回 304 Not Modified。 |
返回值
AI 首读入口
GET /ai 以 text/plain; charset=utf-8 返回一份带 Markdown 结构的精简纯文本,避免只接受常见网页文本类型的 AI 抓取组件拒绝响应。正文包含:
- 最省 Token 的强制读取策略;
- 搜索、精确文档、知识块、模块和离线包地址;
- 模块路由、依赖与 Token 估算;
- BT 与
bt_app的运行、构建和验收速记。
它不是全量文档,AI 不应只凭入口摘要猜测具体函数签名。
知识清单
GET /ai/manifest 返回 UTF-8 JSON:
| 字段 | 类型 | 必填 | 默认值 | 有效范围或可选值 | 含义 |
|---|---|---|---|---|---|
schema_version | Int | 是 | 无 | 当前为 1 | 清单结构版本。 |
bt_version | String | 是 | 无 | 三段式版本 | 知识对应的 BT 版本。 |
knowledge_version | String | 是 | 无 | YYYY.MM.DD.revision | 本次官方知识发布的唯一版本。 |
updated_at | String | 是 | 无 | ISO 8601 | 知识发布时间。 |
last_modified | String | 是 | 无 | RFC 7231 HTTP 日期 | 条件请求使用的最后修改时间。 |
min_client_version | String | 是 | 无 | 三段式版本 | 能读取当前 schema 的最低工具版本。 |
guide_url | String | 是 | /ai | 站内绝对路径 | 通用 AI 唯一规范入口。 |
text_content_type | String | 是 | text/plain; charset=utf-8 | 固定值 | AI 入口、精确文档、知识块和模块使用的兼容响应类型;正文仍采用 Markdown 结构。 |
search_url_template | String | 是 | 无 | 带 {query} 和 {limit} 占位符 | 小结果搜索接口模板。 |
search_index_url | String | 是 | /ai/index | 站内绝对路径 | 完整搜索索引地址。 |
search_index_sha256 | String | 是 | 无 | 64 位小写十六进制 | 完整搜索索引原始 UTF-8 字节摘要。 |
block_url_template | String | 是 | 无 | 带 {module_id} 和 {block_name} 占位符 | 单个知识块接口模板。 |
docs_url_template | String | 是 | 无 | 带 {path} 占位符 | 精确函数或主题 Markdown 接口模板。 |
source_sha256 | String | 是 | 无 | 64 位小写十六进制 | 单一知识源规范化后的摘要。 |
bundle_format | String | 是 | bt-ai-bundle-json-v1 | 固定值 | 完整离线包格式。 |
bundle_url | String | 是 | 无 | /ai/bundle/{knowledge_version} | 当前完整离线包地址。 |
bundle_sha256 | String | 是 | 无 | 64 位小写十六进制 | 完整离线包原始 UTF-8 字节摘要。 |
modules | Array[Object] | 是 | 无 | 固定模块清单 | 可按需读取的知识模块元数据。 |
modules[] 字段:
| 字段 | 类型 | 必填 | 默认值 | 有效范围或可选值 | 含义 |
|---|---|---|---|---|---|
id | String | 是 | 无 | 稳定模块 ID | 模块唯一标识。 |
revision | Int | 是 | 无 | 大于等于 1 | 模块正文修订号。 |
content_url | String | 是 | 无 | /ai/knowledge/{id} | 整个模块 Markdown 地址。 |
sha256 | String | 是 | 无 | 64 位小写十六进制 | 模块原始 UTF-8 字节摘要。 |
approx_tokens | Int | 是 | 无 | 大于 0 | 模块的近似 Token 数。 |
runtimes | Array[String] | 是 | 无 | cli/web/desktop/extension/ffi | 模块适用运行时。 |
tags | Array[String] | 是 | 无 | 稳定检索标签 | 模块主题标签。 |
depends_on | Array[String] | 是 | [] | 其他模块 ID | 读取整个模块前应同时考虑的依赖。 |
block_count | Int | 是 | 无 | 大于 0 | 模块包含的稳定知识块数量。 |
按关键词搜索
GET /ai/search 返回小型 UTF-8 JSON:
| 字段 | 类型 | 必填 | 默认值 | 有效范围或可选值 | 含义 |
|---|---|---|---|---|---|
query | String | 是 | 无 | 规范化为小写的查询文本 | 本次实际查询。 |
limit | Int | 是 | 8 | 1..20 | 本次结果上限。 |
count | Int | 是 | 无 | 0..limit | 实际返回数量。 |
results | Array[Object] | 是 | [] | 函数契约、文档或知识块结果 | 精确符号和精确路径优先,其后返回相关候选。 |
results[] 共有字段与分支字段:
| 字段 | 类型 | 必填 | 默认值 | 有效范围或可选值 | 含义 |
|---|---|---|---|---|---|
kind | String | 是 | 无 | symbol/doc/block | symbol 表示可直接使用的完整函数契约,doc 表示精确文档,block 表示稳定知识块。 |
id | String | 是 | 无 | 稳定 ID | 结果标识。 |
title | String | 是 | 无 | 非空文本 | 结果标题。 |
approx_tokens | Int | 是 | 无 | 大于 0 | 读取该结果的近似 Token 数。 |
signature | String | symbol 是 | 无 | Markdown 行内代码 | 函数调用方式。 |
parameters | String | symbol 是 | 无 | 文本 | 参数名、类型与必填规则。 |
defaults | String | symbol 是 | 无 | 文本 | 参数默认值。 |
returns | String | symbol 是 | 无 | 文本 | 返回类型与语义。 |
example | String | symbol 是 | 无 | Markdown 行内代码 | 最小调用示例。 |
notes | String | symbol 是 | 无 | 文本 | 行为边界与注意事项。 |
limits | String | symbol 是 | 无 | 文本 | 上下文、权限或资源限制。 |
category | String | doc 是 | 无 | 文档分类 | 精确文档所属分类。 |
markdown_url | String | doc 是 | 无 | /md/docs/... | AI 应读取的精确 Markdown 地址。 |
html_url | String | doc 是 | 无 | /docs/... | 人类阅读页面。 |
module_id | String | block 是 | 无 | 稳定模块 ID | 知识块所属模块。 |
runtimes | Array[String] | block 是 | 无 | 运行时列表 | 知识块适用运行时。 |
tags | Array[String] | block 是 | 无 | 标签列表 | 知识块主题标签。 |
content_url | String | block 是 | 无 | /ai/block/... | AI 应读取的单块 Markdown 地址。 |
sha256 | String | block 是 | 无 | 64 位小写十六进制 | 单块正文摘要。 |
完整搜索索引
GET /ai/index 返回全部精确文档和稳定知识块的 JSON 索引。它适合 IDE 或本地工具建立缓存,不适合直接作为普通编码任务的模型上下文。
| 字段 | 类型 | 必填 | 默认值 | 有效范围或可选值 | 含义 |
|---|---|---|---|---|---|
schema_version | Int | 是 | 无 | 当前为 1 | 索引结构版本。 |
knowledge_version | String | 是 | 无 | 当前知识版本 | 索引所属发布版本。 |
source_sha256 | String | 是 | 无 | 64 位小写十六进制 | 索引对应的知识源摘要。 |
entries | Array[Object] | 是 | 无 | symbol/doc/block 混合列表 | 全部可搜索条目;内部 search_text 和 exact_queries 仅供搜索匹配。 |
单个知识块与整个模块
GET /ai/block/{module_id}/{block_name} 只返回一个稳定 Markdown 知识块;GET /ai/knowledge/{module_id} 返回整个模块。两者都以 text/plain; charset=utf-8 传输 Markdown 正文,并提供 SHA-256 和条件缓存响应头。
知识块通常比整个模块小得多。比如只需要 String 方法总表时,应读取相应知识块;只需要 string.replace 的精确签名时,应直接使用搜索结果中的 symbol 函数契约。
完整离线包
GET /ai/bundle/{knowledge_version} 返回 bt-ai-bundle-json-v1 JSON:
| 字段 | 类型 | 必填 | 默认值 | 有效范围或可选值 | 含义 |
|---|---|---|---|---|---|
schema_version | Int | 是 | 无 | 当前为 1 | 完整包结构版本。 |
bundle_format | String | 是 | 无 | bt-ai-bundle-json-v1 | 完整包格式。 |
knowledge_version | String | 是 | 无 | 与请求版本一致 | 包内知识版本。 |
manifest | Object | 是 | 无 | 清单快照 | 为避免自引用哈希,包内 bundle_sha256 固定为 null。 |
block_index | Object | 是 | 无 | schema 1 | 全部稳定知识块的行号、标签、Token 估算和摘要。 |
modules | Object[String,String] | 是 | 无 | 键为模块 ID | 全部模块 Markdown 正文。 |
响应头
| 字段 | 类型 | 必填 | 默认值 | 有效范围或可选值 | 含义 |
|---|---|---|---|---|---|
Content-Type | String | 是 | 无 | JSON 使用 application/json;AI 文本使用 text/plain; charset=utf-8 | 响应正文格式;纯文本正文仍保留 Markdown 标题、表格和代码块。 |
Cache-Control | String | 是 | 无 | 首读入口 60 秒;搜索/知识 5 分钟;版本包一年且 immutable | 客户端缓存策略;首读入口缩短缓存,便于内容类型等兼容调整快速生效。 |
ETag | String | 搜索接口外的版本化接口是 | 无 | HTTP 实体标签 | 条件请求值。 |
Last-Modified | String | 搜索接口外的版本化接口是 | 无 | RFC 7231 HTTP 日期 | 条件请求值。 |
X-BT-Knowledge-Version | String | AI JSON/文本接口是 | 无 | 当前知识版本 | 响应所属知识版本。 |
X-Content-SHA256 | String | 索引、知识块、模块和完整包是 | 无 | 64 位小写十六进制 | 当前响应正文摘要。 |
Access-Control-Allow-Origin | String | AI 接口是 | * | 固定为 * | 允许公开知识客户端跨域读取。 |
代码示例
下面的 BT 脚本搜索 string.replace,直接读取最小函数契约:
search_response = reqwest('https://btlang.org/ai/search') .query({q: 'string replace', limit: 5}) .send() search_result = search_response.body.parse_json() symbol = search_result.results.find(fn(item) { item.kind == 'symbol' }) // 输出:`string.replace(pattern, replacement)` print symbol.signature
下面的 BT 脚本按清单校验单个知识块:
block_response = reqwest('https://btlang.org/ai/block/stdlib-core/section-5-2').send() verified = crypto(block_response.body).sha256() === block_response.headers['x-content-sha256'] // 输出:true print verified
注意事项
- 普通编码任务不要读取完整搜索索引、完整模块集合或离线包;先搜索并按最小结果读取。
-
/llms.txt是 AI 工具约定的自动发现别名,正文格式仍是 Markdown;开发者主动提供链接时只使用https://btlang.org/ai。 - AI 入口、精确文档、知识块和模块故意使用兼容性更高的
text/plain,不要改回可能被部分网页读取组件拒绝的text/markdown。 - API 名已知时优先搜索
category api_name或完整符号,例如string replace、mysql begin、window.bt.call。 - 同一个开发任务应固定使用一个
knowledge_version,不要在任务中途混用两个版本。 - 模块、知识块、索引或离线包下载后应先校验原始 UTF-8 字节的 SHA-256,再写入正式缓存。
-
304响应没有正文,客户端应继续使用本地已校验内容。 - 官网不可访问时,工具可以回退到自己内置且已校验的完整包;普通项目不得因此假定存在
E:\bt-lang等固定本地目录。 - 项目自身的
AGENTS.md、README、运行时文件位置和测试命令优先于本站通用建议。 - 未知路径、模块或知识块返回
404,缺少搜索词返回400,非GET请求返回405。