GPT-4o同士で会話して会議を代行するプログラムを作る（プロト版）

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/3ec95047-ec6f-5f23-60e0-5de63c7d63f9.png)

# 趣旨
AI同士で会話する方法はいくつか世に紹介されているが、自分が求める機能とは異なる部分もあるため、理想とするプログラムを自分で作ってみることにした。

# 目的
AIに会議を丸投げして楽したい。

# 環境
- Windows 11
- Ruby 3.3.1
- ChatGPT API（モデルはGPT-4oを指定）

# 基本的なアプローチ
会話する人のペルソナを作り、ペルソナを通じてChatGPTに質問します。ChatGPTからの回答をペルソナの発言（意見）として扱います。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/713d681c-fbb4-924d-d41a-191e41f23073.png)

次に別のペルソナを作り、同様にChatGPTに質問します。この時の質問は「前のペルソナの発言についてどう思うか」という内容にします（ここが肝）。得た回答は先程と同様に質問したペルソナの発言として扱います。
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/0ed5af69-ad39-0c2e-ee1a-0ad15cf63a0c.png)

この流れにおけるChatGPTとのやりとりはバックエンド処理になるので、一見するとペルソナ同士が会話しているように見えるって寸法です。
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/6eb34bb2-3181-c895-9a85-d5ac7c26d090.png)

# 今回のシナリオ
「きりたん」と「めたん」という名前のペルソナが、地球温暖化について議論するっていう設定で試してみます。

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/fb0922a7-c222-319a-1b0e-d2294323ce0a.png)

# ステップ1：前のペルソナの最後の発言のみChatGPTに見解を求める
まずは基本的なアプローチで示した通りに作ってみます。この方法で抑えておくポイントは、「ChatGPTに見解を求める内容は、前のペルソナの最後の発言のみ」ということです。

### 処理の流れ
- きりたんがChatGPTに質問をする
    - ChatGPTからの回答を、きりたんの意見として扱う
- きりたんの意見（実際はChatGPTからの回答）に対して、どう思うかの見解を、めたんがChatGPTに対して質問する
    - ChatGPTからの回答を、めたんの意見として扱う
- この流れをそれぞれ5回発言するように繰り返す 

### 処理イメージ

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/5bb0d43b-088e-0b3b-b240-1a8f34449606.png)

![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/d3df0b23-4630-2f15-0a3c-35a159c82e23.png)

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/3b2a8b1f-eb8e-d1c8-486e-3ca5a75e6a29.png)

### プログラム
```ruby:main.rb
class Main 
  # ChatGPT API接続サービス
  # 長すぎる回答を避けるためにChatGPTの最大出力文字数を200文字にする
  gpt_service = GptService.new(max_output_length: 200)

  # 会話する人
  metan = Person.new(name: "めたん", gpt_service: gpt_service)
  kiritan = Person.new(name: "きりたん", gpt_service: gpt_service)

  # 最初の発言
  message = kiritan.think_and_speak(message: "地球温暖化について、あなたの考えを聞かせて")
  puts "#{kiritan.name}: #{message}"

  # 議論をそれぞれ5回繰り返す
  5.times do
      message = metan.think_and_speak(message: "「#{message}」という意見について、あなたの考えをもとに議論して")
      puts "#{metan.name}: #{message}"
      
      message = kiritan.think_and_speak(message: "「#{message}」という意見について、あなたの考えをもとに議論して")
      puts "#{kiritan.name}: #{message}"
  end
end
```

```ruby:gpt_service.rb
require 'net/http'
require 'uri'
require 'json'

class GptService
  API_KEY = "My API Key".freeze
  SYSTEM_CONTENT = "あなたはAIアシスタントです。最大%s文字で回答してください。".freeze
  API_ENDPOINT  = URI.parse("https://api.openai.com/v1/chat/completions").freeze
  HEADERS = {
    'Content-Type' => 'application/json',
    'Authorization' => "Bearer #{API_KEY}"
  }.freeze

  def initialize(max_output_length: 500)
    # ChatGPTの最大出力文字数
    @max_output_length = max_output_length
  end

  def post_prompt(message:)
    body = build_request_body(message)
    response = send_request(body)
    parse_response(response)
  end

  private

  def system_content
    SYSTEM_CONTENT % @max_output_length
  end

  def build_request_body(message) 
    # 最初にsystemロールを使って回答の最大文字数を伝える
    {
      "model" => "gpt-4o",
      "messages" => [
        { "role" => "system", "content" => system_content},
        { "role" => "user", "content" => message}
      ]
    }.to_json
  end

  def send_request(body)
    http = Net::HTTP.new(API_ENDPOINT.host, API_ENDPOINT.port)
    http.use_ssl = true
    request = Net::HTTP::Post.new(API_ENDPOINT.request_uri, HEADERS)
    request.body = body
    http.request(request)
  end

  def parse_response(response)
    data = JSON.parse(response.body)
    data["choices"].first["message"]["content"]
  end
end
```

```ruby:person.rb
class Person
  attr_accessor :name

  def initialize(name:, gpt_service:)
    @name = name
    @gpt_service = gpt_service
  end

  def think_and_speak(message:)
    @gpt_service.post_prompt(message: message)
  end
end
```
### 結果
<details><summary>長いので展開して表示</summary>

※読みやすいように改行等を追加しています。

```
きりたん:
地球温暖化は深刻な問題であり、気候変動や自然災害の増加、生態系の崩壊など多くの悪影響を引き起こします。
持続可能なエネルギー利用や温室効果ガス削減などの対策が急務です。
一人一人の行動も重要です。
```

```
めたん:
この意見には完全に同意します。
地球温暖化は緊急性の高い問題であり、気候変動や自然災害、生態系の崩壊など深刻な影響が現れています。
持続可能なエネルギーの利用や温室効果ガスの削減は不可欠であり、政府や企業の取り組みが必要です。
しかし、一人一人の行動も非常に重要で、多くの人が小さな努力を積み重ねることで大きな変化を生むことができます。
```

```
きりたん:
あなたの意見に完全に賛同します。
地球温暖化は緊急性が高く、幅広い影響をもたらしています。
持続可能なエネルギーや温室効果ガスの削減は、政府や企業の取り組みに依存するだけでなく、個人の行動も重要です。
小さな努力—例えば、再利用可能な製品の使用、エネルギー効率を高める生活習慣の導入、地元産の食品の選択など—が積 み重なることで、実質的な変化を実現できるからです。
全員が協力する姿勢が求められます。
```

```
めたん:
賛同します。地球温暖化は複雑で深刻な問題であり、全員が協力する姿勢が重要です。
個々の小さな行動が集まれば大きな影響を生むことができます。
特にエネルギー効率の向上や再利用可能な製品の使用、地元産の食品の選択は、個人が手軽に取り組める方法です。
また、政府や企業への圧力を強め、持続可能な政策を推進することも 重要です。
コミュニティ全体で意識を高め、協力し合うことが、持続可能な未来を創る鍵だと思います。
```

```
きりたん:
おっしゃる通り、地球温暖化の問題解決には多角的なアプローチが必要です。
個々の努力も重要ですが、政府や企業の役割も大きいです。
具体的な政策や技術の導入も鍵となるでしょう。
また、教育や意識啓発活動も重要です。
個々の行動と大規模な政策の両輪が、持続可能な未来を築く原動力となります。
例えば、再生可能エネルギーの普及や公共交通の整備なども積極的に推進していくべきです。
```

```
めたん:
おっしゃる通りです。
地球温暖化解決には多層的なアプローチが不可欠です。
個々の努力はもちろん重要ですが、政府や企業の果たす役割も大きいです。
具体的には、再生可能エネルギーの導入、炭素排出量の削減、エネルギー効率化、公共交通の整備などが重要です。
また、教育や意識啓発を通じて広範な市民の協力を得ることも必要です。
個別の行動と大規模な政策が連携することで、持続可能な未来を築く力がより強固になります。
```

