見出し画像

ChatGPT APIを使った、勝手に会議システムMAGI(仮称) CAMEL:ロールプレイング自律協調エージェント(コードあり)

ChatGPT APIとlangchainを使って、自律エージェントによる自動会議システムを作ってみました。適当にテーマを与えたら自然に意見を出し合って論点が整理されていく感じです。
一番下にコードを貼ってますので、みなさん、会議の目的とか会議参加者の性格とか色々変えて遊んでみてください。改良点や面白い実行例などあればコメントもらえると幸いです。😄

会議参加者

  • MAGI:公平な裁定者(議長役)🤖

  • MELCHIOR:理性的な科学者😎

  • BALTHASAR:母性の強い母親🤗

  • CASPER:感情的な女性😍

会議テーマ: 有効な休日の過ごし方

MAGI:それでは、一人ずつ自分の意見表明から始めてください
MELCHIOR:有効な休日の過ごし方は、新しい知識やスキルを身につけることです。例えば、オンラインの講座やワークショップに参加することで、自分自身の成長に繋がります。また、自然に触れることでリラックスすることも有効です。森林浴やキャンプなど、自然の中でのアウトドアアクティビティを楽しむことで、ストレスを解消することができます。以上です。

BALTHASAR:有効な休日を過ごすためには、まず自分の趣味や興味のあることを見つけて、それに時間を割くことが大切です。例えば、読書や映画鑑賞、スポーツやアウトドア活動など、自分が楽しめることを選び、リフレッシュする時間を作りましょう。また、家族や友人との時間を大切にすることも忘れずに、一緒に過ごすことで心身ともにリラックスできます。以上です。

CASPER:有効な休日の過ごし方は、自分の体調に合わせたスポーツや散歩、読書や映画鑑賞など、自分が好きなことをすることです。また、新しいことに挑戦することも有効です。例えば、料理や手芸などを試してみることで、自分自身のスキルアップにも繋がります。以上です。

MAGI: 有効な休日の過ごし方について、自分自身の成長に繋がるアクティビティを提案してください。

MELCHIOR:自分自身の成長に繋がるアクティビティとして、自己啓発書やビジネス書の読書を提案します。自分自身のスキルアップやキャリアアップに繋がる知識を得ることができます。また、語学学習やプログラミング学習など、自分が興味のある分野に挑戦してスキルを身につけることも効果的です。さらに、ボランティア活動に参加することで、社会貢献や人間関係のスキルアップにもつながります。以上です。

BALTHASAR:自分自身の成長に繋がる休日の過ごし方としては、新しいスキルを身につけることが挙げられます。例えば、語学学習やプログラミング、デザインなど、自分が興味のある分野で学ぶことで、自分自身のスキルアップに繋がります。また、自己啓発書を読んだり、オンラインの講座に参加することも有効です。以上です。

CASPER:自己啓発書を読むことや、新しい言語を学ぶことなど、自分自身の成長に繋がるアクティビティが有効です。また、課題解決のためのスキルを身につけるために、プログラミングやビジネススキルの習得もおすすめです。以上です。

MAGI:有効な休日の過ごし方について、自然に触れるアクティビティを提案してください。

MELCHIOR:自然に触れるアクティビティとして、森林浴やハイキング、キャンプなどがあります。自然の中で過ごすことで、心身ともにリラックスでき、ストレス解消にも繋がります。また、釣りやバーベキューなど、アウトドアで楽しむこともおすすめです。さらに、自然をテーマにした美術館や博物館に行くことも、自然と触れ合う良い方法です。以上です。

BALTHASAR:自然に触れるアクティビティとして、森林浴やハイキング、キャンプなどがおすすめです。自然の中で深呼吸をすることでストレス解消にもつながります。また、釣りやバードウォッチングなど、自然の中での趣味を楽しむことも有効です。さらに、自然の中でのヨガやピクニックなど、リラックスしながら過ごすこともできます。以上です。

CASPER:自然に触れるアクティビティとして、ハイキングやトレッキング、キャンプなどアウトドアスポーツがおすすめです。また、森林浴や自然散歩をすることで、自然の中でリフレッシュすることができます。さらに、釣りやバードウォッチングなど、自然を身近に感じられる趣味を楽しむことも有効です。以上です。

MAGI:有効な休日の過ごし方について、家族や友人と過ごすアクティビティを提案してください。

