Notion与AI代码生成模型集成:构建文档即代码环境实践指南

如果你最近在关注 AI 助手领域,可能会发现一个有趣的现象:一边是 Notion AI 作为“笔记管家”深入人心,另一边是 Cursor、Claude 等“代码专家”在开发者中口碑爆棚。但有没有一种可能,我们真正需要的不是一个“管家”或一个“专家”,而是一个能同时理解你的文档上下文、又能帮你把想法变成代码的“全能伙伴”?

这就是Notion | RIVALS Montage项目试图回答的问题。它不是一个官方产品,而是一个极具启发性的开源探索,旨在将 Notion 强大的知识管理能力与 RIVALS 系列 AI 模型(或类似的高级代码生成模型)的编程创造力“焊接”在一起。简单来说,它想让你在 Notion 里写需求文档、画流程图的同时,就能直接召唤一个 AI 助手,基于你文档里的上下文,生成、解释甚至调试代码。

这篇文章要解决的,正是如何理解并实践这种“文档即代码环境”的新范式。我们将深入拆解其核心思想、技术实现路径,并提供一个从零开始的、可运行的示例项目。你会发现,它解决的远不止“在 Notion 里写代码”这么简单,而是触及了知识沉淀与工程实践脱节这一更深层的开发痛点。

1. 这篇文章真正要解决的问题

为什么我们需要关注 Notion 与 AI 编程助手的结合?表面上看,这只是一个工具集成问题。但深层次上,它瞄准了现代软件开发中一个长期存在的效率断层:设计、文档与实现之间的鸿沟

传统的开发流程往往是线性的:产品经理在 Confluence 写 PRD,设计师在 Figma 出图,开发者在 IDE 里对着文档和设计图敲代码。信息在不同工具间流转,必然存在损耗、滞后和理解偏差。Notion 作为一款强大的 All-in-One 工作空间,已经承载了从项目规划、需求梳理到技术方案设计的全过程。但如果想法停留在文档里,要变成可运行的代码,依然需要开发者进行复杂的手工翻译和上下文切换。

Notion | RIVALS Montage 这类项目的核心价值,就是尝试缩短从“文档描述”到“代码产出”的路径。它试图让 AI 直接阅读你正在编辑的 Notion 页面,理解你的意图,并生成符合上下文的代码片段、API 接口甚至完整的模块。这不仅仅是“偷懒”,更是将文档本身变成了一个可交互、可执行的“活”的规范。

这篇文章适合以下几类读者:

  • 全栈或后端开发者:希望提升从设计到开发的原型验证速度。
  • 技术负责人或架构师:正在寻找提升团队协同和知识流转效率的工具链。
  • 对 AI 应用开发感兴趣的工程师:想了解如何将大语言模型(LLM)与具体生产力工具深度集成。
  • Notion 的重度用户:渴望挖掘 Notion 作为开发协作文本的更多可能性。

我们将从概念原型开始,一步步构建一个简化但完整可用的系统,让你亲眼看到“在文档中召唤代码助手”是如何实现的。

2. 基础概念与核心原理

在开始动手之前,我们需要厘清几个关键概念和整个系统的运作原理。

2.1 核心组件解析

  1. Notion:这里不仅仅是笔记工具,它扮演了两个角色:

    • 知识库与上下文源:存储项目需求、API 文档、数据结构定义、流程图等非结构化或半结构化信息。
    • 交互界面:用户通过自然语言在 Notion 中向 AI 助手提出问题或发出指令。
  2. RIVALS / 代码生成模型:这是项目的“大脑”。RIVALS 可能指代一系列在代码生成任务上表现优异的模型(如 CodeLlama、DeepSeek-Coder、StarCoder 等)。其核心能力是理解自然语言或带有注释的代码,并生成高质量、可运行的代码。在我们的上下文中,它的输入将额外包含从 Notion 页面提取的丰富上下文。

  3. Montage(蒙太奇):这是项目的精髓,比喻将不同来源的元素(Notion的文本、用户的指令)巧妙地组合、拼接在一起,形成一个新的、有意义的整体(即生成的代码)。在技术上,它指的是一套编排(Orchestration)逻辑,负责:

    • 监听 Notion 的更新。
    • 提取相关页面内容。
    • 构造包含上下文的提示词(Prompt)。
    • 调用 AI 模型并返回结果。
    • 将结果安全地呈现或写回 Notion。

