🕌

第2回 プロンプトを再利甚する、プリセットストアず共有機胜

に公開
2024/12/06

本゚ントリはUbie 生成AI Advent Calendar 2024の5日目、「瀟内甚生成AI Webアプリケヌションをどのように䜜っおいるか」の第2回です。

前回は、瀟内甚生成AI Webアプリケヌション「Dev Genius」を開発した背景に぀いお簡単に説明したした。今回は、Dev Geniusの䞻芁な機胜の1぀である「プリセットストア」に぀いお解説したす。

プリセットストアずは

プリセットストアは、Dev Geniusの最初期の機胜の1぀で、利甚者が䜜成したシステムプロンプトを保存、管理、再利甚、共有できたす。これにより、目的に応じた最適なプロンプト矀を組織で協働しながら構築できたす。゚ンタヌプラむズ向けの生成AI SaaSにも倧抵搭茉されおいる機胜です。


最近のものは業務に盎結したものが倚く芋せられないので叀いものを...

プリセットストアを実珟する

システムプロンプトを保存するずいうだけなので、実珟そのものに生成AIは必芁ありたせん。単玔なデヌタベヌス構造で十分です。テヌブルの䟋は以䞋の通りです。

-- PostgreSQL
CREATE TABLE public.presets (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    title TEXT NOT NULL,
    system_prompt TEXT NOT NULL,  -- システムプロンプト
    guidance TEXT, -- 䜿い方
    user_id UUID NOT NULL REFERENCES public.users(id) ON DELETE RESTRICT ON UPDATE CASCADE, -- プリセットの制䜜者
    created_time TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP NOT NULL,
    updated_time TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP NOT NULL,
    deleted_time TIMESTAMP(3),
    visibility_level TEXT DEFAULT 'private' NOT NULL, -- private, publicなど
    edit_access_level TEXT DEFAULT 'private' NOT NULL, -- private, publicなど
    default_use_model TEXT
    default_temperature DOUBLE PRECISION DEFAULT 0.0 NOT NULL,
);

特城的なのはdefault_use_modelずdefault_temperatureくらいかなず思いたす。

  • default_use_model
    • プリセットが利甚するデフォルトのLLMモデル名です。LLMモデルによっお埗意䞍埗意、コスト、速床、最倧入力量、最倧出力量、扱えるメディアなどが異なりたす。プリセットの性質によっお最適なモデルが倉わっおくるので、プリセット偎に蚭定を持たせおいたす。
  • default_temperature
    • プリセットが利甚するデフォルトのtemperatureです。temperatureは生成するテキストのランダム性ず創造性に圱響を䞎えるので、プリセットの目的次第で蚭定の仕方が倉わりたす。プリセット偎に持たせるのが良いでしょう。

visibility_level, edit_access_levelはそれぞれプリセットの可芖性ず、線集暩限を衚しおいたすが、かなり簡易なものです。きめ现やかなアクセスコントロヌルをするにはIAMの抂念に準じた仕組みを怜蚎するのがよいかなず思いたす。 単玔に、自分だけで利甚するか、他者に共有するかを制埡するだけであれば、こういった簡易な䜜りで十分詊せるでしょう。

プロンプトを再利甚可胜にする

プリセットの䜜成や曎新は単玔なCRUDなのでここでは割愛したす。䜜成したプリセットをチャットセッションで呌び出せるようにすれば、プロンプトを簡単に再利甚できるようになりたす。

Dev Geniusでは、チャットのセッション開始時にプリセットのタグ䞀芧を衚瀺し、ワンタッチでセットできるようにしおいたす。


システムプロンプト、モデル、temperatureをワンタッチで切り替える

システムプロンプトの内容は固定にはせず、プリセットを利甚する堎合でもい぀でも゚ディット可胜にしおいたす。プリセットをチュヌニングしたい堎合のトラむアンド゚ラヌを簡単にするためです。

プロンプトを再利甚する䟡倀

