<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI on Billy's Blog</title><link>https://www.giantough.top/tags/ai/</link><description>Recent content in AI on Billy's Blog</description><generator>Hugo</generator><language>zh-CN</language><managingEditor>billychen826@gmail.com (Billy)</managingEditor><webMaster>billychen826@gmail.com (Billy)</webMaster><lastBuildDate>Sat, 10 Oct 2026 16:35:00 +0800</lastBuildDate><atom:link href="https://www.giantough.top/tags/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>我让 AI 每天自动出一条 90 秒视频：AI 早报流水线拆解，成本和翻车都写上</title><link>https://www.giantough.top/posts/ai-daily-pipeline/</link><pubDate>Sat, 10 Oct 2026 16:35:00 +0800</pubDate><author>billychen826@gmail.com (Billy)</author><guid>https://www.giantough.top/posts/ai-daily-pipeline/</guid><description>&lt;p>这周我搭了一条流水线：每天早上 10:02 自动跑一次，产出一份 AI 早报文字简报和一条 88 秒左右的中文讲解视频，然后投到 B 站。今天这期在这里：&lt;a href="https://www.bilibili.com/video/BV1pXpY6xE1k/">AI 早报 10.10&lt;/a>。&lt;/p>
&lt;p>&lt;img src="https://www.giantough.top/posts/ai-daily-pipeline/cover-intro.png" alt="AI 早报 10.10 片头" width="1920" height="1080" decoding="async">&lt;/p>
&lt;p>起因是歸藏（@op7418）10 月 8 日公开了他做「AI 早报 + 讲解视频」的整套提示词（&lt;a href="https://x.com/op7418/status/2108148604447883464">原帖&lt;/a>），第二天又把「newsletter 转 2 分钟视频」做成了可以直接装的 bot 模板（&lt;a href="https://x.com/op7418/status/2108566650350170411">原帖&lt;/a>）。我照着搭了一套，样片跑通了。但跑一期 demo 和每天稳定出片是两回事，后者要回答这几个问题：&lt;/p>
&lt;ul>
&lt;li>采集、写稿、渲染、发布，各自交给谁？&lt;/li>
&lt;li>怎么保证视频里的数字没编？&lt;/li>
&lt;li>一期花多少钱、多长时间？&lt;/li>
&lt;li>出错了是悄悄发一条烂片，还是停下来？&lt;/li>
&lt;/ul>
&lt;p>下面按这几个问题拆。文中的耗时、轮数、成本和退出码都来自流水线自己落盘的日志，出处列在文末。&lt;/p>
&lt;h2 id="整体架构">整体架构&lt;/h2>
&lt;p>&lt;img src="https://www.giantough.top/posts/ai-daily-pipeline/architecture.webp" alt="AI 早报自动流水线架构：编排层采集核对写简报，渲染层用 Claude Code 出旁白和视频并审片，交付层私聊验收、B 站自动投稿、X 由我自己点发布" width="3200" height="1760" loading="lazy" decoding="async">&lt;/p>
&lt;p>图里是三层，真正干活的是前两层。拆成两层，是因为两边能拿到的东西不一样。&lt;/p>
&lt;p>Claude Code 跑在一台云端 Linux 机器上，那里没有 X 的连接器，读不到我的收藏和推文。编排层是一个常驻的 Grok Bot 助手，手上有 X 连接器、能联网核对官方页，也有定时任务。所以采集、核对、写简报都归它，Claude Code 只拿 &lt;code>brief.md&lt;/code> 干活，而且被要求把它当成&lt;strong>唯一事实来源&lt;/strong>。&lt;/p>
&lt;p>这样分还有个好处：渲染那一层不联网找资料，也就没有机会自己「补」新闻进来。prompt 第一句写的就是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>你在 box 上非交互运行，没人能回答问题；不要发任何消息/帖子，不要访问社交账号。
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="目录和入口">目录和入口&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>/workspace/ai-daily/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── RUNBOOK.md 全流程手册
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── run_daily.sh 每日入口
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── prompts/video.md 首次搭建用的完整 prompt（engine 不存在时）
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── prompts/daily.md 日常复用 prompt（engine 已存在时）
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── engine/ 可复用的视频工程
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── make_video.sh 一键 8 步
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── DIRECTION.md 影片方向（镜头表每天自动重写）
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── tools/ build_content.py / tts.py / qa_layout.mjs ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── src/shots/news.jsx 所有版式
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└── out/&amp;lt;Y&amp;gt;/ 每期的 brief、sources、items、narration、mp4、keyframes、qa-report
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>run_daily.sh&lt;/code> 不长，核心就几段。先检查编排层有没有把简报写好，没有就直接退出，不让 Claude Code 凭空发挥：&lt;/p></description></item><item><title>RAG 技术深度解析：从基础到 GraphRAG，以及大 Context 时代的思考</title><link>https://www.giantough.top/posts/rag-graphrag-context/</link><pubDate>Wed, 05 Nov 2025 10:00:00 +0800</pubDate><author>billychen826@gmail.com (Billy)</author><guid>https://www.giantough.top/posts/rag-graphrag-context/</guid><description>&lt;h2 id="rag-基础原理">RAG 基础原理&lt;/h2>
&lt;h3 id="什么是-rag">什么是 RAG&lt;/h3>
&lt;p>RAG (Retrieval-Augmented Generation) 检索增强生成，是一种结合了信息检索和大语言模型生成能力的技术范式。其核心思想是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>用户查询 → 检索相关文档 → 将文档作为上下文 → LLM 生成答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="为什么需要-rag">为什么需要 RAG&lt;/h3>
&lt;p>在 RAG 出现之前，LLM 面临几个核心问题：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>知识截止日期&lt;/strong>：模型训练数据有时效性，无法获取最新信息&lt;/li>
&lt;li>&lt;strong>幻觉问题&lt;/strong>：模型可能生成看似合理但实际错误的内容&lt;/li>
&lt;li>&lt;strong>领域知识局限&lt;/strong>：对特定领域的深度知识覆盖不足&lt;/li>
&lt;li>&lt;strong>无法访问私有数据&lt;/strong>：企业内部文档、数据库无法被预训练模型学习&lt;/li>
&lt;li>&lt;strong>Context Window 大小受限&lt;/strong>：Context Window 不足以塞下全部文档内容，用户提问时 window 就塞满了&lt;/li>
&lt;/ol>
&lt;h3 id="rag-的基本架构">RAG 的基本架构&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>┌─────────────┐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ 文档语料库 │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└──────┬──────┘
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ 离线处理
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ▼
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>┌─────────────┐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ 文档切块 │ (Chunking)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└──────┬──────┘
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ▼
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>┌─────────────┐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ 向量化 │ (Embedding)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└──────┬──────┘
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ▼
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>┌─────────────┐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ 向量数据库 │ (Vector DB)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└──────┬──────┘
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ 在线查询
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>┌──────┴──────┐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ 用户查询 │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└──────┬──────┘
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ▼
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>┌─────────────┐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ 查询向量化 │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└──────┬──────┘
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ▼
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>┌─────────────┐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ 相似度检索 │ (Top-K)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└──────┬──────┘
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ▼
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>┌─────────────┐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ 重排序 │ (可选)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└──────┬──────┘
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ▼
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>┌─────────────┐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ 构建 Prompt │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└──────┬──────┘
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ▼
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>┌─────────────┐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ LLM 生成 │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└──────┬──────┘
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ▼
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>┌─────────────┐
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ 返回答案 │
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└─────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="关键技术组件">关键技术组件&lt;/h3>
&lt;h4 id="1-文档切块-chunking">1. 文档切块 (Chunking)&lt;/h4>
&lt;p>切块策略直接影响检索质量。&lt;/p></description></item><item><title>使用Go开发MCP并接入Claude Desktop：go-mcp库实践</title><link>https://www.giantough.top/posts/go-mcp-claude/</link><pubDate>Tue, 08 Apr 2025 15:30:00 +0800</pubDate><author>billychen826@gmail.com (Billy)</author><guid>https://www.giantough.top/posts/go-mcp-claude/</guid><description>&lt;h2 id="引言">引言&lt;/h2>
&lt;p>人工智能助手如Claude已经成为我们日常工作的重要工具，但其能力往往受限于预设功能。通过Model Completion Protocol (MCP)，我们可以显著扩展AI助手的能力边界，使其能够执行更多实用的任务。本文将详细介绍如何使用go-mcp开源库在Go语言环境下开发MCP服务，并将其成功接入Claude Desktop，实现与本地应用程序的交互。&lt;/p>
&lt;h2 id="mcp协议简介">MCP协议简介&lt;/h2>
&lt;p>Model Completion Protocol (MCP)是一个允许AI助手与外部工具进行交互的协议。通过MCP，Claude等AI助手可以：&lt;/p>
&lt;ul>
&lt;li>调用外部工具和API&lt;/li>
&lt;li>访问本地系统资源&lt;/li>
&lt;li>执行特定的计算任务&lt;/li>
&lt;li>获取和处理实时数据&lt;/li>
&lt;/ul>
&lt;p>这使得Claude能够突破知识截止日期的限制，获取最新信息，并执行需要额外计算能力或系统访问权限的任务。&lt;/p>
&lt;h2 id="go-mcp库介绍">go-mcp库介绍&lt;/h2>
&lt;p>&lt;a href="https://github.com/virgoC0der/go-mcp">go-mcp&lt;/a>是一个基于Go语言的MCP协议实现库，它提供了一套完整的API用于开发MCP服务。使用go-mcp，开发者可以轻松地创建自定义工具，并将这些工具无缝集成到Claude Desktop中。&lt;/p>
&lt;p>该库的主要特点包括：&lt;/p>
&lt;ul>
&lt;li>完整实现MCP协议规范&lt;/li>
&lt;li>支持HTTP和stdio两种通信方式&lt;/li>
&lt;li>灵活的服务端架构&lt;/li>
&lt;li>内置请求验证和错误处理&lt;/li>
&lt;li>类型安全的API设计&lt;/li>
&lt;/ul>
&lt;h2 id="开发环境准备">开发环境准备&lt;/h2>
&lt;p>在开始开发之前，我们需要准备以下环境：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#414868;font-style:italic"># 安装Go (确保版本至少为1.18)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>brew install go
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#414868;font-style:italic"># 克隆go-mcp仓库&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git clone https://github.com/virgoC0der/go-mcp.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#9ece6a">cd&lt;/span> go-mcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#414868;font-style:italic"># 安装依赖&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>go mod tidy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="实现应用启动器mcp服务">实现应用启动器MCP服务&lt;/h2>
&lt;p>参考go-mcp仓库中的examples/app-launcher示例，我们来实现一个应用启动器MCP服务，这个服务将允许Claude Desktop打开本地应用程序。&lt;/p>
&lt;h3 id="1-创建项目结构">1. 创建项目结构&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>mkdir claude-app-launcher
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#9ece6a">cd&lt;/span> claude-app-launcher
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>go mod init github.com/yourusername/claude-app-launcher
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-实现服务结构">2. 实现服务结构&lt;/h3>
&lt;p>首先，让我们实现一个满足MCP协议要求的服务结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#7dcfff">package&lt;/span> main
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#7dcfff">import&lt;/span> (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;context&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;encoding/json&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;fmt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;log&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;os&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;os/exec&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;os/signal&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;runtime&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;sync&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;syscall&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;github.com/virgoC0der/go-mcp&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;github.com/virgoC0der/go-mcp/internal/types&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#9ece6a">&amp;#34;github.com/virgoC0der/go-mcp/transport&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#414868;font-style:italic">// AppLauncherServer implements the MCP service interface&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#9d7cd8">type&lt;/span> AppLauncherServer &lt;span style="color:#9d7cd8">struct&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	prompts []types.Prompt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	tools []types.Tool
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	resources []types.Resource
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#414868;font-style:italic">// NewAppLauncherServer creates a new app launcher server instance&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#9d7cd8">func&lt;/span> &lt;span style="color:#7aa2f7">NewAppLauncherServer&lt;/span>() &lt;span style="color:#9ece6a;font-weight:bold">*&lt;/span>AppLauncherServer {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	s &lt;span style="color:#9ece6a;font-weight:bold">:=&lt;/span> &lt;span style="color:#9ece6a;font-weight:bold">&amp;amp;&lt;/span>AppLauncherServer{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		&lt;span style="color:#414868;font-style:italic">// 定义支持的提示&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		prompts: []types.Prompt{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>			{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				Name: &lt;span style="color:#9ece6a">&amp;#34;openApp&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				Description: &lt;span style="color:#9ece6a">&amp;#34;Open a macOS application&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				Arguments: []types.PromptArgument{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>					{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>						Name: &lt;span style="color:#9ece6a">&amp;#34;appName&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>						Description: &lt;span style="color:#9ece6a">&amp;#34;Name of the application to open&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>						Required: &lt;span style="color:#e0af68">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>					},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>			},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		&lt;span style="color:#414868;font-style:italic">// 定义支持的工具&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		tools: []types.Tool{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>			{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				Name: &lt;span style="color:#9ece6a">&amp;#34;openApp&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				Description: &lt;span style="color:#9ece6a">&amp;#34;Open a macOS application&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				InputSchema: &lt;span style="color:#9d7cd8">map&lt;/span>[&lt;span style="color:#41a6b5">string&lt;/span>]&lt;span style="color:#9d7cd8">interface&lt;/span>{}{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>					&lt;span style="color:#9ece6a">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#9ece6a">&amp;#34;object&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>					&lt;span style="color:#9ece6a">&amp;#34;properties&amp;#34;&lt;/span>: &lt;span style="color:#9d7cd8">map&lt;/span>[&lt;span style="color:#41a6b5">string&lt;/span>]&lt;span style="color:#9d7cd8">interface&lt;/span>{}{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>						&lt;span style="color:#9ece6a">&amp;#34;appName&amp;#34;&lt;/span>: &lt;span style="color:#9d7cd8">map&lt;/span>[&lt;span style="color:#41a6b5">string&lt;/span>]&lt;span style="color:#9d7cd8">interface&lt;/span>{}{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>							&lt;span style="color:#9ece6a">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#9ece6a">&amp;#34;string&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>							&lt;span style="color:#9ece6a">&amp;#34;description&amp;#34;&lt;/span>: &lt;span style="color:#9ece6a">&amp;#34;Name of the application to open&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>						},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>					},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>					&lt;span style="color:#9ece6a">&amp;#34;required&amp;#34;&lt;/span>: []&lt;span style="color:#41a6b5">string&lt;/span>{&lt;span style="color:#9ece6a">&amp;#34;appName&amp;#34;&lt;/span>},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>			},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		&lt;span style="color:#414868;font-style:italic">// 定义支持的资源&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		resources: []types.Resource{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>			{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				URI: &lt;span style="color:#9ece6a">&amp;#34;apps&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				Name: &lt;span style="color:#9ece6a">&amp;#34;apps&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				Description: &lt;span style="color:#9ece6a">&amp;#34;List of common macOS applications&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>				MimeType: &lt;span style="color:#9ece6a">&amp;#34;application/json&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>			},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#bb9af7">return&lt;/span> s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-实现服务接口方法">3. 实现服务接口方法&lt;/h3>
&lt;p>接下来，我们需要实现MCP服务接口所需的各种方法：&lt;/p></description></item><item><title>Claude+MCP一键生成博客：AI助力内容创作与自动化部署</title><link>https://www.giantough.top/posts/claude-mcp-blog-automation/</link><pubDate>Mon, 31 Mar 2025 10:00:00 +0800</pubDate><author>billychen826@gmail.com (Billy)</author><guid>https://www.giantough.top/posts/claude-mcp-blog-automation/</guid><description>&lt;p>在这个信息爆炸的时代，高效地创建和发布内容已成为许多创作者的迫切需求。今天，我想分享一个结合了AI大语言模型Claude和Model Context Protocol (MCP)的强大工作流，它可以让你以惊人的速度从创意到发布完成整个博客创作过程。&lt;/p>
&lt;h2 id="工作流概述">工作流概述&lt;/h2>
&lt;p>这个一键式博客生成和部署流程包含三个主要步骤：&lt;/p>
&lt;ol>
&lt;li>使用Claude生成高质量的博客内容并保存为Markdown文件&lt;/li>
&lt;li>通过MCP desktop-commander自动推送到GitHub仓库并触发GitHub Actions&lt;/li>
&lt;li>利用MCP playwright自动检查部署结果&lt;/li>
&lt;/ol>
&lt;p>这个过程完全自动化，从内容创建到部署验证，几乎不需要人工干预。&lt;/p>
&lt;h2 id="配置mcp工具">配置MCP工具&lt;/h2>
&lt;p>要开始使用这个工作流，首先需要在Claude客户端中配置MCP工具。步骤如下：&lt;/p>
&lt;ol>
&lt;li>打开Claude客户端&lt;/li>
&lt;li>点击Settings -&amp;gt; Developer -&amp;gt; Edit Config&lt;/li>
&lt;li>输入以下配置：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#c0caf5;background-color:#1a1b26;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#bb9af7">&amp;#34;mcpServers&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#bb9af7">&amp;#34;fileSystme&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#bb9af7">&amp;#34;command&amp;#34;&lt;/span>: &lt;span style="color:#9ece6a">&amp;#34;npx&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#bb9af7">&amp;#34;args&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#9ece6a">&amp;#34;-y&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#9ece6a">&amp;#34;@modelcontextprotocol/server-filesystem&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#9ece6a">&amp;#34;YOUR PATH&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#bb9af7">&amp;#34;playwright&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#bb9af7">&amp;#34;command&amp;#34;&lt;/span>: &lt;span style="color:#9ece6a">&amp;#34;npx&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#bb9af7">&amp;#34;args&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#9ece6a">&amp;#34;@playwright/mcp@latest&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#bb9af7">&amp;#34;desktop-commander&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#bb9af7">&amp;#34;command&amp;#34;&lt;/span>: &lt;span style="color:#9ece6a">&amp;#34;npx&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#bb9af7">&amp;#34;args&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#9ece6a">&amp;#34;-y&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#9ece6a">&amp;#34;@smithery/cli@latest&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#9ece6a">&amp;#34;run&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#9ece6a">&amp;#34;@wonderwhy-er/desktop-commander&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#9ece6a">&amp;#34;--key&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#9ece6a">&amp;#34;YOUR PERSONAL KEY&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这个配置告诉Claude如何与三个关键MCP工具通信：&lt;/p></description></item></channel></rss>