2.2 系统工作原理流程图

我们可以用以下简化的数据流来理解整个过程:

用户在 Notion 页面提问 ↓ Montage 服务监听到页面更新 ↓ 服务读取该页面及可能关联页面的内容 ↓ 服务构造 Prompt: [Notion上下文] + [用户问题] + [代码生成指令] ↓ 调用 AI 模型 API (如 OpenAI GPT, Anthropic Claude, 或本地 Code Model) ↓ 获取模型返回的代码、解释或命令 ↓ 将结果以评论、新块或弹窗形式插入回 Notion 页面

2.3 与传统方式的对比

对比维度传统方式NotionRIVALS Montage 方式
需求传递多工具切换,信息异步集中记录,但仍需人工解读在记录工具内直接交互,AI同步解读
上下文提供开发者自行查找、拼接文档文档集中,但需手动复制粘贴AI 自动提取并整合相关文档片段
原型验证速度慢,需手动编码实现无变化快,可即时生成可运行代码片段
知识留存代码与文档分离,易过时文档集中,但与代码脱钩文档与生成代码的“配方”关联,迭代可追溯

这个方案的核心挑战在于:如何从 Notion 海量的内容中,精准提取与当前问题最相关的上下文,并构造成模型能高效理解的 Prompt。这涉及到 Notion API 的使用、文本向量化与检索(RAG)等关键技术。

3. 环境准备与前置条件

我们将使用 Python 作为主要开发语言,构建一个本地的、功能完整的原型系统。请确保你的环境满足以下要求。

3.1 软件与工具

  • 操作系统:macOS, Linux 或 WSL2 (Windows)。本文示例基于 macOS/Linux 命令行。
  • Python:版本 3.9 或以上。推荐使用 3.10+。
  • 包管理工具pip
  • 代码编辑器:VS Code 或 PyCharm。
  • Notion 账户:一个有效的 Notion 账户,用于创建集成和测试页面。

3.2 关键 API 密钥申请