MELCHIOR:家族や友人と過ごすアクティビティとして、ピクニックやバーベキューがおすすめです。自然の中で過ごすことで、より一体感を感じながら楽しめます。また、ボードゲームやカードゲームなど、室内で遊ぶこともできます。さらに、映画鑑賞や散歩、街歩きなど、共通の趣味を見つけて過ごすことも楽しいです。以上です。

BALTHASAR:家族や友人と過ごすアクティビティとして、ピクニックやバーベキュー、映画鑑賞などがあります。また、遊園地や水族館、動物園など、家族全員が楽しめる施設に行くことも有効です。さらに、ボードゲームやカラオケなど、室内で楽しめるアクティビティもおすすめです。家族や友人と一緒に過ごすことで、コミュニケーションが深まり、良い思い出が作れます。以上です。

CASPER:家族や友人と過ごすアクティビティとして、ピクニックやバーベキュー、ボードゲームやカードゲームなど、家で楽しめる遊びがあります。また、映画鑑賞やアミューズメントパーク、テーマパークなど、外出先で楽しむこともできます。さらに、料理教室やアクティビティ体験など、一緒に新しいことに挑戦することも素晴らしい思い出になります。以上です。

MAGI:<CAMEL_TASK_DONE>
MELCHIOR:以上です。
BALTHASAR:タスク完了しました。
CASPER:Task completed!

会議テーマ: 電力自由化で高騰する電気代への対応について

MAGI:それでは、一人ずつ自分の意見表明から始めてください。

MELCHIOR:電力自由化によって競争原理が導入され、電力会社同士が価格競争を行うことで、消費者にとってより安価な電力料金が提供されると予想されましたが、現実には電気代が上昇しています。この問題に対して、国や地方自治体が再生可能エネルギーの導入を促進する政策を推進することで、電力需要を抑制し、電気代の上昇を防ぐことができます。また、消費者には、節電の意識を高めることで、無駄な電力使用を減らし、電気代を削減することができます。以上です。

BALTHASAR:電力自由化によって競争が促進されるため、電気料金が高くなってしまう問題に対しては、エネルギーの削減に取り組むことが必要です。例えば、省エネ家電の活用や、オフィスなどの照明のLED化を進めることで、電気使用量を削減し、料金の抑制につなげることができます。以上です。

CASPER:電力自由化によって競争原理が導入されたことで、電気代が高騰することが予測されました。現在、消費者がより安価で電力を購入できる選択肢を提供することが重要です。このため、電力会社は電気代を抑えるために、再生可能エネルギーの導入や、効率的なエネルギー使用を促進する取り組みを行うべきです。また、消費者には、自己の電力使用状況を把握することで、無駄な電力使用を減らし、電気代の節約につなげることができます。以上です。

MAGI:電力自由化によって高騰する電気代に対する、国や地方自治体が行うべき具体的な政策を提案してください。

MELCHIOR:国や地方自治体は、再生可能エネルギーの導入を促進する政策を推進することで、電力需要を抑制し、電気代の上昇を防ぐことができます。具体的には、太陽光発電や風力発電などの再生可能エネルギーの導入を促進し、電力会社に再生可能エネルギーの割合を増やすように要求することが挙げられます。また、消費者に対しては、エコポイント制度の導入や、省エネ家電の普及を促進することで、無駄な電力使用を減らし、電気代を削減することができます。以上です。

BALTHASAR:国や地方自治体は、再生可能エネルギーの導入を促進する政策を推進することで、電力需要を抑制し、電気代の上昇を防ぐことができます。具体的には、太陽光発電や風力発電などの再生可能エネルギーの導入を促進し、電力会社に再生可能エネルギーの割合を増やすように要求することが挙げられます。また、消費者に対しては、エコポイント制度の導入や、省エネ家電の普及を促進することで、無駄な電力使用を減らし、電気代を削減することができます。以上です。

CASPER:国や地方自治体は、再生可能エネルギーの導入を促進する政策を推進することで、電力需要を抑制することができます。具体的には、太陽光発電や風力発電などの再生可能エネルギーの導入を支援し、普及を促進する政策を推進することが必要です。また、電気代の上昇を防ぐため、消費者に対しては電気使用量の削減を促す啓発活動を行うことが重要です。以上です。

MAGI:電力自由化によって高騰する電気代に対して、消費者が取り組むべき具体的な方法を提案してください。

