文档 / explanation
架构
jenksguo.xyz 是如何构建的——一个在 git 中的语料库、一个带校验的编译器、托管在 Cloudflare 上的静态站点、一个会用工具的助手,以及支撑 MCP、REST 和 CLI 的统一规范。
简而言之
只有一个可信来源——存放在 git 中的 Markdown 语料库——其他一切都从它生成或直接读取:支持七种语言的网站、供智能体使用的文件、Ask Jenks 助手、REST API、MCP 服务器以及 CLI。
语料库
content/corpus/ 中每条经历、项目、社区角色和教育背景各有一个 Markdown 文件,均带有 YAML 前言(日期、标签、角色镜头、关键结果、技能、证明链接)及长文正文。旁边还包括核心档案、能力、资质、演讲、世界观、角色镜头以及助手的技能。事实来自 Jenks 的简历、LinkedIn、Linktree 和他的演讲者页面,并以保守方式解决冲突。
把语料库存在 git 中意味着每次更改都是一次提交:可审查、可归因、可回滚。
编译器
scripts/build-corpus.mjs 读取语料库,按单一模式(scripts/corpus-schema.mjs)验证每个文件,并将其编译为一个 JSON 语料库外加智能体文件 /llms-full.txt 和 /experience.json。未知的标签或镜头、错误的日期、缺失的图片或缺少的章节都会导致构建失败。管理员 API 在提交前会运行相同的校验,因此错误的编辑——无论来自人还是 AI——都会在破坏任何东西之前被拒绝。
网站
该站点是由 Next.js 静态导出并通过 Cloudflare Workers Static Assets 提供服务。其前面有一个小型 Worker 负责处理重定向(jenksguo.com 和 www 主机 → jenksguo.xyz)、安全响应头以及各类 API。英文位于 /;其他六种语言位于 /zh、/zh-hant、/ja、/fr、/es 和 /eo。每条目在每种语言下都有自己的页面。
Ask Jenks 助手
该助手是一个会使用工具的智能体,而非一段很长的提示词。其系统提示仅包含核心档案以及每个条目、镜头和技能的一行索引。当需要细节时,它会调用以下工具:
load_skill— 针对问题类型的作战手册(角色匹配、咨询范围界定、AI 转型、STAR 故事、治理、职业导航……),get_entries— 按 slug 获取完整写作,list_entries— 按标签、镜头或类型筛选,search_corpus— 关键词搜索。
这种渐进式披露让答案立足于整个语料库,同时避免庞大的提示词。模型通过 OpenRouter 访问。
一套规范,四个界面
src/spec.js 将所有公共与管理员工具统一定义在一处:名称、描述、输入模式、REST 路由与 CLI 命令。由此衍生出:
- 远程 MCP 服务器(
/mcp、/mcp/admin), - REST API(
/api/v1/*、/api/admin/*), jenksCLI 及其本地 MCP 模式(jenks mcp),- 参考文档 与
/openapi.json。
在一个地方修改工具,所有界面都会随之更新,因此文档不可能与实际行为偏离。
发布流水线
管理员编辑通过 GitHub API 作为提交进行。每次推送都会运行 CI:
- 编译并验证语料库,
- 将仅重新翻译发生变化的条目为其他六种语言(翻译按英文源文的哈希进行缓存;固定术语表用于设定标题与镜头名称),
- 构建站点与智能体文件,
- 部署——
main到https://jenksguo.xyz,dev到https://dev.jenksguo.xyz(不被索引)。
适用于 macOS、Linux 和 Windows 的 CLI 二进制发布在 /downloads 下。
为何这样设计
个人网站虽小,但它需要被人、搜索引擎以及越来越多的智能体阅读,支持多种语言,且由 AI 与人工同样频繁地编辑。以单一、可验证的来源生成各类界面,是在保持一切一致性的前提下最简洁的设计。
.md本页内容在 AI 协助下翻译;官方职位名称保留英文。