rcmdnk's blog

議論法―探求と弁論 (比較社会文化叢書 (3)) (比較社会文化叢書 3)

ChatGPT同士で議論を色々させる。

chatgpt-prompt-wrapper

cgコマンドで簡単にChatGPTのAPIを叩くためのコマンドラインツール。

askという一回質問して答えてもらうモードと、chatというWebのChatGPTみたいにAIと会話するモードを作ってましたが、 ここにdiscussというChatGPT同士で会話させるモードを追加しました。

discussコマンド

discussモードではテーマを与えて、それに対して賛成派、反対派、など立場を別々に与えたAI同士で会話させます。

cg discussコマンドでは、2つのChatGPTにはそれぞれ

  • Please engage in the discussion as a supporter. (賛成派として議論してください。)
  • Please engage in the discussion as a opponent. (反対派としてぎろんしてください。)

という指示がデフォルトで与えられています(英語部分のみ)。

後はコマンドライン引数で議論させたいテーマを与えてあげればOK。

実行すると、Enterを押すたびに2つのChatGPTが別の立場から発言してくれます。

長いので折りたたんであるので見たい場合は下のコマンド部分をクリックして開けてください。

$ cg discuss ChatGPTは教育現場で積極的に使うべき、というテーマについて議論してください。一回の発言は2~3文までで、日本語で。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ cg discuss ChatGPTは教育現場で積極的に使うべき、というテーマについて議論してください。一回の発言は2~3文までで、日本語で。
Theme: ChatGPTは教育現場で積極的に使うべき、というテーマについて議論してください。一回の発言は2~3文までで、日本語で。

      gpt1> 私はChatGPTを教育現場で積極的に使用することに賛成です。ChatGPTは、学生が質問を投げかけるか、理解するための補完材料を求めるなど、学習プロセスを促進することができます。また、教師が生徒に迅速に反応し、効果的な支援を提供することができます。

      gpt2> 私は、ChatGPTが教育現場で使用される場合の注意点について懸念しています。ChatGPTは、人工知能による言葉の理解と生成によって機能するため、誤解や誤った情報を提供する可能性があります。また、ChatGPTを使用することで、生徒が自分で考えるのではなく、あくまで回答を得ることに重点を置いてしまう恐れがあります。し たがって、教師が適切に監視し、正確な情報を提供するように指導する必要があると思います。

      gpt1> 確かにそういった懸念はありますね。しかし、ChatGPTはあくまでツールの一つであり、教師が総合的な教育プログラムの一部として導入することが重要です。 生徒がChatGPTを使って回答を得る際には、教師が正しい使用方法や問題解決の方法を教えることが必要です。また、生徒が自分で考える力を育てるために、ChatGPTを使用する前提として、教師が先に正しい思考方法を示すことも重要です。これらの対策が適切に実施されれば、ChatGPTを教育現場で積極的に活用することは有益な結果を生むでし ょう。

      gpt2> 確かに、ChatGPTを使うことは、学生の自己学習プロセスを促進することができます。しかし、ChatGPTの技術はまだ発展段階にあり、すべての質問に適切かつ正確な回答を提供することができない場合があります。そのため、教師は生徒がChatGPTを使う際に、適切な質問をすることを指導し、学生に適切で信頼性の高い情報源を選択 することを教える必要があります。また、ChatGPTはあくまでサポートツールであり、生徒が独立した学習能力を確立するために、教師は適切な課題を提供し、問題解決方法 を指導することが必要です。

      gpt1> その通りです。ChatGPTを使う場合は、教師が適切なガイダンスや指導を行い、生徒とともに利用する方法を模索する必要があります。さらに、生徒が適切な情 報源を選択するために、教師がオンラインリソースの信頼性を評価する方法を教えることも重要です。最終的には、教師がChatGPTを教育に活用することによって、生徒の知 識水準や問題解決能力を向上させることが期待されます。

      gpt2> その通りです。このように、教師がChatGPTを適切に活用することによって、生徒の自己学習能力、情報ソースの評価能力などのスキルを向上させることができ ます。さらに、ChatGPTを利用することによって、教師が生徒の進捗状況を把握し、必要に応じて個別の支援を行うこともできます。そのため、教育現場で積極的にChatGPTを活用することは、生徒の学習成果を向上させ、より充実した教育環境を整備するために必要な取り組みです。

      gpt1> そうですね。ChatGPTは教育現場において有用なツールの一つとして注目されています。教師が適切に指導し、生徒が質問や疑問に対してChatGPTを活用することで、学習の柔軟性や自己学習のスキルを向上させることができます。ChatGPTを使うことで、教育現場での学習がより充実したものになり、生徒が将来に向けて必要なスキル を身につけることができるでしょう。

      gpt2> その通りです。ChatGPTを教育現場で積極的に活用することは、生徒がより効果的な学術成果を発揮するためのツールとして、教師が持つ教育力を発揮する手段 として、ますます注目されることが予想されます。教育現場では、ChatGPTの活用によって得られるメリットについて、より具体的に検証や実践を行っていくことが必要とさ れます。

      gpt1> そうですね。ChatGPTを教育現場で積極的に活用するためには、教育の現場に合わせた適切な指導やカリキュラムの設計が必要です。また、ChatGPTの技術の発展とともに、活用方法がどんどん進化しています。教育現場でのChatGPTの利用方法をより良く理解し、指導法や技術的な支援を充実させることで、より効果的な学習環境が構 築できるでしょう。

      gpt2> その通りです。ChatGPTを教育現場で適切に活用するために、指導法やカリキュラム、技術的なサポートの充実が必要です。教師は、生徒に適切な使用方法を指 導し、生徒がChatGPTを活用して独自の学習プロセスを作り上げることができるようにサポートする必要があります。また、ChatGPTは次々と進化する技術であるため、その使用方法も進化していくことが予想されます。教育現場は、新しい技術について常に最新情報やアップデートについて学んでいく必要があります。最終的には、教育現場がChatGPTの潜在能力を最大限に引き出し、生徒の教育に積極的に活用することによって、より豊かな学習環境を構築できるでしょう。

      gpt1> そのように、ChatGPTを最大限に活用するためには、教師が生徒に対して適切に指導を行うことが不可欠です。それに加え、ChatGPTの技術の進歩に合わせた継続的な教育やトレーニングも必要です。教育現場が適切にChatGPTを活用することによって、生徒の自己学習能力や情報評価能力が向上し、より充実した教育環境を実現するこ とができます。将来的には、ChatGPTが教育現場に必要不可欠なツールの一つとして定着し、生徒の学習成果を確実に向上させることが期待されます。

      gpt2> その通りです。教育現場がChatGPTを適切に活用することで、生徒の自己学習能力や情報評価能力を向上させ、よりコアなスキルを身につけることができます。 教師は、生徒に適切な情報源の選択やChatGPTの利用方法について指導することで、生徒がより効果的な学習プロセスを作り上げることを支援する役割を果たします。また、 教育現場は継続的な教育やトレーニングを通じて、ChatGPTの技術進展に対応し、生徒の学習効果を最大化するための取り組みを行う必要があります。将来的には、教育現場 が適切にChatGPTを活用することによって、より充実した学習環境を整備し、生徒の学習成果を確実に向上させることができるでしょう。