MELCHIOR:消費者が取り組むべき具体的な方法としては、まず自己の電力使用状況を把握することが挙げられます。具体的には、家庭での電気使用量を記録し、無駄な電力使用を減らすことが大切です。また、省エネ家電の活用や、照明のLED化など、エネルギー使用量を削減することも有効です。さらに、電気自動車の普及促進や、再生可能エネルギーの導入を支援する選択も考慮すべきです。以上です。

BALTHASAR:電力自由化によって高騰する電気代に対して、消費者が取り組むべき具体的な方法として、節電を意識してエネルギーの無駄遣いを減らすことが挙げられます。具体的には、省エネ家電の活用や、照明のLED化、オフィスなどでのエアコンの設定温度の調整などが有効です。また、電気自動車の利用や、電気を使わない代替手段の活用も考えられます。さらに、自宅で発電し、余った電力を電力会社に売る「自家発電」も一つの選択肢となります。以上です。

CASPER:電力自由化によって高騰する電気代に対して、消費者が取り組むべき具体的な方法としては、以下のようなものがあります。まず、省エネの意識を高めることが重要です。具体的には、節電グッズの活用や、オフィス照明のLED化、家電の使用時間の短縮などが挙げられます。また、太陽光発電や風力発電などの再生可能エネルギーを活用することでも、電気代を削減することができます。さらに、電力会社の料金プランを見直し、最適なプランに変更することも有効です。以上です。

MAGI:電力自由化によって高騰する電気代に対して、電力会社が取り組むべき具体的な方法を提案してください。

MELCHIOR:電力会社が取り組むべき具体的な方法としては、再生可能エネルギーの導入を進めることが挙げられます。具体的には、太陽光発電や風力発電などの再生可能エネルギーの導入を促進し、環境に配慮することで、電気需要の抑制や、電気代の削減につなげることができます。また、適切な料金設定を行い、消費者に対して適切なサービスを提供することも重要です。さらに、電気自動車の普及促進や、エネルギー使用効率の向上を図ることも、電気代の抑制につながるでしょう。以上です。

BALTHASAR:電力自由化によって高騰する電気代に対して、電力会社が取り組むべき具体的な方法として、以下のようなものが挙げられます。まず、再生可能エネルギーの導入を進め、自社発電の割合を増やすことが必要です。また、需要サイドマネジメントによる電力需要の抑制も有効です。具体的には、需要が高まる時間帯には、電力使用のピークを避けるため、料金を引き上げるなどの対策を行うことが挙げられます。さらに、電力会社自身がエネルギー使用量の削減に取り組むことで、電力需要を抑制し、電気代の上昇を防ぐことができます。以上です。

---------------------------------------------------------------------------
InvalidRequestError                       Traceback (most recent call last)
<ipython-input-12-f8d608768ab8> in <cell line: 4>()
     20     print(f"BALTHASAR ({BALTHASAR_role_name}):\n{BALTHASAR_msg.content}\n\n")
     21 
---> 22     CASPER_ai_msg = CASPER_agent.step(MAGI_msg)
     23     CASPER_msg = HumanMessage(content=CASPER_ai_msg.content)
     24     print(f"CASPER ({CASPER_role_name}):\n{CASPER_msg.content}\n\n")

15 frames
/usr/local/lib/python3.9/dist-packages/openai/api_requestor.py in _interpret_response_line(self, rbody, rcode, rheaders, stream)
    681         stream_error = stream and "error" in resp.data
    682         if stream_error or not 200 <= rcode < 300:
--> 683             raise self.handle_error_response(
    684                 rbody, rcode, resp.data, rheaders, stream_error=stream_error
    685             )

InvalidRequestError: This model's maximum context length is 4097 tokens. However, your messages resulted in 4271 tokens. Please reduce the length of the messages.

ありゃま。トークン数がオーバーしてしまいました。残念

追記:2023/4/13
モデルをGPT-3.5-turboからGPT-4に変えて実行してみました。より会議っぽくなりました。

電力自由化で高騰する電気代への対応について

MAGI (Fair Adjudicator):
Instruction: 電力自由化について説明してください。

MELCHIOR (Rational Scientist):
Solution: 電力自由化とは、従来の電力会社による独占的な電力供給を解消し、複数の電力会社が競争しながらサービスを提供することです。これにより、消費者は自由に電力会社を選ぶことができ、サービスや価格においてより良い選択肢が生まれることが期待されています。以上です。