```
きりたん:
この意見に全く同意します。
地球温暖化は複雑かつ広範な問題であるため、多層的なアプローチが不可欠です。
個々の努力は基本ですが、政府や企業が持つリソースと影響力を活用することが決定的に重要です。
再生可能エネルギーの普及、炭素排出量の削減策、エネルギーの効率化、公共交通の整備など具体的な行動は、大規模な影響を及ぼします。
また、教育と意識啓発も欠かせない要素であり、これにより個々の行動が促進され、全体的な協力が強化されます。
このように個別の行動と大規模な政策が連 携することで、持続可能な未来を築くための取り組みはより強固なものになると考えます。
```

```
めたん:
賛同します。
地球温暖化の問題は多面的で、多層的なアプローチが求められます。個々の努力は基本ですが、政府と企業のリソースと影響力は非常に重要です。
再生可能エネルギーの普及や炭素排出量の削減、エネルギー効率化、公共交通の整備などは、全体で大きなインパクトをもたらすでしょう。
さらに教育と意識啓発も同様に重要で、個人の行動変容を促進し、総合的な協力を強化できます。
これにより、持続可能な未来への取り組みが一層強化されると考えます。
```

```
きりたん:
賛同します。
多様なアプローチの必要性は明白です。
個々の努力は重要ですが、政府と企業の役割は特に大きいです。
再生可能エネルギーの普及や炭素排出量削減は、大規模なインフラ投資と政策変更が必要です。
公共交通の整備もまた、大規模な社会変革を促進します。
教育と意識啓発も欠かせません。
これにより、個人レベルでの行動 変容が促進され、総合的な協力が図られると考えます。
それによって、持続可能な未来への道が開けるでしょう。
```

```
めたん:
その意見に賛同します。
多様なアプローチが必要であり、特に政府と企業の役割は確かに重要です。
再生可能エネルギーの普及や炭素排出量削減は、大規模なインフラ投資と政策変更が不可欠です。
公共交通の整備も、都市の効率性と環境負荷の低減に貢献します。
また、教育と意識啓発は個々の行動を変える原動力になります。
総合的な協力により、持続可能な未来への道が確実に開けると思います。
```

```
きりたん:
この意見に全面的に賛同します。
持続可能な未来を実現するためには、政府と企業の協力が欠かせません。
再生可能エネルギーの普及や炭素排出量削減には、長期的なビジョンと具体的な政策が必要です。
また、公共交通システムの整備は都市の効率性を向上させ、環境への負荷を軽減します。
さらに、教育と意識啓発は人々の行動変容を 促進し、社会全体の持続可能性を高めます。
総合的なアプローチが極めて重要です。
```

</details>

なんか似たようなことをオウム返しで話しているだけで、中身のない悪い会議の見本のようです。
何回か試しましたが、この方法では上手くいきませんでした。

# ステップ2：会話履歴を含めてChatGPTに見解を求める
ステップ1では「前のペルソナの最後の発言のみChatGPTに見解を求める」というやり方でしたが、ステップ2では「これまでの会話履歴を含めてChatGPTに見解を求める」ようにします。このアプローチの方が、ChatGPTとの連続性のある会話を実現するために、広く採用されていると思います。

### 処理の流れ
※太字がステップ1からの変更点

- きりたんがChatGPTに質問をする
    - ChatGPTからの回答を、きりたんの意見として扱う
    - **また質問と回答を履歴に保存する**
- きりたんの意見（実際はChatGPTからの回答）に対して、どう思うかの見解を、めたんがChatGPTに対して**履歴を含めて**質問する
    - ChatGPTからの回答を、めたんの意見として扱う
    - **また質問と回答を履歴に保存する**
- この流れをそれぞれ5回発言するように繰り返す

### 処理イメージ
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/dcc1d379-a161-4db3-49fd-044cdf4cfe12.png)

![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/7835232d-87c7-dcc4-720c-ae4c4284c5f5.png)

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/f26c9963-af94-17f4-1200-6bea76a3069c.png)

### プログラム
まず会話履歴を保存するクラスを作ります。
```ruby:conversation_history.rb
class ConversationHistory
  ROLE_SYSTEM = "system".freeze
  ROLE_USER = "user".freeze
  ROLE_ASSISTANT = "assistant".freeze

  def initialize
    @history = []
  end

  def add_system_message(content:)
    @history << { "role" => ROLE_SYSTEM, "content" => content }
  end

  def add_user_message(content:)
    @history << { "role" => ROLE_USER, "content" => content }
  end

  def add_assistant_message(content:)
    @history << { "role" => ROLE_ASSISTANT, "content" => content }
  end

  def history
    @history
  end

  def last_message
    @history.last["content"]
  end

  def empty?
    @history.empty?
  end
end
```

続いて質問とAPIからの回答を会話履歴に残し、次回APIを呼び出す際に履歴を全部送るように`main.rb`、`gpt_service.rb`、`person.rb`を修正します。

```ruby:main.rb
# 修正後のクラス
class Main 
  # ChatGPT API接続サービス
  # 長すぎる回答を避けるためにChatGPTの最大出力文字数を200文字にする
  gpt_service = GptService.new(max_output_length: 200)

  # 会話する人
  metan = Person.new(name: "めたん", gpt_service: gpt_service)
  kiritan = Person.new(name: "きりたん", gpt_service: gpt_service)

  # 会話履歴保存用
  history = ConversationHistory.new

  # 最初の発言
  kiritan.think_and_speak(message: "地球温暖化について、あなたの考えを聞かせて", conversation_history:history)
  puts "#{kiritan.name}: #{history.last_message}"

  # 議論をそれぞれ5回繰り返す
  5.times do
      metan.think_and_speak(message: "これまでの意見を踏まえてあなたの考えをもとに議論して", conversation_history:history)
      puts "#{metan.name}: #{history.last_message}"
      
      kiritan.think_and_speak(message: "これまでの意見を踏まえてあなたの考えをもとに議論して", conversation_history:history)
      puts "#{kiritan.name}: #{history.last_message}"
  end
end
```

```ruby:gpt_service.rb
# 修正後のクラス
require 'net/http'
require 'uri'
require 'json'

class GptService
  API_KEY = "My API Key".freeze
  SYSTEM_CONTENT = "あなたはAIアシスタントです。最大%s文字で回答してください。".freeze
  API_ENDPOINT  = URI.parse("https://api.openai.com/v1/chat/completions").freeze
  HEADERS = {
    'Content-Type' => 'application/json',
    'Authorization' => "Bearer #{API_KEY}"
  }.freeze

  def initialize(max_output_length:)
    # ChatGPTの最大出力文字数
    @max_output_length = max_output_length
  end

  def post_prompt(message:, conversation_history:)
    body = build_request_body(message, conversation_history)
    response = send_request(body)

    # 回答を会話履歴に保存
    add_assistant_message(response, conversation_history)
  end

  private

  def build_request_body(message, conversation_history) 
    # 最初にsystemロールを使って回答の最大文字数を伝える
    conversation_history.add_system_message(content: system_content) if conversation_history.empty?
    # 質問を会話履歴に保存
    conversation_history.add_user_message(content: message)

    # 会話履歴を全部ChatGPTに入力する
    {
      "model" => "gpt-4o",
      "messages" => conversation_history.history
    }.to_json
  end

  def add_system_message(conversation_history)
    conversation_history.add_system_message(content: system_content)
  end

  def system_content
    SYSTEM_CONTENT % @max_output_length
  end

  def send_request(body)
    http = Net::HTTP.new(API_ENDPOINT.host, API_ENDPOINT.port)
    http.use_ssl = true
    request = Net::HTTP::Post.new(API_ENDPOINT.request_uri, HEADERS)
    request.body = body
    http.request(request)
  end

  def add_assistant_message(response, conversation_history)
    response_content = parse_response(response)
    conversation_history.add_assistant_message(content: response_content)
  end

  def parse_response(response)
    data = JSON.parse(response.body)
    data["choices"].first["message"]["content"]
  end
end
```

```ruby:person.rb
# 修正後のクラス
class Person
  attr_accessor :name

  def initialize(name:, gpt_service:)
    @name = name
    @gpt_service = gpt_service
  end

  def think_and_speak(message:, conversation_history:)
    @gpt_service.post_prompt(message: message, conversation_history: conversation_history)
  end
end
```

### 結果
<details><summary>長いので展開して表示</summary>

