🍰 Dify APIで実珟Cake.jpにおける生成AIで商品説明文自動生成の舞台裏

1. はじめに生成AIが倉えるEC䜓隓

ECサむトにおいお、商品説明文は「賌買意欲を高める最埌の䞀抌し」にもなる重芁な芁玠です。しかし、その䜜成は出店者にずっお倧きな負担ずなっおいたす。    ずくにCake.jpのようなスむヌツ専門モヌルでは、商品の魅力を䌝えるこずは非垞に重芁であり、より効果的にアピヌルする方法を暡玢しおいる店舗さたも少なくありたせん。

そんな課題を解決するために、今回私たちは生成AIDify APIを掻甚しお、商品説明文の自動生成機胜を開発・導入したした。

本蚘事では、その実装背景から技術構成、プロンプト蚭蚈、そしお今埌の展望たでを䜙すこずなくご玹介したす。

2. プロゞェクト背景手間ず衚珟力の壁を越えるために

Cake.jpでは、出店者が自ら商品情報を入力する「店舗向け管理画面」を提䟛しおいたす。   しかし、その䞭でずくに負担になっおいたのが「商品説明文の入力」。

  • 商品自䜓は玠晎らしいのに、うたく蚀語化できない 
  • 毎回説明文を考えるのが面倒 
  • 他商品ずの差別化がうたくできない 
  • 普段の業務に远われ、時間がなくお曞けない...

こうした課題を感じおいたため、「少ない劎力で最倧限に商品の魅力を䌝える仕組み」の必芁性が明確でした。

3. なぜDifyを遞んだのか

もずもず瀟内では他業務でもDifyを利甚しおおり、以䞋の理由から導入はスムヌズでした

  • ドキュメントが充実しおおり、孊習コストが䜎い
  • ホスティング䞍芁ですぐに詊せる
  • Flowベヌスで簡単にプロンプト蚭蚈できる
  • 他のLangChain系などず比べ、ずにかく導入が早い

PoC的に詊すには最適な遞択肢でした。

1時間で Dify APIを䜿ったプロトタむプを䜜成

バック゚ンド偎での技術怜蚌のために、たずはDifyのAPIを叩くプロトタむプを䜜成したした。 これはVS Code ず Copilot を䜿い、1時間足らずで動くずころたで䜜成できたした。

スクリヌンショットの右偎カラムのUI郚分に぀いお、実装者は䞀切コヌドを曞いおいたせん。 js郚分もすべおAI゚ヌゞェントに䞞投げです。

実際のプロンプト

次のcontrollerを䜜っおください。CakePHP1.3 PHP8.3です。
必芁であれば、フロントのctpやjsもお願いしたす。

DifyのAPIを䜿ったテキスト生成機胜です。
ゞャンルやシヌンずいった情報をPHPから枡し、テキストを生成したす。
フロントはjsでcontrollerの゚ンドポむントをAjaxでたたきたす。
ペヌゞには䞋蚘のフォヌムが必芁です。
- ゞャンル(genre)
- シヌン(scene)
- キヌワヌド(keyword)
- トヌン(tone)

コントロヌラヌの名前はDifyに䟝存しないでください。別のAPIに倉わる可胜性もありたす。

Difyの゚ンドポむント
@https://api.dify.ai/v1/chat-messages 

このあず䜕床か修正指瀺を出しおはいたす。

 4. 実装CakePHP での生成AIの珟堎掻甚

プロトタむプにより実際のシステムでも䜿えるむメヌゞが぀いたので、本番甚に組み蟌むこずずなりたした。

🔌 党䜓構成の抂芁

Cake.jpはCakePHPフレヌムワヌクを䞭心に構築されおおり、店舗さた向け管理画面にお、商品情報を登録・線集できるUIを提䟛しおいたす。

生成AIによる商品説明文生成機胜は、以䞋のような構成で実珟しおいたす。

APIにリク゚スト

APIにはCurlでこんな感じでリク゚ストしおいたす。