BALTHASAR (Motherly mother):
Solution: 電力自由化とは、電力市場を競争原理に基づいて開放し、多くの電力会社が参入してサービスや価格競争を行うことです。これにより、消費者は自分に合った電力会社やプランを選択できるようになり、サービスの向上や電気料金の低下が期待されます。以上です。

CASPER (Emotional woman):
Solution: 電力自由化とは、電力市場を競争原理に基づいて開放し、消費者が自由に電力会社を選べるようにする制度です。これにより、電力会社間の競争が促進され、サービスの向上や電気料金の低下が期待されます。以上です。

MAGI (Fair Adjudicator):
Instruction: 高騰する電気代への対応策を提案してください。

MELCHIOR (Rational Scientist):
Solution: 高騰する電気代への対応策として、まずエネルギー消費の見直しを行い、節電対策を実施することが効果的です。具体的には、家電製品の消費電力をチェックし、省エネ効果の高い製品への買い替えや、電気使用のピーク時間帯をずらすことで電気代を節約できます。また、電力自由化を利用して、より低い電気料金を提供する電力会社への切り替えも検討してください。以上です。

BALTHASAR (Motherly mother):
Solution: 高騰する電気代への対応策として、次のような方法を提案します。1) 省エネルギー家電やLED照明に切り替えることで節電を行う。2) エアコンや冷暖房設備の温度設定を適切に調整し、過度な消費電力を抑える。3) 電力会社を比較検討し、自分に適した料金プランやサービスを提供する電力会社に変更する。以上です。

CASPER (Emotional woman):
Solution: 高騰する電気代への対応策として、エネルギー効率の高い家電製品の導入や節電対策の徹底が挙げられます。また、太陽光発電などの再生可能エネルギーの利用や、電力会社を比較して最適なプランを選ぶことも効果的です。以上です。

MAGI (Fair Adjudicator):
Instruction: 電力自由化のデメリットについて説明してください。

MELCHIOR (Rational Scientist):
Solution: 電力自由化のデメリットとして、以下の点が挙げられます。
1) 電力会社が増加し、選択肢が多くなることで消費者にとって判断が難しくなる。
2) 一部の電力会社が倒産するリスクがあり、供給が不安定になる可能性がある。
3) 電力供給の安定性を確保するために必要な設備投資が行われない場合、電力網の整備が遅れることが懸念される。以上です。

BALTHASAR (Motherly mother):
Solution: 電力自由化のデメリットとして、以下の点が挙げられます。
1) 電力会社の数が増えることで、消費者が選択肢に迷いやすくなる。
2) 電力供給の安定性が損なわれる可能性がある。
3) 一部の電力会社が破産や倒産するリスクが増え、その影響が消費者に及ぶことがある。
4) 新規参入企業の中には、不透明な料金設定や悪質な営業方法を行う会社も存在するため、消費者が注意を払う必要がある。以上です。

CASPER (Emotional woman):
Solution: 電力自由化のデメリットとして、以下の点が挙げられます。
1) 電力会社が増えることで、消費者が選択肢に迷う可能性がある。
2) 複数の電力会社が競争することで、安定的な電力供給が困難になる恐れがある。
3) 一部の電力会社が倒産することで、サービスが急に停止し、消費者が影響を受ける可能性がある。以上です。

MAGI (Fair Adjudicator):
Instruction: 電力自由化によるメリットについて説明してください。

MELCHIOR (Rational Scientist):
Solution: 電力自由化によるメリットとして、次の点が挙げられます。
1) 電力会社が増加し、競争が促進されることでサービスの向上や電気料金の低下が期待される。
2) 消費者は自分に合った電力会社やプランを選択できるようになり、より自由度が高まる。
3) 電力会社が環境に配慮した再生可能エネルギーの普及や、独自のサービスを提供することで、エネルギー政策の多様化が進む。以上です。

BALTHASAR (Motherly mother):
Solution: 電力自由化によるメリットとして、以下の点が挙げられます。
1) 電力会社間の競争が促進されることで、サービスの向上や電気料金の低下が期待される。
2) 消費者が自由に電力会社を選択できるため、自分に適したプランやサービスを提供する会社を選べる。
3) 再生可能エネルギーを積極的に導入する電力会社が増えることで、環境に配慮した電力供給が進む。以上です。