※読みやすいように改行等を追加しています。

```
きりたん:
地球温暖化は深刻な問題です。
温室効果ガスの増加が主な原因で、気温上昇、海面上昇、異常気象などの影響があります。
持続可能なエネルギー利用や節電、植林など、個人や社会レベルでの対策が重要だと思います。
```

```
めたん:
地球温暖化の対策には多角的な取り組みが必要です。
まず、温室効果ガスの排出を減らすためには、再生可能エネルギーの採用やエネルギー効率改善が重要です。
個人の行動でも、節電やリサイクル、低炭素交通の利用が役立ちます。
また、植林や自然保護を推進することで、二酸化炭素の吸収能力を高めることも有効です。
さらに、政策の面で政府や自治体の役割は大きいです。
炭素税や排出取引制度などの経済的インセンティブが、企業や個人の行動変化を引き起こします。
国際的な協力も不可欠で、パリ協定などの取り組みを強化する必要があります。
技術革新も大きな鍵です。新たなエネルギー技術やカーボンキャプチャー、ストレージ（CCS）技術が進展すれば、温暖化の進行を遅らせることが可能です。
教育や啓発活動を通じて、広く社会の意識を高めることも大切です。
総じて言えば、地球温暖化は一国や一部門だけで解決する問題ではなく、全地球的な協力と行動が求められます。
```

```
きりたん:
地球温暖化は多面的な問題であり、その解決には社会全体の協力が不可欠です。
以下にいくつかの重要な視点を示します。

1. **再生可能エネルギーへのシフト**:
   - **利点**: 石炭や石油などの化石燃料に依存しないことで、温室効果ガスの排出を大幅に削減できる。
   - **課題**: 初期投資が高く、技術・インフラの整備が必要。特に経済的な問題で後れを取っている地域での導入が難しい。

2. **個人の行動変革**:
   - **利点**: 小さな行動でも集まれば大きな効果を生む。例えば、エネルギー効率の高い電化製品の使用、リサイクルの促進、公共交通の利用など。
   - **課題**: 個々人の意識改革には時間がかかる。そして全ての人が平等に貢献できるわけではない。

3. **政策と国際協力**:
   - **利点**: 炭素税や排出量取引制度は具体的な経済的インセンティブを提供し、企業や個人を動かす強力な手段。
   - **課題**: 国によって経済状況や優先事項が異なるため、国際的な合意と実施が難しい。

4. **技術革新**:
   - **利点**: 新エネルギー技術やカーボンキャプチャー・ストレージ（CCS）技術が発展すれば、温室効果ガスの削減に大きな進展が見込まれる。
   - **課題**: 研究開発には時間と巨額の資金が必要で、実用化するまでの道のりが長い。

5. **教育と啓発**:
   - **利点**: 若い世代からの教育や広範な啓発活動を通じて、地球温暖化の問題を広く認識させることができる。
   - **課題**: 教育や啓発活動が形になるまでに時間がかかり、即効性には欠ける。

以上を総括すると、地球温暖化対策には短期的な行動と長期的な視野が両立することが求められます。即効性のある政策や技術の導入とともに、持続可能な未来を築くため の教育と国際協力が欠かせません。
```

```
めたん:
地球温暖化に対する対策を議論するうえで、以下のポイントに焦点を当てることが重要だと考えます。

1. **再生可能エネルギーの普及加速**:
   - **メリット**: 炭素排出が少なく、環境に優しい。化石燃料からの脱却を促進できる。
   - **デメリット**: 初期コストが高く、特に発展途上国では導入が難しい。周波数安定化や季節変動など技術的な課題もある。

2. **個人の行動変革**:
   - **メリット**: 小さな努力の積み重ねが社会全体の大きな変化を引き起こす。例えば、エネルギー効率の高い機器の使用や公共交通機関の利用。
   - **デメリット**: 個々人の意識や行動を変えるのは簡単ではなく、時間がかかる。浸透率も地域や文化によって異なる。

3. **政策と国際協力**:
   - **メリット**: 法規制や経済的インセンティブは強力な動機付けとなる。国際協力により地球規模での取り組みが可能。
   - **デメリット**: 政治的な対立や経済的不均衡が障害となり得る。特に、発展途上国の利益との調整が必要。

4. **技術革新**:
   - **メリット**: 新技術の開発により、温室効果ガス削減の効率が大幅に向上する。例として、カーボンキャプチャー・ストレージ（CCS）技術や次世代電池技術が挙げ られる。
   - **デメリット**: 研究開発には多大な時間と資金が必要。実用化するまでの不確実性が存在する。

5. **教育と啓発**:
   - **メリット**: 持続可能な未来を築くために、次世代への教育が不可欠。啓発活動によって一般市民の意識を高めることができる。
   - **デメリット**: 教育の効果が現れるまでに時間がかかる。資源や人材の投入が必要。

議論の中心としては、「どの施策も単独では不十分で、包括的なアプローチが最も効果的である」という点に集約されます。具体的には、再生可能エネルギーへの移行を政 策支援で加速しつつ、技術革新を推進、教育と啓発で意識を高め、国際協力を通じて地球規模での取り組みを強化する方向性が重要です。それぞれの分野での連携が、持続 可能な地球環境の実現に不可欠です。
```

```
きりたん:
地球温暖化への対策として、持続可能性と効率性を両立させるための具体的な戦略が必要です。以下の五つの視点を踏まえ、包括的なアプローチを提案します。

1. **再生可能エネルギーへの促進**:
   - **メリット**: 持続可能で長期的なエネルギー供給が可能、温室効果ガスの削減。
   - **デメリット**: 初期コストと技術的な課題。
   - **戦略**: 政府の補助金や税制優遇を活用し、初期投資の負担を軽減。技術研究を促進し、企業と学術機関の連携を強化。

2. **個人の行動変革**:
   - **メリット**: 小さな行動が集まれば大きなインパクト。
   - **デメリット**: 行動変容には時間がかかる。
   - **戦略**: 環境意識を高める教育キャンペーンやエコポイント制度などのインセンティブを導入。学校教育で持続可能なライフスタイルの重要性を強調。

3. **政策と国際協力**:
   - **メリット**: 法的拘束力と経済的インセンティブが行動を促進。
   - **デメリット**: 政治的対立と経済的不均衡の調整が必要。
   - **戦略**: パリ協定などの国際協定を強化し、具体的かつ実行可能な目標を設定。先進国は発展途上国に技術支援や資金援助を行う。

4. **技術革新**:
   - **メリット**: 効率的な温室効果ガス削減が可能。
   - **デメリット**: 研究開発に時間と資金が必要。
   - **戦略**: 公共および民間投資を増やし、研究開発を支援。成功事例の普及とスケールアップを行うための制度設計を行う。

5. **教育と啓発**:
   - **メリット**: 持続可能な未来を創造する基礎。
   - **デメリット**: 効果が出るまでに時間がかかる。
   - **戦略**: 学校教育に環境問題を組み込み、学生の意識を高める。地域社会でのワークショップやイベントを通じて、広範な啓発活動を展開する。

議論のまとめとして、これらの戦略を統合的に進めるためには、各ステークホルダー—政府、企業、個人、市民社会、国際機関—が協力し合うことが不可欠です。持続可能な エネルギーシステムの構築、個人の意識変革、政策の整備、技術革新、教育の強化を同時に進めることで、地球温暖化対策の効果を最大化することができると考えます。
```

