Oisix Creator's Blog(オイシックスクリエイターズブログ)

オイシックス株式会社のエンジニア・デザイナーが執筆している公式ブログです。

生成AIを活用したメルマガ作成・校正ツール実装の裏側

はじめに

こんにちは。 Oisixエンジニアリング部 SREセクションの青木です。
以前、このテックブログで生成AIプロジェクトの取り組みについて紹介されていましたが1、 その中で寄せられた企画書のひとつである、メルマガ作成の業務効率化をGenUのカスタマイズにより実現しました。 導入に至った背景や実際の効果については、AWSさんの事例記事にて紹介されていますのでそちらをご覧ください2。 本記事では主に技術的な裏側についてご紹介します。

GenUとは

GenU (Generative AI Use Cases JP) 3は、 AWSが提供するオープンソースの生成AI活用事例集です。 Amazon Bedrock を基盤としており、多様なユースケースを手軽にすぐ試せます。 デプロイがとにかく簡単で、Node.jsとAWSアカウント、AWS CLIのセットアップが完了していればコマンド三発でデプロイ可能です。 構成を雰囲気理解していればデプロイできてしまうのは今後の運用管理を考えるとデメリットではあるものの、最初のとっかかりのハードルを下げられます。 また、ソースコードが公開されているため、自由にカスタマイズ可能です。
アーキテクチャ図は次の通りです(画像引用元)。

alt text

背景

メルマガを担当するマーケティング部門が抱えていたメルマガ作成の課題として、次のようなものがありました。

  • メルマガ作成に時間がかかる
  • リーガルチェックなどの校正チェックにも時間的、人的リソースがかかる
  • 作成者のライティングスキルや経験の差により品質が安定しない


これらの課題を解決するために生成AIを活用しようと考え、当時社内で利用が許可されていたGenUを使ってメルマガ作成に取り組みました。 しかし、デフォルトの状態のGenUでは以下の課題がありました。

  • メルマガで紹介する商品情報は基本的に毎回異なるため、プロンプトも毎回作り直す必要があり、かえって時間がかかってしまう
  • 生成AIのプロンプト作成に慣れていない人にとっては使いづらい
  • ある程度決まったフォーマットで文章を作成する必要があったが、プロンプトの指示だけでは意図した通りの出力がされないこともあった
  • 機械的に校正チェックできるものはAIに任せ、リーガルチェックの工数を減らしたい


上記の課題を解決するため、GenUにメルマガ作成機能と校正機能を追加実装することにしました。

実装

メルマガ作成機能と校正機能、いずれの機能も技術的に分解すると、プロンプト設計とフロントエンドの追加実装の2点となります。 本記事ではプロンプト設計を中心に紹介します。

メルマガ作成機能のプロンプト設計

メルマガを作成する上では、配信するターゲット層や、紹介したい商品情報や訴求ポイントによって、文章の内容も毎回変わってきます。 つまり、プロンプトも毎回変える必要があります。 メルマガ作成者は動的な情報のみを入力することで、プロンプトが動的に生成される仕組みにしました。

また、メルマガの文章構成はある程度フォーマット化されています。 フォーマットに沿った文章を出力させるため、過去のパフォーマンスの高かったメールデータを複数ピックアップし、 入力と出力のサンプルとして参考にするよう、プロンプトに組み込みました。

プロンプトは大きく分けて3つのパートから構成されています。 はじめに「あなたはメールマーケティングを行うAIアシスタントです」「文章生成は以下のルールに従ってください」といったAIへの指示があり、 次に動的な部分となるユーザの入力項目が提示されています。 そして、過去データのサンプルとして入出力のセットが提示され、AIはこれらの指示に従ってメルマガの文章を生成します。

プロンプト例

あなたはメールマーケティングを行うAIアシスタントです。
あなたのタスクは、ユーザーが提供する情報を元に、
与えられた例に倣ってメルマガの文章を生成することです。
メルマガの文章生成は以下のルールに従ってください。

- ターゲット層を考慮したキャッチーな文を散りばめてください。
- メールのフォーマットは与えた例に倣ってください。
…

ユーザーの入力は以下のフォーマットで与えられます。
<input>
  <target>…</target>
  <product>…</product>
</input>
…

以下に入力と出力の例を示します。
<example-1>
  <input>…</input>
  <output>
件名:hoge
本文:
いつもご利用いただきましてありがとうございます。
Oisixです。
…
  </output>
</example-1>
<example-2>
…
</example-2>
…

メルマガ校正機能のプロンプト設計

AIで生成された文章は、効果の表現や強調表現が過剰になっている可能性があるため、配信前にチェックし修正する必要があります。 例えば「大特価」や「No.1」といった表現は誇大表現に該当する可能性があります。 景表法や薬機法に違反していないかを検出するため、メルマガ専用の校正機能を実装しました。 社内ドキュメントで管理されている表現方法に関するチェックリストをベースに NGである表現例とその理由、言い換え例を固定でプロンプトへ組み込むことで、AIで検出できるようにしました。

検出結果例

  • NG表現: 人気No.1
  • NG理由: 具体的な根拠なしに「No.1」を表現することは避けるべきです
  • OK表現: 人気商品

