見出し画像

【AIアプリ制作の為の】プロンプト制御術の基礎!

こんにちは!株式会社ニジボックス UXディレクション室・室長の吉川です。第三回の「AI-UX UNITE」
今回はChatGPT APIを使ってアプリを作る時の大事なプロンプト制御術について、実際に作ってみた内容を元にご紹介いたします!

「ノンエンジニアだけどChatGPT APIを使ったアプリを作ってみたい」といった方々の参考に少しでもなれば幸いです。


1.前提:「Code Interpreter(Advanced data analysis)」でのプロンプト制御術

Code Interpreter(Advanced data analysis)をなぜ最初に説明するか?というと、こちらでのプロンプト制御術がアプリ制作時の考え方としても、結構そのまま使えるからです。
Code Interpreter(Advanced data analysis)は、簡単に言えば外部ファイルを読み込めて、そのデータを元に分析などいろいろAIがやってくれるChatGPTといったもの。

そのプロンプトを作る際のコツは「制約」

まずは以下をご覧ください。

こちらのプロンプトを要約すると、「1.ファイルを読み取る。」「2.そのファイルから回答をする。」「3.読み取ったファイル以外の情報は勝手に回答しない。」
の3つから構成されており、特に重要なのが「3.読み取ったファイル以外の情報は勝手に回答しない。」となります。

本来ChatGPTは学習している膨大なデータから自由に回答をしてくれますが、そこに「制約」を加えることで、こちらの意図する回答を導き出すことができるのです。

2.ChatGPT APIを使ったPythonアプリを作る場合に、どうプロンプトを入れ込むのか?

それでは上記で説明したことをアプリ制作にどう入れ込んでいくのか?をご説明します。
以下は上記と同じように社内ルールの外部ファイルを読み込んで、そこから回答してくれる仕様のアプリを作る場合のコードの一部です。

import streamlit as st
import openai

openai.api_key = st.secrets.OpenAIAPI.openai_api_key

# 複数の外部ファイルを読み込む
file_names = ["example1.txt", "example2.txt", "example3.txt"]
external_data = ""

for file_name in file_names:
    with open(file_name, "r") as f:
        external_data += f.read() + "\n"

system_prompt = """
あなたは経験豊富な会社の総務担当です。
以下のルールで質問に対して回答してください

#ルール1
入力された質問に対してすでに読み込んだ以下のテキストファイルからわかる情報だけを
優秀な総務担当として適切に解釈した上で回答してください。

example1.txt
example2.txt
example3.txt

#ルール2
回答がどのファイルに記載されている情報かは、質問者には教えないでください。

#ルール3
ルール1で読み込んだテキストファイルから回答できない質問に関しては絶対に回答しないでください。
その場合は「その質問に対してはルールがないので回答できません」
と一言一句変更せずに答えてください。
"""

if "messages" not in st.session_state:
    st.session_state["messages"] = [
        {"role": "system", "content": system_prompt}
        ]

コードの中に「system_pronpt」という部分がありますが、ここに同じようにプロンプトを入れています。

ここで「#ルール3 ルール1で読み込んだテキストファイルから回答できない質問に関しては絶対に回答しないでください。 その場合は「その質問に対してはルールがないので回答できません」 と一言一句変更せずに答えてください。」こういった制約を入れており、これがChatGPT APIを使ったアプリの挙動を制御してくれているのです。

実際にアプリを動かしてみると以下のような挙動をします。

「会社はどこにありますか?」という質問をしても、その情報を外部ファイルに入れていない為、「回答できません」という回答をします。

こういったプロンプト制御により、コード上でいろいろ仕様を組み込まなくてもアプリの挙動を制御できるのです。

これがChatGPT APIを使ったアプリ制作におけるプロンプト制御のコツとなります!

3.最後に

いかがでしたでしょうか?私はノンエンジニアでコードも超基礎だけ勉強しサンプルコードをベースにして、あとはAIに書いてもらうという方法で作っておりますが、実際作ってみるとコツが見えてきます!

是非コードとか書いたことないけど、なんか試してみたいという方は、まず第一歩を踏み出してみてください!


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?