```
めたん:
地球温暖化対策の議論をさらに具体化するために、各視点に基づいた施策を現実的にどう実行していくかを考えます。

1. **再生可能エネルギーへの促進**:
   - **施策**: 政府は再生可能エネルギープロジェクトに対する補助金や税優遇措置を拡大し、地域ごとのエネルギー特性に応じた最適なソリューションを推奨します。これにより、太陽光発電、風力発電、水力発電など多様なエネルギー源の普及が期待できます。
   - **実行例**: スマートグリッド技術を導入し、エネルギー効率を最大化する都市モデルを試験的に作成し、その成功例を他の都市へ展開。

2. **個人の行動変革**:
   - **施策**: 行動変容を促すための意識改革キャンペーンを展開し、エコポイントシステムを導入。市民が節電や公共交通機関の利用、リサイクルなどのエコ活動を行うとポイントが溜まり、特典や地域通貨と交換できる。
   - **実行例**: 地元の学校と連携し、地域のエネルギー消費削減コンテストを開催。優勝校や優秀な家庭は市から表彰されるなどのインセンティブを提供。

3. **政策と国際協力**:
   - **施策**: 国際協定の遵守を確保するためのモニタリングと報告システムを強化し、違反に対する罰則や押し上げるための支援を明確化。発展途上国に対する技術移転を促進するためのグローバルファンドを設立。
   - **実行例**: 政府間だけでなく、企業とNGOが共に参加する国際会議を定期開催し、最新の技術や取り組みを共有し合うプラットフォームを提供。

4. **技術革新**:
   - **施策**: 公的研究機関や大学との連携を強化し、再生可能エネルギー技術やカーボンキャプチャー・ストレージ（CCS）技術の開発を推進。研究開発への投資を増や すとともに、成功した技術の迅速な市場投入を支援。
   - **実行例**: 成果を評価するための技術コンテストを開催し、企業やスタートアップが新技術を競う場を提供。優勝者には大規模な実証実験の機会を提供する。      

5. **教育と啓発**:
   - **施策**: 環境教育を学校カリキュラムに組み込み、環境問題の理解を深める授業を拡充。地域イベントやメディアキャンペーンを通じて一般市民の意識を高める。  
   - **実行例**: 環境問題に関する公開講座やワークショップを定期開催し、地域コミュニティや企業が参加できる形で運営。成功事例をメディアで広く報道。

結論として、持続可能な地球環境を実現するためには、これらの施策を一つの包括的な戦略として連携させる必要があります。各分野が単独で機能するのではなく、互いに 補完し合うことで、最大の効果を上げることができると考えます。例えば、技術革新が進めば、政策や個人の行動変革も進みやすくなります。教育と啓発が進めば、再生可 能エネルギーへの移行もスムーズに進みます。地球規模の協力を強化するための努力が、これからの成功の鍵となるでしょう。
```

```
きりたん:
地球温暖化対策を実効性のあるものとするためには、具体的な行動計画と各セクター間の連携が重要です。以下にこれまでの意見を踏まえた具体的な議論案を示します。

### 1. 再生可能エネルギーの普及
**議論案**: 再生可能エネルギー利用促進のために、政府補助金の拡充と公共インフラの整備を優先するべきです。加えて、民間投資を呼び込むための税制優遇措置も設け る必要があります。
**質問**: 具体的にどのエネルギー源を優先すべきか。また、地域ごとに最適なエネルギー源をどう選定するか。

### 2. 個人行動の変革
**議論案**: エコポイントシステムの導入で個人の環境行動を促進する。学校カリキュラムに環境教育を組み込み、早期から持続可能な生活習慣を教える。
**質問**: エコポイント以外にどのようなインセンティブが有効か。また、どの年齢層や地域に対してどのような教育方法が最も効果的か。

### 3. 政策と国際協力
**議論案**: 国際協定に基づいた温室効果ガス排出削減目標を各国が厳守するための監視システムを強化し、違反した場合のペナルティを明確化する。発展途上国への技術 移転や資金援助を充実させる。
**質問**: 発展途上国への支援をどのように効果的に行うか。また、国際的な協力体制を強化するための具体的な方法は何か。

### 4. 技術革新
**議論案**: 公私連携で技術開発を促進し、特にカーボンキャプチャー・ストレージ（CCS）技術や次世代エネルギー技術に注力するべき。技術コンテストを開催し、優秀な技術に重点的に投資する。
**質問**: どの技術に最も期待を寄せるべきか。また、技術開発のスピードを上げるためにはどのような支援策が必要か。

### 5. 教育と啓発
**議論案**: 広範な啓発活動を通じて市民の環境意識を高める。学校教育に環境問題を重視したカリキュラムを設置し、地域社会での環境ワークショップを頻繁に開催する 。
**質問**: 大衆メディアをどのように活用して環境意識を高めるか。また、具体的な啓発活動の内容や方法はどのようなものが効果的か。

### 全体的な連携の議論
**総合議論案**: 各分野が単独で動くのではなく、相互に連携することで効果を最大化するべきです。例えば、技術革新が進むと再生可能エネルギーの普及も進み、政策の 有効性も高まります。教育啓発が進むと個人の行動変化も促進され、全体の取り組みが加速されます。
**質問**: 効果的な全体連携を実現するために、どのような組織やプラットフォームが必要か。また、これらの連携を具体的に推進するリーダーシップはどこに求めるべき か。

#### 議論の目的
この場での議論の最終目的は、地球温暖化対策を効果的に実行するための具体的なアクションプランを策定することです。戦略的かつ具体的な計画を立てることで、全ての ステークホルダーが協力し合い、一丸となって取り組むことができるでしょう。
```

```
めたん:
地球温暖化対策の包括的な議論をさらに進めるためには、具体的なアクションプランを作成し、実行可能性を高めるための連携が不可欠です。以下に、これまでの意見を踏まえた具体的な施策とその実行方法について議論します。

### 1. 再生可能エネルギーの普及
**施策**: 再生可能エネルギーへの移行を促進するために、政府が特定の再生可能エネルギープロジェクトに対する補助金を増やし、民間企業には税制優遇措置を提供しま す。同時に、インフラ整備と技術普及を推進します。
**質問**:
1. どの再生可能エネルギー（太陽光、風力、水力など）に最も注力するべきか。
2. 地域ごとの特性に応じたエネルギー源をどのように選定すべきか。

### 2. 個人行動の変革
**施策**: エコポイントシステムを導入して個人の環境行動を促進し、学校教育に環境問題を組み込むことで早期教育を実施します。また、公共交通機関の利用促進や省エ ネ家電の普及を進めます。
**質問**:
1. エコポイントシステム以外に、どのようなインセンティブが有効か。
2. 環境教育をどの年齢層や地域に対してどのように進めるべきか。

### 3. 政策と国際協力
**施策**: 国際協定に基づいたCO2排出削減目標を設定し、各国が遵守するための監視システムを強化します。発展途上国には技術移転と資金援助を行い、共に地球温暖化を防ぐ取り組みをします。
**質問**:
1. 発展途上国への支援を最も効果的に行う方法とは何か。
2. 国際協力体制を強化するためには具体的にどのような方法が有効か。

### 4. 技術革新
**施策**: 公私連携で技術開発を支援し、特にカーボンキャプチャー・ストレージ（CCS）技術や次世代エネルギー技術に注力します。技術コンテストを開き、優秀な技術には重点投資を行います。
**質問**:
1. どの技術に最も期待を寄せるべきか。
2. 技術開発を加速するためにどのような支援が必要か。

### 5. 教育と啓発
**施策**: 環境問題をテーマにした学校カリキュラムを拡充し、地域社会での啓発活動を強化します。大衆メディアを活用して環境意識を高め、市民参加型のイベントを開 催します。
**質問**:
1. 大衆メディアをどのように活用して環境意識を高めるか。
2. 具体的な啓発活動の内容や方法で、最も効果的なものは何か。

### 全体的な連携と実行
**議論案**: 各分野の施策が相互に補完し合う形で連携し、全体としての効果を最大化する必要があります。政府、企業、学校、市民団体、国際機関など各ステークホルダ ーが協力し、具体的なアクションプランを実行に移します。
**質問**:
1. 効果的な全体連携を実現するために、どのような組織やプラットフォームが必要か。
2. これらの連携を具体的に推進するリーダーシップはどの組織が担うべきか。

### 議論の目的
**最終目標**: 地球温暖化対策を効果的に実行するための具体的なアクションプランを策定し、持続可能な地球環境を実現する。各セクターが連携し、総合的かつ継続的な 取り組みを行うことで、最大の効果を上げる。

これらの議論を通じて、多様な視点から具体的な施策とその実行方法を検討し、実効性のある地球温暖化対策を策定することが重要です。全てのステークホルダーが一丸と なって取り組むことで、地球規模での問題解決が進むでしょう。
```