おまけ - ユースケースビルダーを使ってみた

メルマガ作成・校正ツールの実装当時は GenU に対して React でのフロントエンドの追加実装が必要でした。 現在はユースケースビルダー機能が公開されており、ノーコードで独自のユースケースを追加できます。

ユースケースビルダー機能の有効化方法についてはGenUのドキュメントを参照ください。 お手元のGenUへアクセスし、左上のビルダーモードのトグルをONにすることでユースケースビルダーの画面に切り替わります。 デフォルトのサンプル集だけでも十分に嬉しい機能がたくさんありますが、せっかくなのでオリジナルのユースケースを作っていきましょう。

ユースケースを作ってみる

地味に手間がかかってめんどくさいなぁと思ったことをユースケースにしていきます。
例えば、海外の製品を使っていて問い合わせしたいが日本語サポートがない時、日本語ネイティブな私たちにとって英語でメールを書くのって結構手間ですよね? 私の場合、生成AI登場前までは、専門用語や細かい単語のニュアンスなどは逐一調べて文章を作り、地味に時間がかかっていました。 AIにお任せできるようになってからは、いい感じに文面を作ってくれるので重宝しています。 ただ、チャット画面で文面生成をお願いする時に、毎回「次の内容を元に問い合わせを英語のメールで書いて」という一文を入力するのがほんの少し面倒なので、ユースケースビルダーで解決していきます。

ユースケースは「マイユースケース」>「新規作成」から作成できますが、初めて使う際は「え、プロンプトテンプレートってどうやって書くの...」と面食らうかもしれません。

alt text

その場合は、「サンプル集」から作りたいユースケースに似ているサンプルを選択し、改造するのがおすすめです。 今回はメールの文面を生成したいので、「返信メールの作成」というサンプルを選択し、改造しました。

alt text

改造したプロンプトテンプレートはこちらの通りです。

以下は、海外の技術サポートを受けるため、英語のメールで問い合わせをしたいユーザと、代筆スペシャリストのAIのやりとりです。
ユーザーは <question></question> のxmlタグで囲まれた質問内容と、<details></details> の xml タグで囲まれた今起きている事象をAIに与えます。

AI はユーザーの代わりにメールを出力してください。
ただし、AI はメールを作成する際、必ず <steps></steps> の xml タグで囲まれた手順を遵守してください。
<steps>
1. 冒頭に挨拶を入れること
2. 次に<inquiry></inquiry> の内容を簡潔に書くこと
3. 次に <details></details> の内容をわかりやすく書くこと
4. 次に不足している情報があれば教えて欲しい、という旨を書くこと。
5. 文面の末尾にユーザーの名前を敬称なしで入れること。
</steps>
その他全体を通して <rules></rules> のルールを遵守してください。
<rules>
* 全て英語で作成すること
* 全体を通して丁寧で親しみやすいこと。
* 出力は <output>{メール内容}</output> の形式で <output> タグで囲うこと
* 上記の{メール内容}には、相手が読むべきメールのみを格納すること
</rules>

AI の出力は必ず送信メールだけを出力してください。<steps> や <rule> などを出力してはいけません。

<inquiry>
{{text:問い合わせ内容}}
</inquiry>
<details>
{{text:今起きている事象}}
</details>

作ったユースケースを試してみる

実際に作成したユースケースはこちらです。

alt text

それでは、とあるモニタリングツールで検知した架空の不具合を想定し、英語の問い合わせメールを作っていただきましょう。

問い合わせ内容

3/1 9:00-10:00 の間のメトリクスが表示されていないので、原因を調査して欲しい。可能であれば復元もして欲しい

今起きている事象

3/1 9:00-10:00 の間のメトリクスが全てのホストで表示されていない

以上の入力情報に対する出力結果の例がこちらになります。

Dear Support Team,

I hope this email finds you well.

I am writing to report an issue with metrics display in our monitoring system. We have noticed that metrics data is missing for all hosts specifically during the period of March 1st, between 9:00-10:00.

The issue appears to be system-wide as the metrics are not displaying for any of our hosts during this specific time frame. We would like to understand the root cause of this data gap and, if possible, have the metrics data restored.

Could you please investigate this matter and let me know if you need any additional information from our side? We would appreciate any insights into what might have caused this issue and what steps can be taken to prevent similar incidents in the future.

Best regards,
Tanaka


丁寧でいい感じですね! 末尾の送信者の名前だけ変更すればそのまま送信できそうです。

おわりに

GenUを活用した業務効率化の裏側についてご紹介しました。 今後も生成AIを活用した業務改善、さらにはお客様のお買い物体験の向上につながる取り組みができればと思います。


  1. オイシックス流 生成AI活用のはじめ方
    creators.oisixradaichi.co.jp
  2. オイシックス・ラ・大地、AWS の生成 AI ユースケース集を活用してメルマガ作成・校正ツールを開発。月 200 時間の工数削減を実現
    aws.amazon.com
  3. Generative AI Use Cases JP
    github.com

Oisix Creator's Blogはオイシックス株式会社のエンジニア・デザイナーが執筆している公式ブログです。

オイシックス株式会社では一緒に働く仲間を募集しています