[HexoPress] AI 集成的开放式设计

在 HexoPress 中集成 AI 写作助手时,我们面临一个核心问题:AI 领域变化极快,今天的主流模型明天可能就被超越。如何设计一个不会很快过时的集成方案?

答案是:不绑定任何特定的 AI 提供商。

提供商无关的设计

HexoPress 的 AI 集成基于 OpenAI 兼容的 API 格式。这不是因为我们偏爱 OpenAI,而是因为这个 API 格式已经成为事实上的行业标准。几乎所有主流的 AI 服务——无论是 OpenAI、Anthropic、Google,还是各种开源模型的本地部署方案——都提供了兼容这个格式的接口。

用户可以配置多个 AI 提供商,每个提供商只需要四个参数:名称、接口地址、API 密钥和模型标识。这意味着:

  • 你可以用 OpenAI 的 GPT 系列
  • 你可以用 Anthropic 的 Claude 系列(通过兼容接口)
  • 你可以用本地部署的开源模型(如通过 Ollama 或 LM Studio)
  • 你可以用任何提供 OpenAI 兼容 API 的服务

切换提供商就像切换一个下拉菜单一样简单。

流式响应

AI 的回复采用流式传输(Server-Sent Events),而不是等待完整响应后一次性显示。这意味着你可以看到 AI 逐字生成回复的过程,获得更好的交互体验,也不需要在等待长回复时面对一个空白的屏幕。

流式解析器处理了各种边界情况,包括不完整的数据块、网络中断和格式异常,确保在各种网络条件下都能稳定工作。

上下文模式

AI 助手的一个关键设计是灵活的上下文模式。不同的写作场景需要不同的上下文:

全文模式将整篇文章作为上下文发送给 AI。适合需要理解全文的任务,比如检查全文的拼写错误、分析文章结构、生成摘要。

选中模式只发送用户在编辑器中选中的文本。适合局部操作,比如润色一个段落、改写一句话。这种模式既节省了 token 消耗,也让 AI 能更专注于目标文本。

无上下文模式不附带任何文章内容,适合纯粹的问答对话。

这三种模式让用户可以精确控制 AI 能看到什么,既保护了隐私(你可能不想把整篇未发布的文章发送给 AI),也优化了效果(更精确的上下文通常带来更好的回复)。

预设系统

内置的四个预设(错别字检查、写作建议、润色、摘要生成)不是硬编码的功能,而是一种可扩展的模式。每个预设本质上是一组参数的组合:

  • 一个系统提示词,定义 AI 的角色和行为
  • 一个用户提示词模板,描述具体的任务
  • 一个上下文模式,决定发送什么内容给 AI

这种设计意味着添加新的预设非常简单——定义这三个参数就够了。未来,这个系统可以很自然地扩展为支持用户自定义预设,让每个人都能根据自己的写作习惯创建专属的 AI 工作流。

与编辑器的集成

AI 面板通过共享状态与编辑器协作,而不是直接耦合。它从全局状态中读取文章内容、选中文本和元数据,这意味着 AI 面板的实现完全不依赖编辑器的内部细节。

这种松耦合的设计让 AI 功能可以独立演进。即使未来更换了底层的编辑引擎,只要共享状态的接口不变,AI 面板就不需要任何修改。

隐私考量

值得强调的是,AI 功能是完全可选的。如果你不配置任何 AI 提供商,HexoPress 的所有其他功能都正常工作,不会有任何数据被发送到外部。

当你使用 AI 功能时,数据直接从你的电脑发送到你配置的 AI 服务,HexoPress 不会经手或存储任何中间数据。你完全掌控数据的流向。