```
きりたん:
地球温暖化対策を効果的に進めるためには、具体的かつ実行可能なアプローチをさらに細分化し、多面的な取り組みが必要です。以下に、それぞれの視点からの具体的な施策とその共通点を踏まえた連携について議論します。

### 1. 再生可能エネルギーの普及
**施策提案**:
- 国家および地方自治体は再生可能エネルギープロジェクトに資金を提供し、投資インセンティブを設ける。また、公共インフラの整備を進め、エネルギー供給の安定化を 図る。
- 地域特性に応じたエネルギー計画を策定し、地元の企業やコミュニティと連携してプロジェクトを推進する。

**質問**:
1. 太陽光、風力、水力のうち、具体的にどのエネルギー源に最も注力すべきか。
2. 地域ごとの特性をどう評価し、最適なエネルギー源を選定すべきか。また、どのように地元企業や住民の協力を得るか。

### 2. 個人の行動変革
**施策提案**:
- エコポイントシステムを導入し、個人の環境行動を評価し、ポイント制度でインセンティブを提供する。
- 学校教育に環境に関するカリキュラムを加え、子供たちに早期から持続可能な生活習慣を教える。

**質問**:
1. エコポイントシステムの他には、どのようなインセンティブが効果的か。
2. 環境教育をどの年齢層や地域に対して、どのように実施すべきか。また、保護者や地域コミュニティの関与をどう促すか。

### 3. 政策と国際協力
**施策提案**:
- パリ協定などの国際協定に基づくCO2排出削減目標を設定し、その達成状況を監視するシステムを構築する。
- 発展途上国に対する技術移転と資金援助を通じて、グローバルな協力体制を強化する。

**質問**:
1. 発展途上国への支援をどのように効果的に行うか。技術移転の具体的な方法や資金援助の仕組みは？
2. 国際協力をどのように強化し、グローバルな問題解決に向けた実効性を持たせるか。

### 4. 技術革新
**施策提案**:
- 公私連携で研究開発を推進し、特にカーボンキャプチャー・ストレージ（CCS）技術や次世代エネルギー技術の開発に注力する。
- 技術コンテストを開催し、優れた技術に対して重点的な投資を行う。

**質問**:
1. どの技術に最も期待を寄せるべきか。
2. 技術開発のスピードを上げ、実用化を促進するための支援策はどのような形が効果的か。

### 5. 教育と啓発
**施策提案**:
- 環境問題に関する教育カリキュラムを拡充し、地域社会での環境ワークショップや市民参加型イベントを頻繁に開催する。
- 大衆メディアを活用して、環境意識を高める啓発キャンペーンを展開する。

**質問**:
1. 大衆メディアをどう活用して効果的に環境意識を高めるか。
2. 市民参加型イベントやワークショップの内容や方法はどのようなものが最も効果的か。

### 全体的な連携と実行
**総合議論案**: 各分野の施策が相互に補完し合うような連携を実現するために、以下のような枠組みを提案します：
- **統合プラットフォーム**: 各ステークホルダー（政府、企業、学校、市民団体、国際機関）が参加する統合プラットフォームを設立し、情報共有・連携を強化。       
- **リーダーシップ**: このプラットフォームのリーダーシップを担う主体（例えば、国連や地域連合）を明確化し、各国間や地域間での連携を推進する役割を持たせる。 

**質問**:
1. 効果的な全体連携を実現するための具体的な組織やプラットフォームは何か？
2. これらの連携を具体的に推進するリーダーシップはどの組織が担うべきか？

### 議論の目的
**最終目標**: 地球温暖化対策を効果的に実行するための具体的なアクションプランを策定し、実行に移すことです。各セクターが連携し、持続可能な地球環境を実現する ために継続的な取り組みを行うことで、最大の効果を上げます。

これらの議論を通じて、従来の意見を具体的なアクションに落とし込むための実行可能な計画を策定し、具体的な成果を追求します。それにより、全てのステークホルダー が一丸となって取り組み、地球温暖化対策を前進させる手助けとなるでしょう。
```

```
めたん:
地球温暖化対策を効果的に実行するには、以下の具体的なアクションと連携が重要です。これまでの意見を踏まえた施策と提案について議論し、それらを具体的にどう実行するかを考えます。

### 1. 再生可能エネルギーの普及
**施策提案**:
- **資金援助とインセンティブ**: 政府が再生可能エネルギープロジェクトに対する補助金を増やし、税制優遇措置を導入する。
- **地域特性の活用**: 地域ごとの特性に応じたエネルギー源（太陽光、風力、水力など）の選定と導入を推進。

**議論**:
- どうやって地域ごとの最適なエネルギー源を選定し、地元の企業や住民の協力を得るか。
- 具体的なインセンティブ（税制優遇、補助金など）はどのように設計すべきか。

### 2. 個人の行動変革
**施策提案**:
- **エコポイントシステム**: 個人の環境行動を評価し、ポイント制度でのインセンティブを提供。
- **教育カリキュラムの導入**: 学校教育に環境問題を組み込み、早期から持続可能なライフスタイルを教える。

**議論**:
- エコポイントシステムの他に、どのようなインセンティブが個人行動の変革に有効か。
- 環境教育を効果的に進めるために、どのようなプログラムや教材が必要か。

### 3. 政策と国際協力
**施策提案**:
- **国際監視システムの構築**: CO2排出削減目標の達成状況を監視し、違反に対するペナルティを設ける。
- **技術移転と資金援助**: 発展途上国に対する技術移転と資金援助を強化し、グローバルな協力体制を築く。

**議論**:
- 発展途上国への技術移転をどのように行うべきか。また、資金援助の具体的な仕組みはどうするか。
- 国際協力を強化するために、どのような取り組みやプラットフォームが必要か。

### 4. 技術革新
**施策提案**:
- **公私連携での研究推進**: 公私連携で技術開発を支援し、特にカーボンキャプチャー・ストレージ（CCS）技術や次世代エネルギー技術に注力する。
- **技術コンテスト**: 技術コンテストを開催し、優秀な技術に重点的な投資を行う。

**議論**:
- どの技術に最も期待を寄せるべきか。
- 技術開発のスピードを上げ、実用化を促進するための支援策はどのようなものが効果的か。

### 5. 教育と啓発
**施策提案**:
- **教育カリキュラムの拡充**: 環境問題に関する教育カリキュラムを拡充し、地域社会での啓発イベントを強化。
- **メディア活用**: 大衆メディアを利用して環境意識を高める啓発キャンペーンを展開する。

**議論**:
- 大衆メディアをどのように活用して効果的に環境意識を高めるか。
- 市民参加型イベントやワークショップの内容や方法で、最も効果的なものは何か。

### 全体的な連携と実行
**総合議論案**: 各分野の施策が相互に補完し合うように、統合的なプラットフォームを設立し、ステークホルダー間の連携を強化します。これを通じて、具体的なアクシ ョンプランを策定し、持続可能な地球環境を実現します。

**議論**:
- 効果的な全体連携を実現するための具体的な組織やプラットフォームは何か。
- 連携を具体的に推進するリーダーシップはどの組織が担うべきか。

### 議論の目的
**最終目標**: 地球温暖化対策を効果的に実行するための具体的なアクションプランを策定し、持続可能な地球環境を実現する。各セクターが連携し、具体的な成果を挙げ るために継続的な取り組みを行うことが求められます。

議論によって、各分野の具体策をさらに詳細に精査し、実行可能な計画を策定します。それにより、全てのステークホルダーが一丸となって取り組み、地球温暖化対策を前 進させるためのロードマップを描くことが可能です。
```

