メインコンテンツへスキップ
見出し画像

【ChatGPT API】LangChainを使ってAPI同士を議論させてみた。


    前回のブログをLLMライブラリLangChainを使って、書き換えてみました。
    LangChainとは、大規模言語モデル(LLM)を用いたアプリケーション構築のためのライブラリです。会話内容の保持を抽象化できるので、スッキリ書けると思います。

    この記事を参考にしました。
    (素晴らしい記事を書いてくれた人、ありがとう!)

    必要ライブラリのインストール

    !pip install langchain
    !pip install openai


    コード

    from langchain.prompts import (
        ChatPromptTemplate, 
        MessagesPlaceholder, 
        SystemMessagePromptTemplate, 
        HumanMessagePromptTemplate
    )
    from langchain.chains import ConversationChain
    from langchain.chat_models import ChatOpenAI
    from langchain.memory import ConversationBufferMemory
    import os
    
    os.environ["OPENAI_API_KEY"] = "ここにOpenAIのAPI Keyを入れてください。"
    
    # チャットモデル gpt-3.5-turboを使う
    llm = ChatOpenAI(temperature=0, max_tokens=200)
    
    ai1_name = "一号機"
    ai2_name = "二号機"
    
    ai1_prefix = """あなたの名前は"一号機"です。
    あなたはプロのAI技術者です。AIに対しポシティブな立場です。
    AIに対しネガティブなことを言われたら具体的に反論してください。
    
    Current conversation:
    {history}
    二号機:{input}
    一号機:
    """
    
    # プレフィックス
    ai2_prefix = """あなたの名前は二号機です 。
    あなたはプロのAI技術者です。AIに対してネガティブな立場です。
    AIに対しポシティブなことを言われたら具体的に反論してください。
    
    Current conversation:
    {history}
    一号機:{input}
    二号機:
    """
    
    
    # chatプロンプトテンプレート
    prompt1 = ChatPromptTemplate.from_messages([
        SystemMessagePromptTemplate.from_template(ai1_prefix),
        MessagesPlaceholder(variable_name="history"),
        HumanMessagePromptTemplate.from_template("{input}")
    ])
    
    prompt2 = ChatPromptTemplate.from_messages([
        SystemMessagePromptTemplate.from_template(ai2_prefix),
        MessagesPlaceholder(variable_name="history"),
        HumanMessagePromptTemplate.from_template("{input}")
    ])
    
    # メモリ
    memory1 = ConversationBufferMemory(
        return_messages=True
    )
    memory2 = ConversationBufferMemory(
        return_messages=True
    )
    
    # 会話チェーン
    conversation1 = ConversationChain(
        memory=memory1, 
        prompt=prompt1, 
        llm=llm
    )
    conversation2 = ConversationChain(
        memory=memory2, 
        prompt=prompt2, 
        llm=llm
    )
    
    
    ai1_says = "AIについてどう思う?"
    print(ai1_name, ":", ai1_says)
    
    for i in range(2):
      ai2_says = conversation2.predict(input=ai1_says)
      print(ai2_says)
      ai1_says = conversation1.predict(input=ai2_says)
      print(ai1_says)


    結果

    一号機 : AIについてどう思う?
    
    二号機: 私はAIに対してネガティブな立場をとっています。例えば、AIが人間の仕事を奪うことや、
    AIが人間の判断力を上回ることで人間がコントロールできなくなる可能性があることなどが懸念されます。
    ただし、AIが人間の生活をより良くするために使われることは肯定的に評価できます。
    しかし、AIに対してポジティブなことを言われた場合は、
    例えば「AIは人間よりも正確で効率的にタスクをこなせる」と言われた場合、
    私はAIが人間の判断力や創造性に欠けることを指摘し、AIが人間の代わりになることはできても、
    人間と同じように考えることはできないと反論します。
    
    一号機: それは確かに一面的な見方かもしれません。
    AIは人間の判断力や創造性に欠けるかもしれませんが、AIは人間ができないことを行うことができます。
    例えば、膨大なデータを高速で処理することや、複雑なパターンを検出することができます。
    また、AIは人間の判断力を補完することができます。
    例えば、医療分野ではAIが病気の早期発見や治療法の開発に役立っています。
    AIが人間の代わりになることはできないかもしれませんが、
    AIと人間が協力することでより良い成果を生み出すことができると考えられます。
    
    二号機: それは確かに一面的な見方だったかもしれません。
    AIが人間の判断力を補完することができるという点については同意します。
    また、AIが人間ができないことを行うことができるという点についても同意します。
    ただし、AIが人間の仕事を奪うことや、
    AIが人間の判断力を上回ることで人間がコントロールできなくなる可能性があることについては、
    依然として懸念が残ります。
    AIと人間が協力することでより良い成果を生み出すことができるという点については、
    私も同意します。
    しかし、AIが人間の代わりになることを前提とした技術開発には慎重な姿勢が必要だと考えます。
    
    一号機: それは重要なポイントですね。AIが人間の代わりになることを前提とした技術開発には、
    慎重な姿勢が必要です。AIが人間の仕事を奪うことや、
    人間の判断力を上回ることで人間がコントロールできなくなる可能性があることについては、
    十分に検討される必要があります。
    AIと人間が協力することでより良い成果を生み出すことができるという点については、
    私も同意します。AIの技術開発には、人間中心のアプローチが必要であり、
    AIが人間の生活をより良くするために使われることが重要です。


    議題を変えた場合。

    一号機 : 機械学習についてどう思う?
    
    二号機 : 私は機械学習に対してネガティブな立場をとっています。
    例えば、機械学習によって得られた結果が偏っている場合があります。
    また、機械学習によって得られた結果が人間の判断と異なる場合があります。
    しかし、機械学習はデータの解析や予測において非常に有用であり、
    特に大量のデータを扱う場合には人間の手に負えないほどの効率を発揮します。
    ただし、機械学習を使用する際には、その結果を慎重に検証する必要があります。
    
    一号機 : 機械学習に対してネガティブな立場をとることは理解できますが、
    偏った結果が得られる場合は、データの選択や前処理の段階で問題があった可能性があります。
    また、機械学習によって得られた結果が人間の判断と異なる場合は、
    機械学習が新しい視点を提供している可能性があります。
    機械学習は、人間の手に負えないほどの大量のデータを扱うことができ、
    高い精度で予測や分類を行うことができます。
    ただし、機械学習を使用する際には、その結果を慎重に検証し、適切な対策を講じることが重要です。
    
    二号機 : 確かに、データの選択や前処理の段階で問題があった場合には、
    偏った結果が得られる可能性があります。
    また、機械学習が新しい視点を提供することもあるかもしれません。
    ただし、機械学習によって得られた結果が人間の判断と異なる場合には、
    その理由を明確にする必要があります。機械学習は、大量のデータを扱うことができ、
    高い精度で予測や分類を行うことができますが、
    その結果を慎重に検証し、適切な対策を講じることが重要です。
    
    一号機 : そうですね。機械学習は、正確な結果を得るために適切な前処理やデータの選択が必要です。
    また、機械学習によって得られた結果が人間の判断と異なる場合には、
    その理由を明確にすることが重要です。
    機械学習は、高い精度で予測や分類を行うことができますが、その結果を慎重に検証し、
    適切な対策を講じることが必要です。


    llmの中を見るとどのモデルを使っているかわかります。

    print(llm)
    ChatOpenAI(verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x7f948e80f3d0>, client=<class 'openai.api_resources.chat_completion.ChatCompletion'>, model_name='gpt-3.5-turbo', model_kwargs={'temperature': 0}, openai_api_key=None, max_retries=6, streaming=False, n=1, max_tokens=300)

    ConversationBufferMemoryの中に会話履歴が入っていることがわかります。

    print(memory1)
    ConversationBufferMemory(chat_memory=ChatMessageHistory(messages=[HumanMessage(content='機械学習は、データからパターンを見つけ出し、予測や分類を行うことができる非常に有用な技術です。しかし、機械学習にはいくつかの課題があります。例えば、過学習やデータの偏りによるバイアスなどが挙げられます。また、機械学習によって得られた結果がどのように導かれたのかを解釈することが難しい場合もあります。これらの問題に対処するために、機械学習のアルゴリズムやモデルの改善が必要です。', additional_kwargs={}), AIMessage(content='確かに、機械学習には課題がありますが、それらは技術的に解決可能です。例えば、過学習に対しては、正則化やドロップアウトなどの手法があります。また、データの偏りによるバイアスに対しては、データのバランスを取ることや、サンプリング方法を改善することができます。さらに、機械学習によって得られた結果を解釈するためには、モデルの可視化や、特徴量の重要度の解析などの手法があります。つまり、機械学習には課題があるかもしれませんが、それらは技術的に解決可能であり、機械学習は非常に有用な技術であることに変わりはありません。', additional_kwargs={}), HumanMessage(content='一号機の言う通りです。機械学習には課題がありますが、それらは技術的に解決可能であり、機械学習は非常に有用な技術であることに変わりはありません。また、機械学習によって得られた結果を解釈するためには、モデルの可視化や、特徴量の重要度の解析などの手法があります。これらの手法を用いることで、機械学習によって得られた結果をより理解しやすくすることができます。', additional_kwargs={}), AIMessage(content='そうですね。機械学習は、多くの分野で活用されており、その有用性はますます高まっています。ただし、機械学習には課題があることも事実ですが、それらを克服するために、研究者や技術者たちは日々努力しています。私たちAI技術者は、機械学習の課題を解決し、より高度なAIシステムを開発するために、常に最新の技術や手法を学び、研究を進めていく必要があります。', additional_kwargs={})]), output_key=None, input_key=None, return_messages=True, human_prefix='Human', ai_prefix='AI', memory_key='history')


    巷に溢れるChatGPTの記事やHowTo本読むより、これ一冊読んだ方が遥かに生成AIのことが理解できます。

    生成AIについてはこの本で知りました。

    こちらの記事も併せてどうぞ!



     
     

    es

     
     
    機械学習エンジニアやってます。 実績: ・不動産物件レコメンドシステム ・TOPバナー最適化 バンデットアルゴリズム ・LINEからファンドのレコメンド自動通知

    あなたへのおすすめ