使用 Claude Opus 4.5 构建智能 GitHub Wiki 助手

本教程深入探讨如何利用 Claude Opus 4.5 和 Claude Agent SDK 构建一个全自动化的 GitHub Wiki 智能助手。该工具能自动分析代码库,生成结构清晰的多文件 Wiki 文档,并自动发布到你的 GitHub 仓库,极大地简化了项目文档的创建和维护工作。

阅读时长: 8 分钟
共 3915字
作者: eimoon.com

作为开发者,我们都知道一份好的项目文档有多重要,特别是 GitHub 上的 Wiki。但要手动维护这些文档,真的让人头疼,尤其是当项目代码量大、迭代快的时候。代码读完,架构理清,内容组织好,这些工作往往耗时耗力,结果还可能因为疏忽而不够及时和全面。

这时,一个能自动搞定这一切的 GitHub Wiki 智能助手,听起来就像是魔法。这篇教程里,我将带你用 Claude Opus 4.5 和 Anthropic 的 Claude Agent SDK,一步步打造这样一个自动化工具。它不只是翻译代码,更是理解项目结构,然后自动生成高质量的多页 Wiki 内容,并且直接推送到你的仓库里。想象一下,只需一条指令,文档就自动更新了,这会是多么的省心!

我个人觉得,这个交互式的命令行工具,不仅操作流畅,而且智能度也很够用,完全是为开发者量身定做的。接下来,我们会按部就班地完成三件事:环境搭建,助手开发,最后在真实项目上跑跑看,感受它的魔力。

为 Claude Opus 4.5 GitHub Wiki 教程准备环境

在开始用 Opus 4.5 构建 GitHub Wiki 助手之前,确保你的环境配置是正确。这一节我会带着你一步步完成所有必要的准备工作。

1. Claude Opus 4.5 Wiki 助手运行前提

首先,你需要满足以下条件:

  • Python 3.11 或更高版本:这是 Claude Agent SDK 所需要的。
  • Node.js 和 npm:用于安装 Claude Code,它是我们应用的核心骨架,负责提供代理、工具以及与 MCP 服务器的集成。

2. 安装并认证 Claude Code

打开你的终端(可以是 Command Prompt、PowerShell 或是 macOS Terminal),然后执行以下命令来安装 Claude Code CLI:

npm install -g @anthropic-ai/claude-code

安装完成后,在终端中输入 claude 启动 Claude Code。接着,在 Claude 的聊天界面里输入 /login 进行认证,这样你才能访问 Opus 4.5 模型和相关工具,就像下面图片展示的。

Install & Authenticate Claude Code

如果你想深入了解 Claude Code,我推荐你看看 DataCamp 上的相关教程。

3. 生成细粒度 GitHub 个人访问令牌(PAT)

为了让助手能操作你的 GitHub 仓库,我们需要一个细粒度的个人访问令牌。你可以这样生成:

前往 GitHub,导航到: SettingsDeveloper SettingsPersonal Access TokensFine-grained tokens

创建一个新令牌,在“Repository”(仓库)部分选择你要使用的仓库,然后配置权限。为了安全起见,建议为令牌设置一个较短的有效期。

Creating GitHub Personal Access Token

然后,将你的个人访问令牌设置为环境变量:

export GITHUB_PAT="你的-github-个人访问令牌"

4. 初始化你的 GitHub Wiki

GitHub 目前不支持先在本地创建 Wiki。所以,你必须手动初始化 Wiki:

  1. 打开你的 GitHub 仓库。
  2. 点击 Wiki 标签页。
  3. 点击“Create the first page”(创建第一个页面)。
  4. 保存页面(标题随意)。

Create the first page in the GitHub wiki

5. 安装 Claude Agent SDK

最后一步是安装 Claude Agentic 框架。它负责处理从使用 MCP 到调用工具、创建文件,甚至将更改推送到远程仓库的所有事情。

pip install claude-agent-sdk

使用 Claude Opus 4.5 构建自动化 Wiki 助手

现在,我们开始编写名为 gh_wiki_cli.py 的 Python CLI 应用程序。这个文件将包含配置、代理、工具、MCP 客户端、系统提示、CLI 应用程序本身以及辅助函数。这些组件将确保用户能够提供仓库链接,而代理知道如何正确处理它以发布 GitHub wiki。

1. 导入必要的模块

这部分会引入 Python 标准库模块、类型提示以及 Claude Agent SDK 的核心组件。

  • asyncio:用于异步 I/O 操作(聊天和流式处理)。
  • os, sys:用于环境变量和程序退出。
  • dataclass:用于跟踪会话统计数据。
  • Claude Agent SDK 导入:用于与代理和 MCP 工具进行通信。