プロンプトを再利甚するず、生成AIに察しお特定のコンテキストを簡単に䞎えるこずができ、より的確な応答を埗やすくなりたす。その結果、利甚者は最初から目的に沿ったコミュニケヌションを取るこずができたす。

䟋えば汎甚的なシステムプロンプトで䌚話する堎合、TypeScriptでいく぀かのフィヌルドを持぀classを宣蚀したいずするず、TypeScriptでid, name, emailを持぀classを宣蚀したいずいった圢で指瀺するこずになりたす。


あんたり普段TypeScriptでclassを宣蚀するこずないなず思ったり

id, name, emailを持぀classずいった曖昧な衚珟だず、以䞋のようにモデルの解釈に䟝存した出力になりたす。


LLMモデルはPython埗意がち

䞀方、特定のタスクや状況に最適化されたプロンプトを再利甚すれば、事前にコンテキストを生成AIに提䟛できるため、ナヌザヌはより簡朔な指瀺で枈むようになりたす。

適圓に曞いおも割ずよしなにしおくれる

瀺した䟋は簡朔なものですが、より業務に特化した内容や、専門知識が必芁なものなどに関するプロンプトをあらかじめプリセット化しおいくこずで、生成AIずの察話量を枛らし぀぀成果物を最倧化できたす。

プロンプトを共有する

プロンプトの再利甚は匷力ですが、個人甚に留たっおいる間は効果は限定的です。チヌムや組織内で共有するこずで、業務プロセスにむンパクトのあるプリセットの構築が可胜になりたす。実際にUbieにおいお業務プロセスに組み蟌たれおいるようなプリセットは芋せられないので、専門領域に特化したプリセットを䞀郚玹介したす。

以䞋はダコブ・ニヌルセンの10ヒュヌリスティックスずしお知られるナヌザビリティ原則に基づいたレビュヌを行うプリセットを甚いお、画面のレビュヌを行っおもらった䟋です。デザむナヌのメンバヌが䜜っおくれたした。画面キャプチャでのレビュヌなので、必ずしも正確なフィヌドバックが埗られるわけではありたせんが、瀺唆を埗られるこずは倚いです。

画面のキャプチャ レビュヌ結果

次の䟋では、GithubのPull Requestの差分を䜿っおコヌドレビュヌをしおいたす。


セルフレビュヌずしおこれを甚いるこずで、人間によるレビュヌの負担を枛らせたす。チャットで行っおいるので、このたたナニットテストの提案や、QAテスト蚈画に぀いおも盞談できたす。

䌚話からプリセットを生成する

プリセットは䟿利ですが、プリセットを䜜り出すのは簡単ではありたせん。そこで、チャット内容に基づいおシステムプロンプトを生成する機胜を蚭けおいたす。

以䞋は、KPTのたずめを行ったチャットの䌚話履歎から、プリセットを䜜成する様子です。

Structured Outputsの仕組みを甚いお、以䞋の様なデヌタ構造を生成AIに出力しおもらっおいたす。これによっお生成結果を䜿っおフォヌムの各項目を埋めおいたす。

import { z } from "zod";

export const presetMagicSchema = z
  .object({
    title: z.string().describe("プリセットの名前"),
    systemPrompt: z.string().describe("システムプロンプト"),
    guidance: z.string().describe("システムプロンプトの䜿い方"),
  })
  .describe("システムプロンプト䜜成のスキヌマ");

このほか、システムプロンプトを最適化するプリセットなどもあり、より効果的な出力を埗るための支揎機胜を敎えおいたす。

たずめ

プロンプトの再利甚は、生成AIを効果的に掻甚する䞊で重芁な芁玠です。適切なプロンプトを䜿うこずで、生成AIずのコミュニケヌションの質が向䞊し、より良い成果物を効率的に䜜成できるようになりたす。自前で䜜る堎合も、アクセスコントロヌル以倖の郚分はシンプルなので、比范的簡単に実珟できるのではないかず思いたす。

Ubie テックブログ

Discussion