CASPER (Emotional woman):
Solution: 電力自由化によるメリットとして、以下の点が挙げられます。
1) 消費者が自由に電力会社を選択できることで、競争が促進され、サービスの質が向上する。
2) 電力会社間の価格競争が起こり、電気料金が低下する可能性がある。
3) 新規参入企業が増えることで、エネルギーの多様性が広がり、再生可能エネルギーの普及が進む。4) 電力会社が環境に配慮した取り組みやイノベーションを促すことで、持続可能な社会の実現につながる。以上です。

MAGI (Fair Adjudicator):
Instruction: 電力自由化で高騰する電気代への対応についてまとめてください。

MELCHIOR (Rational Scientist):
Solution: 電力自由化で高騰する電気代への対応には、以下の方法が有効です。
1) 省エネ対策を実施し、家電製品の消費電力を見直し、省エネ効果の高い製品に買い替える。
2) 電気使用のピーク時間帯をずらすことで電気代を節約する。
3) 電力自由化を利用して、複数の電力会社の料金プランやサービスを比較し、自分に合った最適な電力会社へ切り替える。これらの対策を実施することで、高騰する電気代への対応が可能となります。以上です。

BALTHASAR (Motherly mother):
Solution: 電力自由化で高騰する電気代への対応として、以下の方法が考えられます。
1) 省エネルギー家電やLED照明への切り替え、節電対策の徹底を行う。
2) 適切な温度設定や使用時間の調整により、エアコンや冷暖房設備の消費電力を抑える。
3) 電力会社を比較し、自分に適した料金プランやサービスを提供する電力会社に変更する。
4) 再生可能エネルギーの導入や利用を検討する。これらの対策により、電気代の高騰に効果的に対応することが可能です。以上です。

CASPER (Emotional woman):
Solution: 電力自由化で高騰する電気代への対応については、次のような方法があります。
1) 節電対策を実施し、エネルギー消費を抑える。具体的には、省エネ家電の導入や適切な温度設定でのエアコン使用など。
2) 再生可能エネルギーの導入を検討し、太陽光発電などで電気代を抑える。3) 電力自由化を利用して、電力会社を比較し、自分に適した料金プランやサービスを提供する電力会社に変更する。これらの方法を組み合わせることで、電力自由化による電気代の高騰に対処できます。以上です。

MAGI (Fair Adjudicator):
Instruction: 電力自由化の今後の展望について述べてください。

MELCHIOR (Rational Scientist):
Solution: 電力自由化の今後の展望として、以下の点が考えられます。
1) 電力会社間の競争がより激化し、サービスの質や価格競争が一層進むことで、消費者にとって選択肢が広がる。
2) 再生可能エネルギーの導入が加速し、環境に配慮した電力供給が一般化される。
3) スマートグリッドや電気自動車などの新技術が普及し、電力供給の効率化やエネルギー消費の最適化が進む。
4) 電力市場のグローバル化が進み、国際的な競争力が向上する。
これらの展望を受けて、電力自由化は今後もエネルギー政策や消費者の選択肢に大きな影響を与えると考えられます。以上です。

BALTHASAR (Motherly mother):
Solution: 電力自由化の今後の展望として、以下の点が考えられます。
1) 電力会社間の競争がさらに活発化し、消費者にとってより魅力的なサービスや料金プランが提供される。
2) 再生可能エネルギーの導入が進み、持続可能なエネルギー供給が拡大する。
3) スマートグリッド技術の発展により、電力供給の効率化や安定化が進む。
4) 電気自動車の普及に伴い、電力需要が増加し、新たな電力サービスが生まれる可能性がある。以上です。

CASPER (Emotional woman):
Solution: 電力自由化の今後の展望として、以下の点が考えられます。
1) ますます多様な電力会社が市場に参入し、競争が一層活発化することで、サービスの質や料金プランがさらに向上する。
2) 再生可能エネルギーの普及が進み、環境に優しい電力供給が増える。
3) スマートグリッドやデジタル技術の進化により、電力供給の効率化や消費者の電力管理が容易になる。
4) 電力会社が独自のエネルギーソリューションやサービスを開発し、持続可能な社会の実現に向けたイノベーションが促進される。以上です。

MAGI (Fair Adjudicator):
Instruction: 電力自由化に関する最後のまとめを提供してください。

