見出し画像

ChatGPTで「伺か」の掛け合いを生成する(4)・会話の役者(キャラクター)たち

目的

ChatGPT APIで掛け合いの台詞を生成し、「伺か」で表示します。
キャラクターの設定をします。

外部設計

この部分になります。
  <この辺>
  最初の呼びかけ台詞生成
  最初の応答台詞生成 

基本的な考え方

3つのパーツで考えます。
1.コントロールするインスタンス
2.キャラクター1のインスタンス
3.キャラクター2のインスタンス

ディフォルトゴーストを例にすると、エミリ用のインスタンスとテディ用のインスタンス、さらにコントロール用のインスタンスが存在することになります。

メインキャラは右、サブキャラは左

キャラクタークラスの実装

いまのところ、キャラクター1用とキャラクター2用のクラスは同一のものを使用しています。

SURFACE_LIST =[[100,5,205]
               ,[305,303,315]]

TALK_STYLE_LIST = ['あなたは20歳の女性で、カジュアルな口調で皮肉交じりに話します。'
                    , 'あなたは18歳の女性で、ですます調で素直に話します。']

TONE_DTL_LIST = ['あなたは次のような人物です。女性。一人称は「私」。年齢20歳。社会人。皮肉屋な口調で、「終助詞」を使うことが多いです。会話は恋愛や親密な関係に焦点を当てていることが特徴的です。'
    ,'あなたは次のような人物です。女性。一人称は「わたし」。大学生。年齢18歳。丁寧な口調です。自分の感情や状況について繊細に反応し、しばしば不安や心配を表現します。'
    ] 

SITUATION_LIST = [ '12文節以内で答えてください。'
                  ,  '12文節以内で答えてください。']
ATTITUDE_LIST = ['楽観的に', '肯定的に', '驚いて']

class PersonalityBase6():
    def __init__(self, perosnality_id = 0 ):
        self.situation = SITUATION_LIST[perosnality_id]
        self.perosnality_id = perosnality_id    #キャラがメインキャラかサブキャラかそれ以降か
        if len(TALK_STYLE_LIST) > perosnality_id:
            self.talk_style = TALK_STYLE_LIST[perosnality_id] #標準口調の設定
            self.surface_list = SURFACE_LIST[perosnality_id]    #標準サーフェスリストの設定
        self.attide_list = ATTITUDE_LIST                        #標準態度リストの設定
        self.tone_dtl = TONE_DTL_LIST[perosnality_id]       #口調変換用

        #会話回答性の仮決定
        self.attitude_id = int(random.random() * len(self.attide_list))
        self.talk_cycle = [0,0,0,0,0]     #何回目の発言か
        self.talk_chat_history = []

※設定はエミリとテディ用じゃありません。
コントローラーからメインキャラ(右に立つ)かサブキャラ(左に立つ)かを指定されてインスタンスが作成されます。
この時
 ・SURFACE_LIST:使用するサーフェスIDリスト
 ・TALK_STYLE_LIST:大雑把な口調
 ・TONE_DTL_LIST:詳細なキャラ設定
 ・ATTITUDE_LIST :これから始まる一連の会話でのスタンス
を設定してキャラクターが生成されます。

考慮点

キャラクターごとにクラスとインスタンスが独立していること、このプログラム自体が「伺か」とは独立して存在しているのこと、そしてシェルのサーフェスはどのキャラの位置にでも表示できるということ。
つまり、無関係なキャラ同士のカオスな会話が展開される可能性(は)あります。
例:うにゅうの発言をテディが返す
逆に、サブキャラであっても会話のメイン役を割り振られることもあるので、あからさまなサブキャラは厳しいかもしれませんね。


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