{"data":{"post":{"title":"巧用 Markdown 减轻 X 长文写作痛苦","subtitle":"","isPublished":true,"createdTime":"2026-07-26T00:00:00.000Z","lastModifiedTime":null,"license":null,"tags":["X","Blogging"],"category":"Productivity","file":{"childMdx":{"excerpt":"想必经常写 X Article（长文）的朋友都被 X 长文编辑体验折磨过，而我却鲜少被折磨。究其原因是因为我都是在本地用 Markdown 写完再用了一些「魔法」快速倒腾至 X…","code":{"body":"function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nconst layoutProps = {};\nreturn class MDXContent extends React.Component {\n  constructor(props) {\n    super(props);\n    this.layout = null;\n  }\n\n  render() {\n    const _this$props = this.props,\n          {\n      components\n    } = _this$props,\n          props = _objectWithoutProperties(_this$props, [\"components\"]);\n\n    return React.createElement(MDXTag, {\n      name: \"wrapper\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `想必经常写 X Article（长文）的朋友都被 X 长文编辑体验折磨过，而我却鲜少被折磨。究其原因是因为我都是在本地用 Markdown 写完再用了一些「魔法」快速倒腾至 X 上的。并且 Markdown 有一个好处是可以作为个人 AI 工作流的数据中枢和个人上下文库，上承各种输入设备可以语音转文字、龙虾和 Hermes，下游则可以产出各种自媒体平台资产——比如 AI 自动口播剪辑、文章自动生成。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `正好今天看见又有 X 友被 X 长文写作体验折磨，我就和大家一起分享一下。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `简单来说有三条路：`), React.createElement(MDXTag, {\n      name: \"ol\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, `直接在本地把渲染好的 HTML 复制粘贴进 X 的编辑器；`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, `用 x-articles 插件让 agent 自动发布；`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, `用基于 X 私有 GraphQL API 的第三方工具。`)), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `前两条风险为零。第三条必须先把风险说在前面：它用的是 X `, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `未公开的私有 API`), `，没有任何官方授权——X 随时可以封掉它，而且用它自动化操作可能被官方判定为滥用，`, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `最严重的后果是封号`), `。`), React.createElement(MDXTag, {\n      name: \"h2\",\n      components: components\n    }, `方法一：VS Code + 复制粘贴`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `这里我们以 VS Code 为例，因为有现成的 Markdown 预览插件。`), React.createElement(MDXTag, {\n      name: \"h3\",\n      components: components\n    }, `步骤`), React.createElement(MDXTag, {\n      name: \"ol\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, React.createElement(MDXTag, {\n      name: \"p\",\n      components: components,\n      parentName: \"li\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `安装插件：`), ` VS Code 插件市场找到 Yiyi Wang 的 Markdown Preview Enhanced 插件，然后安装。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components,\n      parentName: \"li\"\n    }, React.createElement(MDXTag, {\n      name: \"figure\",\n      components: components,\n      parentName: \"p\"\n    }, `\n    `, React.createElement(MDXTag, {\n      name: \"a\",\n      components: components,\n      parentName: \"figure\",\n      props: {\n        \"href\": \"/static/536238d73e46e38207f342056c806064/0d914/vscode-install-mpe-extension.webp\"\n      }\n    }, React.createElement(MDXTag, {\n      name: \"picture\",\n      components: components,\n      parentName: \"a\"\n    }, `\n  `, React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/536238d73e46e38207f342056c806064/0cc25/vscode-install-mpe-extension.png\",\n        \"srcSet\": [\"/static/536238d73e46e38207f342056c806064/5116e/vscode-install-mpe-extension.png 178w\", \"/static/536238d73e46e38207f342056c806064/92f55/vscode-install-mpe-extension.png 356w\", \"/static/536238d73e46e38207f342056c806064/0cc25/vscode-install-mpe-extension.png 712w\", \"/static/536238d73e46e38207f342056c806064/7ae06/vscode-install-mpe-extension.png 1068w\", \"/static/536238d73e46e38207f342056c806064/eee47/vscode-install-mpe-extension.png 1424w\", \"/static/536238d73e46e38207f342056c806064/78ec9/vscode-install-mpe-extension.png 1980w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/536238d73e46e38207f342056c806064/690c8/vscode-install-mpe-extension.webp\",\n        \"srcSet\": [\"/static/536238d73e46e38207f342056c806064/25c8a/vscode-install-mpe-extension.webp 178w\", \"/static/536238d73e46e38207f342056c806064/60698/vscode-install-mpe-extension.webp 356w\", \"/static/536238d73e46e38207f342056c806064/690c8/vscode-install-mpe-extension.webp 712w\", \"/static/536238d73e46e38207f342056c806064/d7e52/vscode-install-mpe-extension.webp 1068w\", \"/static/536238d73e46e38207f342056c806064/456ef/vscode-install-mpe-extension.webp 1424w\", \"/static/536238d73e46e38207f342056c806064/0d914/vscode-install-mpe-extension.webp 1980w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), `\n  `, React.createElement(MDXTag, {\n      name: \"img\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/536238d73e46e38207f342056c806064/0d914/vscode-install-mpe-extension.webp\",\n        \"alt\": \"VS Code 插件市场里的 Markdown Preview Enhanced。\",\n        \"title\": \"安装 Markdown Preview Enhanced 插件\",\n        \"width\": 712,\n        \"height\": 280,\n        \"loading\": \"lazy\"\n      }\n    }))), `\n    `, React.createElement(MDXTag, {\n      name: \"figcaption\",\n      components: components,\n      parentName: \"figure\"\n    }, `\n        `, React.createElement(MDXTag, {\n      name: \"span\",\n      components: components,\n      parentName: \"figcaption\"\n    }, `\n            安装 Markdown Preview Enhanced 插件\n        `), `\n    `)))), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, React.createElement(MDXTag, {\n      name: \"p\",\n      components: components,\n      parentName: \"li\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `预览 Markdown 文档：`), ` 打开你想要的 Markdown 文档，按下 command + shift + P 打开命令面板（Command Palette），选择 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"p\"\n    }, `Markdown Preview Enhanced: Open Preview`), `。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components,\n      parentName: \"li\"\n    }, React.createElement(MDXTag, {\n      name: \"figure\",\n      components: components,\n      parentName: \"p\"\n    }, `\n    `, React.createElement(MDXTag, {\n      name: \"a\",\n      components: components,\n      parentName: \"figure\",\n      props: {\n        \"href\": \"/static/501ace8ca17735634dd85ffb141da43a/c67c1/vscode-open-markdown-preview.webp\"\n      }\n    }, React.createElement(MDXTag, {\n      name: \"picture\",\n      components: components,\n      parentName: \"a\"\n    }, `\n  `, React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/501ace8ca17735634dd85ffb141da43a/0cc25/vscode-open-markdown-preview.png\",\n        \"srcSet\": [\"/static/501ace8ca17735634dd85ffb141da43a/5116e/vscode-open-markdown-preview.png 178w\", \"/static/501ace8ca17735634dd85ffb141da43a/92f55/vscode-open-markdown-preview.png 356w\", \"/static/501ace8ca17735634dd85ffb141da43a/0cc25/vscode-open-markdown-preview.png 712w\", \"/static/501ace8ca17735634dd85ffb141da43a/7ae06/vscode-open-markdown-preview.png 1068w\", \"/static/501ace8ca17735634dd85ffb141da43a/eee47/vscode-open-markdown-preview.png 1424w\", \"/static/501ace8ca17735634dd85ffb141da43a/38407/vscode-open-markdown-preview.png 2136w\", \"/static/501ace8ca17735634dd85ffb141da43a/f635f/vscode-open-markdown-preview.png 3248w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/501ace8ca17735634dd85ffb141da43a/690c8/vscode-open-markdown-preview.webp\",\n        \"srcSet\": [\"/static/501ace8ca17735634dd85ffb141da43a/25c8a/vscode-open-markdown-preview.webp 178w\", \"/static/501ace8ca17735634dd85ffb141da43a/60698/vscode-open-markdown-preview.webp 356w\", \"/static/501ace8ca17735634dd85ffb141da43a/690c8/vscode-open-markdown-preview.webp 712w\", \"/static/501ace8ca17735634dd85ffb141da43a/d7e52/vscode-open-markdown-preview.webp 1068w\", \"/static/501ace8ca17735634dd85ffb141da43a/456ef/vscode-open-markdown-preview.webp 1424w\", \"/static/501ace8ca17735634dd85ffb141da43a/2a654/vscode-open-markdown-preview.webp 2136w\", \"/static/501ace8ca17735634dd85ffb141da43a/c67c1/vscode-open-markdown-preview.webp 3248w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), `\n  `, React.createElement(MDXTag, {\n      name: \"img\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/501ace8ca17735634dd85ffb141da43a/c67c1/vscode-open-markdown-preview.webp\",\n        \"alt\": \"选中 Markdown 文件后，在命令面板选择 Markdown Preview Enhanced: Open Preview。\",\n        \"title\": \"打开 Markdown 预览\",\n        \"width\": 712,\n        \"height\": 377,\n        \"loading\": \"lazy\"\n      }\n    }))), `\n    `, React.createElement(MDXTag, {\n      name: \"figcaption\",\n      components: components,\n      parentName: \"figure\"\n    }, `\n        `, React.createElement(MDXTag, {\n      name: \"span\",\n      components: components,\n      parentName: \"figcaption\"\n    }, `\n            打开 Markdown 预览\n        `), `\n    `)))), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, React.createElement(MDXTag, {\n      name: \"p\",\n      components: components,\n      parentName: \"li\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `全文复制预览结果：`), ` 按下 command + A 全选预览结果然后 command + C 复制。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components,\n      parentName: \"li\"\n    }, React.createElement(MDXTag, {\n      name: \"figure\",\n      components: components,\n      parentName: \"p\"\n    }, `\n    `, React.createElement(MDXTag, {\n      name: \"a\",\n      components: components,\n      parentName: \"figure\",\n      props: {\n        \"href\": \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/c67c1/vscode-preview-select-all.webp\"\n      }\n    }, React.createElement(MDXTag, {\n      name: \"picture\",\n      components: components,\n      parentName: \"a\"\n    }, `\n  `, React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/0cc25/vscode-preview-select-all.png\",\n        \"srcSet\": [\"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/5116e/vscode-preview-select-all.png 178w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/92f55/vscode-preview-select-all.png 356w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/0cc25/vscode-preview-select-all.png 712w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/7ae06/vscode-preview-select-all.png 1068w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/eee47/vscode-preview-select-all.png 1424w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/38407/vscode-preview-select-all.png 2136w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/f635f/vscode-preview-select-all.png 3248w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/690c8/vscode-preview-select-all.webp\",\n        \"srcSet\": [\"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/25c8a/vscode-preview-select-all.webp 178w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/60698/vscode-preview-select-all.webp 356w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/690c8/vscode-preview-select-all.webp 712w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/d7e52/vscode-preview-select-all.webp 1068w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/456ef/vscode-preview-select-all.webp 1424w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/2a654/vscode-preview-select-all.webp 2136w\", \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/c67c1/vscode-preview-select-all.webp 3248w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), `\n  `, React.createElement(MDXTag, {\n      name: \"img\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/8c9ebe0699e5ab9cce6d5ad6ba9337c0/c67c1/vscode-preview-select-all.webp\",\n        \"alt\": \"在预览页面全选渲染后的文章内容。\",\n        \"title\": \"全选预览结果\",\n        \"width\": 712,\n        \"height\": 602,\n        \"loading\": \"lazy\"\n      }\n    }))), `\n    `, React.createElement(MDXTag, {\n      name: \"figcaption\",\n      components: components,\n      parentName: \"figure\"\n    }, `\n        `, React.createElement(MDXTag, {\n      name: \"span\",\n      components: components,\n      parentName: \"figcaption\"\n    }, `\n            全选预览结果\n        `), `\n    `)))), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, React.createElement(MDXTag, {\n      name: \"p\",\n      components: components,\n      parentName: \"li\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `粘贴至 X 长文编辑器：`), ` 在 X 长文编辑器 command + V 粘贴。`)), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, React.createElement(MDXTag, {\n      name: \"p\",\n      components: components,\n      parentName: \"li\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `[可选]`, `逐张补图片：`), ` 图片粘贴过来之后会丢失，你需要一张一张补。`)), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, React.createElement(MDXTag, {\n      name: \"p\",\n      components: components,\n      parentName: \"li\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `[可选]`, `处理代码块：`), ` 代码块粘贴过来之后格式和语言会丢失，你需要使用代码块工具重新输入。`)), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, React.createElement(MDXTag, {\n      name: \"p\",\n      components: components,\n      parentName: \"li\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `[可选]`, `处理表格：`), ` 表格粘贴过来全部都是乱的，需要重新输入。`))), React.createElement(MDXTag, {\n      name: \"h3\",\n      components: components\n    }, `这条路的优缺点`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `优点是零成本、零门槛。缺点全在第五、六、七步:图片要手动补,代码和表格要降级处理。`), React.createElement(MDXTag, {\n      name: \"h2\",\n      components: components\n    }, `方法二：x-articles 插件 + agent 自动发布`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `方法一的最后三步（补图、修代码块、修表格）是纯手工活，篇篇如此。想省掉它们，就得让机器替你做。我把这套流程做成了一个 agent 插件 `, React.createElement(MDXTag, {\n      name: \"a\",\n      components: components,\n      parentName: \"p\",\n      props: {\n        \"href\": \"https://github.com/WeZZard/pi-x-articles\"\n      }\n    }, `x-articles`), `：一个确定性转换脚本，加一套发布工作流，装进 agent 就能用。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `插件背后是两样东西：X 官方的 MCP server（`, React.createElement(MDXTag, {\n      name: \"a\",\n      components: components,\n      parentName: \"p\",\n      props: {\n        \"href\": \"https://github.com/xdevplatform/xmcp\"\n      }\n    }, `xdevplatform/xmcp`), `）提供 X API 工具；插件自带的脚本把 Markdown 确定性地转换成 X Articles 要求的 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"p\"\n    }, `content_state`), `——不让模型现场拼 JSON，UTF-16 offset 这类容易算错的东西全部由代码保证。`), React.createElement(MDXTag, {\n      name: \"h3\",\n      components: components\n    }, `安装`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `第一步，准备 X Developer 侧的凭据和 credits。`), ` 到 `, React.createElement(MDXTag, {\n      name: \"a\",\n      components: components,\n      parentName: \"p\",\n      props: {\n        \"href\": \"https://console.x.com\"\n      }\n    }, `console.x.com`), `，在 Apps 页面点 Create App 创建一个 app：`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"figure\",\n      components: components,\n      parentName: \"p\"\n    }, `\n    `, React.createElement(MDXTag, {\n      name: \"a\",\n      components: components,\n      parentName: \"figure\",\n      props: {\n        \"href\": \"/static/37798336b3cbfffd35ff0521d9f25ba9/0ecc0/x-console-create-app.webp\"\n      }\n    }, React.createElement(MDXTag, {\n      name: \"picture\",\n      components: components,\n      parentName: \"a\"\n    }, `\n  `, React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/37798336b3cbfffd35ff0521d9f25ba9/0cc25/x-console-create-app.png\",\n        \"srcSet\": [\"/static/37798336b3cbfffd35ff0521d9f25ba9/5116e/x-console-create-app.png 178w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/92f55/x-console-create-app.png 356w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/0cc25/x-console-create-app.png 712w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/7ae06/x-console-create-app.png 1068w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/eee47/x-console-create-app.png 1424w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/38407/x-console-create-app.png 2136w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/e2825/x-console-create-app.png 2880w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/37798336b3cbfffd35ff0521d9f25ba9/690c8/x-console-create-app.webp\",\n        \"srcSet\": [\"/static/37798336b3cbfffd35ff0521d9f25ba9/25c8a/x-console-create-app.webp 178w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/60698/x-console-create-app.webp 356w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/690c8/x-console-create-app.webp 712w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/d7e52/x-console-create-app.webp 1068w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/456ef/x-console-create-app.webp 1424w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/2a654/x-console-create-app.webp 2136w\", \"/static/37798336b3cbfffd35ff0521d9f25ba9/0ecc0/x-console-create-app.webp 2880w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), `\n  `, React.createElement(MDXTag, {\n      name: \"img\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/37798336b3cbfffd35ff0521d9f25ba9/0ecc0/x-console-create-app.webp\",\n        \"alt\": \"Developer Console 的 Apps 页面，右上角是 Create App 按钮。\",\n        \"title\": \"创建 app\",\n        \"width\": 712,\n        \"height\": 445,\n        \"loading\": \"lazy\"\n      }\n    }))), `\n    `, React.createElement(MDXTag, {\n      name: \"figcaption\",\n      components: components,\n      parentName: \"figure\"\n    }, `\n        `, React.createElement(MDXTag, {\n      name: \"span\",\n      components: components,\n      parentName: \"figcaption\"\n    }, `\n            创建 app\n        `), `\n    `))), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `在 app 的 Keys & Tokens 页面拿到 consumer key、consumer secret 和 bearer token（secret 默认隐藏，点 Show 才显示）：`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"figure\",\n      components: components,\n      parentName: \"p\"\n    }, `\n    `, React.createElement(MDXTag, {\n      name: \"a\",\n      components: components,\n      parentName: \"figure\",\n      props: {\n        \"href\": \"/static/0bc7a6ce143719fc2c26751f28db6deb/0ecc0/x-console-keys-tokens.webp\"\n      }\n    }, React.createElement(MDXTag, {\n      name: \"picture\",\n      components: components,\n      parentName: \"a\"\n    }, `\n  `, React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/0bc7a6ce143719fc2c26751f28db6deb/0cc25/x-console-keys-tokens.png\",\n        \"srcSet\": [\"/static/0bc7a6ce143719fc2c26751f28db6deb/5116e/x-console-keys-tokens.png 178w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/92f55/x-console-keys-tokens.png 356w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/0cc25/x-console-keys-tokens.png 712w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/7ae06/x-console-keys-tokens.png 1068w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/eee47/x-console-keys-tokens.png 1424w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/38407/x-console-keys-tokens.png 2136w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/e2825/x-console-keys-tokens.png 2880w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/0bc7a6ce143719fc2c26751f28db6deb/690c8/x-console-keys-tokens.webp\",\n        \"srcSet\": [\"/static/0bc7a6ce143719fc2c26751f28db6deb/25c8a/x-console-keys-tokens.webp 178w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/60698/x-console-keys-tokens.webp 356w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/690c8/x-console-keys-tokens.webp 712w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/d7e52/x-console-keys-tokens.webp 1068w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/456ef/x-console-keys-tokens.webp 1424w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/2a654/x-console-keys-tokens.webp 2136w\", \"/static/0bc7a6ce143719fc2c26751f28db6deb/0ecc0/x-console-keys-tokens.webp 2880w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), `\n  `, React.createElement(MDXTag, {\n      name: \"img\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/0bc7a6ce143719fc2c26751f28db6deb/0ecc0/x-console-keys-tokens.webp\",\n        \"alt\": \"App 的 Keys & Tokens 页面，Bearer Token、Consumer Key、Access Token 都在这一页。\",\n        \"title\": \"Keys & Tokens 页面\",\n        \"width\": 712,\n        \"height\": 445,\n        \"loading\": \"lazy\"\n      }\n    }))), `\n    `, React.createElement(MDXTag, {\n      name: \"figcaption\",\n      components: components,\n      parentName: \"figure\"\n    }, `\n        `, React.createElement(MDXTag, {\n      name: \"span\",\n      components: components,\n      parentName: \"figcaption\"\n    }, `\n            Keys & Tokens 页面\n        `), `\n    `))), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `在 app 的 Settings → Authentication settings 里，把 XMCP 的回调地址 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"p\"\n    }, `http://127.0.0.1:8976/oauth/callback`), ` 填进 Callback URI / Redirect URL：`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"figure\",\n      components: components,\n      parentName: \"p\"\n    }, `\n    `, React.createElement(MDXTag, {\n      name: \"a\",\n      components: components,\n      parentName: \"figure\",\n      props: {\n        \"href\": \"/static/d6f61740402a0c2a6aede3266687ce74/0ecc0/x-console-callback-url.webp\"\n      }\n    }, React.createElement(MDXTag, {\n      name: \"picture\",\n      components: components,\n      parentName: \"a\"\n    }, `\n  `, React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/d6f61740402a0c2a6aede3266687ce74/0cc25/x-console-callback-url.png\",\n        \"srcSet\": [\"/static/d6f61740402a0c2a6aede3266687ce74/5116e/x-console-callback-url.png 178w\", \"/static/d6f61740402a0c2a6aede3266687ce74/92f55/x-console-callback-url.png 356w\", \"/static/d6f61740402a0c2a6aede3266687ce74/0cc25/x-console-callback-url.png 712w\", \"/static/d6f61740402a0c2a6aede3266687ce74/7ae06/x-console-callback-url.png 1068w\", \"/static/d6f61740402a0c2a6aede3266687ce74/eee47/x-console-callback-url.png 1424w\", \"/static/d6f61740402a0c2a6aede3266687ce74/38407/x-console-callback-url.png 2136w\", \"/static/d6f61740402a0c2a6aede3266687ce74/e2825/x-console-callback-url.png 2880w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/d6f61740402a0c2a6aede3266687ce74/690c8/x-console-callback-url.webp\",\n        \"srcSet\": [\"/static/d6f61740402a0c2a6aede3266687ce74/25c8a/x-console-callback-url.webp 178w\", \"/static/d6f61740402a0c2a6aede3266687ce74/60698/x-console-callback-url.webp 356w\", \"/static/d6f61740402a0c2a6aede3266687ce74/690c8/x-console-callback-url.webp 712w\", \"/static/d6f61740402a0c2a6aede3266687ce74/d7e52/x-console-callback-url.webp 1068w\", \"/static/d6f61740402a0c2a6aede3266687ce74/456ef/x-console-callback-url.webp 1424w\", \"/static/d6f61740402a0c2a6aede3266687ce74/2a654/x-console-callback-url.webp 2136w\", \"/static/d6f61740402a0c2a6aede3266687ce74/0ecc0/x-console-callback-url.webp 2880w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), `\n  `, React.createElement(MDXTag, {\n      name: \"img\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/d6f61740402a0c2a6aede3266687ce74/0ecc0/x-console-callback-url.webp\",\n        \"alt\": \"Authentication settings 页面，App info 下的 Callback URI / Redirect URL 输入框。\",\n        \"title\": \"注册回调地址\",\n        \"width\": 712,\n        \"height\": 692,\n        \"loading\": \"lazy\"\n      }\n    }))), `\n    `, React.createElement(MDXTag, {\n      name: \"figcaption\",\n      components: components,\n      parentName: \"figure\"\n    }, `\n        `, React.createElement(MDXTag, {\n      name: \"span\",\n      components: components,\n      parentName: \"figcaption\"\n    }, `\n            注册回调地址\n        `), `\n    `))), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `最后确认账户里有 credits——X API 是 pay-per-use 计费，余额不足会收到 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"p\"\n    }, `402 Payment Required`), `。Credits 在 Billing → Credits 页面购买：`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"figure\",\n      components: components,\n      parentName: \"p\"\n    }, `\n    `, React.createElement(MDXTag, {\n      name: \"a\",\n      components: components,\n      parentName: \"figure\",\n      props: {\n        \"href\": \"/static/88942e9ee7430eed41d7d3889af58bd8/0ecc0/x-console-credits.webp\"\n      }\n    }, React.createElement(MDXTag, {\n      name: \"picture\",\n      components: components,\n      parentName: \"a\"\n    }, `\n  `, React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/88942e9ee7430eed41d7d3889af58bd8/0cc25/x-console-credits.png\",\n        \"srcSet\": [\"/static/88942e9ee7430eed41d7d3889af58bd8/5116e/x-console-credits.png 178w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/92f55/x-console-credits.png 356w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/0cc25/x-console-credits.png 712w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/7ae06/x-console-credits.png 1068w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/eee47/x-console-credits.png 1424w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/38407/x-console-credits.png 2136w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/e2825/x-console-credits.png 2880w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), React.createElement(MDXTag, {\n      name: \"source\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/88942e9ee7430eed41d7d3889af58bd8/690c8/x-console-credits.webp\",\n        \"srcSet\": [\"/static/88942e9ee7430eed41d7d3889af58bd8/25c8a/x-console-credits.webp 178w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/60698/x-console-credits.webp 356w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/690c8/x-console-credits.webp 712w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/d7e52/x-console-credits.webp 1068w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/456ef/x-console-credits.webp 1424w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/2a654/x-console-credits.webp 2136w\", \"/static/88942e9ee7430eed41d7d3889af58bd8/0ecc0/x-console-credits.webp 2880w\"],\n        \"sizes\": \"(max-width: 712px) 100vw, 712px\"\n      }\n    }), `\n  `, React.createElement(MDXTag, {\n      name: \"img\",\n      components: components,\n      parentName: \"picture\",\n      props: {\n        \"src\": \"/static/88942e9ee7430eed41d7d3889af58bd8/0ecc0/x-console-credits.webp\",\n        \"alt\": \"Billing → Credits 页面，显示余额和 Purchase credits 按钮。\",\n        \"title\": \"购买 credits\",\n        \"width\": 712,\n        \"height\": 445,\n        \"loading\": \"lazy\"\n      }\n    }))), `\n    `, React.createElement(MDXTag, {\n      name: \"figcaption\",\n      components: components,\n      parentName: \"figure\"\n    }, `\n        `, React.createElement(MDXTag, {\n      name: \"span\",\n      components: components,\n      parentName: \"figcaption\"\n    }, `\n            购买 credits\n        `), `\n    `))), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `第二步，装插件。`), ` 需要 Node.js 18+，然后按你的 agent 选一种：`), React.createElement(MDXTag, {\n      name: \"ul\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ul\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"li\"\n    }, `Claude Code`), `：先加市场 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"li\"\n    }, `/plugin marketplace add wezzard/skills`), `，再装 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"li\"\n    }, `/plugin install x-articles@wezzard-skills`), `。`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ul\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"li\"\n    }, `pi`), `：`, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"li\"\n    }, `pi install git:github.com/WeZZard/pi-x-articles`), `。`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ul\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"li\"\n    }, `Codex`), `：先加市场 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"li\"\n    }, `codex plugin marketplace add wezzard/skills`), `，再装 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"li\"\n    }, `codex plugin add x-articles@wezzard-skills`), `。`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ul\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"li\"\n    }, `OpenCode`), `：没有市场概念，clone 仓库后把 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"li\"\n    }, `skills/x-articles`), ` 符号链接进 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"li\"\n    }, `~/.config/opencode/skills/`), `。`)), React.createElement(MDXTag, {\n      name: \"h3\",\n      components: components\n    }, `发文章：一句话`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `装好之后，发文章就是一句话：`), React.createElement(MDXTag, {\n      name: \"blockquote\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"p\",\n      components: components,\n      parentName: \"blockquote\"\n    }, `用 x-articles 把 post.md 发布为 X Article。`)), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `agent 会按插件里的工作流走：`), React.createElement(MDXTag, {\n      name: \"ol\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, `首次运行时引导你装 XMCP——填凭据、注册回调地址、浏览器授权，三个人工检查点，其余全由 agent 做；`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, `跑转换脚本，把降级点（比如被丢弃的 HTML、被压平的嵌套列表）列给你看；`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, `自动上传文章里的图片；`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, `创建草稿，把编辑器链接给你；`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ol\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"li\"\n    }, `人类检查点：`), ` 你说「发布」它才调发布接口。`)), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `有两个地方值得多说一句。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `第一，`, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `代码块和表格不用降级`), `。这是 API 路径反超编辑器的地方：方法一里粘贴会丢的代码块和表格，Articles API 用一个 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"p\"\n    }, `markdown`), ` 类型的实体原生承接——fenced code block 和 GFM 管道表格直接塞进去，X 会原样渲染。我是在翻 OpenAPI spec 时才发现这点的，官方文档页面上没写。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `第二，`, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `先草稿、后发布`), `的人工确认点别省。agent 帮你干活，发布的按钮还握在你手里。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `第三，`, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `这个 API 不能更新文章，也不能删文章`), `。Articles API 一共只有两个端点：建草稿、发布。内容变了只能新建草稿，旧草稿在编辑器里手动丢弃；已发布的文章也只能在 X 的界面上手动删除。所以小改动直接在 X 的编辑器里改就好，只有从 Markdown 重新同步时才值得走一遍新草稿。`), React.createElement(MDXTag, {\n      name: \"h2\",\n      components: components\n    }, `方法三：私有 GraphQL API（有风险）`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `最后说第三条路。这条路不论用哪个工具都有`, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `风险`), `，这里以开源的 `, React.createElement(MDXTag, {\n      name: \"a\",\n      components: components,\n      parentName: \"p\",\n      props: {\n        \"href\": \"https://www.npmjs.com/package/@kaitox/x-article\"\n      }\n    }, `@kaitox/x-article`), ` 为例，它有 Chrome 扩展、Obsidian 插件和 CLI 三种形态。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `它的原理：X 网页版自己的文章编辑器背后是一套`, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"p\"\n    }, `私有的 GraphQL 接口`), `，@kaitox/x-article 模拟的就是这套接口——用你浏览器里已登录的会话（cookie 加上所有 x.com 网页客户端共用的那个公开 bearer token），调编辑器同款的 mutation 把 Markdown 转好的 `, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"p\"\n    }, `content_state`), ` 提交成草稿。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `它的好处：`), React.createElement(MDXTag, {\n      name: \"ul\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ul\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"li\"\n    }, `不要开发者账号，不要 credits，不要 XMCP`), `——什么都不用申请，装个浏览器扩展就能用；`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ul\"\n    }, `Markdown 转换它也做，代码块、表格一样走 markdown 实体；`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ul\"\n    }, `只建草稿，发布那一下还是你在编辑器里手动点——正好符合「先草稿、后发布」的原则。`)), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `它的代价：`), React.createElement(MDXTag, {\n      name: \"ul\",\n      components: components\n    }, React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ul\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"li\"\n    }, `封号风险`), `。私有 API 自动化违反 X 的平台规则，官方随时可以判定滥用。你用它发文章，等于把账号放在火上烤；`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ul\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"li\"\n    }, `随时会坏`), `。这套接口没有兼容性承诺：mutation 的 queryId 会不定期轮换，`, React.createElement(MDXTag, {\n      name: \"inlineCode\",\n      components: components,\n      parentName: \"li\"\n    }, `x-client-transaction-id`), ` 反爬校验时有时无，登录会话会过期。库作者自己都在文档里写着 \"expect breakage\"；`), React.createElement(MDXTag, {\n      name: \"li\",\n      components: components,\n      parentName: \"ul\"\n    }, React.createElement(MDXTag, {\n      name: \"strong\",\n      components: components,\n      parentName: \"li\"\n    }, `没有 publish`), `。只能建草稿，而且服务端的调用方式（导出 cookie 到命令行）更脆弱，作者自己建议只在浏览器里用。`)), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `个人的建议是：大家有 X 长文需求的大多是有维护自己 X 账号的需求，而在 distribution 越来越重要的今天为了一些 API 的费用号被封了很不值得。`), React.createElement(MDXTag, {\n      name: \"p\",\n      components: components\n    }, `以中国的古老智慧一般可以想到：这个 GraphQL 的接口这么容易被调到，肯定是有防滥用机制。这里仅作介绍。我个人没有在使用这个方法，也不会使用。`));\n  }\n\n}\nMDXContent.isMDXComponent = true;","scope":""},"headings":[{"value":"方法一：VS Code + 复制粘贴","depth":2},{"value":"步骤","depth":3},{"value":"这条路的优缺点","depth":3},{"value":"方法二：x-articles 插件 + agent 自动发布","depth":2},{"value":"安装","depth":3},{"value":"发文章：一句话","depth":3},{"value":"方法三：私有 GraphQL API（有风险）","depth":2}]}}},"earlierPostExcerpt":{"slug":"/post/2026/07/j-space-reveals-how-examples-shape-model-behavior-fa92","title":"J-Space 告诉你 Examples 如何形塑模型行为","subtitle":"","createdTime":"2026-07-20T00:00:00.000Z","tags":["AI","Prompting","Interpretability"],"category":"Programming","file":{"childMdx":{"excerpt":"最近我在调整 Claude 的英文输出风格时，反复遇到一个问题 —— 我已经给了它很多抽象规则，比如： 不要说黑话，使用直接平实的语言；不要自行发明术语除非事先给出定义。 但它还是经常会掉回满嘴黑话、临时自行发明一些术语的状态。 不过这个时候只要要求 Claude 反省是否违背了我定义的输出风格规则，Claude 又会马上反应过来，用平实自然的英文跟我重新说一遍。 这个体验严重影响了我使用 AI 的效率。因为我想要的是平实自然的沟通，而不是一种经过后训练强化后的「大厂工程文化」一样的表达。 于是我问了 Claude…"}}},"laterPostExcerpt":null},"pageContext":{"postId":"2a042fb6-d522-5b58-8916-18f5b269ef54","earlierPostId":"d8828cc2-f0f5-5770-a201-6fadbe61d2cf","laterPostId":null}}