```
きりたん:
ここまでの意見を基に、地球温暖化対策をさらに具体化し、実行可能な戦略を議論します。

### 再生可能エネルギーの普及
**提案**:
1. **資金援助とインセンティブ**:
   - **政府**は補助金や税制優遇を提供し、民間企業の再生可能エネルギープロジェクトへの投資を促進します。
   - 地域特性に応じたエネルギー（太陽光、風力、水力）の利用を推奨し、地域ごとに最適なエネルギー源を選定します。

**議論**:
- **質問**: 地域ごとの特性を評価し、最適なエネルギー源をどのように選定するか。
- **考案**: 地元企業や住民を巻き込み、地域エネルギー委員会を設立し、地域固有のデータを基に決定。

### 個人の行動変革
**提案**:
1. **エコポイントシステム**:
   - 個人の環境行動をエコポイントとして評価し、ポイントを公共サービスや商品と交換可能にします。

2. **環境教育**:
   - 教育カリキュラムに環境問題を組み込み、持続可能なライフスタイルを教える。
   - 地域ワークショップや家庭でのエコ活動奨励プログラムを実施。

**議論**:
- **質問**: エコポイントシステム以外の有効なインセンティブは何か。
- **考案**: 電気料金の割引や公共交通機関の利用割引など、現実的な利点を提供。

### 政策と国際協力
**提案**:
1. **国際監視システム**:
   - パリ協定などの国際協定に基づき、CO2排出削減目標の達成状況をモニタリング。

2. **技術移転と資金援助**:
   - 発展途上国に対して技術移転と資金援助を行い、協力体制を強化。

**議論**:
- **質問**: 発展途上国への技術移転をどのように効果的に行うか。
- **考案**: 国際技術連携プログラムを設立し、技術トレーニングやハンズオン教育を実施。

### 技術革新
**提案**:
1. **公私連携の研究推進**:
   - 次世代エネルギー技術やカーボンキャプチャー・ストレージ（CCS）技術の開発を公私連携で進める。

2. **技術コンテスト**:
   - 優れた技術に対して重点的な投資を行う技術コンテストを開催。

**議論**:
- **質問**: どの技術に最も期待を寄せるべきか。
- **考案**: クリーンエネルギー技術、バッテリーストレージ技術、およびCCS技術が期待される。

### 教育と啓発
**提案**:
1. **教育カリキュラムの拡充**:
   - 学校教育に環境問題を重視したカリキュラムを取り入れ、地域社会での啓発活動も推進。

2. **メディアキャンペーン**:
   - 大衆メディアを活用し、環境意識を向上させるキャンペーンを展開。

**議論**:
- **質問**: メディアをどのように活用して効果的に環境意識を高めるか。
- **考案**: ドキュメンタリー、ソーシャルメディアキャンペーン、インフルエンサーとの連携を活用。

### 全体的な連携と実行
**提案**:
1. **統合プラットフォーム**:
   - 各ステークホルダー（政府、企業、学校、市民団体、国際機関）が参加する統合プラットフォームを設立。
   - 情報共有と連携を強化。

2. **リーダーシップ**:
   - 国連や地域連合がリーダーシップを担い、各国や地域での連携を推進。

**議論**:
- **質問**: 効果的な全体連携を実現するために、どのような組織やプラットフォームが必要か。
- **考案**: 「地球環境パートナーシップ」などの名前で、マルチステークホルダーによるグローバルプラットフォームを設立し、具体的なアクション計画を策定。       

### 議論の目的
**最終目標**: 地球温暖化対策を効果的に実行するため、具体的なアクションプランを策定し、各分野が連携して持続可能な地球環境を実現します。全てのステークホルダ ーが協力し、継続的な取り組みを進めることが不可欠です。

このように、詳細な議論を通じて実行可能な計画を策定し、全てのステークホルダーが一丸となって地球温暖化対策を推進することで、具体的な成果を挙げられるでしょう 。
```
</details>

いい感じなのではないでしょうか。200文字以内で回答という条件は無視されましたが、きちんと話を前に進めて内容を詳細化し、質問や課題を提起して、議論のゴールも示せています。
「この会議ってどこに向かっているんだっけ？」という、人間が陥りがちなやらかしが無いのは良いですね。

# ステップ3：ペルソナに役割を設定し、会議の最後に要約と結論をまとめる
ChatGPTに役割を設定するという、プロンプト入力の定番テクニックを使って、ペルソナに役割を設定します。また最後に要約と結論を出力して、話し合いの内容を簡単に把握できるようにします。
今回は、

- きりたん：きりたんぽ生産者
- めたん：気象学者

という役割を設定します。

なお、ふたりのどちらかが結論をまとめると、自分に有利な内容を出力するかもしれないので、最後のまとめは別のペルソナで行います。
新たに「ずん子」というペルソナを作り、司会者の役割を設定します。ずん子が要約と結論をまとめる作業を担います。

### 処理の流れ
※太字がステップ2からの変更点

- きりたんがChatGPTに**きりたんぽ生産者の役割を設定して**質問をする
    - ChatGPTからの回答を、きりたんの意見として扱う
    - また質問と回答を履歴に保存する
- きりたんの意見（実際はChatGPTからの回答）に対して、どう思うかの見解を、めたんがChatGPTに対して**気象学者の役割を設定し**、履歴を含めて質問する
    - ChatGPTからの回答を、めたんの意見として扱う
    - また質問と回答を履歴に保存する
- この流れをそれぞれ5回発言するように繰り返す
- **ずん子がChatGPTに司会者の役割を設定し、会議の要約と結論をまとめるよう依頼する**

### 処理イメージ
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/85697e3e-bb47-d906-a86c-a13facf1bf9c.png)

![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/0b1dfd5a-77f7-3e75-4562-bc5dde35294c.png)

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/b7215f2b-f698-f692-4467-6321368a5b3d.png)

### プログラム
ChatGPTに役割を設定できるように修正します。
```ruby:main.rb
# 修正後のクラス
class Main 
  # ChatGPT API接続サービス
  # 長すぎる回答を避けるためにChatGPTの最大出力文字数を200文字にする
  gpt_service = GptService.new(max_output_length: 200)

  # 会話する人に役割を設定
  metan = Person.new(name: "めたん", role: "気象学者", gpt_service: gpt_service)
  kiritan = Person.new(name: "きりたん", role: "きりたんぽ生産者", gpt_service: gpt_service)

  # 会話履歴保存用
  history = ConversationHistory.new

  # 最初の発言
  kiritan.think_and_speak(message:"地球温暖化について、あなたの考えを聞かせて", conversation_history:history)
  puts "#{kiritan.name}: #{history.last_message}"

  # 議論をそれぞれ5回繰り返す
  5.times do
      metan.think_and_speak(message:"これまでの意見を踏まえてあなたの考えをもとに議論して", conversation_history:history)
      puts "#{metan.name}: #{history.last_message}"
      
      kiritan.think_and_speak(message:"これまでの意見を踏まえてあなたの考えをもとに議論して", conversation_history:history)
      puts "#{kiritan.name}: #{history.last_message}"
  end

  # 議論の要約と結論
  zunko = Person.new(name: "ずん子", role: "司会者", gpt_service: gpt_service)
  zunko.think_and_speak(message:"この議論の要約と結論をまとめて", conversation_history:history)
  puts "#{zunko.name}: #{history.last_message}"
end
```

```ruby:gpt_service.rb
# 修正後のクラス
require 'net/http'
require 'uri'
require 'json'

class GptService
  API_KEY = "My API Key".freeze
  SYSTEM_CONTENT = "これから質問ごとにあなたの役割を指定します。最大%s文字で回答してください。".freeze
  API_ENDPOINT  = URI.parse("https://api.openai.com/v1/chat/completions").freeze
  HEADERS = {
    'Content-Type' => 'application/json',
    'Authorization' => "Bearer #{API_KEY}"
  }.freeze

  def initialize(max_output_length:)
    # ChatGPTの最大出力文字数
    @max_output_length = max_output_length
  end

  def post_prompt(message:, conversation_history:)
    body = build_request_body(message, conversation_history)
    response = send_request(body)

    # 回答を会話履歴に保存
    add_assistant_message(response, conversation_history)
  end

  private

  def build_request_body(message, conversation_history) 
    # 最初にsystemロールを使って、質問ごとに役割が与えられる旨を伝える
    conversation_history.add_system_message(content: system_content) if conversation_history.empty?
    # 質問を会話履歴に保存
    conversation_history.add_user_message(content: message)

    # 会話履歴を全部ChatGPTに入力する
    {
      "model" => "gpt-4o",
      "messages" => conversation_history.history
    }.to_json
  end

  def add_system_message(conversation_history)
    conversation_history.add_system_message(content: system_content)
  end

  def system_content
    SYSTEM_CONTENT % @max_output_length
  end

  def send_request(body)
    http = Net::HTTP.new(API_ENDPOINT.host, API_ENDPOINT.port)
    http.use_ssl = true
    request = Net::HTTP::Post.new(API_ENDPOINT.request_uri, HEADERS)
    request.body = body
    http.request(request)
  end

  def add_assistant_message(response, conversation_history)
    response_content = parse_response(response)
    conversation_history.add_assistant_message(content: response_content)
  end

  def parse_response(response)
    data = JSON.parse(response.body)
    data["choices"].first["message"]["content"]
  end
end
```