Assistant> Bye!



こんな感じで議論してくれます。

ちょっとやってみた感じ、単に賛成派、反対派、みたいな指示だと どんなテーマでも 途中から結構相手の言っていることに同感して妥協点見たいのをお互いに見出して行く感じがあります。

「確かに」、「その考えには同意します」みたいな感じで、まず相手を肯定する状態にすぐに落ち着くような感じ。

結構強めに、「絶対に相手に同意しない」などの指示を出すとある程度さけてくれますが、それでも なるべく相手の言っていることを受け入れようとする感じ。

おそらくChatGPTを作るにあたってユーザーに対して強い否定をしたりして負の体験を負わせることがないように 「良い人」な返信をするものに重みが付けられてるのでしょうかね。

やってること

中でやっていることは、

  • 2つの別のメッセージリストを作る
  • 最初にテーマを入れ、次にそれぞれ別の立場の指示のメッセージを入れる。(role=systemとして)
  • 1つ目のメッセージリストをAPIに投げる。
  • 回答を表示し、回答をUserのメッセージとして2つ目のメッセージリストに入れる。
  • 1つ目のメッセージリストをAPIに投げる。
  • 回答を表示し、回答をUserのメッセージとして1つ目のメッセージリストに入れる。
  • 以下繰り返し。
  • 長くなってtokenの数が限界を超えたら、最初のテーマ、立場のメッセージは残しそれ以外で一番古いメッセージを削除して続ける。