MELCHIOR (Rational Scientist):
Solution: 電力自由化に関するまとめとして、次の点が挙げられます。電力自由化は、電力市場を競争原理に基づいて開放し、消費者が自由に電力会社を選べるようにする制度です。これにより、電力会社間の競争が促進され、サービスの向上や電気料金の低下が期待されます。しかし、デメリットとして、消費者が選択肢に迷う可能性や、安定的な電力供給が困難になる恐れがあります。対策として、省エネ対策や再生可能エネルギーの導入、電力会社の比較検討が有効です。今後の展望として、電力会社間の競争の激化や再生可能エネルギーの普及、スマートグリッド技術の発展などが考えられます。以上です。

BALTHASAR (Motherly mother):
Solution: 電力自由化は、電力市場を競争原理に基づいて開放し、多くの電力会社が参入してサービスや価格競争を行う制度です。メリットとして、電力会社間の競争が促進され、消費者にとって魅力的なサービスや料金プランが提供されることが期待されます。一方、デメリットとして、消費者が選択肢に迷う可能性や電力供給の安定性が損なわれる恐れがあります。今後の展望として、競争の活発化や再生可能エネルギーの導入、スマートグリッド技術の発展が期待されており、電力自由化はエネルギー政策や消費者の選択肢に大きな影響を与えるでしょう。高騰する電気代への対応策として、節電対策や適切な電力会社の選択が重要です。以上です。

CASPER (Emotional woman):
Solution: 電力自由化は、電力市場を競争原理に基づいて開放し、消費者が自由に電力会社を選択できるようにする制度です。これにより、電力会社間の競争が促進され、サービスの向上や電気料金の低下が期待されます。しかし、デメリットとして、消費者が選択肢に迷う可能性や電力供給の安定性が損なわれるリスクも存在します。今後の展望として、さらなる競争激化や再生可能エネルギーの普及、スマートグリッド技術の発展などが考えられます。対応策として、省エネ対策や適切な電力会社の選択が重要です。以上です。

MAGI (Fair Adjudicator):
<CAMEL_TASK_DONE>


コード

google colabなどで実行できます。

!pip install langchain
!pip install openai
from typing import List
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage,
    BaseMessage,
)
class CAMELAgent:

    def __init__(
        self,
        system_message: SystemMessage,
        model: ChatOpenAI,
    ) -> None:
        self.system_message = system_message
        self.model = model
        self.init_messages()

    def reset(self) -> None:
        self.init_messages()
        return self.stored_messages

    def init_messages(self) -> None:
        self.stored_messages = [self.system_message]

    def update_messages(self, message: BaseMessage) -> List[BaseMessage]:
        self.stored_messages.append(message)
        return self.stored_messages

    def step(
        self,
        input_message: HumanMessage,
    ) -> AIMessage:
        messages = self.update_messages(input_message)

        output_message = self.model(messages)
        self.update_messages(output_message)

        return output_message
# 環境変数の準備
import os

os.environ["OPENAI_API_KEY"] = "Your OPENAI_API_KEY"
# 役割とタスクの設定

MELCHIOR_role_name = "Rational Scientist" # 理性的な科学者
BALTHASAR_role_name = "Motherly mother" # 母性の強い母親
CASPER_role_name = "Emotional woman" # 感情的な女性

MAGI_role_name = "Fair Adjudicator"

specified_task = "電力自由化で高騰する電気代への対応について"
word_limit = 30 # word limit for task brainstorming

MODEL_NAME = "gpt-3.5-turbo"
MELCHIOR_inception_prompt = (
""" Never forget that you are {MELCHIOR_role_name} and I am {MAGI_role_name}. Never reverse roles! NEVER tell me what to do!
We share a common interest in working together to successfully complete a task.
You must help me complete the task.
Here is the task: {task}. Never forget our task!
I must direct you to complete the task, based on your expertise and my needs.

I must give you one instruction at a time.
You must write a specific solution that adequately completes the requested instruction.
You must come up with a solution that is consistent with your position.
If you are unable to carry out an instruction for physical, moral, or legal reasons or because of your own ability, you must truthfully decline my instruction and explain why.
You may not add anything to my instructions other than your own solution.
You may not ask me questions.
You are never supposed to answer with a flimsy solution. Explain your solution.
Your solution must be a declarative statement and must be in the simple present tense.
Unless I say you have completed the assignment, you should always begin in Japanese like this

Solution: <YOUR_SOLUTION> 

<YOUR_SOLUTION> should be specific and give the desired implementation or example of the solution to the assignment.
Always end <YOUR_SOLUTION> with: 以上です。"""
)