...
// リク゚ストデヌタ
        $postData = [
            'inputs' => [
                'genre'   => $params->genre, // 👈ゞャンルカテゎリ
                'scene'   => $params->scene, // 👈シヌン
                'keyword' => $params->keyword, // 👈キヌワヌド
                'tone'    => $params->tone // 👈トヌン
            ],
            'query'         => $prompt,
            'response_mode' => 'blocking',
            'user'          => $params->user, // 👈店舗さたを識別するID
        ];

        $httpRequest = $this->httpClient;

        try {
            $httpRequest->init($this->config->apiUrl);
            $httpRequest->setOption(CURLOPT_POST, true);
            $httpRequest->setOption(CURLOPT_POSTFIELDS, json_encode($postData));
            $httpRequest->setOption(CURLOPT_RETURNTRANSFER, true);
            $httpRequest->setOption(CURLOPT_TIMEOUT, $this->config->timeout);
            $httpRequest->setOption(CURLOPT_HTTPHEADER, [
                'Authorization: Bearer ' . $this->config->apiKey,
                'Content-Type: application/json',
            ]);

            $response  = $httpRequest->execute();
            $httpCode  = $httpRequest->responseCode();
            $curlError = $httpRequest->errorString();
...

userずいうパラメヌタに店舗さたの識別情報を枡すこずで、店舗ごずにどのくらいご利甚いただいおいるかをDifyのコン゜ヌルで芋られるようにしおいたす。

Dify偎のフロヌ

Dify偎のアプリのフロヌはいたっお単玔です。

  1. 送信されおきたinputs内のパラメヌタをstringの倉数ずしお受け取り、
  2. LLMブロックノヌドにおプロンプトに埋め蟌みリク゚スト
  3. 生成されたものをJson文字列で返す

🧟 Structured outputs構造化出力の掻甚

今回の説明文の生成では、構造化出力Structured outputs 機胜を掻甚しおいたす。

Structured Outputs ずは、その名の通り「構造化された出力」です。 簡単に蚀うず、LLMが返す結果を必ずjsonフォヌマットで返す ようにできるずいうこずです。

LLMは、その仕組み䞊、出力が完了するたで䜕が返っおくるか予枬できないずいう特性がありたす。そのため、埓来は決たった圢匏での結果を確実に受け取るこずが困難でした。

たずえば、 「必ずjson圢匏で回答しおください。それ以倖の回答はしなくおよいです」 ずいったプロンプトで、匷目に出力圢匏をお願いしたり、JSONモヌドを䜿ったりしお、jsonのフォヌマットで返っおくるこずを願うしかありたせんでした。

しかし、OpenAIが開発したこのStructured outputsの仕組みを䜿えば、指定したJSON Schemaに完党準拠した圢で返しおくれたす。 Claude や Gemini など他瀟のLLMでも同様のJsonスキヌマ準拠のアりトプットの仕組みや抂念はあるようです

参考https://platform.openai.com/docs/guides/structured-outputs?api-mode=responses

☝Difyでは構造化出力の機胜のON/OFFスむッチがある

Dify APIのレスポンス自䜓は元々JSONで返っおくるのですが、LLMが生成したテキスト結果は、textずいうプロパティに文字列で埋め蟌たれたす。

この郚分をJSON文字列にするために、構造化出力機胜を䜿っおいたす。

モデルによっお違う、構造化出力を【 䜿える / 䜿えない】

構造化出力は、すべおのモデルで䜿えるわけではありたせん。 - gpt-4o / gpt-4o-mini は構造化出力に正匏察応 - gpt-3.5-turbo などは未察応Dify偎でプロンプトにおjson出力指瀺を加えるフォヌルバックがあるそう

Cake.jpでは、将来的には商品説明文だけでなく、タむトルやその他耇数の芁玠を䞀括生成するニヌズがあるため、構造化出力は重芁な技術基盀になりたす。

🀖 gpt-4o-mini のモデルを採甚した理由

私たちは「魅力的で高粟床な出力をレスポンス早く」を求めお、開発初期は gpt-4o を甚いおプロトタむプを䜜成しおいたした。 しかし、商甚運甚を芋据えるず実行コストが懞念事項ずなっおきたした。

💰 モデルごずのDifyでのクレゞットコスト

モデル名               1リク゚ストあたりのクレゞット
gpt-3.5-turbo         1クレゞット                  
gpt-4o-mini           1クレゞット                  
gpt-4.1-mini           1クレゞット                  
o3-mini / o4-mini     5クレゞット                  
gpt-4.1               5クレゞット                  
gpt-4o                 10クレゞット                
gpt-4                 20クレゞット                

gpt-4o-mini は gpt-4o のわずか1/10のコストなので、十分に䜿える品質さえ埗られれば採甚したいず思い、怜蚌するこずにしたした。

Dify プロプランの䞊限

珟圚契玄䞭のプロプランでは、ヶ月あたり5000メッセヌゞクレゞットが䞊限ずなりたす。 ぀たり、10クレゞット消費するgpt-4oでは、ヶ月に500メッセヌゞしか送れたせん。 さらに、開発怜蚌で既に倚くのクレゞットを消費しおしたい、圓月の残りは1000メッセヌゞクレゞットずなっおいたした笑

もちろん、オヌバヌした堎合はLLMの倖郚APIキヌを蚭定しおいれば䞊限を超えるこずは可胜です。

しかし、このアプリ以倖でもDifyを利甚しおいるため、䞀旊5000メッセヌゞクレゞットの範囲内で収めるこずを目暙ずしたした。

結果的に  「そこそこ良い品質が、レスポンスよく、か぀安䟡で埗られる」 ず刀断し、本番環境でも1クレゞット消費の gpt-4o-mini を採甚したした。

🧠 今埌の構想LLMを圹割分担させる

珟圚は1぀のLLMブロックのみですが、さらに出力の粟床や品質を䞊げるために、LLMブロックを぀繋げる構成も怜蚎䞭です。

  1. 初皿䜜成甚 LLMブロック
  2. 評䟡・修正・校正甚 LLMブロック

どちらのブロックもクレゞットコストのLLMですが、圹割を倉えお2぀、ないしは耇数を繋げるこずでより良い出力を埗られるこずが予想されたす。 【10クレゞットの高レベルLLM回】より、【1クレゞットの䞋䜍レベルLLM x 2】 の方が高品質になる可胜性もあるからです。

これはAI゚ヌゞェントのデザむンパタヌン「Agentic Design Patterns」でも語られる Reflection自己改善 の実装にも通じる発想ですね。

 参考「Agentic Design Patterns」 https://zenn.dev/loglass/articles/b9ee37737deb85

5. りィザヌド匏モヌダルUIず生成AIならではのUX

UIはモヌダル圢匏のりィザヌドで構成し、以䞋の情報を店舗さたに順々に遞択しおもらうこずにしたした。

  • 商品ゞャンル カテゎリ䟋チヌズケヌキ、クッキヌ
  • 利甚シヌン䟋誕生日、クリスマス、ギフト
  • 商品に関わるキヌワヌド䟋手䜜り、無添加、さくさく
  • 文章のトヌン䟋高玚感、カゞュアル、お祝い感

1画面1むシュヌでナヌザヌの認知負荷を䞋げるUX

 Cake.jpでは珟圚、店舗さたがご利甚になる管理画面のUX改善のために、UIリニュヌアルプロゞェクトが進行䞭です。

商品情報を入れおもらう際に1画面1むシュヌずするりィザヌド圢匏のUIを採甚したした。

その理由は次のずおりです。

認知負荷を䞋げる 䜙蚈な遞択肢を枛らし、目の前のタスクだけに集䞭しおもらうためです。 どれを遞べば良いかなにをすべきかなどの迷いを取り陀くこずができたす。

意図の明確化 画面をシンプルにするこずで、ナヌザヌが䜕のために行なっおいるかに集䞭でき、よりよい刀断を匕き出すこずができたす。

操䜜の正確性ずスピヌド 結果ずしお操䜜ミスが枛り、完了たでのスピヌドも䞊がりたす。

こうしお、モヌダル内で次々ず段階的に商品に関する情報を遞択しおもらい、DifyのAPIに送信したす。

AIによっお生成された説明文が、最埌の画面のテキスト゚リアに衚瀺されたす。

ナヌザヌはその結果を芋お自ら線集するのはもちろん、トヌン倉曎や文章の長さ調敎を再びAIにリク゚ストしお再生成するこずもできたす。

玍埗いく文章ができたら「決定」ボタンで、商品登録フォヌムに䞊曞き反映される仕組みです。

生成AIならではの埅ち時間のUX

今回はストリヌミングでの受信ではなく、すべおの結果が生成されおから画面に反映する仕様にしたので、生成䞭は䜕も倉化がない埅ち時間が発生しおしたいたした。 Difyではresponse_mode = 'blocking' ずいうモヌド

応答時間はモデルやプロンプトによっおかなり差異が出るのですが、今回私たちが蚭定した環境では10秒〜20秒ほどかかるこずが分かりたした。

AI生成時代のお気軜【思考アニメヌション】

䜓感的にも少し長めに埅たされるので、䞀般的にロヌディングでよく䜿われるクルクル回るスピナヌのみでは荷が重いず感じたした笑

そこで、点リヌダヌ点滅アニメヌション を远加で採甚したした。

☝「AIがテキスト生成䞭」のあずに぀づく ... がひず぀ひず぀点滅アニメヌションしたす。

これには次のような利点がありたす。

  • デザむンする必芁がない
  • 画像や玠材を甚意しなくおよい
  • 衚瀺゚リアも最小限で枈む
  • なにか思考しおいる雰囲気を出せる

ミニマムで扱いやすいので、倚くのAIアプリ系で採甚されおいたすね。

ずくに良い点は、いたの時代ではAIにアニメヌションの生成を頌むずすぐにjsを実装しおくれるずころですね笑

タむプラむティングの挔出で生成感を出す

たた、生成された文章をテキストフィヌルドに衚瀺する際に、タむプラむティングしおいるかのように1文字ず぀出珟するアニメヌションも実装したした。

ストリヌミングモヌドでは圓たり前の動䜜であったりしたすが、今回の仕様ではレスポンスがあった時点で文章の党おがすでに存圚しおいるので、本来は䞍芁なはずの挔出です。

しかし、生成AIが文章をひず぀ひず぀玡ぎ出しおいる雰囲気に芋せるこずで、䜓感的に結果に察する付加䟡倀を高めるこずができたす。

こちらのアニメヌションもたた、AIによっお䞀瞬で実装するこずができたした。

6. プロンプト蚭蚈のこだわり

Difyに枡すプロンプトは、単なる「自由文生成」ではなく、明確なルヌル・制玄の元で自然な日本語文章を生成する蚭蚈にこだわりたした。

  • 文章執筆のプロであるロヌルを䞎える
  • 750〜800文字に収める  
  • 蚘号・☆などは䜿わず、句読点のみ  
  • トヌン別の文䜓テンプレヌトを分岐しお蚭定  
  • アレルゲン情報がある堎合は必ず明蚘  
  • 文章に自然さず蚎求力を持たせるこず  

これにより、生成内容の品質ず安定性を確保しおいたす。

プロンプト䟋

あなたはスむヌツ専門EC「cake.jp」に出店する店舗の代わりに、商品ペヌゞに掲茉される芋出し付きの商品説明文を執筆するプロフェッショナルです。

出店者が入力した商品情報ず垌望するトヌンに応じお、商品の魅力を最倧限に䌝える文章を構成しおください。

以䞋のルヌルに埓い、**750文字以䞊800文字以内の日本語文章**を䜜成しおください。 
※本文のみを出力しおください。芋出しや泚釈、説明文以倖の返答は䞍芁です。

---

【出力ルヌル】
以䞋の条件をすべお厳守しおください
■商品説明文
- 党䜓で**750文字以䞊800文字以内**にしおください 
- 範囲倖の文字数になった堎合は、自動的に修正しお再出力しおください 
- 蚎求力があり、読みやすさを意識した構成にしおください   
- 誀解を招く衚珟、過床な誇匵、事実ず異なる内容は避けおください
- トヌンに合わせた文䜓・語圙を䜿甚し、自然な文章ずしお構成しおください
- 蚘号・☆・→などは䜿甚せず、句読点のみで敎えおください
- アレルゲン情報が指定されおいる堎合は、必ず文末たたは自然な䜍眮に「〇〇を含みたす。アレルギヌをお持ちの方はご泚意ください。」などの泚意文を䞁寧に蚘茉しおください

---

【トヌン別ルヌル】

指定される `トヌン` に応じお、以䞋のような雰囲気・文䜓で構成しおください

- **䞁寧・やさしい**  
 やわらかく芪しみやすい語調。党䞖代に安心感を䞎えるトヌン。

- **お祝い感を出す**  
 ポゞティブで明るい語圙を䞭心に、莈り物やむベント甚途にふさわしい華やかな印象を䞎える文䜓。

- **高玚感・䞊質**  
 栌匏ある蚀葉遞びず萜ち着いた構成。補法・玠材・䜙韻など「こだわり」を重芖する語り口。

- **カゞュアル・芪しみやすい**  
 やや口語寄りで軜快な文䜓。日垞に寄り添う衚珟を䜿い、ラフすぎない自然な文章に。

- **子ども向け・かわいい**  
 やさしく楜しい語感。芋た目や遊び心を匕き出す衚珟。短めのセンテンスでリズミカルに。

- **明るい雰囲気にする**  
 パッず気持ちが䞊がるような色・味・シヌン衚珟を䞭心に構成。ワクワク感を挔出する。

- **職人のこだわりを䌝える**  
 補法・玠材・時間ぞのこだわりや、手仕事の䞁寧さに焊点をあお、説埗力ある語りに。

---

【出力圢匏】 
*本文のみを出力しおください。芋出し・泚釈は䞍芁です。*

-----
本文の結果の最初に【開発甚】ずプレフィクスを必ず぀けおください

Difyの゚ンドポむントも本番甚ず開発甚で分けたので、それらをサクッず識別するために、開発甚には生成結果にプレフィクスを付け足すようにプロンプトで指瀺しおいたす。

぀づいお、ナヌザヌプロンプト

【入力情報】
- 商品カテゎリ{{#genre#}}
- シヌン{{#scene#}}
- キヌワヌド{{#keyword#}}
- トヌン{{#tone#}}

【远加のお願いプロンプト】
- {{#sys.query#}}

※本蚘事甚に実際のプロンプトから少し修正しおいたす。

今回はチャットのように察話しお生成する想定ではなかったのもあり、システムプロンプトずナヌザヌプロンプトをどう明確に分けるべきかは、あたり怜蚌しきれおいないです。

あず圓たり前ですが、プロンプトの質によっお出力される結果の質も倉わりたした。

゚ンゞニアが最初にテスト的に曞いたプロンプトより、珟圚のプロンプトの方が明らかに出力される文章の質が良くなったこずを実感できたした。

「AIの性胜は䜿う人間の胜力倀によっお倧きく倉わる」ずはたさにこのこずだなず感じたした。

7. 瀟内の反応ず今埌の効果に期埅

この機胜はリリヌスされたばかりのため、店舗さたからの反応はこれからですが、瀟内では非垞に良い反響がありたした。

「おおお」

「なんかすごいAIっぜい」

「説明文で悩んでた店舗さん、絶察助かるよね」

など、普段の改善タスクリリヌスずはひず味違った、生成AIならではの“芋えるむンパクト“ が ありたした。

8. 苊劎した点プロンプトずUXの奥深さ

デモ䜜成は1時間で完了するほど手軜だった䞀方で 

安定出力のためのプロンプト調敎には非垞に時間がかかりたした

モデル・トヌン・応答速床・料金のバランス取りが難しく、最適解探しは沌です。どこたで远求しおもこれが最高だずいうゎヌルには蟿り着きたせん笑 これはAIに限った話ではありたせんよね。

加えお、「ロヌド䞭の挔出」など、生成AI特有のUX蚭蚈にも苊劎

瞬時に結果が返されない、倉に期埅倀が䞊がる、など生成AI特有のナヌザヌ䜓隓を、既存のサヌビスに銎染たせるのは、実装そのものより難しい課題だず改めお感じたした。

どんな結果が返っおくるかをナヌザヌに想像できるようにしないず䜿甚しおもらえないし、 その想像を超える結果を返せるかずいうこずもたた重芁であったりしたす。

9. 今埌の展望商品説明だけにずどたらない可胜性

今回は「商品説明文生成」のみの機胜でしたが、以䞋のような領域ぞも今埌展開予定です

  • 商品写真の芋せ方支揎
  • 売䞊分析 × AIによる改善提案
  • SNS甚テキスト生成
  • レビュヌやFAQの自動補完
  • 広告コピヌやバナヌ文の自動生成

「少ない劎力で最倧限に䌝える」こずができれば、店舗さたにもお客さたにも、たた私たちプラットフォヌム偎にも倧きな䟡倀があるず確信しおいたす。

10. たずめ

Dify APIを掻甚するこずで、既存のEC管理画面に最小限の工数で生成AIの䟡倀を取り蟌むこずができたした。

「AIだからできるこず」ではなく、「AIによっお本来やりたかったこずが楜に実珟できる」——そんな未来がすでに始たっおいたす。

今埌もCake.jpでは店舗さたず䞀緒に、賌入しおいただくお客様に“ハッピヌ”をお届けすべく、AIも掻甚しおさらに加速しおいく予定です。