こんにちは。今回、OpenAI APIとWordPressを活用したブログ記事自動生成ツールの開発に取り組みました。SEOを意識した高品質な記事を自動生成するシステムを構築しましたので、開発の経緯と実装内容をまとめます。
プロジェクトの背景と目的
本プロジェクトは、多数のキーワードに対して、地域別の専門記事を自動生成することを目的としていました。手動で記事を作成すると膨大な時間がかかるため、AIを活用した自動化システムの開発が必要でした。しかし、単純な自動生成では誤情報が発生するリスクがあり、信頼性の高い情報を提供する仕組みの構築が課題でした。
技術スタック
以下の技術を採用しました:
言語・フレームワーク
– Python 3
– OpenAI API (GPT-3.5-turbo) を使用した記事生成
– Google Sheets API (gspread) によるスプレッドシート連携
– WordPress REST API による自動投稿
主要ライブラリ
– openai: AI APIクライアント
– gspread: Googleスプレッドシート連携
– requests: HTTP通信
– beautifulsoup4: Webスクレイピング
– python-dotenv: 環境変数管理
実装した主要機能
1. Googleスプレッドシート連携によるキーワード管理
CSVファイルではなく、Googleスプレッドシートを使用することで、リアルタイムでのデータ管理と進捗状況の把握を実現しました。スプレッドシートには以下の項目を設定:
– id: WordPress投稿ID(自動保存)
– keyword: 記事のキーワード
– slug: WordPressのURLスラッグ
– category: カテゴリ名
– city: 地域名(市区町村名)
– type: 記事の種類分類
– reference_text: 公式情報テキスト
– reference_url: 公式サイトURL
– status: 処理状況(完了/更新)
2. AIによる記事タイプ自動判定
各キーワードについて、AIが複数のカテゴリに自動分類します。分類結果に応じて、記事のタイトルと内容が適切に生成される仕組みを実装しました。
3. 公式URL自動検索機能
誤情報を防ぐため、公式サイトから公式情報を取得する機能を実装。Google検索とBeautifulSoupを活用し、実際に存在する公式ページのURLを自動検索します。見つかったURLはスプレッドシートに自動保存され、記事生成時の参照情報として活用されます。
4. WordPress自動投稿機能
生成された記事を自動的にWordPressに投稿する機能を実装。既存記事がある場合は更新、ない場合は新規作成を行います。カテゴリも自動的に設定され、存在しないカテゴリは自動生成されます。また、H1タグの重複を防ぐため、H1の内容をタイトルに使用し、本文からはH1タグを削除する処理を追加しました。
5. HTML形式での出力
Markdownではなく、HTML形式で直接出力することで、WordPressへの貼り付けが容易になりました。適切なHTMLタグ(h1, h2, p)を使用し、SEOに配慮した構造化されたコンテンツを生成します。
開発過程で直面した課題と解決策
課題1: プレースホルダー(○○)が記事に残る問題
問題: AIが生成する記事に「〇〇市」「〇〇袋」「〇〇曜日」などのプレースホルダーが残ってしまう
解決策: プロンプトを改善し、以下の対策を実施:
– プロンプトから「〇〇市」の例文を削除
– 公式情報がない場合は、具体的な数値や手順を書かずに「最新情報を確認してください」とだけ書くよう明確に指示
– Systemメッセージにもプレースホルダー禁止を明記
課題2: 誤情報の発生
問題: 公式情報がない場合、AIが一般的な知識に基づいて誤った情報を生成してしまう
解決策: 以下のルールを設定:
– 公式情報がない場合は、具体的な方法について断言しない
– 公式情報に基づいた内容のみを事実として扱う
– 公式情報がない項目は「最新情報を確認してください」とだけ記載
課題3: 参考URLが返ってこない
問題: 公式サイトのURLを推測するだけで、実際に存在するか確認していなかった
解決策: Google検索とBeautifulSoupを活用したWeb検索を実装。検索結果から公式サイトのURLを抽出し、実際にアクセス可能か確認する機能を追加しました。
課題4: タイトルが短すぎる・不自然
問題: タイトルが地域名とキーワードのみになり、SEO的に不十分
解決策: タイトルは40-60文字程度とし、「方法」「ガイド」「解説」「注意点」などの単語を含めるよう指示。また、記事タイプに応じて検索意図を反映したタイトルを生成するように改善しました。
プロンプトエンジニアリングの重要性
本プロジェクトでは、プロンプトの設計が成果の質に大きく影響することが分かりました。特に以下の点が重要でした:
– 明確な制約条件の設定: 「絶対に守ること」を明確に記載
– ネガティブな指示の明示: 「〇〇を使わない」「断言しない」などの禁止事項を明確に
– フォールバック処理の定義: 公式情報がない場合の対応方法を詳細に指示
– 段階的な指示: システムメッセージとユーザーメッセージで異なる角度から指示
今後の改善予定
現在のシステムで基本的な機能は実装できましたが、以下の改善を検討しています:
– 複数地域への対応(現在は1つの地域を想定)
– 参考URLから実際の公式情報をスクレイピングしてreference_textに自動入力
– 生成された記事の品質チェック機能
– エラーハンドリングの強化
– バッチ処理の最適化による処理速度向上
まとめ
AIを活用したブログ記事自動生成ツールの開発を通じて、以下の知見が得られました:
1. 信頼性の確保が最重要: 自動生成であっても、誤情報を防ぐ仕組みが不可欠
2. プロンプト設計の重要性: 詳細で明確な指示が、高品質な出力につながる
3. 公式情報の活用: 公式サイトから正確な情報を取得する仕組みが必須
4. 段階的な改善: 問題が発生するたびにプロンプトを改善し、品質を向上させるアプローチが効果的
今後も、信頼性と効率性の両立を目指し、システムを継続的に改善していく予定です。同じような課題に取り組む方の参考になれば幸いです。