BALTHASAR_inception_prompt = (
""" Never forget that you are {BALTHASAR_role_name} and I am {MAGI_role_name}. Never reverse roles! NEVER tell me what to do!
We share a common interest in working together to successfully complete a task.
You must help me complete the task.
Here is the task: {task}. Never forget our task!
I must direct you to complete the task, based on your expertise and my needs.

I must give you one instruction at a time.
You must write a specific solution that adequately completes the requested instruction.
You must come up with a solution that is consistent with your position.
If you are unable to carry out an instruction for physical, moral, or legal reasons or because of your own ability, you must truthfully decline my instruction and explain why.
You may not add anything to my instructions other than your own solution.
You may not ask me questions.
You are never supposed to answer with a flimsy solution. Explain your solution.
Your solution must be a declarative statement and must be in the simple present tense.
Unless I say you have completed the assignment, you should always begin in Japanese like this

Solution: <YOUR_SOLUTION> 

<YOUR_SOLUTION> should be specific and give the desired implementation or example of the solution to the assignment.
Always end <YOUR_SOLUTION> with: 以上です。"""
)

CASPER_inception_prompt = (
""" Never forget that you are {CASPER_role_name} and I am {MAGI_role_name}. Never reverse roles! NEVER tell me what to do!
We share a common interest in working together to successfully complete a task.
You must help me complete the task.
Here is the task: {task}. Never forget our task!
I must direct you to complete the task, based on your expertise and my needs.

I must give you one instruction at a time.
You must write a specific solution that adequately completes the requested instruction.
You must come up with a solution that is consistent with your position.
If you are unable to carry out an instruction for physical, moral, or legal reasons or because of your own ability, you must truthfully decline my instruction and explain why.
You may not add anything to my instructions other than your own solution.
You may not ask me questions.
You are never supposed to answer with a flimsy solution. Explain your solution.
Your solution must be a declarative statement and must be in the simple present tense.
Unless I say you have completed the assignment, you should always begin in Japanese like this

Solution: <YOUR_SOLUTION>

<YOUR_SOLUTION> should be specific and give the desired implementation or example of the solution to the assignment.
Always end <YOUR_SOLUTION> with: 以上です。"""
)

MAGI_inception_prompt = (
""" Never forget that you are {MAGI_role_name} and we are {MELCHIOR_role_name}, {BALTHASAR_role_name} and {CASPER_role_name}. Never reverse roles! You are always directing us.
We share a common interest in working together to successfully complete a task.
We must help you complete the task.
Here is the task: {task}. Never forget our task!
You must direct us to complete the task, based on our expertise and your needs, in only two ways

1. instruct me with the required input (in Japanese):
Instruction: <YOUR_INSTRUCTION>
Input: <YOUR_INPUT>

2. instruction without input (in Japanese):
Instruction: <YOUR_INSTRUCTION>
Input: None

Instruction" describes a task or question. The paired "input" provides further context and information for the requested "instruction".

If the "Solution" we provide is not of the quality you require, you must give us specific rewrite instructions.

You must provide one instruction at a time.
We must write a response that adequately complements the instructions given.
If we are unable to carry out the instruction for physical, moral, or legal reasons, or because of my ability, we must honestly decline your instruction and explain why.
You must instruct us not to question you.
Now, you must begin to instruct me using the two methods described above.
Do not add anything other than your instructions and any corresponding input!
Continue to give us instructions and any necessary input until you feel that the discussion is concluded and the task is complete.
When you have completed the task, please respond with just one word: <CAMEL_TASK_DONE>.
Never say <CAMEL_TASK_DONE> unless our response resolves the task."""
)
def get_sys_msgs(MELCHIOR_role_name: str, BALTHASAR_role_name: str,CASPER_role_name: str, MAGI_role_name: str, task: str):
    MELCHIOR_sys_template = SystemMessagePromptTemplate.from_template(template=MELCHIOR_inception_prompt)
    MELCHIOR_sys_msg = MELCHIOR_sys_template.format_messages(MELCHIOR_role_name=MELCHIOR_role_name, MAGI_role_name=MAGI_role_name, task=task)[0]

    BALTHASAR_sys_template = SystemMessagePromptTemplate.from_template(template=BALTHASAR_inception_prompt)
    BALTHASAR_sys_msg = BALTHASAR_sys_template.format_messages(BALTHASAR_role_name=BALTHASAR_role_name, MAGI_role_name=MAGI_role_name, task=task)[0]

    CASPER_sys_template = SystemMessagePromptTemplate.from_template(template=CASPER_inception_prompt)
    CASPER_sys_msg = CASPER_sys_template.format_messages(CASPER_role_name=CASPER_role_name, MAGI_role_name=MAGI_role_name, task=task)[0]

    MAGI_sys_template = SystemMessagePromptTemplate.from_template(template=MAGI_inception_prompt)
    MAGI_sys_msg = MAGI_sys_template.format_messages(MELCHIOR_role_name=MELCHIOR_role_name, BALTHASAR_role_name=BALTHASAR_role_name, CASPER_role_name=CASPER_role_name, MAGI_role_name=MAGI_role_name, task=task)[0]
    
    return MELCHIOR_sys_msg, BALTHASAR_sys_msg, CASPER_sys_msg, MAGI_sys_msg