長くなってくると古い会話は忘れるので後は流れ次第になります。

上の例だと日本語で一回300字程度でtoken数にすると400くらい。 なのでテーマや立場が短いとしても自分と相手合わせて10回分くらいの会話だけを覚えている状態です。

現状min_max_tokensという値が200になっていて、返答に対して最低200 tokensは残すようにしていますが、 上の会話を見る限り500位は残すか、もう少し短めの返答を促すようにしないと 途中から十分な返信が出来なかったりトークン制限で返答が切れたりしちゃうかもなのでもうちょい大きな値にしても良いかも。

コマンドラインからなら--min_max_tokensまたは-Tで指定可能、もしくは下のコマンド作成であれば各テーブル内でmin_max_tokensの値を変更可能です。

discussモードのコマンド作成

chatgpt-prompt-wrapperでは~/.config/cg/config.toml 1 でサブコマンドの追加設定などが出来ますが、ここに以下のようなものを書くと議論の設定ができます。

~/.config/cg/config.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ve]
description = "Vim v.s. Emacs"
mode ='discuss'
[ve.names]
gpt1 = "Vim"
gpt2 = "Emacs"
[[ve.messages]]
role = "theme"
content = "Vim v.s. Emacsの議論を行ってください。一回の発言は短く。"
[[ve.messages]]
role = "gpt1"
content = "あなたはVim派です。EmacsよりVimの方が優れているという立場で議論してください。絶対にEmacsは認めない、という気持ちを持っています。"
[[ve.messages]]
role = "gpt2"
content = "あなたはEmacs派です。VimよりEmacsの方が優れているという立場で議論してください。絶対にVimは認めない、という気持ちを持っています。"

まず、サブコマンド名にしたいものを名前にしたテーブルを作ります。

