用 AI 自動化文件撰寫:實用工作流程
保持技術文件的最新狀態是一場持續的戰鬥。程式碼變更、功能發布,文件往往逐漸過時。手動重寫 README 檔案、API 參考文件和內部 Wiki 既繁瑣又容易出錯。但藉助現代 AI,你可以自動化大部分流程。本文介紹一個實用、逐步的工作流程,使用 AI 工具生成和維護文件,同時不失去對品質的控制。
為什麼要用 AI 自動化文件?
文件通常是衝刺中最後才處理的優先事項,但卻是使用者和團隊首先查看的內容。AI 可以在三個主要方面提供幫助:
- 速度:過去需要數小時起草的文件初版,現在只需幾分鐘。
- 一致性:AI 遵循你的風格指南和模板,減少差異。
- 新鮮度:整合到 CI/CD 後,每次程式碼變更都會重新生成文件。
但 AI 並非萬靈丹。它需要人工監督語氣、準確性和上下文。以下工作流程在自動化與審查之間取得平衡。
核心工作流程:從程式碼到發布文件
以下是我們要建立的高階流程:
- 提取上下文:從程式碼庫中提取(函式、類別、註解、提交訊息)。
- 生成草稿:使用 LLM(如 GPT-4 或 Claude)配合結構化提示詞。
- 驗證與增強:使用靜態分析和測試驗證輸出。
- 人工審查與編輯:由領域專家進行。
- 發布:發布到文件網站或儲存庫。
讓我們深入每個步驟。
步驟 1:提取結構化上下文
在將任何內容輸入 AI 之前,你需要乾淨的輸入。對於程式碼文件,這意味著:
- 帶有適當 docstring/註解的源碼檔案。
- API 架構(OpenAPI、GraphQL SDL 等)。
- 設定檔(例如 docker-compose、nginx.conf)。
使用腳本將這些解析為 LLM 可以使用的 JSON 結構。例如,對於 Python 專案,你可以使用 ast 提取函式簽名和 docstring:
import ast, json
with open('module.py') as f:
tree = ast.parse(f.read())
functions = []
for node in ast.walk(tree):
if isinstance(node, ast.FunctionDef):
functions.append({
'name': node.name,
'docstring': ast.get_docstring(node),
'args': [a.arg for a in node.args.args],
'returns': ast.unparse(node.returns) if node.returns else None
})
print(json.dumps(functions, indent=2))
這個 JSON 成為你發送給 AI 的「上下文」。結構越清晰,輸出越好。
步驟 2:使用提示詞模板生成草稿
現在,設計一個提示詞,要求 LLM 根據提取的上下文撰寫文件。好的提示詞包括:
- 角色(例如「你是一位資深技術作家」)。
- 目標讀者(例如「初級開發人員」)。
- 輸出格式(Markdown、reStructuredText 等)。
- 任何風格規則(主動語態、命令式語氣)。
- 上下文 JSON。
提示詞範例:
你是一位技術作家。為函式 {function_name} 撰寫一個 Markdown 章節,說明其用途、參數、回傳值以及程式碼範例。使用此 JSON 作為事實來源:
{function_json}
目標讀者:剛接觸此程式碼庫的開發人員。
使用友善但專業的語氣。
透過模板化,你可以為模組中的每個函式、API 中的每個端點或 YAML 檔案中的每個設定選項生成文件。
步驟 3:驗證與增強
原始的 AI 輸出可能不正確或產生幻覺。驗證它:
- 檢查程式碼範例:在沙盒中運行或進行 lint。
- 驗證參數名稱:與提取的上下文交叉比對。
- 使用 Markdown linter:例如 markdownlint 以捕捉格式問題。
你也可以透過測試套件中的真實使用範例來增強輸出。如果有單元測試,AI 可以根據它們生成「使用方式」章節。
步驟 4:人工審查與編輯
即使有驗證,仍需要人工審查文件的語氣、完整性和 AI 無法掌握的上下文。建立審查流程:
- 為生成的文件建立拉取請求。
- 指派領域專家作為審查者。
- 使用檢查清單:準確性、清晰度、連結、程式碼片段。
此步驟不可省略。AI 是起草助理,不是最終作者。
步驟 5:自動發布
一旦批准,發布文件。如果你使用靜態網站生成器如 Docusaurus 或 MkDocs,可以在合併時觸發建置。例如,在 GitHub Actions 中:
name: Deploy docs
on:
push:
branches: [main]
paths: ['docs/**']
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- run: pip install mkdocs-material
- run: mkdocs gh-deploy --force
現在,每次合併的文件變更都會在幾分鐘內上線。
提升 AI 文件品質的實用技巧
使用一致的風格指南
在提示詞中定義你的風格規則。例如,「使用主動語態,避免第一人稱複數,並始終包含程式碼範例。」越具體,你需要編輯的越少。
利用提交訊息
提交訊息是變更日誌的寶庫。AI 可以將一系列提交總結為變更日誌條目。例如,將 git log --oneline 的輸出提供給 LLM,並要求生成使用者友善的摘要。
迭代提示詞
你的第一個提示詞不會完美。在小樣本上測試,調整,然後重複。為不同文件類型(API 參考、教學、常見問題)保留提示詞庫。
比較:手動 vs. AI 輔助 vs. 全自動
| 方面 | 手動 | AI 輔助(此工作流程) | 全自動(無人工) |
|---|---|---|---|
| 速度 | 慢 | 快 | 非常快 |
| 準確性 | 高(如果作者懂程式碼) | 審查後高 | 有風險(幻覺) |
| 一致性 | 不一 | 高 | 高 |
| 維護成本 | 高 | 中 | 低 |
| 人工監督 | 完全 | 需要 | 無 |
如你所見,AI 輔助方法平衡了速度與品質。
你可以使用的工具
有許多工具可以實現此工作流程:
- 程式碼分析:AST 解析器(Python、TypeScript)、ctags 或語言伺服器。
- LLM API:OpenAI GPT-4、Anthropic Claude 或透過 Ollama 的開源模型。
- 文件生成器:Sphinx、MkDocs、JSDoc 或自訂腳本。
- CI/CD:GitHub Actions、GitLab CI、Jenkins。
你不需要複雜的平台。幾個 Python 腳本和一個 LLM API 金鑰就足以開始。
真實世界範例:自動化 README
讓我們逐步看一個簡單範例。假設你有一個 Node.js 專案,包含 package.json。你想自動生成 README 的「安裝」和「使用方式」章節。
- 從
package.json提取name、version和bin欄位。 - 提取主要匯出的 JSDoc 註解。
- 將此 JSON 發送給 LLM,提示詞為:「為名為 {name} 的 CLI 工具撰寫安裝和使用說明。」
- 審查輸出並貼到你的 README 中。
這可以在每次發布時運行的 CI 工作中完全自動化。
潛在陷阱及避免方法
- 幻覺:始終驗證程式碼範例和技術聲明。
- 過於冗長:在提示詞中設定字數限制。
- 過時上下文:確保提取腳本在最新程式碼上運行。
- 安全漏洞:從發送給 LLM 的上下文中刪除機密和內部 URL。
常見問題
哪種 AI 模型最適合文件撰寫?
沒有單一最佳模型。GPT-4 和 Claude 在一般寫作方面很強,但開源模型如 Llama 3 可以針對你的領域進行微調。根據成本、隱私和品質需求選擇。
AI 能完全取代人類技術作家嗎?
目前還不行。AI 可以起草和維護文件,但人工監督對於準確性、語氣和策略規劃至關重要。最好的方法是人機協作。
如何防止 AI 虛構 API 細節?
只向 AI 提供提取並驗證的上下文(如函式簽名),並指示它不要添加任何外部資訊。此外,實施驗證步驟,檢查輸出是否與源碼一致。
採取下一步
從小處開始:選擇一個模組或 README 章節,自動化其生成。然後將工作流程擴展到整個程式碼庫。為了讓你的文件更易於分享,你可以使用可靠的工具將 Markdown 草稿轉換為精美的 PDF,例如 Markdown 轉 Word 轉換器 或 Markdown 轉 HTML 轉換器 以在網路上發布。這些免費工具可協助你以受眾需要的格式分發 AI 生成的文件。
用 AI 自動化文件並非取代作家,而是讓他們專注於真正重要的事情:創建清晰、有用的內容,讓使用者喜愛。