在你自己的 Mac 上跑 Claude Code,直接对话操作 Akke 线上 prompt:查看、改稿、发新 version、灰度、回滚——不用 clone Akke 仓库,也不用 dashboard 点点点。
akke-prod)、要直接编辑线上 prompt 的同事(PM / 文案运营)。读完后你能在自己 Mac 的 Claude Code 里说「列出 prompt」「把这段存为新 version」「转 production 标签」,全程自然语言对话。
claude --version 能输出版本号即可)、Langfuse 邀请邮件已接受能登录 jp.cloud.langfuse.com。
Akke 的 LLM 调用(评论意向分析、DM 文案、反向钩评)都通过一个叫 Langfuse 的 SaaS 做两件事:
本文档只讲第二件事 —— 你怎么用 Claude Code 操作 prompt。
你在 Claude Code 说「列出所有 prompt」
↓
Claude Code 调用 mcp__langfuse__listPrompts 工具
↓
工具向 jp.cloud.langfuse.com/api/public/mcp 发请求(带你的 BasicAuth)
↓
Langfuse 返回 prompt 列表
↓
Claude Code 把结果翻译成中文回你
————————————————————————
你在 dashboard 看到的 prompt v3
=
Akke 代码里实际命中的 prompt v3
=
Claude Code 通过 MCP 拿到的 prompt v3
(同一份数据的三种界面)
关键认知:
production 这个标签转过去production 标签的版本,不是最新版本打开 https://jp.cloud.langfuse.com(注意是 jp. 子域,日本机房),左上角切到 akke-prod 项目。
然后 Settings(齿轮图标)→ API Keys → Create new API keys,会弹出一对:
Public Key: pk-lf-xxxxxxxx
Secret Key: sk-lf-xxxxxxxx ← 只显示一次,立刻复制存到 1Password
在 Mac 终端跑(把两个 pk-lf-xxx / sk-lf-xxx 替换成你自己的):
echo -n "pk-lf-xxx:sk-lf-xxx" | base64
会输出一串字符如 cGstbGYteHh4OnNrLWxmLXh4eA==,这就是 BasicAuth token,下一步要用。
用户名:密码 用 base64 编码后塞进 Authorization 头。这不是加密,只是编码——所以这串字符仍然要严格保密,等价于明文 key。在 Mac 终端跑(把 YOUR_BASE64_TOKEN 换成上一步的输出):
claude mcp add --transport http langfuse https://jp.cloud.langfuse.com/api/public/mcp \
--header "Authorization: Basic YOUR_BASE64_TOKEN"
成功的话会输出类似 Added MCP server "langfuse"。
jp.cloud.langfuse.com。Langfuse 有三个区独立部署,写错会全 401:
cloud.langfuse.com ❌ 不是 Akke 用的us.cloud.langfuse.com ❌ 不是 Akke 用的jp.cloud.langfuse.com ✅ Akke 在这开一个新的 Claude Code 会话(任意目录都行,不需要 cd 到 Akke 仓库),输入:
列一下 Langfuse 里现有的 prompt 和它们的最新 version
预期 Claude Code 会调用 mcp__langfuse__listPrompts 工具,返回至少这一条:
comment.reverse-comment-system(v1,标签 production)如果看到了 prompt 列表 = 接入成功,可以开始日常使用。如果报错看 第 ⑥ 章 故障排查。
MCP 用的 API key 决定了你能改什么:
如果你 dashboard 显示是 VIEWER,去找现任 Owner 改成 MEMBER 即可。
Langfuse 官方 MCP server 当前只暴露 5 个 prompt 相关工具,scope 故意做窄了避免误删生产数据。
| 工具名 | 用途 | 触发关键词举例 |
|---|---|---|
listPrompts |
列出项目所有 prompt + 最新 version + 标签 | "列出/有哪些/盘点 prompt" |
getPrompt |
拿某个 prompt 的具体内容(指定 version 或标签) | "把 X 当前 production 拉出来给我看" |
createTextPrompt |
新建文本类 prompt,或为已存在的 prompt 创建新 version | "把这段存为 X 的新 version" |
createChatPrompt |
同上,但是多轮对话格式(system + user + assistant 数组) | "把这套对话样本存为 X 的新 version" |
updatePromptLabels |
把标签(如 production / staging)转移到指定 version |
"把 production 转到 v3"、"回滚到 v2" |
下面这 6 步是改一次 prompt 的标准动作,每一步都直接对 Claude Code 说中文,不需要写代码。
对 Claude Code 说:
把 comment.reverse-comment-system 当前 production version 的内容拉出来给我看
Claude Code 会调 getPrompt,把全文 + 占位符 + 当前 version 号贴出来。
不需要自己写完整新版本。可以直接说:
把第三段「角色锁定」里"自建房 / 地基"那一段扩展成 5 个具体场景,
其他保持不变。给我新版本预览,我确认后再上传。
Claude Code 会把改好的全文贴给你预览。你点头之前不要让它直接 create。
预览没问题后,对 Claude Code 说:
把这版存为 comment.reverse-comment-system 的新 version,标签打 staging。
不要碰 production 标签。
Claude Code 会调 createTextPrompt,返回新 version 号(比如 v3),并确认 staging 标签已打上、production 仍在 v2。
{{xxx}})必须保留全部原有名字。当前 reverse-comment 用了这 4 个,删任何一个会让代码端 compile 出空字段:
{{sourceCommentText}}{{targetVideoTitle}}{{skeletonBlock}}{{noTitleClause}}找现任工程师在测试环境临时把 fetch 标签从 production 切成 staging,跑 2-3 条真实评论看输出,或者直接拿这条 prompt 喂给 Claude Code 自己模拟跑:
用刚存的 staging 版本,模拟跑一条样本:
sourceCommentText="想问下你家的实木衣柜板材是哪种"
targetVideoTitle="衣帽间收纳改造"
skeletonBlock=(任意一种骨架文本)
noTitleClause=""
看输出符不符合预期。
验证通过后:
把 comment.reverse-comment-system 的 production 标签从 v2 转到 v3
Claude Code 调 updatePromptLabels,瞬间完成。30 秒内生产环境全部命中新 prompt。
如果上线后发现新版有问题(比如同行触发率涨了 / 输出变怪):
把 comment.reverse-comment-system 的 production 标签转回 v2
30 秒内复原。这就是无缝回滚机制 ——没有"撤销发布"按钮,但因为老版本永不删,转标签就够了。
直接复制贴给 Claude Code,把尖括号里的内容换成你的:
列出 Langfuse 里所有 prompt,按最近改动时间排序
把 <prompt-name> 当前 production version 拉出来全文给我
把 <prompt-name> 的 v1 和 v2 内容做个 diff,告诉我改了什么
基于 <prompt-name> 的当前 production 版本,做以下修改:
1. <改动 1>
2. <改动 2>
保持所有占位符不变。给我预览,确认后存为新 version 并打 staging 标签。
把刚存的 v<N> 的 production 标签转过去,把 staging 标签清掉
把 <prompt-name> 的 production 标签从 v<X> 回滚到 v<Y>
列出 <prompt-name> 所有历史 version 的最早 100 字预览,帮我找一个看起来正常的版本回滚到
用 <prompt-name> 的 staging 版本,模拟跑下面这组输入,看输出是否符合「30-80 字 / 中文 / 钩私信」要求:
<粘贴一组真实输入>
claude mcp list,确认 langfuse 在列表里且 status 是 ✓ connectedjp. 子域jp.cloud.langfuse.com,不是 cloud.langfuse.com 或 us.cloud.langfuse.comecho -n(带 -n 不输出换行),不能用普通 echo你在 project 里只有 VIEWER 权限。dashboard → akke-prod → Settings → Members 找你的条目,让 Owner 改成 MEMBER 或 ADMIN。
/api/cron/analyze */15min)就会用新 prompt不要慌。立刻说「把 <prompt-name> 的 production 标签转回 v<上一个正常版本>」即可。30 秒内复原。如果你不记得上一个版本号,让 Claude Code 列出所有 version + 时间顺序帮你定位。
Akke 代码端用占位符名字注入数据,名字对不上 Claude 收到的 prompt 就会出现 {{sourceCommentText}} 字面字符串、或者关键字段为空。立刻回滚到上一个 version。下次让 Claude Code 改稿时明确说"保留所有 {{xxx}} 名字不变"。
{{sourceCommentText}} 这种是代码注入数据的接口,删一个 = 那个字段在 prompt 里彻底消失,输出会乱掉。改稿前先记下当前 prompt 用了哪几个占位符,改完检查是不是都还在。
src/lib/llm.ts 配 fallback。要新建之前在 Lark 群里说一声让工程师配套上。
# 1. dashboard 拿 key(akke-prod → Settings → API Keys)
# 2. 终端 base64
echo -n "pk-lf-xxx:sk-lf-xxx" | base64
# 3. 终端注册 MCP
claude mcp add --transport http langfuse https://jp.cloud.langfuse.com/api/public/mcp \
--header "Authorization: Basic <上一步输出>"
# 4. 重开 Claude Code 会话验证
# 在 Claude Code 里说:"列出 Langfuse 所有 prompt"
<name> 当前 production 拉出来"<N>"<N-1>"comment.reverse-comment-system(v1)sourceCommentText / targetVideoTitle / skeletonBlock / noTitleClausesrc/lib/reverseComment.ts:REVERSE_COMMENT_SYSTEM_FALLBACK