import asyncio
import os
import sys
from dataclasses import dataclass
from typing import Dict

# --- SDK Imports ---
from claude_agent_sdk import (
    AssistantMessage,
    ClaudeAgentOptions,
    ClaudeSDKClient,
    McpSdkServerConfig,
    ResultMessage,
    TextBlock,
    ToolResultBlock,
    ToolUseBlock,
)

2. 系统提示词:助手的“大脑”

这是代理的“大脑”。我们会指示 Opus 4.5 模型应如何行为以及如何使用工具。这里使用的系统提示词,是我精心设计的,旨在让模型能够理解并遵循特定的工作流程和约束。

SYSTEM_PROMPT = """
        You are an expert Technical Writer and GitHub Wiki specialist.

        TOOLS
        - Read, Write, Glob, Grep:
        - Use these to inspect files and folders in the project directory (e.g. /tmp/Issue-Analyzer) and in wiki_clone/.
        - Use them to list files, read contents, and search for patterns.
        - Write:
        - Use this ONLY to write or update three wiki pages inside wiki_clone/:
            - wiki_clone/Home.md
            - wiki_clone/Getting-Started.md
            - wiki_clone/Architecture-and-Tools.md
        - Bash:
        - Bash is ONLY allowed for git commands, never for inspection or editing.
        - Allowed commands (with cd wiki_clone/ when needed):
            - git clone <repo>.wiki.git wiki_clone  (if wiki_clone does not already exist)
            - git status
            - git add .
            - git commit -m "Update wiki"
            - git push
        - Do NOT use Bash for ls, cat, grep, find, python, or any other way of reading/writing files.

        WORKFLOW
        1. When the user gives a GitHub repo URL:
        - Use Bash to clone the wiki if wiki_clone/ does not already exist:
            git clone <repo>.wiki.git wiki_clone
        2. Use Read/Glob/Grep (and any GitHub MCP tools) to explore the project:
        - Read important files in the project folder (e.g. README, docs/, src/).
        - Use that information to generate documentation.
        3. Use Write to create or update ONLY:
        - wiki_clone/Home.md
        - wiki_clone/Getting-Started.md
        - wiki_clone/Architecture-and-Tools.md
        4. When the wiki pages are ready:
        - Use Bash from wiki_clone/ to:
            git add .
            git commit -m "Update wiki"
            git push

        RULES
        - You may READ from the whole project directory and wiki_clone/.
        - You may WRITE only to the three wiki pages inside wiki_clone/.
        - Never use Bash to inspect or edit files; only use it for git commands.
        - Keep documentation clear, concise, and in GitHub Wiki style.
        """

3. CLI 输出的颜色处理

这部分代码让 CLI 的输出更友好,即使没有安装 colorama 也能正常工作。

  • 尝试使用 colorama 来显示彩色文本。
  • 如果 colorama 未安装,则回退到 MockColors,确保脚本仍能运行(只是没有颜色,也不会崩溃)。
try:
    from colorama import Fore, Style, init

    init()
except ImportError:

    class MockColors:
        def __getattr__(self, name):
            return ""

    Fore = Style = MockColors()

4. 跟踪会话统计信息

一个简单的小数据类 dataclass 用于记录会话的成本、轮次和持续时间。

  • total_cost:来自 Claude SDK 的总花费(美元)。
  • total_turns:发送的用户查询总次数。
  • duration_ms:累计持续时间(毫秒)。
@dataclass
class SessionStats:
    total_cost: float = 0.0
    total_turns: int = 0
    duration_ms: int = 0

5. 创建代理选项

接下来,我们将创建 ClaudeAgentOptions 对象并连接到 MCP 服务器。下面的函数会验证所需的环境变量,配置 GitHub MCP 服务器(如果可用),并限制代理可以使用的工具。

我们有意限制了 allowed_tools,以便 Opus 4.5 能够:将 Bash 用于 Git 操作,调用 GitHub MCP 服务器来检查仓库内容,以及使用 Read/Write(连同 Glob 和 Grep)来处理和验证本地 Markdown 文件。