```ruby:person.rb
# 修正後のクラス
class Person
  attr_accessor :name

  ROLE_TEMPLATE = "%sの立場として、".freeze

  def initialize(name:, role:, gpt_service:)
    @name = name
    @role = role
    @gpt_service = gpt_service
  end

  def think_and_speak(message:, conversation_history:)
    # ChatGPTに役割を与えて発言を生成
    message = role_content + message
    @gpt_service.post_prompt(message: message, conversation_history: conversation_history)
  end

  private

  def role_content
    ROLE_TEMPLATE % @role
  end
end
```

### 結果
<details><summary>長いので展開して表示</summary>

※読みやすいように改行等を追加しています。

```
きりたん:
地球温暖化は、私たちきりたんぽ生産者にも深刻な影響を及ぼします。
気候変動により、米の品質や収穫量が安定しなくなる可能性があります。
持続可能な農業を推進し、エネルギー消費の削減や地元資源の活用を積極的に進めることで、環境への負荷を減らし、伝統の味を守る努力を続けていきたいと思います。
```

```
めたん: 
地球温暖化による気候変動は農業に大きな影響を与えます。
温度上昇や降水パターンの変動は米の生育環境に直接影響を及ぼし、収穫量や品質の変動を引き起こします。
特にきりたんぽ用の米にとって、適切な温度と降水量のバランスが必要です。
対策として、精密な気候予測と技術的な適応策が重要です。
農業の持続可能性を高めるため、気象データの活用や土壌管理、耐寒性品種の開発などを支援すべきです。
```

```
きりたん: 
気象学者としての意見を踏まえると、きりたんぽ生産者としてもさらに対策を強化しなければなりません。
確かに、気候変動が米の品質や収穫量に予測し難い影響を与えることは懸念されます。
気象データを活用して事前に異常気象に備えるとともに、耐寒性や耐熱性のある米品種の導入を検討するべきです。
また、土壌管理や水資源の効率的な利用なども重要です。
他の農家や研究機関と協力し、最先端の取り組みを共有しながら、柔軟に対応していくことが求められます。
```

```
めたん: 
きりたんぽ生産者の意見を踏まえると、気象学者としてもさらなる協力が不可欠です。
具体的には、以下のポイントが重要です。

1. **精密な予測モデルの提供**：異常気象や長期的な気候変動に対応するため、地域ごとの詳細な気候予測データを提供し、計画的な農作業を支援します。

2. **気候に適応する新技術**：耐寒性や耐乾性のある米品種の研究・開発を支援するとともに、持続可能な農業手法の普及を促進します。

3. **教育と支援**：気象情報の適切な活用方法を農家に教育し、気象データを実際に農業経営に活用する支援体制を構築します。

これらの対策によって、きりたんぽ生産者と共に地球温暖化の影響を最小限に抑え、持続可能な農業を実現していきたいと思います。
```

```
きりたん: 
気象学者の意見を踏まえると、我々きりたんぽ生産者にとっても具体的な対応策が明確になります。
以下の点を議論の焦点にしていくべきだと考えます。

1. **気象データの活用**：気象学者から提供される精密な予測モデルを活用して、作付けや収穫スケジュールを最適化し、異常気象に備えます。

2. **新技術と品種の導入**：耐寒性や耐乾性のある米品種の導入を検討します。そのために、研究機関との連携や現地試験を進め、地元の条件に最も適した品種を
見つけます。

3. **教育と協力**：気象情報や新技術についての教育を受け、一層の知識向上を図ることが重要です。また、他の農家や専門機関との密な連携を強化し、情報やノ
ウハウを共有します。

4. **持続可能な農業手法の採用**：水資源の効率的な利用や土壌管理技術を取り入れ、環境への負荷を減らします。これは気候変動に対する適応力を高めるために
も重要です。

これらを踏まえ、気象学者と実際の農業現場がより緊密に連携することで、地球温暖化の影響を最小限にし、きりたんぽの伝統と品質を守り続けることが可能になると考えます。
```

```
めたん: 
きりたんぽ生産者の意見を踏まえると、気象学者としてさらなる具体策が必要です。
以下の点を議論に取り入れたいと考えます。

1. **カスタマイズされた気象情報**：地域特化型の気象予報や異常気象のリスクアセスメントを提供し、きりたんぽ用米の最適な作付け・収穫時期を予測します。

2. **データ共有とアドバイス**：リアルタイムの気象データを生産者と共有し、農業経営の意思決定を支援します。週次や月次の気象報告書も役立ちます。

3. **技術支援と研究協力**：耐寒・耐乾性品種の育成には、気象データを基にしたシミュレーションやフィールドテストの支援が可能です。研究機関との共同プロ
ジェクトも推進します。

4. **教育プログラムの提供**：気象データの読み方、活用方法について農家向けのトレーニングプログラムを提供し、よりスマートな農業を実現します。

5. **持続可能な農法の提案**：環境に配慮した農業手法の導入を支援し、長期的な気候変動への適応力を高めます。地元資源の再利用や省エネ技術の導入も推進し
ます。

これらの取り組みを通じて、生産者と気象学者の緊密な連携を図り、きりたんぽの持続可能な生産を実現していきます。
```

```
きりたん: 
気象学者のご意見を基に、きりたんぽ生産者としての具体的な対応策を考えます。

1. **カスタマイズされた気象情報の活用**：地域特化型の気象予報や異常気象のリスクアセスメントを積極的に活用し、作付けや収穫の計画に取り入れます。特に 異常気象のリスクを事前に知ることで、緊急対応の準備が可能になります。

2. **データ共有とアドバイスの実践**：リアルタイムの気象データを日常の生産活動に活かすため、気象学者と定期的に情報交換会を開催し、データの解釈や具体 的な対策を共有します。

3. **技術支援と研究協力の推進**：耐寒・耐乾性品種の導入には前向きに取り組みます。地方自治体や研究機関との共同プロジェクトを通じて、新品種の試験栽培 や評価を行い、最適な品種を特定します。

4. **教育プログラムへの参加**：気象データの読み方や活用方法についてのトレーニングプログラムに積極的に参加し、自分自身やスタッフの知識を高めます。こ れにより、農業経営の判断力を向上させます。

5. **持続可能な農法の導入**：環境に配慮した農業手法を積極的に採用します。具体的には、水資源の効率的利用、土壌の健康管理、省エネ技術の導入などです。 これらの取り組みは、地球温暖化に対する長期的な適応力を高めることに貢献します。

これらを実行に移すことで、きりたんぽの品質と生産量を安定させ、持続可能な農業を実現していきたいと考えます。
そして、地域の伝統的な食文化を未来へと繋げます。

```

```
めたん: 
きりたんぽ生産者の具体的な取り組みを元に、気象学者として以下の点を強調し議論を深めたいと思います。

1. **予報精度の向上**：
   生産者が日常の活動で活用できるよう、さらに精度の高い地域特化型の気象予報と異常気象リスク予測を提供します。これにより、作付けや収穫計画の精度向上 を支援します。

2. **リアルタイムデータの迅速共有**：
   リアルタイムで気象データを提供するための先進的なデータ共有プラットフォームを開発し、生産者が迅速に情報を取得できるようにします。スマートフォンア プリやウェブポータルの導入も検討します。

3. **共同研究とフィールドテスト**：
   耐寒・耐乾性品種の研究に際して、気象データを基にしたシミュレーションやフィールドテストを継続的に行います。生産者と研究機関が一体となってプロジェ クトを進めることで、実用的な新品種を短期間で導入します。

4. **教育とトレーニング**：
   農家向けの気象データ利用に関する教育プログラムを拡充し、ワークショップやセミナーを定期的に開催します。これにより、生産者にとって分かりやすく実践 的なスキルを提供します。

5. **持続可能な農業の推進**：
   環境配慮型農業技術の普及に向け、科学的データを用いて水資源管理や土壌保全の最適な方法を提案します。また、地域の特性に基づくエネルギー効率の高い技 術の導入をサポートします。

これらの取り組みを通じて、生産者と密接に連携しながら地球温暖化の影響を最小限に抑え、きりたんぽの持続可能な生産と地域の食文化を守りたいと考えます。
生産者と一緒に課題に取り組むことで、より実効性のある解決策を見つけ出し、実現していきます。
```

