AIがSakeSaySoの語学学習を支える仕組み
SakeSaySoのプロジェクトを進める中で、私たちは様々なAIツールを試行錯誤しながら、学習体験を自動化し豊かにする方法を探ってきました。このプロジェクトは当初、コンテンツ作成の自動化やセルフホスティング、プライバシー、オープンソースの原則を取り入れることを目指したサイドプロジェクトとして始まりました。ほとんどのアイデアは、東京の居酒屋での会話から生まれ、そこでは、飲み物よりも自由に流れている唯一のものは、言語学習を変えることについてのアイデアです。
アプリ自体、ロゴ、翻訳やコンテンツのほとんどは、ChatGPTやDALL·E 3(まさに、本アプリのロゴは数秒で作成され、その後SVGに変換されました)、Github Copilot、Claude.ai、その他のAIツールを使って開発されました。コンテンツを常に新鮮で魅力的に保つことが課題でしたが、これは大きなリソースを割くことなく解決する必要がありました。これはあくまで小規模なサイドプロジェクトです。そのため、私たちは大規模言語モデル(LLM)を活用し、日々のニュースサマリーやソーシャルメディアコンテンツの自動生成に挑戦しました。
自動ニュースサマリー(アプリ内)
私たちはRSSフィードを通じて様々なソースからニュースのヘッドラインを集約するシステムを開発しました。このプロセスは次のように進行します:
- ヘッドラインの取得: システムは、一般ニュース、科学、経済、スポーツなどのトピックに関する最近の記事を取得し、1週間以上前のコンテンツは除外します。
- サマリーの生成: LLMを使用して、これらの記事の簡潔なサマリーと翻訳を生成します。モデルは、学習者に適した自然な言語を生成するのに役立ちます。
- 学習のためのフォーマット: サマリーは、重要な語彙やフレーズが強調されるようにフォーマットされ、語学習得に役立つ教育的な文脈を提供します。
自動ソーシャルメディア投稿
私たちは、エンゲージメントのための追加の接点を提供するため、ソーシャルメディアの自動化にも取り組みました。以下がそのアプローチです:
- ツイートの作成: システムは、日本語で軽いテーマの短いツイートを生成します。文化的に関連性があり、エンターテイニングな内容を作ることが目標であり、センシティブな話題や不快な内容を避けることに苦心しました。これはプロンプトエンジニアリング自体の挑戦でした。
- 多段階の精緻化: 生成されたツイートは、いくつかの段階を経て精緻化されます:
- コンテンツ評価: 適切さ、長さ(プラットフォームの文字数制限を守る)、教育的価値を確認します。
- 言語の質: 言語の自然さと明確さが確認され、語学学習において重要な要素となります。
- 翻訳と注釈: 英語の翻訳と簡単な説明を追加し、理解を助けます。
- 自動投稿: 承認されたコンテンツは自動的にスケジュールされ、手動の介入なしに投稿されます。
コンテンツが必ずしも驚くほど完璧で、完全に意味が通るとは限りませんが、楽しく言語や文化に触れる方法です。
生成されたツイート例(日本語とその英語翻訳を含む):
円相場が安定(あんてい)して、インフレイザーさんのツイートも減ったけど、BARではまだまだ盛り上がっているみたい。
The Bitcoin price has stabilized, and even the influencers' tweets have slowed down, but the bars are still lively. 🍺🎉
円相場が安定(あんてい)して、インフレイザーさんのツイートも減ったけど、BARではまだまだ盛り上がっているみたい。
— SakeSaySo 🍶🇯🇵🇺🇸 (@sakesayso) September 28, 2024
The Bitcoin price has stabilized, and even the influencers' tweets have slowed down, but the bars are still lively. 🍺🎉
私たちは、プロンプトやワークフローステップをさらに洗練させながら、その結果を見守っています。
データパイプラインとワークフローツール
これらの自動化されたプロセスを管理するため、既存のソリューションは複雑すぎるか、私たちのニーズに合わないものでした。その結果、コンテンツ生成と配信に関わるワークフローを効率的に管理するために、カスタムツールを開発しました。Goで構築された軽量なワークフローオーケストレーションフレームワークであるKyodo TechのOrchidフレームワーク (GitHub)を使用し、複数ステップのワークフローを効率的に処理しています。主な機能は以下の通りです:
- 有向グラフ構造: ワークフローは、各ノードがタスクを表し、エッジが依存関係に基づいた実行順序を定義する有向非巡回グラフ(DAG)として定義されます。
- タスク間のデータ受け渡し: タスクは標準化されたフォーマットでデータを受け渡し、モジュール性とスケーラビリティを確保します。
- エラーハンドリングとリトライ: Orchidは堅牢なエラーハンドリングを提供し、一時的な問題で失敗したタスクに対してカスタマイズ可能なリトライポリシーを持ちます。
- 動的ルーティング: 実行時データや条件に基づいてワークフローが動的に分岐し、柔軟な実行パスが可能です。
- コンテキスト管理: Goのcontextパッケージを活用してキャンセルシグナルやメタデータをワークフロー全体で管理します。
このOrchidフレームワークにより、データの取得からAIモデルによる処理、結果の精緻化、最終的な配信までの複雑なシーケンスを自動化し、手動の監督なしで実行可能にしました。
インフラの自動化
デプロイメントとインフラ管理に関しては、Pulumiの上に構築したプロセスを活用し、インフラとKubernetes環境のプロビジョニングを自動化しています。私たちの重点は次の点にあります:
- コードとしてのインフラ: Goと一連のライブラリを使用してクラウドリソースをプログラム的に定義・管理し、再現性とバージョン管理が可能なデプロイメントを実現します。
- CI/CDパイプラインとの統合: 継続的インテグレーションおよびデリバリーシステムを活用し、コードコミットからプロダクションまでのデプロイメントプロセスを自動化します。
- シークレット管理: APIキーやトークンなどの機密情報を安全に扱い、デプロイメントパイプライン内で適切に管理します。
インフラの自動プロビジョニングにより、テストやプロダクション環境を迅速に立ち上げ、サービスの一貫性と信頼性を確保しています。
セルフホスティングとプライバシーの重視
私たちのプロジェクトの核心原則の一つは、ユーザーのプライバシーとコントロールを強調することです。追跡や広告は行っていません。
- サードパーティの追跡なし: アプリにはサードパーティのアナリティクスや追跡サービスは含まれていません。ユーザーのアクティビティはプライベートに保たれ、共有や販売されることはありません。
- オフライン機能: SakeSaySoの全機能はオフラインで利用可能です。ユーザーはコンテンツをダウンロードし、常時インターネット接続なしで学習を続けることができます。
- データの所有権: ユーザーは自分のデータを完全にコントロールできます。語彙デッキや学習の進捗はローカルに保存され、データのエクスポートや削除もいつでも可能です。
- オープンなコミュニケーション: アプリの仕組みについて透明性を保ち、できるだけ多くの作業をオープンソース化することに取り組んでいます。これにより、コミュニティがコードを検査し、貢献し、自分たちのニーズに合わせて変更できるようになります。
セルフホスティングにより依存を避け、コストも削減しています。
AIと自動化を用いた試行錯誤は学びの経験でした。カスタムツールを構築し、先進技術を統合することで、コストを抑えながら多くの作業を自動化することができました。私たちのアプローチは数ある選択肢の一つに過ぎませんが、完璧を目指すのではなく、実用性と学びに焦点を当てています。SakeSaySoは引き続きサイドプロジェクトとして、実験やアイデアを共有するためのプラットフォームを提供します。今後、ツールをオープンソース化し、コラボレーションを歓迎しています。
ご覧いただきありがとうございました。