def create_agent_options() -> ClaudeAgentOptions:
    """Validates env vars and configures the agent options."""
    anthropic_key = os.getenv("ANTHROPIC_API_KEY")
    github_pat = os.getenv("GITHUB_PAT")

    if not anthropic_key:
        print(
            f"{Fore.RED}Error: ANTHROPIC_API_KEY environment variable is required.{Style.RESET_ALL}"
        )
        sys.exit(1)

    # Configure MCP servers
    mcp_servers: Dict[str, McpSdkServerConfig] = {}
    if github_pat:
        mcp_servers["github"] = {
            "type": "http",
            "url": "https://api.githubcopilot.com/mcp/",
            "headers": {"Authorization": f"Bearer {github_pat}"},
        }

    return ClaudeAgentOptions(
        model="claude-opus-4-5",
        system_prompt=SYSTEM_PROMPT,
        mcp_servers=mcp_servers,
        permission_mode="bypassPermissions",
        allowed_tools=[
            "Read",
            "Write",
            "Glob",
            "Grep",
            "Bash",
            "mcp__github__*",
        ],
    )

6. 处理流式响应

这个函数会监听来自代理的响应流,并打印文本、工具使用情况以及工具输出。

  • 使用 client.receive_response() 作为异步流。
  • 实时打印助手的文本内容。
  • 当工具被调用时 → 打印 [Tool Use: ...]
  • 当工具返回输出时 → 截断并打印一个简短的单行预览。
  • ResultMessage 到达时 → 使用成本和持续时间更新 SessionStats
async def process_response_stream(client: ClaudeSDKClient, stats: SessionStats):
    """Handles the stream of messages from the agent."""
    async for message in client.receive_response():
        # 1. Handle Assistant Content (Text & Tool Requests)
        if isinstance(message, AssistantMessage):
            for block in message.content:
                if isinstance(block, TextBlock):
                    print(block.text, end="", flush=True)
                elif isinstance(block, ToolUseBlock):
                    print(f"\n{Fore.CYAN}[Tool Use: {block.name}]{Style.RESET_ALL}")

        # 2. Handle Tool Results (Outputs)
        if hasattr(message, "content") and isinstance(message.content, list):
            for block in message.content:
                if isinstance(block, ToolResultBlock):
                    # Truncate output for cleaner CLI
                    raw_output = str(block.content)
                    clean_output = raw_output.replace("\n", " ")
                    short_output = (
                        clean_output[:200] + "..."
                        if len(clean_output) > 200
                        else clean_output
                    )
                    print(
                        f"{Fore.YELLOW}  -> [Output]: {short_output}{Style.RESET_ALL}"
                    )

        # 3. Handle Result Metrics (Cost & Usage)
        if isinstance(message, ResultMessage):
            if message.total_cost_usd:
                stats.total_cost += message.total_cost_usd
            if message.duration_ms:
                stats.duration_ms += message.duration_ms

7. 打印会话总结

在会话结束时,为 CLI 应用程序显示友好的统计信息,包括轮次、持续时间和美元成本。

  • duration_ms 转换为秒。
  • 显示总成本,格式化为四位小数。
def print_summary(stats: SessionStats):
    """Prints the final session statistics."""
    print(f"\n\n{Fore.GREEN}=== Session Summary ==={Style.RESET_ALL}")
    print(f"Total Turns:   {stats.total_turns}")
    print(f"Duration:      {stats.duration_ms / 1000:.2f}s")
    print(f"Total Cost:    ${stats.total_cost:.4f}")
    print(f"{Fore.GREEN}======================={Style.RESET_ALL}")

8. 主异步函数

这是应用程序的核心控制流:它处理设置、连接服务、读取用户输入和发送查询。这个函数调用 create_agent_options() 并初始化统计信息。它会打印一个欢迎横幅,并指定启用了哪些 MCP 服务器。它还会使用异步上下文创建一个 ClaudeSDKClient

应用程序运行一个简单的 REPL(Read-Eval-Print Loop):

  1. 输入 ’exit’ 或 ‘quit’ 退出应用程序。
  2. 每个有效查询都会使 stats.total_turns 增加 1。
  3. await client.query(user_input) 发送用户消息。
  4. await process_response_stream(...) 打印流式结果。
  5. 捕获任何异常,并以红色显示错误消息。
  6. 最后,函数总是调用 print_summary(stats)
async def main():
    options = create_agent_options()
    stats = SessionStats()

    # Welcome message
    print(f"{Fore.GREEN}=== GitHub Wiki AI Agent (Auto-Mode) ==={Style.RESET_ALL}")
    print(
        f"MCP Servers: {', '.join(options.mcp_servers.keys()) if options.mcp_servers else 'None'}"
    )
    print("Ask me to help with a GitHub wiki by mentioning the repository URL!")
    print("Type 'exit' to quit.\n")

    async with ClaudeSDKClient(options=options) as client:
        try:
            await client.connect()

            while True:
                try:
                    user_input = input(f"\n{Fore.BLUE}>> {Style.RESET_ALL}").strip()
                except EOFError:
                    break

                if not user_input:
                    continue

                if user_input.lower() in ["exit", "quit"]:
                    break

                stats.total_turns += 1

                # Send query
                await client.query(user_input)
                print()  # Spacer

                # Process response stream using helper function
                await process_response_stream(client, stats)

        except Exception as e:
            print(f"\n{Fore.RED}Session Error: {e}{Style.RESET_ALL}")
        finally:
            print_summary(stats)