```
きりたん: 
気象学者のご意見を参考に、きりたんぽ生産者として具体的なアクションを考えました。以下の点を基に議論を進めたいと思います。

1. **予報精度と活用**：
   気象学者から提供される高精度な地域特化型予報を活用します。特に異常気象のリスク予測は、早期準備と対応策を立てるために極めて重要です。

2. **データ共有プラットフォーム**：
   リアルタイムの気象データが簡単にアクセスできるよう、スマートフォンアプリやウェブポータルを導入します。これにより、その日その日の農作業に迅速に対 応できます。

3. **共同研究とフィールドテスト**：
   耐寒・耐乾性品種の開発と試験には積極的に参加します。フィールドテストを通して実用性を確認し、成功事例を他の農家とも共有する体制を整えます。       

4. **教育プログラム**：
   気象データの利用に関するワークショップやセミナーに参加し、スタッフ全員の知識向上を目指します。これにより、自主的にデータを活用するスキルを身に付 けます。

5. **持続可能な農業の推進**：
   環境に配慮した農業技術を取り入れます。具体的には水資源の効率的な管理、土壌保全、省エネ技術の導入などです。これらの手法は、長期的に見て地球温暖化 の影響を緩和するだけでなく、コスト削減にも繋がります。

6. **コミュニケーションの強化**：
   定期的な情報交換会やWeb会議を通じて、気象学者や他の農家との連携を強化します。問題が発生した場合も迅速に対応できるよう、柔軟な体制を作ります。    

これらの取り組みを通じて、気象学者と密に連携しながら、地球温暖化の影響を最小限に抑え、きりたんぽの品質と生産量を維持・向上させることを目指します。
地域の伝統と食文化を守りながら、持続可能な未来を共に築いていきたいと思います。
```

```
めたん: 
これまでの議論を踏まえ、気象学者の立場として、以下の具体的な取り組みを提案し、生産者との緊密な連携を進めたいと思います。

1. **高精度な予報システムの提供**：
   地域特化型の気象予報やリスクアセスメントをさらに精度向上させ、生産者に提供します。特に季節変動や異常気象に関する予測情報を迅速に届ける体制を整え ます。

2. **リアルタイムデータのプラットフォーム構築**：
   生産者がスマートフォンアプリやウェブポータルを通じてリアルタイムの気象データにアクセスできるシステムを構築します。これにより、日常の農作業計画を 迅速に調整する支援が可能となります。

3. **共同研究と技術支援**：
   耐寒・耐乾性品種のフィールドテストを気象データと連携させることで、最適な栽培条件を提供します。さらに、農業研究機関との共同プロジェクトを推進し、 実用的な結果を早急に生産者に還元します。

4. **教育プログラムとトレーニング**：
   気象データの解釈と活用方法に関するワークショップやセミナーを定期的に開催し、生産者とそのスタッフの専門知識を向上させます。また、実際のケーススタ ディを通じて具体的な対応例を学びます。

5. **持続可能な農業技術の導入支援**：
   地球温暖化に対する長期的な適応策として、水資源の効率的な管理や土壌保全技術、再生可能エネルギーの利用方法を提案し、導入支援を行います。

6. **コミュニケーションの強化**：
   定期的な情報交換会を実施し、生産者との緊密な連絡を維持します。問題が発生した際には迅速に対策を講じるための緊急連絡体制も構築します。

これらの取り組みを通じて、気象学者として正確なデータ提供と適切なアドバイスを行い、生産者と共同で地球温暖化の影響を最小限に抑えることを目指します。
伝統的なきりたんぽの品質を維持しつつ、持続可能な農業の実現に貢献していきたいと思います。
```

```
きりたん: 
気象学者のご提案を基に、きりたんぽ生産者として具体的な対策を議論させていただきます。

1. **高精度な予報システムの利用**：
   地域特化型予報やリスクアセスメントを受け取り、新たな農作業計画に組み込みます。異常気象への迅速な対応策を制定するために、この情報を毎日の作業に活 用します。

2. **リアルタイムデータの活用**：
   スマートフォンアプリやウェブポータルを通じてリアルタイムの気象データを取得し、日々の農作業に反映します。これにより、突発的な天候変動にも早急に対 応することが可能になります。

3. **共同研究と品種改良**：
   耐寒・耐乾性品種のフィールドテストに参加し、研究結果をもとに最適な栽培方法を導入します。研究機関との密な連携を維持し、新品種の早期導入を目指しま す。

4. **教育とトレーニングの実行**：
   気象学者が提供する教育プログラムやワークショップに積極的に参加し、気象データの正しい解釈と効果的な活用方法を学びます。スタッフ全員の知識向上も図 ります。

5. **持続可能な農業技術の導入**：
   水資源の効率的利用や土壌保全技術を取り入れます。再生可能エネルギーの利用も検討し、コスト削減と環境保全を両立させます。これにより、長期的な気候変 動に対する適応力を高めます。

6. **定期的なコミュニケーション**：
   気象学者との定期的な情報交換会を通じて、最新の気象データや研究成果を共有し、迅速な対応策を共同で検討します。緊急連絡体制も整え、問題発生時には即 時対応を可能にします。

これらの取り組みを通じて、気象学者との緊密な協力体制を構築し、地球温暖化の影響を最小限に抑えつつ、きりたんぽの品質と生産性を維持・向上させることを目指します。
地域の伝統と食文化を守りながら、持続可能な農業の未来を築いていくため、引き続き共に努めていきたいと思います。

```

```
ずん子: 
本日の議論をまとめますと、地球温暖化がきりたんぽ生産に及ぼす影響について、両者の視点から多角的に検討しました。

**要約**:
1. **きりたんぽ生産者の意見**:
   - 地球温暖化は米の品質や収穫量に影響を与える懸念がある。
   - 高精度な気象予報やデータ活用の重要性を強調。
   - 耐寒性・耐乾性品種の導入の必要性。

2. **気象学者の意見**:
   - 地域特化型の精密な気象予測が農業の安定化に寄与する。
   - リアルタイムデータの提供と教育プログラムの重要性。
   - 持続可能な農業技術の導入支援。

**結論**:
- **連携強化**:
  高精度な気象予報とリアルタイムデータ活用を基に、生産者と気象学者が緊密に連携することが不可欠です。

- **技術と知識の共有**:
  耐寒性・耐乾性品種の共同研究や、気象データの活用方法についての教育プログラムを通じて、知識を共有し合うことで対応力を強化します。

- **持続可能な取り組み**:
  水資源管理や土壌保全、省エネ技術の導入など、持続可能な農業技術を活用し、地球温暖化の影響を最小限に抑える努力を継続します。

本日の議論を通じて、地球温暖化に対抗するための具体的な方策が見えてきました。
今後も情報交換と連携を深め、きりたんぽ生産の持続可能な未来を共に築いていきましょう。
ありがとうございました。

```
</details>

役割が明確になったことで、ステップ2と比べて話が簡潔に展開している気がします。また最後の要約と結論も、それぞれの立場の主張が分かりやすくまとめられていて理解しやすいです。
私が普段作っている議事録と比べてはるかに出来がよいです。

# まとめ
ChatGPTに会議を代行してもらう際のポイントとして、次のことが分かりました。

- ChatGPTへ質問するごとに、会話履歴をすべて入力する
- 各ペルソナに役割（立場）を設定する

比較的簡単に作成できた割には、思いのほか良好な結果が得られたので、実際に会議の丸投げができるか検証してみたいと思います。