内容は僕が個人的にChatGPTテクノロジーに興味を持ち、個人的に設計し、個人的に実装したものです。Microsoftなどのリファレンスアーキテクチャ―などを参考にしてはいますが沿ったものではありません。はじめにChatGPTに魅了された多くの人たちと同じく僕もこのテクノロジーにドハマりしました。ChatGPTは、インターネット検索では答えを見つけられないような「僕がずっとモヤモヤしていた疑問」に、それっぽい答えをくれます。時にはその答えが間違っていることもあるかもしれませんが、それでも僕の知的好奇心を刺激し、四六時中昼夜問わず会話を繰り返しています。他の芸術に比べて音楽は人を熱狂させる力が強いように感じます。?さて、こんな使い方も面白いのですが、今回は組織内での活用にフォーカスします。2023年4月頃、ChatGPT人気が爆発的に高まり、AI活用が盛んになりました。多くの人がChatGPTにアクセスできるようになりましたが、12月現在でも頻繁に使っている人は一部に限られているように感じます。「これの何が便利なの?」と感じてツールに手が伸びなくなった人が大半ですが、逆に一部の人は高頻度で利用している、そういった二極化が進んでいるように感じます。僕の会社の社員はITリテラシーが高いはずですが、高頻度でChatGPTを活用しているのはおそらく2割程度でしょう。ほとんどの人はチャット画面を開いて「何をすればいいの?」と考え、サンプルを少し試してみる程度で終わってしまいます。そのため、ChatGPTをより多くの人が活用できるようにする為には、UIを工夫し「何ができて、どう役に立つか?」がわかりやすくすることが重要だと思います。このアプリは、そんな僕なりの工夫を形にしたアプリです。OpenAIやMicrosoftは引っ切り無しに新機能をリリース続けていますが、彼らは一般消費も含めた全業種に向けて汎用的なサービスを提供することしかできず、各組織の業務に特化したものは作りません。「何ができて、どう役に立つか?」をわかりやすいUIは、自組織の業務に特化していないと作れません。そのため、このアプリでは自組織の業務に特化させる実装を、比較的簡単に行えるようにするにはどうすればいいかを考慮しています。過去半年間で思いついたシナリオやアイディアを少しずつ一人で実装してきました。世界で流行っているアイディアや、OpenAI、Microsoftが実装したアイディアも、僕なりの工夫を加えて取り入れました。この実装ノウハウがいくらかのエンジニアの方々の参考情報になることを願っています。imitator)というコンセプトで画面構成されたチャットベースアプリです。スキルが「上の上」レベルの人間のアウトプット品質には太刀打ちできないですが、「上の下程度の人間が1週間かけて作るレベルの回答」を、即時回答します。「ChatGPTの使い方を迷っている人」がメインターゲットです。demo環境でアプリの動作を試すことができます。Githubにはソースがあり、セットアップ手順&開発手順についても記載しています。自由にご利用ください。ライセンスはMITです。デモ環境ではGPTとの通信はできません。出力例が各ページに用意されていますので実行イメージを見ることができます。フル機能を利用するには自環境にSetupしてください。組織内で運用するための基本機能はほぼ実装済みなので、そのままのコードでテスト運用始めてしまってもいいんじゃないかなーってくらいの品質にはなっている思ってます。エラーハンドリングとかが甘めですが。Kernel、Langchainなど)は極僅かだけ使っていますが、ほとんど使っていません。直接的な理由としては、これを作り始めた2023年4月にはそれらのフレームワークはまだ不安定だったからです。このアプリのようにBackendがシンプルな実装であれば使う必要性を感じませんでした。ページナビゲーション「タスクを依頼する際に最もわかりやすい表現は何か?」と考えた時、現実世界の比喩が最もわかりやすいと考えました。そのため、「専門家」と「そのタスク」を比喩したページナビゲーションにしています。プロンプト作成補助プロンプトによる回答品質はより具体的でより焦点が絞られているGPT特有の品質向上の言い回しでプロンプトが書かれていることが重要です。そのため、プロンプトエンジニアが考えたプロンプトが、利用者が意識しなくても利用できるようなUIにしています。Studioやその他さまざまな部品」では、プロンプトをBackendで編集するという方向性で設計されているものがほとんどです。言い換えるとプロンプト全文を利用者に見せずに隠すという方向性。僕はこの方向性を良いと思いません。プロンプトは全文を見ようと思えば見えるようにし、プロンプト全文を利用者が自ら作っていけるように促すようなUIにすべきと考えています。今後はおそらくプロンプトを作るというスキルは広く重要なスキルになってくるそのためにLLMのプラットフォームに関わらず、プロンプト全文に触れることができる環境は必要だと考えるからです。プロンプト作成技術はExcelの関数のようなものになると僕は思ってます。自然言語なので、Excelの関数よりも広がりは早いと思います。現状でプロンプトを書くことに長けた人は良いプロンプトを量産し、利用者に見本として提供していき、全体のプロンプト作成スキルを底上げしていくのが良いんじゃないかな~って考えています。顧客の情報」「社内システムのマニュアル&FAQ」などに特化して詳しくするキャラ付け情報(キャラ設定や会話例)を提供し、その人に成り代わったBotにすることもできる。大量の情報から、今、必要な情報を取り出す過去の蓄積されたノウハウ情報の中から関連する情報を取り出す。「コールセンターの対応履歴を検索」する社内検索エンジンの延長戦上にある機能。Interpreterシナリオデータ内容を集計し、グラフ化や表にして内容を参考にする(一般の方向け)正確性の必要な数値の集計を依頼する(Pythonを理解してる人向け。シナリオAIと人との会話という使い方がChatGPTでは一般的であるが、AI同士で会話させることで検討を発展させていくことができるディベートなど会話の形式が決まったものや、それぞれの組織の中で実施される会議を模したものなどをAI同士で行わせ、その会議を第三者として眺めることで示唆を得る議論に深みや多様性を含ませるために、AIの参加者に職能や専門知識を与える。営業職や開発職という職能を与えることで、それぞれの立場からの意見をさせることができる。Studio」の概要を説明し、上記の自作アプリとの差異や位置づけを説明します。作ったGPTsを公開できる以下はOpenAI非公式のストアであるがリリースされて10日あまりで全世界で15410件登録という速さで追加され続けている。(※11/20時点)日本語のGPTsも642件。まとめコメントスクラッチ開発の自作アプリの方が機能の自由度は高く、業務へのフィット率を上げれるので有用性は高い。ローコード開発アプリやSaaSと違って自前で開発する領域が多くなるため、必要な開発スキルや人的リソースを始めとした様々なコストが求められます。ローコード開発アプリやSaaSが育ってくれば、業務にフィットする範囲も増えてくると考えられますが、まだ歴史の浅いChatGPTなので、まだまだ業務フィット率は低い印象。スクラッチ開発ができる体制が無い場合は、この選択肢が候補になってくると考えられます。僕の見解としてはスクラッチ開発が可能な体制であれば、スクラッチで開発でアプリを実装すべきだと思います。IoTやBigData等の他の技術領域のアプリと比べて、ChatGPT関連のスクラッチの開発の難易度は高くないと感じます。いままでと違った新しい技術要素としてプロンプトエンジニアリングのスキルが必要ですが、プログラマーが普段コードを書く時の思考とあまり大差はありません。優秀なプログラマーであれば短時間でプロンプトエンジニアも習得できると思います。コードが自然言語になったって感じです。ChatGPTを使ったアプリを他社との競争要素として使いたいという意思があるのであれば、スクラッチ開発一択だと考えられます。工夫要素満載なので、SaaSやローコード開発ツールではなく、スクラッチ開発で先進的なサービスを作りましょう。文章を読み、論理に沿った文章を作成し、出力できる。知識については幅広く、忘れることなく保持している。疲れない、休まない、眠らないので、四六時中100%のパフォーマンスが出せる。turboで2023年4月に更新。推定処理(使う時)が重い。入力データに上限があるこの欠点についての直接的な対応策はない。Turboが128Kのトークン長となり、以前よりはこの欠点による制限は小さくなった。トークンが大きいほどサービス利用料金が大きくなるという点も無視できないため、トークン長については充分に理解し、プロンプトの設計をする必要がある。トークン長については次の章で詳細に扱う。推定処理(使う時)が重い。全文書き出すまで待って表示するという方法だと数分待ちになるところが、ちょっとずつ頑張って書いている風な出力により、受け取り手のストレスを減らしているただこの課題は、今後のインフラ増強により解消されていく可能性があります。日本語は漢字1文字が複数トークンになるなど不利な要素が多く、文字数上限が小さくなる。直近リリースされたためまだ事例が少なく、事例ベースでノウハウを紹介するには情報が足りませんでした。Tuningと同様であると仮定して仕組みを説明します。※もし、間違っていたらすいません。現状のOpenAIで利用できる学習データのサイズ上限は100MByte。約3000万文字、A4用紙で2万ページ、ぶ厚めの本(500頁で1冊)で40冊分。特定の領域に、重要度と優先度を偏よらせているため、特定の領域に関しての話題は回答が早くなる。(一般的なモデルからの想定)適切に学習するための工夫の難易度が高い学習データやパラメータを悪戦苦闘しながら、長時間かけて評価していく必要があるプロンプトのように正確性や具体性の高いことは、学習が適切に行えないことが多い詳細な仕様など具体性の高い内容は、正確に記憶できない。学習データを大量に作成する必要があるが手間が大きい。Tuning前後で、プロンプトは違う。Tuningでの学習はやはり難易度が高いどういう仕組みで、どう学習させれば、どういうメリットが享受できるといった点から十分に勉強しないと使いこなせない。Tuningについて僕が感じたことこの節は、僕の勝手な偏った意見なので、息抜きとして半信半疑で読んでほしいです。Tuningで追加学習していく」という行為は、「人言うところの思考する行為」に近いと思っています。Tuningとは何なのか考えるサウナに入りながら、1時間程度Qiitaの投稿に書く内容について考えるって感じの行為だと思っています。※平日は、ほぼ毎日上記2つを行っていたりします。対象に対しての疑問点や意見を自分に対して問いかけて、自分なりの回答を作り出すということを繰り返す行為だと考えています。そのやり取りの過程を随時追加学習しています。僕が獲得している自分なりの高度な意見やクリエイティブな発想というのは、ほぼ全てが思考によって生み出されていると思います。これをAIの機械学習データモデルに置き換えると、データモデルは追加学習しない限り、新しい情報は学びません。最初の学習によって、巨大な知識ベースやクリエイティブな発想を作り出していると思いますが、それだけでは、その後の「人間との会話内容」や「人間に質問されて自分で考えた内容」を学習することができません。企業内でChatGPTを運用したとして、1日に5000回の会話をしたとします。Tuningで追加学習していくと、「人間の思考」と同じようにその企業に特化した情報に偏りを持ち、企業に寄り添った複雑な思考ができるようになっていくように感じます。新しい意見やクリエイティブな発想を作り出す可能性すらあるなと予想しています。Tuningすることですね。まとめて1発ではなく、積み上げにより思考は複雑化していくと思うので。どこかの企業で仕組み組んで試させてください。どんなAIになるのか面白そう。基礎的なプロンプトエンジニアリングの知識は、以下のようなガイドで学べます。これは基礎として頭に詰め込んでしまいましょう。※GPT3.5は回答品質悪すぎるのでNGGPT-4から見たプロンプトのわかりやすさは、GPT-4の方が詳しいので、彼らに作ってもらった方が良いと考える「プロンプトを作成」→「意向に合わせて追記&修正」→「試す」→「違和感がある点をGPT-4に伝えて、プロンプトを修正してもらう」を繰り返す複数回のプロンプトで回答に辿り着くのではなく、1回のプロンプトで回答になるプロンプトにするGPTは回答が遅いので回数が少ない方がいいと考えられる。人が読んでも理解しやすい(箇条書きや表を多用)抽象から具体に階層化(体系化)されている矛盾がないGPT-4とやり取りしながら作っている例プロンプトを作るためのプロンプト例あなたは熟練のプロンプトエンジニアです。以下の改善前のプロンプトを参照し、より改善したプロンプトを生成してください。改善対象のプロンプト:'''{{要約する文章}}上記の文章を事実の部分と意見の部分を分けて要約してください。簡潔なプロンプトではなく、最高の出力を得るための詳細なプロンプトにしてください。改善前のプロンプトに必要な入力情報が足りない場合は、入力情報を仮で設定してプロンプトに記載してください。プロンプトの文字数に上限はありません。最高の出力になるように、必要であれば長文になっても良いです。対話ではなく、1回目のプロンプトに必要な入力を埋め込むことで1回のやりとりで回答が得られるようにしてください。プロンプトは読みやすいように、長文にするのではなく見出しや箇条書きを多用してください。強調のmarkdownは不要です。1度作成した出力を、そのまま回答するのではなく、最低でも3回推敲して自分の中で改善を繰り返してください。入力の内容と数は変更せずに考えてください。改善されたプロンプトはコピーしやすいようにコードブロックで囲み、開始と終了の箇所がわかりやすくなるように出力してください。改善のポイントについて簡潔に説明を加えてください。プロンプトに含める文章の先頭に"あなたは熟練の{{該当する領域の専門家}}です。"という文言を必ず付与してください。{{該当する領域の専門家}}の内容はあなたが考えてください。例:あなたは熟練のプロンプトエンジニアです。プロンプトで指示する依頼内容は明確に記載してください。プロンプトの最後に"出力を行ったあと「気になる点はありましたか?指摘して頂ければ考慮して再度依頼を実行します」と私に聞く"という文言を必ず付与してください。コードブロックは入れ子にならないように注意してください。{{}}で囲まれた部分はあとで文章を挿入する箇所です。改善後のプロンプトの中にも同じように{{}}で囲まれた部分を含めてください。プロンプトを送る相手を充分に知る人と話す時と同じく、プロンプトを送る相手を充分に知ることが重要です。相手であるGPT-4のざっくりとした特性を書きます。世界中に公開された文書を学習しています。英語文書が多いですが、日本語を含む多言語の文書から学習しています。AIは意味で理解するので、すべての言語を1つの意味として理解しています。文書はさまざまなジャンルがありますが、そのジャンルの公開されている参考文書が多いほど、そのジャンルに詳しくなっています。プログラムコードの中でもPythonの習熟度が高いのは、公開されているpythonコードをが多いからです。映像や音声、匂いなど、文章でうまく表せれないものは、学習できていない。画像や音声の学習対応してきてはいるが、「人の感覚ほどの学習内容」ではないため、文章のみしかまだ学べていないと考えた方がよい感情はありませんが、参考文書から「受験で志望校に落ちた時は悲しい気持ちになる」とか「箪笥の角に小指をぶつけたら痛くて、辛い気持ちになる」とかは知っているので一般的な人以上に感情の起伏に詳しいです。「正義や悪はどっちが良いのか」「清潔と不潔はどっちが良いのか」「読みやすい文章がいいか、難解な文章がいいか」などの人間社会における大規模な思想や偏見などに関しての考えはフラットです。人間に対しては当たり前かもしれない指示も入れる必要がある場合はあります。「情報量が多い場合は、内容は変えず、読みやすい表現にしてください。箇条書きや表は積極的に使ってください」など。追加学習はしないため、モデルバージョンが同じであれば、同じこと知識しかもっていないただし、回答文書の思考開始ポイントが毎回違うため、毎回違う回答内容にある。「シード値」というのが思考開始ポイントの値であり、これを指定するとまったく同じ質問にはまったく同じ回答になる。人に向けた文章と違い、空白や改行などによる読みやさは関係ないありません。段落や見出しなどの切れ目がどこかわかれば理解してくれます。人の文章では改行で文章を区切られることも多いので改行が段落の切れ目と認識されることになります。文章の長くても一瞬で読みます。人が10時間かかって読む文章も、AIは0.1秒もかからず読みます。そのため、長い文章でも問題ありません。文章の矛盾点に敏感です。人が書く文章は長くなると、一部矛盾点を含んでしまう場合があります。人の理解度だと気にならない場合でもAIは気づいて考えを変えてしまうため、矛盾のない長文を心がけてる必要があります。僕なりのGPT-4との向き合う際の考え方GPT-4は「とんでもなく賢い」と考え、必要な回答を引き出せないのは、自分の質問のせいだと考えます。GPT-4は、レベルの低い質問にはレベルの低い回答をしてきます。逆にいうと、専門度合の高い質問をするとそのレベルに合わせた度合の回答をしてくれます。回答に不満があれば、質問の「専門度合」と「詳細度合い」を上げてください。以上を踏まえて、「GPT-4の学習している範囲」また逆に「補う必要がある範囲」をまとめると以下になります。ChatのStream表示Stream表示とは人が入力しているかのように、パラパラと回答がされる表示方法なぜ、Stream表示方法が重要か?ChatGPTの回答が現状遅いので、苦肉の策として実装されているこの機能がないと、30秒から1分以上待ち状態となり、Web画面アプリとしては使いものにならないTeamsなどChatアプリによってはStreamに対応していないため、待ち時間長いという課題が残る。サーバサイドでHTMLを生成するのではなく、ブラウザ側のJavaScriptでHTMLを生成する仕組み。画面の操作性(ボタンの反応速度やアニメーションの滑らか差など)が従来のWebに比べて良い。クライアントアプリ(Windowsアプリやスマホアプリ)にはやや劣るが近しい操作性となる。1.0以下の書き方ですが。SPAとWebAPIとのStremaing通信部分の実装コードSPA側Postで投げて、Streamでデータを受け取る機能はJavaScriptやTypescriptに標準で持っていない。そのため、外部ライブラリを探すが、非常に少ない。※ChatGPTが登場するまで、Stream通信の需要が少なかったからだと考えらえる。Script標準関数でもStream通信できるがGet要求のみなので注意プロンプトは長文になるため、Get要求ではプロンプトの文字数に制限がかかる。サーバーとの接続が切断されました。ChatGPTから回答をもらう。MarkdownをHTMLに変換する。markdown.」(日本語だと「Markdownで回答してください」)以下のようにSystemプロンプトで書いても、userプロンプトに含めても問題ない。"検索エンジンに問い合わせて、Webの最新の情報を取得する。"検索エンジンに問い合わせるために最適なカンマ区切りのキーワードクエリ。重要なキーワードから順番に羅列し、最大10キーワードまでとする。日本で歴代最長の首相は誰?を聞きたい場合、「歴代最長,首相,日本」となる。定番シナリオをインターネット上から200件くらい集めて一旦頭に入れ、そこから逆算して効果が高いとされるパターンをカテゴリー分けしてみました。それについての見解をここで書く予定です。※追って投稿予定OpenAIやMicrosoftが作れるサービスは、さすがに個別の組織の業務知識を含めてはくれません。自組織の業務をアプリに落とし込むところは、いつの時代になっても現場のエンジニアの仕事になります。このChatGPTも、他のアプリと同じく自組織の業務ノウハウを落とし込むことで、より価値の高いアプリになります。自社業務ノウハウをどうChatGPTの仕組みに落とし込むか、僕なりのアイディアと想定効果について書く予定です。GPTの得意な点と欠点」で書いたChatGPTの最大トークン長問題の解決策の代表格となるベクトル検索について仕組みの説明と、実装手法について書く予定です。ベクトル検索の仕組みを最初に学んだ時、「こんな天才AIが登場すると、こんなすごい仕組みが作れるのか!」と、その仕組みの美しさに感動しました。その感動を伝えたいなと。僕が変人なだけかもしれないですが。高度なプロンプトを素人でも作れるようにする仕組み「プロンプトの質がChatGPTの業務活用効果に直結する」と考えています。全員が質の高いプロンプトを書けるようになれば、めっちゃ活用効果あがるよね?ってことなので、それを目指す仕組みを今考えてます。ある程度まとまれば、Appendixとして書いたりGithubにコードを追加しようと思ってます。最後にここまで読んで頂き、本当にありがとうございます。2-3から2-6をまだ書いてませんが、一旦締めのコメントを書きます。OpenAI以前と以後で、仕事の仕方が大きく変わってしまったなーと実感しています。「もう使う前に戻れない」と、いろんな商品の宣伝文句でよく聞きますが、今回ばっかりは本当にそう思いました。Copilot&ChatGPTによってプログラミング開発の速度が爆速になったことですね。3倍速以上になっているんじゃないかと思います。僕はたぶん、世の中でよく使われる主要な言語はほとんど開発経験ありますが、Pythonで重た目のアプリを作ったのは今回は初めてでした。学習せずに書けるようになりましたね。Copilot&ChatGPTが見本となるコードを書いてくれるんで、学習効率は非常に高かったです。プログラミング開発やっている人はわかると思いますが、開発において最も時間を浪費するのは、エラーにぶつかった時の対処時間だと思います。感覚的にそのエラー対処時間が全体の7割くらいを占めるのではないかと思います。エラーの原因はミドルウェアやフレームワークや言語など多岐に渡り、広い知識がないと解決までにかかる時間が大きくなっていきます。ベテランエンジニアは、そのエラー対処の速さがベテランと呼ばれるが故のスキルだと思ってました。Copilot&ChatGPTで、それがほぼ瞬殺になりました。「エラーが起こる→調べる→原因を深く理解する→知識を蓄積する」というこのサイクルがかなり高速に回せます。Copilot&ChatGPTが無かったらこれほど作れなかったように思います。普段、ITエンジニアをやっているのでデモアプリ的なものを頻繁に作るのですが、自分で使うことはありません。誰かのために作って、周りの反響がなかったら捨てる、古くなったら捨てる、その技術に興味がなくなったら捨てる、それの繰り返しでした。このアプリは自分で、自分の仕事や生活の中で、かなり頻繁に使っています。Tuning無しで)。いうアプリって初めてかもしれないなって思いました。自分で自分のためのアプリを開発して、自分の知的好奇心のまま遊ぶことができる。そんな「娯楽としての学習」をしながら、その知識を使って仕事としても周りに喜ばれるっていいことですよね。娯楽だけじゃなくて「仕事のための学習」もしていますが、サラリーマンとして会社に貢献もしてますが。自分が使いたいアプリだからこそ、モチベーションが上がっていい感じです。僕は将棋が大好きなのですが、先日羽生善治さんが藤井聡太さんの強さに対して述べられていた発言に感銘を受けたので引用します。藤井聡太さんの将棋について「AIの進歩や発展と何かしら関係はあると思うが、それが強さのすべてではないと思っている。想像ですが、自分なりの美意識があって、こういう形にしたいとか、こんな展開にはしたくないというこだわりと、AIで提示されるアイデア、可能性、発想を加味して、手を選んでいると思う。AIのいい部分も取り入れているし、自分なりの美意識、センス、こだわり、感性も色濃く反映されている」AIのいい部分も取り入れているし、自分なりの美意識、センス、こだわり、感性も色濃く反映されている、こんなふうにAIと付き合っていける人になりたいなって僕も思いました。