本项目需要两个核心外部服务的访问权限:

  1. Notion API 密钥

    • 访问 Notion Developers 。
    • 登录后,点击 “My integrations”。
    • 点击 “+ New integration”,创建一个新的内部集成。
    • 为它起个名字(如Code Assistant Integration),并关联到你的工作区。
    • 重要:在 “Capabilities” 部分,至少需要勾选 “Read content”, “Update content”, 和 “Insert content” 权限。
    • 创建后,保存好生成的“Internal Integration Token”(以secret_开头)。同时,复制你的“Integration ID”
  2. AI 模型 API 密钥

    • 为了通用性,我们使用OpenAI 兼容的 API作为示例。你可以选择:
      • OpenAI:直接使用gpt-4gpt-3.5-turbo
      • 其他兼容服务:如 DeepSeek, Together AI, 或本地部署的 Ollama (需配置其兼容接口)。
    • 获取对应的 API Key 和 Base URL(如果是 OpenAI,Base URL 通常是https://api.openai.com/v1)。

3.3 项目初始化

创建一个新的项目目录并初始化虚拟环境。

# 创建项目目录 mkdir notion-rivals-montage && cd notion-rivals-montage # 创建虚拟环境 (Python 3.9+) python3 -m venv venv # 激活虚拟环境 # macOS/Linux: source venv/bin/activate # Windows (cmd): # venv\Scripts\activate # 升级pip pip install --upgrade pip

4. 核心流程拆解与依赖安装

我们的系统将分为几个核心模块。首先安装必要的 Python 库。

# 创建 requirements.txt 文件 cat > requirements.txt << EOF notion-client>=2.0.0 openai>=1.0.0 python-dotenv>=1.0.0 fastapi>=0.104.0 uvicorn>=0.24.0 requests>=2.31.0 EOF # 安装依赖 pip install -r requirements.txt

让我们拆解整个流程的关键步骤:

  1. 连接 Notion:使用 Notion SDK 认证并连接到你想要操作的页面。
  2. 监听与触发:如何检测用户在 Notion 中的“提问”动作?我们将采用一种简化方案:监听页面特定“代码块”的更新。
  3. 上下文提取:读取当前页面及其父页面的内容,进行清理和预处理。
  4. 提示词工程:精心设计 Prompt,将 Notion 上下文、用户问题和代码生成指令结合起来。
  5. 调用 AI 模型:向选定的模型 API 发送请求。
  6. 结果回写:将 AI 返回的代码或解释,以清晰的格式插入回 Notion。

5. 完整示例与代码实现

我们将构建一个名为montage_core.py的核心服务模块,以及一个main.py作为启动入口。

5.1 配置文件与环境变量

首先,创建一个.env文件来安全地存储密钥。切记不要将此文件提交到版本控制系统

# 创建 .env 文件 cat > .env << EOF NOTION_TOKEN=你的_Notion_Integration_Token NOTION_DATABASE_ID=或_NOTION_PAGE_ID OPENAI_API_KEY=你的_OpenAI_API_Key OPENAI_BASE_URL=https://api.openai.com/v1 # 如果使用其他服务,请修改 AI_MODEL=gpt-4-turbo-preview # 或 gpt-3.5-turbo, deepseek-coder 等 EOF

然后,创建一个config.py来读取配置。

# config.py import os from dotenv import load_dotenv load_dotenv() # 加载 .env 文件中的环境变量 class Config: NOTION_TOKEN = os.getenv("NOTION_TOKEN") NOTION_PAGE_ID = os.getenv("NOTION_PAGE_ID") # 我们将操作的具体页面ID OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1") AI_MODEL = os.getenv("AI_MODEL", "gpt-4-turbo-preview") @classmethod def validate(cls): """验证必要的配置是否存在""" required_vars = ['NOTION_TOKEN', 'NOTION_PAGE_ID', 'OPENAI_API_KEY'] missing = [var for var in required_vars if not getattr(cls, var)] if missing: raise ValueError(f"Missing required environment variables: {missing}") print("Configuration loaded successfully.")

5.2 核心服务模块实现

这是最核心的部分,我们实现与 Notion 交互和 AI 调用的逻辑。

# montage_core.py import json import logging from typing import Dict, List, Optional, Any from notion_client import Client from openai import OpenAI from config import Config # 设置日志 logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) class NotionRivalsMontage: def __init__(self): Config.validate() self.notion = Client(auth=Config.NOTION_TOKEN) self.ai_client = OpenAI( api_key=Config.OPENAI_API_KEY, base_url=Config.OPENAI_BASE_URL ) self.target_page_id = Config.NOTION_PAGE_ID def extract_page_content(self, page_id: str) -> str: """ 提取指定 Notion 页面的所有文本内容。 这是一个简化版本,实际应用中可能需要递归提取子页面和更复杂的块处理。 """ try: response = self.notion.blocks.children.list(block_id=page_id) content_lines = [] for block in response.get("results", []): block_type = block.get("type") rich_text = block.get(block_type, {}).get("rich_text", []) for text_item in rich_text: plain_text = text_item.get("plain_text", "") if plain_text: content_lines.append(plain_text) full_content = "\n".join(content_lines) logger.info(f"Extracted {len(content_lines)} lines from page {page_id[:8]}...") return full_content except Exception as e: logger.error(f"Failed to extract content from page {page_id}: {e}") return "" def construct_code_prompt(self, user_query: str, context: str) -> str: """ 构造用于代码生成的提示词。 这是提示词工程的关键部分,直接影响到生成代码的质量和相关性。 """ prompt_template = f""" 你是一个资深的软件开发助手,擅长根据给定的上下文和需求生成高质量、可运行的代码。 ## 上下文(来自项目文档): {context[:3000]} # 限制上下文长度,避免 token 超限 ## 用户需求: {user_query} ## 你的任务: 1. 首先,理解上下文文档中描述的项目目标、技术栈和约束条件。 2. 然后,针对用户的需求,生成最直接、最符合上下文的代码。 3. 代码应该完整、简洁,并包含必要的注释。 4. 如果需求不明确或上下文不足,请先提出澄清问题,而不是生成可能错误的代码。 5. 最后,用一句话解释你的实现思路。 请直接输出代码,如果需要多文件,请说明文件结构。代码块使用 ``` 包裹。 """ return prompt_template def generate_code_with_ai(self, prompt: str) -> str: """调用 AI 模型生成代码""" try: response = self.ai_client.chat.completions.create( model=Config.AI_MODEL, messages=[ {"role": "system", "content": "你是一个专业的代码生成助手。"}, {"role": "user", "content": prompt} ], temperature=0.2, # 较低的温度使输出更确定,适合代码生成 max_tokens=2000, ) generated_content = response.choices[0].message.content return generated_content.strip() except Exception as e: logger.error(f"AI generation failed: {e}") return f"Error during code generation: {e}" def append_code_to_notion(self, page_id: str, code_content: str, language: str = "python") -> bool: """ 将生成的代码作为新的代码块追加到 Notion 页面末尾。 """ try: # 创建代码块 new_block = { "object": "block", "type": "code", "code": { "rich_text": [{"type": "text", "text": {"content": code_content}}], "language": language } } # 追加到页面子块列表 self.notion.blocks.children.append( block_id=page_id, children=[new_block] ) logger.info(f"Successfully appended code block to page {page_id[:8]}...") return True except Exception as e: logger.error(f"Failed to append code to Notion: {e}") return False def process_query(self, user_query: str): """ 处理用户查询的主流程:提取上下文 -> 构造提示 -> 生成代码 -> 写回 Notion。 """ logger.info(f"Processing query: '{user_query}'") # 1. 提取上下文 context = self.extract_page_content(self.target_page_id) if not context: return "Error: Could not extract context from the Notion page." # 2. 构造提示 prompt = self.construct_code_prompt(user_query, context) logger.debug(f"Constructed prompt length: {len(prompt)}") # 3. 生成代码 ai_response = self.generate_code_with_ai(prompt) # 4. 写回 Notion (这里我们只写回代码部分,可以优化为解析响应) # 简单起见,假设整个响应都是代码或包含代码块 self.append_code_to_notion(self.target_page_id, ai_response) return ai_response

5.3 主程序与交互接口

为了便于测试和触发,我们创建一个简单的命令行交互界面和 FastAPI 服务端。

# main.py (命令行版本) import sys from montage_core import NotionRivalsMontage def main_cli(): """命令行交互模式""" assistant = NotionRivalsMontage() print("Notion | RIVALS Montage 助手已启动。") print(f"目标页面ID: {assistant.target_page_id[:8]}...") print("输入你的需求(或输入 'quit' 退出):") while True: try: user_input = input("\n>>> ").strip() if user_input.lower() in ['quit', 'exit', 'q']: print("再见!") break if not user_input: continue print("正在处理,请稍候...") result = assistant.process_query(user_input) print("\n--- AI 响应 ---") print(result) print("--- 响应结束 ---") print("(代码已尝试写入 Notion 页面)") except KeyboardInterrupt: print("\n程序被中断。") break except Exception as e: print(f"发生错误: {e}") if __name__ == "__main__": main_cli()
# api_server.py (Web API 版本,可选) from fastapi import FastAPI, HTTPException from pydantic import BaseModel from montage_core import NotionRivalsMontage import uvicorn app = FastAPI(title="Notion RIVALS Montage API") assistant = NotionRivalsMontage() class QueryRequest(BaseModel): query: str page_id: str = None # 可指定其他页面 @app.post("/generate-code") async def generate_code(request: QueryRequest): """接收查询并生成代码的API端点""" try: target_page = request.page_id or assistant.target_page_id # 这里可以添加逻辑临时切换目标页面 result = assistant.process_query(request.query) return {"status": "success", "result": result} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.get("/health") async def health_check(): return {"status": "healthy"} if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000)

6. 运行结果与效果验证

现在,让我们运行这个系统并验证效果。

6.1 准备工作:在 Notion 中设置

  1. 在你的 Notion 工作区创建一个新页面,例如命名为「AI 代码工坊」
  2. 在这个页面里,写下一些项目上下文。例如:
    项目:用户管理系统 API 技术栈:Python, FastAPI, SQLite 功能需求: - 用户注册 (用户名,邮箱,密码) - 用户登录 (JWT 认证) - 获取用户个人信息 - 更新用户信息 数据库表设计: users 表: id, username, email, password_hash, created_at
  3. 进入该页面的设置,点击 “Connections”,找到你之前创建的集成 (Code Assistant Integration),将其连接到这个页面。这一步至关重要,它授权了你的应用可以读写这个页面。
  4. 复制这个页面的页面 ID。Notion 页面的 URL 格式为https://www.notion.so/workspace/Page-Title-xxxxxxxxxxxxxxxxxxxxxxxxxxxx。最后那串 32 位的字符就是页面 ID(去掉中间的短横线)。将其填入.env文件的NOTION_PAGE_ID

6.2 启动服务并测试

首先,确保你的虚拟环境已激活,并且.env文件已正确配置。

# 启动命令行交互版本 python main.py

程序启动后,会显示目标页面 ID。在提示符>>>后,输入你的需求。

测试用例 1:生成一个简单的 FastAPI 用户模型

>>> 请根据上下文,生成一个使用 Pydantic 的 User 模型定义。

预期行为

  1. 程序会读取你 Notion 页面中关于“用户管理系统 API”的描述。
  2. 构造包含该上下文的 Prompt 发送给 AI。
  3. AI 返回类似以下的代码:
    from pydantic import BaseModel, EmailStr from datetime import datetime from typing import Optional class UserBase(BaseModel): username: str email: EmailStr class UserCreate(UserBase): password: str class UserInDB(UserBase): id: int created_at: datetime class Config: from_attributes = True
  4. 该代码块会被追加到你的 Notion 页面底部。

测试用例 2:生成一个具体的 API 端点

>>> 请生成用户注册的 FastAPI 路由端点,包含密码哈希和数据库插入逻辑。

预期行为: AI 会生成更复杂的代码,可能包括POST /register路由、密码哈希(使用passlib)、SQLAlchemy 会话操作和错误处理。生成的代码会再次被写回 Notion。

6.3 验证成功

成功的关键验证点:

  1. 命令行输出:能看到 “Processing query”, “Extracted … lines”, “Successfully appended code block” 等日志。
  2. Notion 页面:刷新你的「AI 代码工坊」页面,底部应该出现了新的代码块,内容正是 AI 生成的代码。
  3. 代码质量:生成的代码应该与你在 Notion 中描述的技术栈(FastAPI, SQLite)和数据结构(users 表)相符。

7. 常见问题与排查思路

在实际搭建和运行过程中,你可能会遇到以下问题:

问题现象可能原因排查方式解决方案
notion_client.errors.APIResponseError: ...1. NOTION_TOKEN 无效或过期。
2. 集成未连接到目标页面。
3. 集成权限不足。
1. 检查.env文件中的NOTION_TOKEN
2. 在 Notion 页面设置中确认集成已连接。
3. 在 Notion 开发者后台检查集成的 Capabilities。
1. 重新生成 Integration Token。
2. 在页面设置中手动连接集成。
3. 确保勾选了 Read/Update/Insert 权限。
openai.AuthenticationError1.OPENAI_API_KEY错误。
2.OPENAI_BASE_URL指向错误的服务端。
1. 检查.env文件中的 API Key。
2. 确认 Base URL 对于你使用的服务是正确的。
1. 重新获取正确的 API Key。
2. 如果使用本地模型(如 Ollama),URL 应为http://localhost:11434/v1
页面内容提取为空1.NOTION_PAGE_ID错误。
2. 页面内容格式复杂(如表格、看板),当前提取逻辑无法处理。
1. 确认复制的 Page ID 正确且无短横线。
2. 在extract_page_content方法中添加日志,打印block类型。
1. 重新复制正确的 Page ID。
2. 增强extract_page_content方法,支持更多块类型(如paragraph,heading_1,bulleted_list_item)。
AI 生成的代码不相关1. 从 Notion 提取的上下文太少或噪声太多。
2. 提示词(Prompt)设计不佳。
1. 检查提取的full_content是否包含有效信息。
2. 打印出构造的prompt,检查其结构。
1. 优化上下文提取,可以尝试提取父页面或关联数据库。
2. 迭代优化construct_code_prompt函数,更明确地指导 AI。
代码未写入 Notion1. 集成没有 “Insert content” 权限。
2. 网络问题或 API 限流。
1. 检查集成权限。
2. 查看append_code_to_notion方法中的异常日志。
1. 在集成设置中开启 “Insert content”。
2. 添加重试逻辑和更详细的错误处理。
程序报 SSL 证书错误网络环境问题,特别是使用某些本地代理时。查看完整的错误堆栈。尝试在notion_client.Clientopenai.OpenAI初始化时传入verify_ssl=False参数(仅限测试环境)。

8. 最佳实践与工程建议

将原型发展为可用的生产级工具,需要考虑以下几点:

8.1 上下文管理的优化

  • 向量检索(RAG):当前示例提取了整个页面内容。对于大型文档,应使用向量数据库(如 Chroma, Pinecone)存储页面块的嵌入向量。当用户提问时,只检索最相关的几个片段,这能显著提升上下文质量并减少 Token 消耗。
  • 多页面关联:一个项目的上下文往往分散在多个页面(需求、设计、API 文档)。系统应能根据页面链接或数据库关系,自动构建关联上下文图。

8.2 提示词工程的迭代

  • 角色与风格设定:在 System Prompt 中更精确地定义 AI 的角色(如“资深 Python 后端架构师”、“React 前端专家”),并指定代码风格(如符合 Google Python Style Guide)。
  • 上下文结构化:不要简单拼接文本。可以将上下文分类为“项目概述”、“API 规范”、“数据结构”、“约束条件”等部分,让 AI 更容易理解。
  • 少样本学习(Few-shot):在 Prompt 中提供一两个“需求-代码”的优质示例,能极大地引导 AI 生成符合预期的格式和内容。

8.3 工程化与部署

  • 异步处理:代码生成可能是耗时操作。应使用异步框架(如asyncio,Celery)处理请求,避免阻塞,并通过回调或 Webhook 通知 Notion 结果。
  • Notion Webhook:与其轮询或依赖手动触发,不如配置 Notion Webhook,在特定页面或数据库有更新时自动触发你的服务。这能实现真正的“实时响应”。
  • 结果解析与格式化:AI 的响应可能混合了代码、解释和注释。开发一个解析器,将纯代码块、解释文本、命令行命令等分别提取出来,并以不同的 Notion 块类型(代码块、引用块、段落)插入,使结果更易读。
  • 安全与权限
    • API 密钥管理:使用dotenv只是第一步,生产环境应使用 Secrets Manager(如 AWS Secrets Manager, HashiCorp Vault)。
    • 输入验证与清理:对从 Notion 提取的内容和用户输入进行基本的清理,防止 Prompt 注入攻击。
    • 操作范围限制:严格限制集成可以访问的页面范围,避免意外修改其他重要文档。

8.4 模型选择与成本控制

  • 本地模型:对于代码生成,可以考虑部署本地模型(如 CodeLlama 7B/13B, DeepSeek-Coder)。这能消除 API 成本,提升响应速度,并保证数据隐私。Ollama 是一个优秀的本地模型运行和管理工具。
  • 混合策略:简单任务用小型/快速模型,复杂架构设计用大型/强力模型。可以在 Prompt 中让 AI 自己评估任务复杂度并选择模型(如果有多模型后端)。
  • Token 使用监控:记录每次请求的输入/输出 Token 数,设置预算和告警。

9. 总结与后续学习方向

通过这个项目,我们实现了一个将 Notion 知识库与 AI 代码生成能力连接起来的“蒙太奇”系统。它的价值不在于替代开发者,而在于成为开发者的“副驾驶”,将文档中静态的知识瞬间转化为动态的、可执行的代码草图,极大地加速了从设计到原型的迭代循环。

本文带你走通了最核心的路径:认证集成、内容提取、提示词构造、AI 调用和结果回写。这是一个功能完备的原型,你可以基于它进行扩展。

如果你想深入探索,以下是几个关键方向:

  1. 实现真正的 RAG:集成langchainchromadb,将 Notion 页面内容向量化存储,实现智能的上下文检索,这是提升大型项目辅助效果的关键。
  2. 支持更多 AI 动作:除了生成代码,还可以扩展为:解释代码、生成测试用例、代码审查、生成数据库迁移脚本、绘制架构图(Mermaid)等。
  3. 构建用户友好的界面:在 Notion 中创建一个“助手”按钮或 Slash Command (/code),让交互更自然,而不是通过外部命令行。
  4. 探索其他知识库:同样的架构可以适配 Confluence、Google Docs、甚至 GitHub Wiki。核心思想是通用的。

这个项目的代码已具备相当的实用性。建议你将其克隆到本地,填入自己的 API 密钥,从一个具体的项目页面开始尝试。你会发现,当文档和代码的界限开始模糊,你的工作流可能会迎来一次真正的效率革命。