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

LangChain で GPT Index をツールとして利用する

    「LangChain」で「GPT Index」をツールとして利用できるようになったので、試してみました。

    前回

    1. LangChain と GPT Index の連携

    「LangChain」で 「GPT Index」をエージェントのツールおよびメモリとして利用できるようになりました。

    2. Colabでの実行

    Google Colabでの実行手順は、次のとおりです。

    (1) LangChainに組み込むツールとして、以下の「ぼっち・ざ・ろっく」のインデックスを準備。

    (2) パッケージのインポート。

    # パッケージのインポート
    from langchain.agents import Tool
    from langchain.chains.conversation.memory import ConversationBufferMemory
    from langchain import OpenAI
    from langchain.agents import initialize_agent

    (3) ツールの準備。
    「func=lambda q: str(index.query(q))」で最初に準備した「GPT Index」をツールに指定し、「return_direct=True」で「GPT Index」からの戻り値をユーザーに直接返すようにします。

    # ツールの準備
    tools = [
        Tool(
            name = "Bocci Index",
            func=lambda q: str(index.query(q)),
            description="ぼっちちゃんに関する質問の場合に役立ちます。",
            return_direct=True
        ),    
    ]

    (4) エージェントの準備。

    # エージェントの準備
    agent_chain = initialize_agent(
        tools=tools, 
        llm=OpenAI(temperature=0), 
        agent="conversational-react-description", 
        verbose=True, 
        memory=ConversationBufferMemory(memory_key="chat_history")
    )

    (5) ぼっちちゃんと関係ない会話実行。
    ツールは使われず、一般会話が返されます。

    agent_chain.run(input="今日は良い天気ですね")
    > Entering new AgentExecutor chain...
    
    Thought: Do I need to use a tool? No
    AI: はい、今日はとても良い天気ですね!
    
    > Finished chain.
    'はい、今日はとても良い天気ですね!'

    (6) ぼっちちゃんと関係ある会話実行。
    ツールが使われ、「GPT Index」の情報を使って返されます。

    agent_chain.run(input="ぼっちちゃんの得意な楽器は?")
    > Entering new AgentExecutor chain...
    
    Thought: Do I need to use a tool? Yes
    Action: Bocci Index
    Action Input: ぼっちちゃんの得意な楽器> [query] Total LLM token usage: 2071 tokens
    > [query] Total embedding token usage: 22 tokens
    
    Observation: 
    ぼっちちゃんの得意な楽器はギターであると思われます。
    
    
    > Finished chain.
    '\nぼっちちゃんの得意な楽器はギターであると思われます。'

    (7) ぼっちちゃんと関係ある会話実行。
    応答は良さそうですが、ツールが使わてません。
    ギター好きも、ConversationBufferMemoryから推論してるようです。

    agent_chain.run(input="ぼっちちゃんが好きなことは?")
    > Entering new AgentExecutor chain...
    
    AI: 後藤ひとりは音楽が大好きで、ギターを弾くことが特に好きです。また、映画やアニメなどを観ることも好きです。
    
    > Finished chain.
    '後藤ひとりは音楽が大好きで、ギターを弾くことが特に好きです。また、映画やアニメなどを観ることも好きです。'

    ツールの出し分けが期待通りにならないことがあるため、descriptionの調整などが必要そうです。

    次回



     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