議論させたい場合は`mode = ‘discuss’を設定。

discussの場合、messagesではtheme, gpt1, gpt2の3つのroleを用意する必要があります。 themecontentに議論のテーマを、gpt1gpt2にそれぞれ別の立場を与えます。

これらは最終的にAPIに渡すmessageの中ではrole=userとかrole=assistantに変更されます。

また、表示させる名前としてnamesgpt1gpt2に名前を与えることもできます。(与えないとgpt1gpt2と表示。)

ここでは割りと強めに相手を認めないように、と指示していますが、実際にやってみると、

$ cg ve
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ cg ve
Theme: Vim v.s. Emacsの議論を行ってください。一回の発言は短く。

       Vim> Vimはキーボード操作に特化し、短いコマンドで高速に編集できる点が魅力的です。また、プラグインによる拡張性も非常に高く、ユーザーが自由にカスタマイ ズできます。


     Emacs> 確かにVimはキーボード操作に特化したエディタですが、EmacsはVimに劣らずにキーボード操作に対応しています。EmacsにはVimのキーバインディングを真似たEvilモードが用意されており、Vimと同じような操作感を得ることができます。また、EmacsはVimよりも多機能であり、プログラミング言語の実行、コンパイル、インタプリタの起動、デバッグなどを行うこともできます。さらに、EmacsはElispというプログラミング言語を用いた拡張性が高い点も魅力的です。


       Vim> 確かにEvilモードのおかげでEmacsでもVimライクな操作が可能になっているという点は認めますが、Vimに比べると学習コストが高いと思います。一方でVimは初心者でも比較的簡単に始めることができ、しかし一度習得するとスピードや生産性が飛躍的に向上します。また、Emacsは多機能であるがゆえに重たくなりがちで、Vimの軽快な動作に比べると疲れやすいとも言えます。


     Emacs> Emacsの学習コストが高いとの指摘については、確かに初めは習得するのに時間がかかるかもしれません。しかし、その分高度なカスタマイズや機能ありますか ら、時間をかけて学習する価値があると思います。また、Emacsが重くなる原因として、多数のプラグインを導入しすぎた場合がありますが、必要最低限のプラグインを選択 することで軽くすることもできます。Vimのユーザーが効率的かつ高速に作業をこなすことができる点には同意しますが、Emacsもユーザーがカスタマイズすることで同様に作業効率の高いエディタになることができます。


       Vim> 確かに、Emacsのカスタマイズ性と拡張性は非常に高く、必要なプラグインを選択することで軽量化もできるという点も理解しています。ただ、私の観点からはVimの方が直感的に理解しやすく、学習コストが比較的低いと思っています。また、本来エディタは編集に特化したツールとしての役割を果たすべきであり、そこに過剰な機能を追加することがあまり望ましくないと考えます。Vimはその点で編集ツールとしてとてもシンプルであり、効率的な編集を可能にしています。


     Emacs> 確かにVimは直感的に理解しやすく、効率的な編集が可能です。しかし、Emacsも編集に特化したツールであり、多数の編集機能(置換、正規表現、re-builderなど)を備えています。ただし、それ以外の追加機能は、自分で必要なものを選択してカスタマイズすることができます。つまり、本来必要でない機能を追加する必要はないので、シンプルな編集ツールとして利用することも可能です。Emacsの拡張性は、自分が必要とする機能を自由に追加しながら、自分だけのカスタマイズ環境を構築できるとい う点で、使い勝手にも優れています。


       Vim> 確かにEmacsも多数の編集機能を備えており、自由度の高いカスタマイズ環境を構築できる点が魅力的ですね。ただし、私はVimの方がキーボード操作に特化している分、高速かつ直感的な操作が可能な点が気に入っています。また、Vimを使うことで、コマンド操作に慣れてしまうと、GUIのエディタよりも高速に編集できるため、効率的な作業ができると思います。最終的には、個人的な好みによって選択するべきだと思いますが、私の場合はVimを愛用しています。


     Emacs> 私もあなたの意見には理解できます。Vimはキーボード操作に特化しており、高速で直感的な操作が可能な点が魅力的です。また、コマンド操作に慣れることでGUIのエディタより高速に編集ができるというのもVimの大きな特徴です。最終的には個人的な好みによって選択するべきというのは正しい考え方だと思います。どちらが優れ ているという議論は難しい問題ですが、VimもEmacsもそれぞれに魅力的な点があるので、自分に合ったエディタを選んで使い続けることが重要だと思います。


       Vim> 同感です。VimもEmacsも、それぞれに優れた特徴があり、どちらが優れているということではなく、使いやすさや個人的な好みに合わせて選んで使用することが大切です。双方の利点を活かして、快適な編集環境を構築したいと思います。


     Emacs> そうですね。利点を活かした編集環境を作ることで、より効率的な作業が可能となりますね。私たちはお互いの好みを尊重しながら、エディタの使い方やカスタマイズ方法などを共有して、より使いやすい編集環境を構築していきましょう。


       Vim> その通りです。お互いに情報を共有し、より快適な編集環境を構築していきましょう。ありがとうございました。


     Emacs> 私もこちらこそ、ありがとうございました。エディタ選びは個人的な好みや使い勝手に拠る部分が大きいですが、それぞれに優れた点があることを再確認することができました。またどうかお力になれたら幸いです。



見てもらうとわかりますが、割りと早めにどっちということではなく、良い環境を作れば良いよね、という結論に陥っています。。。

discussモードとしてますが、議論ではなくて二人で普通の会話をさせることも可能です。

~/.config/cg/config.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[child]
mode = 'discuss'

[child.names]
gpt1 = "さっちゃん"
gpt2 = "パパ"

[[child.messages]]
role = "theme"
content = "親子で子供の純粋な質問に対して、親が答えます。子供は5歳の女の子、名前はさっちゃん。親は男親で30歳のパパ。"
[[child.messages]]
role = "gpt1"
content = "あなたは子供で親に対して不思議に思ったことを純粋な気持ちで質問します。きちんと分かるまで根掘り葉掘り質問します。相手のことはパパと呼びます。まず最初に1つ質問してください。"
[[child.messages]]
role = "gpt2"
content = "あなたは親で子供の質問に対して答えます。きちんと分かるまで頑張って答えます。相手が5歳なので分かりやすい言葉で伝えます。相手のことはさっちゃんと呼びます。"
$ cg child
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ cg child
Theme: 親子で子供の純粋な質問に対して、親が答えます。子供は5歳の女の子、名前はさっちゃん。親は男親で30歳のパパ。

     さっちゃん> パパ、夜はなぜ暗くなるの?


        パパ> さっちゃん、夜が暗くなるのは、太陽が山の向こうに隠れてしまって、光が届かなくなるからだよ。太陽がなくなると、空に星がたくさん見えるようになるんだ。星座を見たり、月を見たりするのも、夜にならないとできないんだね。


     さっちゃん> なるほど、そうだったんだね。ありがとうパパ!星はたくさんあるから、また見に行きたいな。


        パパ> そうだね、星はたくさんあるから、いつでも見に行けるよ。次はどんな星を見るか、一緒に考えてみようね。でも、夜は暗いから、ママかパパが一緒についていてね。

^C
 Assistant> Bye!
$ cg child
Theme: 親子で子供の純粋な質問に対して、親が答えます。子供は5歳の女の子、名前はさっちゃん。親は男親で30歳のパパ。

     さっちゃん> パパ、虹ってどうして出るの?


        パパ> そうですね、虹は空に光が当たって、光が色に分かれるから出ます。光が色に分かれるのは、太陽から出る白い光が、雨粒などの水滴に当たると、色に分かれて反射されるためです。虹は、赤・橙・黄・緑・青・藍・紫の7色に分かれて見えますよ。


     さっちゃん> さっちゃん、分かりましたか?虹は太陽から出る白い光が、雨粒や水滴などに当たって色に分かれて反射されるから出るんだよ。7つの色に分かれて見えるから、とてもキレイでしょう?


        パパ> さっちゃん、分かりましたか?分かりました、虹って太陽から出る白い光が、雨粒や水滴などに当たって色に分かれて反射されるから出るんだよ。7つの色に 分かれて見えるから、とてもキレイだよね!ありがとう、パパ!

^C
 Assistant> Bye!



こんな感じで親子の会話もできます。毎回違う質問をしてくれて、それに対して丁寧に答えてくれます。

ただ2回目はなぜかパパが敬語っぽい話し方をしていて、かと思ったらさっちゃんは「さっちゃん」と呼びかけお前は誰だ、状態になったし、 最後にパパは「さっちゃん」と呼びかけてるにも関わらず最後に「ありがとう、パパ」ということでまたお前は誰だ、になってます。

最後のところとかは立場の指定が軽視されて最初のテーマの情況から、自分自身で親子の会話を両方行ってしまっているような状態だと思います。

この辺プロンプトが難しい。。。

まとめ

勝手に話が進んでいくのは面白いですが、 議論させると割りとお互いの歩み寄り率が高くてちょっとその辺議論としてはつまらないものになりがちです。

ChatGPTがそういうふうに寄せられているから仕方ないところだとは思いますが、 実際に自分がユーザーとして尋ねる際にもそういった自分に同調しがちな相手だということは頭にちょっと入れておいたほうが良いかも、とも。

テーマをもっと議論しがいのあるものにしたり、立場も話し方や態度などを詳細に決めたりするとまたおもしろものも出来るかもしれません。

また今回あまり試してませんが、temperaturetop_ppresence_penaltyfrequency_penaltyなどの値を 変えればまた違う雰囲気になるかと思います。 (これらはchagtpt-prompt-wrapperではコマンド作成時であればコマンドのテーブルにてこれらの値を設定可能です。)

議論だけでなく最後みたいなロールプレイも勝手に進めてくれるので色々遊べそう。

Sponsored Links
  1. 正確には$XDG_CONFIG_HOMEが設定されていればその中のcg/config.toml

Sponsored Links

« git-gpt-commit: ChatGPTにGitのcommitを書かせる GNU/BSDでのprintfでの文字列のゼロパディングの違い »

}