使用Claude Code + 火山方舟Coding Plan自动写Hexo博客
背景
写博客是个好习惯,但每次都要花大量时间组织内容、排版、调整格式,很容易劝退。如果能用AI工具自动生成博客内容,同时保证质量,那效率就能提升很多。
本文介绍如何使用 Claude Code(Anthropic推出的AI编程CLI工具)配合 火山方舟Coding Plan,搭建一套自动化写Hexo博客的工作流,并重点讲解如何避免API Key泄漏。
什么是Claude Code
Claude Code 是Anthropic官方推出的命令行AI编程助手。它可以直接在终端中运行,理解你的项目代码库,帮你完成编写代码、重构、调试、搜索等任务。
核心能力:
- 读取和理解整个项目代码库
- 直接编辑和创建文件
- 执行Shell命令
- 与Git集成(创建commit、PR等)
- 支持自定义API端点,可以使用第三方LLM网关
什么是火山方舟Coding Plan
火山方舟 是字节跳动推出的大模型服务平台,提供多种模型的统一API接入。其中的 Coding Plan 是方舟平台面向代码生成和编程辅助场景的专项服务,提供适合编程和文本生成的模型(如豆包系列模型)。
注意:方舟Coding Plan的具体功能、模型列表和定价可能随时间变化,请以火山方舟官方文档为准。截至本文编写时,方舟官方文档中关于Coding Plan的公开细节有限,建议登录方舟控制台查看最新的模型和定价信息。
方舟API兼容OpenAI SDK格式,基础调用方式如下:
1 | from openai import OpenAI |
整体架构
由于Claude Code要求后端API支持 Anthropic Messages格式(/v1/messages),而火山方舟提供的是 OpenAI兼容格式(/v1/chat/completions),两者无法直接对接。我们需要一个中间代理层来转换协议。
整体架构如下:
1 | Claude Code CLI |
重要局限
协议转换只能解决API格式兼容问题,但 无法解决模型能力差异:
- Claude Code的系统提示和工具调用格式是为Claude模型设计的,转给豆包等非Claude模型时,工具调用(Tool Use)的成功率和准确度会下降
- 对于简单的文本生成任务(如写博客文章),影响较小;对于需要精确工具调用的场景(如编辑文件、执行命令),体验可能不如原生Claude模型
- 如果你拥有Anthropic官方API Key或Claude Pro/Max订阅,建议优先使用原生接入(见文末)
搭建步骤
第一步:获取火山方舟API Key
- 注册并登录火山方舟控制台
- 在「模型推理」中创建推理接入点(Endpoint),选择你需要的模型
- 在「API Key管理」中创建API Key
- 记录下你的 Endpoint ID(格式如
ep-20250101xxxxx)和 API Key
第二步:部署LiteLLM代理
LiteLLM 是一个开源的LLM代理服务,支持多种API格式之间的转换。
安全提示:LiteLLM PyPI版本1.82.7和1.82.8曾被植入窃取凭证的恶意代码,请勿安装这两个版本。详见 BerriAI/litellm#24518。
安装LiteLLM
1 | pip install 'litellm[proxy]' --upgrade |
创建配置文件
创建 litellm_config.yaml:
1 | model_list: |
配置说明:
model_name:Claude Code识别的模型名,保持与Claude模型同名即可,LiteLLM会做映射model:openai/前缀 + 你的方舟Endpoint ID,告诉LiteLLM用OpenAI协议调用api_base:方舟的API地址api_key:使用os.environ/前缀从环境变量读取,避免硬编码
启动代理
1 | export ARK_API_KEY="你的方舟API Key" |
启动后,LiteLLM会在 http://localhost:4000 提供Anthropic Messages格式的API,并将请求转换为OpenAI格式转发给方舟。
第三步:配置Claude Code
方式一:环境变量(推荐用于临时测试)
1 | export ANTHROPIC_BASE_URL="http://localhost:4000" |
方式二:配置文件(推荐用于长期使用)
创建或编辑 ~/.claude/settings.json:
1 | { |
方式三:使用apiKeyHelper(最安全)
对于需要动态获取密钥的场景,可以配置一个脚本:
- 创建密钥获取脚本
~/bin/get-llm-key.sh:
1 |
|
1 | chmod +x ~/bin/get-llm-key.sh |
- 在Claude Code设置中配置:
1 | { |
- 可选,设置密钥刷新间隔:
1 | export CLAUDE_CODE_API_KEY_HELPER_TTL_MS=3600000 # 每小时刷新 |
注意:
apiKeyHelper的优先级低于ANTHROPIC_AUTH_TOKEN和ANTHROPIC_API_KEY。如果同时设置了环境变量和apiKeyHelper,环境变量优先生效。
第四步:自定义模型名称
为了让Claude Code能正确选择模型,可以通过环境变量配置模型映射:
1 | # 在启动Claude Code前设置 |
如果方舟的Endpoint ID与Claude模型名不一致,可以在LiteLLM配置中通过 model_name 做映射(已在第二步的配置中完成),无需额外设置 modelOverrides。
使用Claude Code自动写Hexo博客
配置完成后,就可以用Claude Code来辅助写博客了。
创建新文章
在Hexo项目目录下启动Claude Code:
1 | cd /path/to/hexo_source_file |
然后直接用自然语言描述你要写的博客内容:
1 | 帮我创建一篇关于Unity Addressables资源管理最佳实践的博客,包括资源分组策略、内存优化和加载性能调优三个方面 |
Claude Code会:
- 使用
hexo new post创建Markdown文件 - 自动填充YAML Front Matter(title、date、tags、categories)
- 按照你的描述生成完整的博客内容
- 保持与你现有博客风格一致的Markdown格式
修改已有文章
1 | 帮我在spine优化这篇文章中补充按动画拆分Spine文件的具体代码实现 |
Claude Code会读取现有文章,理解上下文,在合适的位置插入内容。
一键生成并预览
1 | 创建一篇关于Lua热更新方案对比的博客,然后启动本地预览服务器让我看看效果 |
Claude Code会创建文章并执行 hexo server 启动预览。
部署
确认文章内容无误后:
1 | 帮我执行 hexo deploy 部署博客 |
防止API Key泄漏
这是使用AI工具时最重要的安全问题。以下是多层防护策略:
1. 环境变量,绝不硬编码
1 | # ✅ 正确:通过环境变量传递 |
LiteLLM配置中使用 os.environ/ 前缀来引用环境变量:
1 | api_key: os.environ/ARK_API_KEY # ✅ 从环境变量读取 |
2. .gitignore排除敏感文件
确保以下文件在 .gitignore 中:
1 | # 环境变量文件 |
3. 使用 .env 文件管理本地密钥
创建 .env 文件(确保已被gitignore):
1 | # .env - 绝对不要提交到Git |
推荐使用 direnv 自动加载,避免手动export:
1 | # 安装direnv |
进入项目目录时,direnv会自动加载 .env 中的环境变量。
4. 使用系统密钥管理
macOS用户可以使用钥匙串存储密钥:
1 | # 存储密钥 |
Linux用户可以使用 pass、secret-tool 或云厂商的密钥管理服务。
5. 在CLAUDE.md中声明安全规则
在项目的 CLAUDE.md 中添加安全指令,确保Claude Code不会将密钥写入博客内容:
1 | # 安全规则 |
6. Git Hooks自动检查
创建 pre-commit hook 防止意外提交密钥:
1 |
|
1 | chmod +x .git/hooks/pre-commit |
7. 方舟平台侧的防护
- 为不同用途创建不同的API Key,限制其权限范围
- 设置API调用的额度上限,防止密钥泄漏后产生高额费用
- 定期轮换API Key
- 使用方舟
GetApiKey接口获取临时API Key,而非长期有效的密钥
完整工作流示例
下面是一个从零开始的完整流程:
1 | # 1. 启动LiteLLM代理(新终端窗口) |
如果你有Anthropic官方API
如果你有Anthropic官方的API Key(无需使用方舟),配置更简单,不需要LiteLLM代理:
1 | export ANTHROPIC_API_KEY="sk-ant-xxxxxxxx" |
也可以使用Claude Pro/Max订阅直接登录:
1 | claude login |
使用官方API或订阅可以享受Claude模型的原生工具调用能力,体验明显优于通过代理转接的方案。
总结
| 步骤 | 说明 |
|---|---|
| 获取方舟API Key | 在火山方舟控制台创建 |
| 部署LiteLLM代理 | 转换Anthropic Messages与OpenAI格式 |
| 配置Claude Code | 设置 ANTHROPIC_BASE_URL 和认证信息 |
| 写博客 | 用自然语言描述需求,Claude Code自动生成 |
| 防泄漏 | 环境变量 + gitignore + pre-commit hook + CLAUDE.md规则 |
核心原则:密钥永远只通过环境变量或系统密钥管理传递,绝不出现在代码、配置文件或Git仓库中。