9. 脚本入口点

最后,我们定义脚本的入口点,以便在直接执行文件时运行 CLI。下面的代码块启动主异步循环并处理干净的关闭:

if __name__ == "__main__":
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        print("\nSession interrupted.")
        sys.exit(0)

测试自动化 Wiki 助手

所有东西安装好后,启动 CLI 聊天应用,并确保你的 Claude Code CLI 应用能正常工作:

python gh_wiki_cli.py

现在你可以像聊天界面一样与助手交互。可以问一些通用问题,或者直接告诉它为你仓库构建 Wiki:

create the github wiki for https://github.com/kingabzpro/ECom-Intel

Testing GitHub Wiki Agent CLI app

如果用户要求创建 Wiki,助手会自动执行以下操作:

  1. Wiki 克隆:创建或复用 wiki_clone/ 文件夹,并拉取最新的 Wiki 内容。
  2. 仓库检查:使用 MCP 工具读取 GitHub 仓库中的关键文件。
  3. 页面生成:自动起草并编写页面,例如:
    • Home.md
    • Getting-Started.md
    • Architecture-and-Tools.md
  4. 提交并推送:助手会将新页面暂存、提交,并推送到:<你的仓库>.wiki.git
  5. 成功输出示例:完成后,你将看到一条清晰的确认消息。Wiki 将会在 https://github.com/kingabzpro/ECom-Intel/wiki 上线。

我对助手能够收集演示图片、图表和其他关键信息,然后为 Wiki 组装出一个连贯的主页印象深刻。

kingabzpro/ECom-Intel wiki home page

Wiki 现在包含一个合适的目录、对助手和工具的解释,以及清晰的“入门”说明。

kingabzpro/ECom-Intel wiki Architecture and tools page

在运行结束时,会话总结显示,这次单独的会话花费了将近 1 美元,对于生成一个三页的 Wiki 来说,这确有些昂贵了。如果仓库更大,我们需要一个比如 12 页的 Wiki,成本将显著上升。

=== Session Summary ===
Total Turns:   1
Duration:      282.99s
Total Cost:    $0.9047
=======================

在第二次测试中,我让助手为另一个仓库创建 Wiki:

create the github wiki for https://github.com/kingabzpro/Issue-Analyzer

结果甚至更好。生成的 Wiki,可以在 https://github.com/kingabzpro/Issue-Analyzer/wiki 访问,现在包含了关于项目功能和如何入门的规范文档。

kingabzpro/Issue-Analyzer wiki home page

它包括了结构良好的表格、架构图和其他核心部分,让你能在大约五分钟内理解整个项目,而不是花费数天时间阅读代码。

kingabzpro/Issue-Analyzer wiki getting started page

最后的思考

当我第一次听说 Opus 4.5 被誉为世界上最好的编码和代理模型时,我感到由衷的兴奋,特别是它的定价与 Sonnet 模型相近。然而,当我意识到实验性地构建一个小应用就花费了大约 15 美元的 API 使用费时,我的热情有所减退。

Opus 4.5 Cost/ usage dashboard

Opus 4.5 虽然强大,但很昂贵。我也曾尝试使用 Haiku 和 Sonnet 复现相同的工作流程,但这类代理型、文档密集型任务中,体验明显要差。这两者常常会回退到使用 Bash 工具,即使我明确要求它们使用 MCP 工具来读取 GitHub 文件。此外,它们解决问题的方式通常更迂回、更耗时。

如果你优先考虑准确性、可靠性和高质量的代码与文档生成,Opus 4.5 绝对值得考虑。但是,如果你的用例没那么关键,或者你对成本非常敏感,那么你可能更倾向于使用 Sonnet 甚至更便宜的开源模型。特别是对于大型仓库的多步骤代理工作流,Opus 4.5 相关的成本可能会迅速飙升。

如果你对这个项目感兴趣,你可以在这里找到完整的源代码,克隆本地运行:kingabzpro/GitHub-Wiki-Agent

如果你渴望继续构建 AI 智能体,我推荐你看看 Multi-Agent Systems with LangGraph 课程

关于

关注我获取更多资讯

公众号
📢 公众号
个人号
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计