🐕

AIスタジオのご紹介とストリーミング生成のポイント

2024/12/07に公開


本記事は株式会社ココナラ Advent Calendar 2024 7日目の記事です。

はじめに

こんにちは。
株式会社ココナラの データテクノロジー室に所属しているエンジニアの DO です。
二児のパパをしています。かわいい笑顔に毎日癒されています(ただのノロケです 笑)

ChatGPTの登場以降、ビジネスシーンでのAI活用が急速に広がっています。
しかし、多くのビジネスパーソンが「AIをどのように業務に活用すればよいのかわからない」「適切な指示を出すのが難しい」といった課題を抱えているのが現状です。
このような課題を解決するため、弊社は2024年11月18日に新サービス『ココナラAIスタジオ』の提供を開始しました。

AIスタジオへはこちらをクリックしてください!

AIスタジオとは

ココナラAIスタジオは、AI活用の知識がなくても、直感的に利用できる業務サポートAIツールです。日本最大級のスキルマーケット「ココナラ」を運営する弊社が、そのノウハウを活かして開発したサービスとなっています。

AIスタジオ

3つの主要な特徴

1. 業界最大級の600種類以上のテンプレート

最大の特徴は、業界最大級となる600種類以上の生成テンプレートを用意している点です。テンプレートは業務カテゴリごとに整理されており、必要なものを直感的に選択できます。

  • 広告文の作成
  • ランディングページのテキスト作成
  • TikTokの台本作成
  • ビジネスメールの作成
  • 情報の分析・調査・整理

など、ビジネスパーソンの日常業務における幅広いニーズにお応えできるテンプレートを取り揃えています。

AIスタジオ

2. オールインワンプラットフォーム

複数のAIツールを使い分ける必要がなく、1つのプラットフォームで以下のような幅広い機能を利用できます。

  • テキストコンテンツの生成
  • 画像の生成(人物、動物、風景など)※イラスト除く
  • ビジネス文書の作成
  • データ分析・調査

複数のサービスと契約するケースと比べて、コストパフォーマンスに優れたAI活用が可能となります。

AIスタジオ

3. 直感的な操作性

AIに関する専門知識は一切不要です。各テンプレートには最適化された入力項目が用意されており、それに沿って入力するだけで高品質なコンテンツを生成できます。

このブログもAIスタジオを活用してリライトしています!

AIスタジオ

ビジネスパーソンの新たな味方

ココナラAIスタジオは、AI活用のハードルを大きく下げ、効率的な業務遂行をサポートする強力なツールです。特に以下のような方におすすめです。

  • AI活用に興味はあるが、使い方がわからない方
  • 複数のAIツールの使い分けに疲れている方
  • 業務効率化を図りたい方
  • コストパフォーマンスの高いAIツールを探している方

ぜひ利用してみてください!

AIスタジオへはこちら!

ストリーミング生成について

ここでは、AIスタジオの機能の1つである「ストリーミング生成」についてご紹介させていただきます。
先ほどご紹介したように、AIスタジオは直感的な操作性を重視したサービスです。AIの応答をリアルタイムで表示する「ストリーミング生成」は、その重要な要素となっています。ChatGPTをお使いの方なら、文章が徐々に表示される挙動を目にしたことがあるのではないでしょうか。
実は、この「文章が徐々に表示される」機能は、単なる演出ではありません。
ユーザーの体験を向上させる以下のようなメリットがあります。

  • 生成開始から完了までの待ち時間を体感的に短縮できます
  • 進行状況がリアルタイムで確認できるため、正常に動いているか分かりやすくなります
  • 長文生成時でも、途中経過が見えることでストレスが軽減されます

ストリーミングのサーバー側の実装例

from fastapi import FastAPI, Response
from vertexai.generative_models import GenerativeModel

app = FastAPI()

def generate_text_stream(prompt: str):
    model = GenerativeModel('gemini-1.5-pro-002')
    responses = model.generate_content(prompt, stream=True)
    
    def content_generator():
        try:
            for chunk in responses:
                text = chunk.candidates[0].content.parts[0].text
                yield f"data: {text}\n\n"
        except Exception as e:
            yield f"data: error: {str(e)}\n\n"

    return content_generator()

@app.post("/generate")
def generate_text(prompt: str):
    return StreamingResponse(
        generate_text_stream(prompt),
        media_type="text/event-stream",
        headers={
            "Cache-Control": "no-cache, no-transform",
            "Connection": "keep-alive",
            "X-Accel-Buffering": "no",
            "Transfer-Encoding": "chunked",
            "Content-Type": "text/event-stream; charset=utf-8"
        }
    )

重要な実装ポイント

1, ストリーミングモードの有効化

  • stream=Trueを指定することで、レスポンスを一括ではなく、トークンごとに受け取ることが可能になります。

2, 適切なレスポンスヘッダーの設定

  • 以下のヘッダーを設定することで、安定したストリーミング配信を実現しています
headers = {
    "Cache-Control": "no-cache, no-transform",
    "Connection": "keep-alive",
    "X-Accel-Buffering": "no",
    "Transfer-Encoding": "chunked",
    "Content-Type": "text/event-stream; charset=utf-8"
}
  • Cache-Control: no-cache, no-transform
    • レスポンスのキャッシュを防止
    • プロキシサーバーでの予期せぬ変換を防止
  • Connection: keep-alive
    • クライアントとサーバー間の接続を維持
    • 途中で接続が切れることによる不完全な応答を防止
  • Transfer-Encoding: chunked
    • データを小さな単位で分割して送信
    • 効率的なストリーミング配信を実現
  • Content-Type: text/event-stream
    • 必須
    • Server-Sent Events (SSE)形式

実装時の注意点

ストリーミング処理を実装する際、特に注意が必要なのが接続の維持です。keep-aliveの設定が適切でないと、長文生成時に途中で接続が切れ、不完全な応答となってしまう可能性があります。
また、プロキシサーバー(特にNginx)を使用している環境では、X-Accel-Buffering: noの設定が重要です。これが適切に設定されていないと、ストリーミングの効果が失われ、一括レスポンスと同じような挙動になってしまいます。

まとめ

ストリーミング処理の実装は、一見複雑に見えるかもしれません。しかし、適切な設定を行うことで、ユーザー体験を大きく向上させることができます。
私たちココナラAIスタジオでは、今後もユーザー体験の向上を目指して、技術的な改善を続けていきます。

  • またココナラAIスタジオは以下の技術スタックで構築されています
    • サーバーサイド
      • Python
      • FastAPI
    • フロントエンド
      • Next.js
      • TypeScript

ココナラでは、事業のグロースを推進していただける様々な領域のエンジニアを募集しています。AIスタジオの開発はもちろん、フロントエンド・バックエンドなど、幅広い領域で活躍できるフィールドをご用意しています。
サーバー、フロントの垣根なくフルスタックに開発していきたい方、少しでも興味をお持ちいただけましたら、下記のエンジニア採用ページをご覧ください。共にAIの力で新しい価値を創造していきましょう!

おわりに


明日は@lee_unseo_coconalaさんによる"クエリ一つでGeminiマルチモーダルテキスト生成"です。

ココナラでは積極的にエンジニアを採用しています。

採用情報はこちら。
https://coconala.co.jp/recruit/engineer/

カジュアル面談希望の方はこちら。
https://open.talentio.com/r/1/c/coconala/pages/70417

Discussion