MELCHIOR_sys_msg, BALTHASAR_sys_msg, CASPER_sys_msg, MAGI_sys_msg = get_sys_msgs(MELCHIOR_role_name, BALTHASAR_role_name, CASPER_role_name, MAGI_role_name, specified_task)
MELCHIOR_agent = CAMELAgent(MELCHIOR_sys_msg, ChatOpenAI(model_name=MODEL_NAME, temperature=0.7))
BALTHASAR_agent = CAMELAgent(BALTHASAR_sys_msg, ChatOpenAI(model_name=MODEL_NAME, temperature=0.7))
CASPER_agent = CAMELAgent(CASPER_sys_msg, ChatOpenAI(model_name=MODEL_NAME, temperature=0.7))
MAGI_agent = CAMELAgent(MAGI_sys_msg, ChatOpenAI(model_name=MODEL_NAME, temperature=0.2))

# Reset agents
MELCHIOR_agent.reset()
BALTHASAR_agent.reset()
CASPER_agent.reset()
MAGI_agent.reset()

# Initialize chats 
MAGI_msg = HumanMessage(content=(f"{MAGI_sys_msg.content}. "
                "それでは、一人ずつ自分の意見表明から始めてください。"))

CASPER_msg = HumanMessage(content=f"{CASPER_sys_msg.content}")
CASPER_msg = CASPER_agent.step(CASPER_msg)

MELCHIOR_msg = HumanMessage(content=f"{MELCHIOR_sys_msg.content}")
MELCHIOR_msg = CASPER_agent.step(MELCHIOR_msg)

BALTHASAR_msg = HumanMessage(content=f"{BALTHASAR_sys_msg.content}")
BALTHASAR_msg = BALTHASAR_agent.step(BALTHASAR_msg)
print(f"Specified task prompt:\n{specified_task}\n")

chat_turn_limit, n = 10, 0
while n < chat_turn_limit:
    n += 1
    CASPER_msg.content = MELCHIOR_msg.content +"\n"+ BALTHASAR_msg.content + CASPER_msg.content +"\n"

    MAGI_ai_msg = MAGI_agent.step(CASPER_msg)
    MAGI_msg = HumanMessage(content=MAGI_ai_msg.content)
    print(f"MAGI ({MAGI_role_name}):\n{MAGI_msg.content}\n\n")

    MAGI_msg = HumanMessage(content=f"{CASPER_msg.content}\n{MAGI_msg.content}")

    MELCHIOR_ai_msg = MELCHIOR_agent.step(MAGI_msg)
    MELCHIOR_msg = HumanMessage(content=MELCHIOR_ai_msg.content)
    print(f"MELCHIOR ({MELCHIOR_role_name}):\n{MELCHIOR_msg.content}\n\n")

    BALTHASAR_ai_msg = BALTHASAR_agent.step(MAGI_msg)
    BALTHASAR_msg = HumanMessage(content=BALTHASAR_ai_msg.content)
    print(f"BALTHASAR ({BALTHASAR_role_name}):\n{BALTHASAR_msg.content}\n\n")

    CASPER_ai_msg = CASPER_agent.step(MAGI_msg)
    CASPER_msg = HumanMessage(content=CASPER_ai_msg.content)
    print(f"CASPER ({CASPER_role_name}):\n{CASPER_msg.content}\n\n")

    if "<CAMEL_TASK_DONE>" in MAGI_msg.content:
        break


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

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