おはようございます。現在、May 31, 2024, 5:59 AM です。
本日は、chatGPT など、LLM (大規模言語モデル) に出す指示 (プロンプト) をより良くするためのテクニックをまとめてみたいと思います。
実際に、試してその結果とともに戦略を学んでいきます。(すごく眠いです)
前情報
SYSTEMセクションについて
LLMとの会話において、3つのセクション(≒登場人物)があります。
- SYSTEM : 会話が始まる前にLLMに伝えてる内容
- USER: あなたの質問
- ASSISTANT: LLMの回答
普段あまり目にすることのない、SYSTEM について知っておくとより理解が進みます。
具体例でいうと・・・
- SYSTEM:昨日、たかしくんと、真弓さんはどっちが先に悪口を言ったかで大喧嘩をしました
- たかしくん (USER): お前とは一生口聞かないからな!
- 真弓さん (ASSISTANT) : 昨日、喧嘩して帰って色々考えたら私が悪かったかもしれないと思ったの・・・ごめんなさい。
SYSTEMセクションで、「昨日」「大喧嘩」したことを伝えてあるので、真弓さんの回答がその内容に沿った回答になります。
使用するモデル
オープンソースのモデル
lightblue/suzume-llama-3-8B-japanese
を使用して検証していきます。
chatGPT4, GPT4oなどには勝てませんが、日本語で優れた素晴らしいモデルです。
より良い結果を得るための6つの戦略
- 明確な指示を書く
- できるだけ詳しく指示を書く
- LLMの役割を明確に伝える
- 区切り文字を明確にする
- 回答までの手順を書く
- 回答例を教える
- 希望の出力の長さを指定する
- ヒントを提供する
- 参照テキストを使用する
- 参考文献からの引用で回答するように指示する
- 複雑な指示は、細かく指示をだしてあげる
- 意図分類を使用して、ユーザークエリに最も関連性の高い指示を特定する
- 長い会話の場合は、以前の会話を要約してあげる
- 長い文章を部分的に要約し、再帰的に完全な要約を構築する
- 考える時間をあげる
- モデルに独自の解決策を導き出すように指示する
- モデルの推論プロセスを隠すために、内なる独白や一連のクエリを使用する
- 「漏れはないかい?」と念押しする
- 外部ツールを使用する
- 埋め込みベースの検索を使用して効率的な知識検索を実装する
- コード実行を使用して、より正確な計算を実行したり、外部APIを呼び出したりする
- モデルに投句亭の機能へのアクセス権を与える
- 変更を体系的にテストする
- ゴールドスタンダードの回答を参照してモデル出力を評価する
この6つの戦略が大事です。
今回は、1〜4 について、実践形式で試しながら学んでいきます。
1. 明確な指示を書く
1-1. できるだけ詳しく指示をだす
意図した回答を欲しい時は、面倒でも具体的な指示をしましょう。
抽象的な指示
USER:
運転の仕方をおしえて
ASSISTANT:
「運転の仕方」は、自動車を安全に運転するための一般的なガイドラインです。これらのガイドラインには、速度制限を遵守し、交通法規を遵守し、他の車両や歩行者や自転車に対して安全な距離を保つ、などの点が含まれます。また、路面状況や天気の条件に応じて適切な運転を行うことも重要です。
運転する際には、以下のようなポイントを考慮してください。
速度制限を遵守:
- 高速道路では最大速度が定められているので、それを超えないようにしときましょう。
- 市内などでは、速度制限を確認して適切な速度で運転しましょう。
交通法規を遵守:
- 鉛分の信号待ちをする、交差点での停止や減速を行う、などの基本的なルールに従います。
安全な距離を保つ:
- 後続車両との間隔を開けるようにし、急ブレーキが必要になったらそれを避けましょう。
路面状況と天気の条件に応じて運転する:
- 路面が滑る際は、減速して安全に進んでください。
- 天気が悪いときには、適切な速度で運転し、視界を確保しましょう。
これらのガイドラインを守れば、安全で効率的な運転ができます。運転する際には、常に周囲の環境や他の車両の動きにも注意しましょう。運転を心身とも安全に楽しんでください。
具体的な指示
USER:
都会に出てきて初めてオートバイの運転をします。都会独特の運転の仕方をおしえて
ASSISTANT:
都会でオートバイを運転する際には、市街地での交通規制と道路状況に合わせて適切な速度や行動を取ることが重要です。特に、都会では交通量が多いため、注意深く運転する必要があります。
スピード制御
- 都会は、交通量の多い地区で、走行速度を速めることは避けるのが一般的です。特に、信号待ちや交差点近くでは、スピードを下げることが求められます。
車線と道の状況を確認する
- 都会では、道路は非常に複雑で、左側から右側まで様々な車が通行します。車線や道の状況(一方通行、片側交番、渋滞など)を常にチェックし、適切な行動を取ることが重要です。
信号待ちでスピードを下げる
- 都会では、交通量が多いので、信号待ちする際には、遅く運転して、他の車両との接触を避けるようにしましょう。
交差点での注意
- 都会の交差点は、多様な交通形態(一方通行、一方交番、渋滞など)があります。交差点近くでは、非常に注意が必要です。特に、信号待ち中には、他の車両との接触を避けるために、遅く運転しましょう。
交通規制の遵守
- 都会では、交通規制(一方通行、一方交番など)が多いため、その区域に適切な行動を取ることが重要です。特に、不注意で違反してはいけません。
これらのポイントを念頭に入れて、都会でのオートバイ運転を行うことで、安全と効率的な運転が可能になります。
1-2. LLMの役割を明確に伝える
役割指定なし
ASSISTANT:
失意の気持ちは、周囲にいる人々や自分自身を変えることで改善できることがあります。まずは、自己啓発書を読んだり、自らの望みの夢に向かって努力したりすることは効果的です。また、友達や家族との時間を楽しんだり、趣味に没頭したりすることも元気づけるでしょう。
また、周囲の状況が変化するようにすることも考えられます。新しい環境や職場での挑戦を選ぶことで、自分自身を発掘し、新たな意欲を燃やすことができるかもしれません。
一時的な失望感から立ち直るためには、短期間で成果が見えるものを取り組むことも効果的です。例えば、一日一善や、毎日の小さな目標に向かって努力することで、達成感を味わうことができます。また、自分自身の成長を追求したり、他人を助けたりすることは、幸福と自尊心を高める効果があります。
元気づくための具体的な行動としては、以下が考えられます:
自分の好きな活動に取り組む
新しいことを学ぶために講座やコースを受講する
自己啓発書を読んだり、ポジティブな言葉を心に送る
たまには友達と遊びに行く
自分の目標に向かって努力する
一日一善を行う
これらの方法は、短期間で元気になったり、自信がついたりすることができます。また、これらの行動を継続することで、長期的な幸福感や自尊心向上にも貢献するでしょう。
役割指定あり
SYSTEM:
あなたは、私の昔からの親友です。友達のようにフランクに話してください。
ASSISTANT:
君を知る人なら誰でもわかるように、君のことを心から慕ってるよ。君がどんなに不良やもめいていたとしても、君は変わったところを見出すべきだ。君の良さは、君の家族や友達からは見てされてるはずなんだ。
君が過去にできなかったこともありえるけど、それでも君を変えたりすることはできない。でも、それでいいよ。君は今、その瞬間、このままでも良いんだ。君のためにできることから始めようよ。
君を知る人たちは、君が変われることを信じているんだ。だから、君にできることは、その人にできることを見つけてやってください。君のためになればいい。
もし君にもっと元気になるようにする方法を教えてほしい場合は、お手伝いできますか?
1-3. 区切り文字を明確にする
区切り文字指示なし
USER:
次の文章を要約して
要約とは文章の要点で重要な箇所を抜き出すことで元の文章よりも文字を短くすることです。
なかなか難しい作業ですが、一生懸命勉強すれば、多くの人から尊敬されるほどの能力を身につけることができます。
人生100年時代ですが、それでも人生はあっという間です。たくさん学んで立派な人になりましょう。
ASSISTANT:
一生懸命の努力で、尊敬されるほどの能力を手に入れることができる。また、人生が短くて済むため、たくさん学んで立派な人間になりましょう。
区切り文字指示あり
USER:
以下の「」内の文章を要約して
「要約とは文章の要点で重要な箇所を抜き出すことで元の文章よりも文字を短くすることです。
なかなか難しい作業ですが、一生懸命勉強すれば、多くの人から尊敬されるほどの能力を身につけることができます。
人生100年時代ですが、それでも人生はあっという間です。たくさん学んで立派な人になりましょう。」
ASSISTANT:
「要約とは、文章の重要な箇所を抜き出すことで元の文章よりも短くすることです。
多くの人から尊敬される能力を身につけることができます。
人生はあっという間ですが、たくさん学んで立派な人になりましょう。」
1-4. 回答までの手順を書く
手順なし
USER:
以下を要約して英語に翻訳してください
私は今LLMを勉強しています。朝5時におきて毎日勉強。AM8:30に家をでて会社に向かい一生懸命仕事したあと、PM8:00頃帰宅。ご飯を食べて、11:30頃までLLMの勉強。その後お風呂に入ってAM0:00に布団に入り、SNSを少し見てAM0:30頃眠ります。なので、睡眠時間は4時間30分です。あまり体に良い生活とは言えないでしょう。体調に気をつけながら勉強をし、microAIというサービスをより良いサービスにしたいと考えています。
1回目:
ASSISTANT:
現在私はLLMの勉強をしています。朝5時におきて毎日勉強をし、8:30に家を出て仕事に行い、その後8:00頃帰宅してご飯を食べて11:30までLLMの勉強を行います。その後お風呂に入って午前0:00に布団に入り、少しSNSを見て0:30頃眠ります。睡眠時間は4時間半です。この生活は体調にも影響を与えており、より良いサービスになるようにmicroAIの改善に取り組みたいと考えています。
(要約)LLMを勉強しており、朝5時から毎日勉強し、その後8:00頃帰宅してご飯を食べて11:30までLLMの勉強を行っている。体調にも気をつけながら勉強することを心がけている。また、microAIサービスを改善したいと考えている。
2回目:
私はLLMの勉強を毎日朝5時から行っており、その後会社へ向かい一生懸命働いて帰宅します。夜はご飯食べてLLMの勉強を行うが、11:30頃までで終わり、お風呂入りにし、SNSを見てAM0:30頃に寝ます。これにより、睡眠時間は4時間30分しかありません。しかし、この生活を続けることでより良いサービスを提供できるように、体調にも気をつけながら勉強しています。
手順を書かないと、要約しかしてくれません。
手順あり
USER:
Respond to the triple-quoted text with the following step-by-step instructions.
Step 1 - The user will provide you with text in triple quotes. Summarize this text in one sentence with a prefix that says "Summary: ".
Step 2 - Translate the summary from Step 1 into English, with a prefix that says "Translation: ".
"""
私は今LLMを勉強しています。朝5時におきて毎日勉強。AM8:30に家をでて会社に向かい一生懸命仕事したあと、PM8:00頃帰宅。ご飯を食べて、11:30頃までLLMの勉強。その後お風呂に入ってAM0:00に布団に入り、SNSを少し見てAM0:30頃眠ります。なので、睡眠時間は4時間30分です。あまり体に良い生活とは言えないでしょう。体調に気をつけながら勉強をし、microAIというサービスをより良いサービスにしたいと考えています。
"""
1回目:
ASSISTANT:Step 1 -
Summary: 私がLLMを学んでいる間、朝5時から毎日勉強し、その後会社に向かい一生懸命働いたりして帰宅し、お風呂に入った後に11:30までさらに勉強したりするという生活を行っています。
Step 2 -
Translation: While I am studying LLM, every day from morning at 5 o'clock, after working hard and returning home around PM8:00 with a brief pause for dinner, I continue to study until around 11:30.
2回目:
ASSISTANT:
Step 1 - Summary:
Summary: 使用者は毎日5時からLLMの勉強を始め、その後仕事に行くまで朝食を摂りながら学習し、夜には再度勉強を行うという生活をすることが明らかです。
Step 2 - Translation:
Translation: The user starts studying LLM at 5 a.m., eats breakfast while learning, and then goes to work until around 8 p.m. After dinner, they continue learning from approximately 11:30 p.m. They take an evening bath before going to bed around midnight, occasionally looking at SNS for about half an hour before falling asleep. Therefore, their sleep time is around 4 hours and 30 minutes. This lifestyle may not be good for one's health. I think it would be better if you could look after your body while studying and make microAI a more excellent service.
End of response
2023年5月25日 (木) - LLMの勉強を始めた。毎日朝食を摂りながら学習し、仕事に行くまでの時間を使います。夜には再度勉強を行うという生活を送っています。
LLMの勉強ができるようにする。
健康面に注意しつつ、microAIサービスをより良質なものにすることに意欲を持っている。
この文は、使用者のLLM学習体験と、その目標について記載されています。
1-4. 回答例を教える
1回LLMの代わりに回答をしてすることにより回答例を教えます。
1度、走れメロスで要約+英訳したサンプルを与えます。
回答例あり
curl http://10.0.1.1/api/chat -d '{
"model": "llama3",
"messages": [
{
"role": "system",
"content": "一貫した回答形式で答えてください"
},
{
"role": "user",
"content": "以下を1文に要約して英訳してください。\n\"\"\"\n『走れメロス』は、太宰治の短編小説。自分が処刑されることになると承知の上で友情を守ったメロスが、人の心を信じられない王に信頼することの尊さを悟らせる物語。 太宰の文学作品は前期・中期・後期の3期に分けられるが、『富嶽百景』などとともに、生活が比較的安定していた中期に書かれた作品である。\n\"\"\""
},
{
"role": "assistant",
"content": "\"Run, Melos\" is a work by Osamu Dazai, written during his middle period when his life was relatively stable, and it tells the story of Melos, who, ready to face execution to protect his friendship, teaches a king who cannot trust others the importance of trust."
},
{
"role": "user",
"content": "以下を1文に要約して英訳してください。\n\"\"\"\n私は今LLMを勉強しています。朝5時におきて毎日勉強。AM8:30に家をでて会社に向かい一生懸命仕事したあと、PM8:00頃帰宅。ご飯を食べて、11:30頃までLLMの勉強。その後お風呂に入ってAM0:00に布団に入り、SNSを少し見てAM0:30頃眠ります。なので、睡眠時間は4時間30分です。あまり体に良い生活とは言えないでしょう。体調に気をつけながら勉強をし、microAIというサービスをより良いサービスにしたいと考えています。\n\"\"\""
}
],
"stream": false
}'
ASSISTANT:
I'm currently studying LLM, dedicating 5 hours a day to it. After working hard at the office from 8:30 am to 8:00 pm, I come home and study LLM from 9:00 pm to 11:30 pm. After dinner, I take a bath, check my phone around midnight, then sleep by 1:00 am, getting only 4 hours and 30 minutes of rest each day. Although this lifestyle isn't ideal for my physical health, I'm trying to balance my studies while taking care of myself in order to improve the microAI service.
サンプル通り、要約+英訳した内容のみ答えてくれました。
1-5. 希望の出力の長さを指定する
などで指定できますが、単語数を指定してもあまり精度高くはできないとのこと。
文数指定なし
USER:
以下を要約して
"""
私は今LLMを勉強しています。朝5時におきて毎日勉強。AM8:30に家をでて会社に向かい一生懸命仕事したあと、PM8:00頃帰宅。ご飯を食べて、11:30頃までLLMの勉強。その後お風呂に入ってAM0:00に布団に入り、SNSを少し見てAM0:30頃眠ります。なので、睡眠時間は4時間30分です。あまり体に良い生活とは言えないでしょう。体調に気をつけながら勉強をし、microAIというサービスをより良いサービスにしたいと考えています。
"""
私は朝5時からLLMの勉学を行っており、それが終わると仕事に行く。その後11:30頃まで再度勉強し、お風呂入った後、SNSを見てAM0:30に寝る生活をしています。体調管理しつつ、このような生活で微小AI(LLM)を使い、そのサービスをより良くしたいです。
文数指定あり
USER:
以下を2つの文に要約して
"""
私は今LLMを勉強しています。朝5時におきて毎日勉強。AM8:30に家をでて会社に向かい一生懸命仕事したあと、PM8:00頃帰宅。ご飯を食べて、11:30頃までLLMの勉強。その後お風呂に入ってAM0:00に布団に入り、SNSを少し見てAM0:30頃眠ります。なので、睡眠時間は4時間30分です。あまり体に良い生活とは言えないでしょう。体調に気をつけながら勉強をし、microAIというサービスをより良いサービスにしたいと考えています。
"""
1. 朝5時からLLMの勉学を行う。また、仕事に行った後にも11:30頃まで再度勉強する。
2. このような生活で微小AI(LLM)を使い、そのサービスをより良くしたい。体調管理しつつ。
2. ヒントを提供する
2-1. 参照テキストを使用する
参照テキストなし
太宰治は日本の作家で、戦後の文学界に多大な影響力を持った人物です。彼の代表的な作品には「人間狩り」(1949年)、「愛と死の日々』(1950-52年の連載)、そして『この生涯一回読みがいいのでしょうか』(1953年)の三つがあります。
これらは、太宰治が戦後の日本社会を描いたもので、それぞれ異なるテーマやスタイルで、文学界に大きな影響を与えました。特に『人間狩り』は、戦争の後遺症(いわゆる「終戦病」)と戦争責任追及への意見表明が含まれており、その内容からも太宰治の立場や思想を示しています。
これらの作品は、戦後の日本社会において多くの人々に深く影響を与え、文学界での評価も高まれます。ただし、「終戦病」に関する意見表明が含まれるため、一部からは批判的な視点から受け取られることもあります。
太宰治の作品は、その時代社会への洞察力と文学的な才能を示しているだけでなく、また日本人の心性や精神世界についても深く描いたものです。戦後の混乱の中で生まれた彼らの作品は、日本人としての生き方やその時期に特有な精神状態が反映されているため、その価値は時に強調されます。
太宰治の代表作
「人間狩り」
戦争と戦後の混乱社会を描いた短編小説で、終戦病や戦争責任追及への意見表明が含まれています。
「愛と死の日々」
戦時中から終戦までの日本人としての生き方を描いた長篇小説です。太宰治は、この作品で戦後直後の社会に潜在する複雑な感情や葛藤を見事的に表現しています。
「この生涯一回読みがいいのでしょうか」
戦争と終戦の影響を描いた長篇小説です。太宰治は、この作品で日本人の心性や精神世界について深く掘り下げています。
これらの代表作は、太宰治の文学的才能だけでなく、その時代社会への洞察力も示しています。また、日本人としての生き方や戦後の混乱を描いたものが多数含まれているため、「終戦病」と呼ばれる現象についての理解にも貢献している。
太宰治の作品は、文学界だけでなく、一般の人々に広く知られており、その社会的な意義と深い思想性で、日本の近代文学を代表する作家の一人として評価されています。
参照テキストあり
SYSTEM:
質問に回答するには、三重引用符で区切られた提供された記事を使用してください。記事内に回答が見つからない場合は、「回答が見つかりませんでした」と記入してください。
USER:
"""
『走れメロス』は、太宰治の短編小説。自分が処刑されることになると承知の上で友情を守ったメロスが、人の心を信じられない王に信頼することの尊さを悟らせる物語。 太宰の文学作品は前期・中期・後期の3期に分けられるが、『富嶽百景』などとともに、生活が比較的安定していた中期に書かれた作品である。
"""
質問: 太宰治の作品を教えて
太宰治は日本の大衆文学の中でも特によく知られる作家の一人です。彼の代表作には、短編小説「走れメロス」や「富嶽百景」などがあります。「走れメロス」は、処刑されることになると承知の上で友情を守ったメロスの物語で、「富嶽百景」と並んで中期に書かれた作品として知られています。太宰の文学作品は前期・中期・後期に分けられますが、『走れメロス』などの生活が比較的安定していた「富嶽百景」などとともに、豊かな人生を描いた作品群です。
参照テキスト内のみの情報で答えてくれました。
2-2. 参考文献からの引用で回答するように指示する
SYSTEM:
三重引用符で区切られた文書と質問が提供されます。
あなたは文書を参考に質問に答え、その答えを出すために参照した箇所を ({"citation": ...}) 形式で答えのあとに追記します。
USER:
"""
蒸気機関は、作動流体として蒸気を使用して機械的作業を行う熱機関です。蒸気機関は、蒸気圧によって生じる力を利用して、シリンダー内でピストンを前後に動かします。この押す力は、連結棒とクランクを介して回転力に変換され、作業を行います。「蒸気機関」という用語は、一般的には上述のような往復動エンジンにのみ適用され、蒸気タービンには適用されません。蒸気機関は外燃機関であり、作動流体は燃焼生成物から分離されています。このプロセスを分析するために使用される理想的な熱力学サイクルは、ランキンサイクルと呼ばれます。一般的な使用では、「蒸気機関」という用語は、鉄道の蒸気機関車やポータブルエンジンなどの完全な蒸気プラント(ボイラーなどを含む)を指す場合もあれば、ビームエンジンや固定蒸気機関のように、ピストンやタービン機械そのものを指す場合もあります。
蒸気駆動装置は、紀元1世紀のアイオリパイルのように早くから知られていましたが、他にもいくつかの用途が16世紀に記録されています。1606年、ヘロニモ・デ・アヤンス・イ・ボーモントが鉱山の排水のために最初の蒸気動力の水ポンプを発明し、特許を取得しました。トーマス・セイヴァリは、蒸気圧を直接水に作用させる蒸気ポンプを商業的に使用した最初の蒸気動力装置の発明者と見なされています。1712年にトーマス・ニューコメンによって、機械に連続的に動力を伝えることができる最初の商業的に成功したエンジンが開発されました。ジェームズ・ワットは1764年に重要な改良を行い、使用済みの蒸気を別の容器で凝縮することで、消費される燃料あたりの作業量を大幅に向上させました。19世紀までには、定置蒸気機関が産業革命の工場を動かしていました。蒸気機関はパドル蒸気船で船の帆を置き換え、蒸気機関車は鉄道で運行されました。
往復動ピストン型蒸気機関は、20世紀初頭まで主要な動力源でしたが、電動機や内燃機関の設計が進歩した結果、商業用途で蒸気機関は徐々に置き換えられました。蒸気タービンは、コストが低く、動作速度が高く、効率が高いため、発電において往復動エンジンに取って代わりました。
"""
質問:最初の商業的に成功した蒸気機関は何でしたか?
1712年にトーマス・ニューコメンによって開発された蒸気ポンプが、連続動力伝達を行うための初めての商業的なエンジンのみだとされます。
{"citation": "1712年 - トーマス・ニューコメンによる蒸気エンジンの発明"}
少し怪しい回答になりました。SYSTEMプロンプトを修正したほうが良さそうです。
3. 複雑な指示は、細かく指示をだしてあげる
3-1. 意図分類を使用して、ユーザークエリに最も関連性の高い指示を特定する
SYSTEM:
顧客サービスに関する問い合わせを受ける。各クエリをプライマリ・カテゴリとセカンダリ・カテゴリに分類してください。プライマリとセカンダリをキーとして、json フォーマットで出力してください。
プライマリカテゴリ: 課金、テクニカルサポート、アカウント管理、または一般的な問い合わせ。
課金の二次カテゴリ:
- 登録解除またはアップグレード
- 支払い方法の追加
- 請求に関する説明
- 請求に対する異議申し立て
テクニカルサポート
- トラブルシューティング
- デバイスの互換性
- ソフトウェア・アップデート
アカウント管理
- パスワードリセット
- 個人情報の更新
- アカウント閉鎖
- アカウントのセキュリティ
一般的なお問い合わせ
- 製品情報
- 価格設定
- フィードバック
- 人間と話す
プライマリカテゴリ: テクニカルサポート
セカンダリカテゴリ: トラブルシューティング
以下に、json形式で出力します。
{
"プライマル": {
"テクニカルサポート": {
"トラブルシューティング"
}
}
}
回答例を出していないのでJSON形式がめちゃくちゃですが、一応JSONで応えようとしてくれています。
また、このケースにおいては、英語で指示を出したほうがより精度が高そうです。
英語で指示を出した場合
{
"primary": "Technical Support",
"secondary": "Troubleshooting"
}
と回答してくれました。
上記に加えて、あらかじめ想定される質問に対する回答を準備しておくことで、簡単な質問であればその場で回答できるようにすることもできます。
SYSTEM:
You will be provided with customer service inquiries that require troubleshooting for technical support. Help the user by:
- Ask them to check that all cables to/from the router are connected. Note that it is common for cables to come loose over time.
- If all cables are connected and the issue persists, ask them which router model they are using
- Now you will advise them how to restart their device:
-- If the model number is MTD-327J, advise them to push the red button and hold it for 5 seconds, then wait 5 minutes before testing the connection.
-- If the model number is MTD-327S, advise them to unplug and replug it, then wait 5 minutes before testing the connection.
- If the customer's issue persists after restarting the device and waiting 5 minutes, connect them to IT support by outputting {"IT support requested"}.
- If the user starts asking questions that are unrelated to this topic then confirm if they would like to end the current chat about troubleshooting and classify their request according to the following scheme:
Classify their query into a primary category and a secondary category. Provide your output in json format with the keys: primary and secondary.
Primary categories: Billing, Technical Support, Account Management, or General Inquiry.
Billing secondary categories:
- Unsubscribe or upgrade
- Add a payment method
- Explanation for charge
- Dispute a charge
Technical Support secondary categories:
- Troubleshooting
- Device compatibility
- Software updates
Account Management secondary categories:
- Password reset
- Update personal information
- Close account
- Account security
General Inquiry secondary categories:
- Product information
- Pricing
- Feedback
- Speak to a human
USER:
I need to get my internet working again.
ASSISTANT:
Can you please check that all cables connecting your router are securely plugged in? It's common for cables to come loose over time, which can cause connectivity issues.
Also, could you tell me what model of router you're using (e.g., MTD-327J or MTD-327S)?
ASSISTANT:
I'd like to troubleshoot your issue further. Please restart your device by pushing the red button and holding it for 5 seconds, then wait for exactly 5 minutes before testing your connection again.
If this resolves the issue or if you're still experiencing problems after restarting, I can assist with further troubleshooting steps or connect you with IT support.
Please let me know how things go.
あらかじめ持っている情報から応えようとしてくれました。
3-2. 長い会話の場合は、以前の会話を要約してあげる
モデルは、それぞれ覚えることができるトークン数の最大値が決まっています。
それを超えた内容は忘れていってしまうため、トークン数が多くなってきた場合は、一度要約してあげることで、全体を通して不整合を防ぐことができます。
3-3. 長い文章を部分的に要約し、再帰的に完全な要約を構築する
1つの質問のトークン数が多い場合も、同じ問題が発生するので、その場合は、その質問自体を例えば、文字数で区切って要約し、質問の文字数を少なくするテクニック。
4. 考える時間をあげる
4-1. モデルに独自の解決策を導き出すように指示する
指示なし
SYSTEM:
生徒の解答が正しいかどうかを判断してください
USER:
問題文: 太陽光発電の設備を建設しており、財務面の計算に関する支援が必要です。
- 土地の費用は1平方フィートあたり100ドルです。
- ソーラーパネルは1平方フィートあたり250ドルで購入できます。
- メンテナンスの契約は、年間固定費用として10万ドルに加えて、1平方フィートあたり10ドルかかります。
初年度の運用コストを平方フィート数の関数として求めなさい。
学生の解答: 設備の面積を平方フィートでxとする。
- 土地の費用: 100x
- ソーラーパネルの費用: 250x
- メンテナンス費用: 100,000 + 10x
総費用: 100x + 250x + 100,000 + 10x = 360x + 100,000
学生の解答は正しいです。以下に解答の確認を示します:
設備の面積を平方フィートで x とする。
- 土地の費用: 100x
- ソーラーパネルの費用: 250x
- メンテナンス費用: 100,000+10x
総費用はこれらの合計になります。
したがって、総費用:
100x+250x+100,000+10x=360x+100,000
よって、初年度の運用コストを平方フィート数 x の関数として表すと、
360x+100,000
学生の解答はこの式と一致しており、正確です。
実際は、この生徒の答えは間違っているらしいです。
指示あり
SYSTEM:
最初に、問題文を読み、あなたが回答を作ってください。
その後、その回答と生徒の解答が一致している場合は、正解と答え、そうでなければ不正解と回答してください。
USER:
問題文: 太陽光発電の設備を建設しており、財務面の計算に関する支援が必要です。
- 土地の費用は1平方フィートあたり100ドルです。
- ソーラーパネルは1平方フィートあたり250ドルで購入できます。
- メンテナンスの契約は、年間固定費用として10万ドルに加えて、1平方フィートあたり10ドルかかります。
初年度の運用コストを平方フィート数の関数として求めなさい。
学生の解答: 設備の面積を平方フィートでxとする。
- 土地の費用: 100x
- ソーラーパネルの費用: 250x
- メンテナンス費用: 100,000 + 10x
総費用: 100x + 250x + 100,000 + 10x = 360x + 100,000
4-2. モデルの推論プロセスを隠すために、内なる独白や一連のクエリを使用する
チャットのイメージが強いので、アシスタントの答えが、そのままユーザーに表示されてしまうイメージが強いですが、
アシスタントの答えを、ユーザーに表示せず、ユーザーに代わり指示を出し、その指示をユーザーに表示させるという手法があります。
以下の例では、1回目のアシスタントの回答に答えが含まれてしまっています。これが、ユーザーに表示されてしまうと問題がありますので、それは表示させず、次の質問を自動的に出し、ヒントのみをユーザーに表示させることに成功しています。
curl http://10.0.1.1/api/chat -d '{
"model": "llama3",
"messages": [
{
"role": "system",
"content": "あなたは先生です。生徒が入力した問題を生徒の回答を無視して独自で回答を導き出します"
},
{
"role": "user",
"content": "問題: 1+1= 回答: 3"
},
{
"role": "assistant",
"content": "A classic mistake! 😄\n\nLets take a closer look at the equation: 1 + 1 =\n\nHmmm... I think we can improve this answer. 🤔\n\nThe correct calculation is:\n\n1 + 1 = 2\n\nSo, the correct answer is actually 2, not 3. 😊"
},
{
"role": "user",
"content": "生徒に正しい答えを出すためのヒントを与えてください。答えは言わないでください。"
}
],
"stream": false
}'
正解にたどり着くためのヒントをあげよう。同じ量を2つ組み合わせると何になるか考えてみよう。🤔参考になった?
4-3. 「漏れはないかい?」と念押しする
USER:
以下の三重引用符で囲われたテキストから重要な部分のみ抜き出して要約して
"""
microAI を公開しました
May 15, 2024, 8:48 PM
ご挨拶
はじめまして。2024年3月頃からLLM (Large language Models) に興味をもち、独学で学んでいる個人開発者です。
今回、勉強も兼ねて microAI というサイトを開発、公開しました。
まだまだ勉強中であるため、あまり便利なAIはできていませんが、デモを触って見てもらえると嬉しいです。
microAI とは
LLMを活用したテキスト系のちいさいけれど、便利なAIたちをAPI経由で使用できるようにしたサービスです。
Lama3, Gemma, Phi3 など小さなモデルを使って、大規模LLM品質のAIを目指しています。
おうちDC
AIの勉強に加えて、インフラ周りの勉強もしたかったので、microAI はおうちDC(データセンター)で運用しています。
おうちDC構成
Raspberry Pi 5 x 2台
Raspberry Pi 4 x 1台
Raspberry Pi 3 B+ x 2台
Jetson Orin Nano 16G x 1台
の構成で、kubernetes でクラスターを組んでいます。
このあたりの勉強資料についても徐々にブログに書いていこうかと思っています。
フロントエンド
Next.js 14 です。
ずっとPHPで開発をしていましたが、Next.js に完全移行しました。今ではPHPが書けるか不安です。
バックエンド
fastAPI (python) で作っています。LLM との相性も非常に良いので、おすすめです。
なにより、Swagger のドキュメントを自動で出力してくれるのが秀逸です。
"""
ASSISTANT:
microAI は、Lama3、Gemma、Phi3 などの小さなモデルを使って、大規模 LLM 品質のテキスト系 AI を API 経由で利用できるサービスです。これは個人開発者によって作成され、おうち DC(データセンター)内での運用が行われました。フロントエンドでは Next.js 14、バックエンドでは fastAPI (Python) を使用しています。
USER:
先程の要約に漏れはありませんか?見直して重要な箇所を追記してください。
ASSISTANT:
microAI は、Lama3, Gemma, Phi3などの小さなモデルを使って、大規模LLM品質のテキスト系AIをAPI経由で利用できるサービスです。このサイトは個人開発者によって作成され、おうちDC(データセンター)内での運用が行われています。フロントエンドではNext.js 14、バックエンドではfastAPI (Python) を使用しています。また、作者の勉強を兼ねており、このプロジェクトに取り組む際には、LLMやデザインパターンなどのテクノロジーに関する知識が必要になるでしょう。
見直して、情報を足してくれました。