02. Agen Debat yang Memanfaatkan Alat (Debat Dua Agen dengan Alat)

Debat Agen yang Memanfaatkan Alat (Agent Debates with Tools)

Contoh ini menunjukkan cara mensimulasikan percakapan multi-agen di mana agen-agen memiliki akses ke alat.

Inisialisasi untuk pelacakan LangSmith.

import os

# Masukkan nama proyek untuk debugging.
os.environ["LANGCHAIN_PROJECT"] = "DEBATE AGENT"

DialogueAgent dan DialogueSimulator

Dalam notebook ini, kami menunjukkan cara mengimplementasikan simulasi multi-agen di mana agen otoritatif memutuskan siapa yang boleh berbicara. Ini mengikuti pendekatan yang berlawanan dengan pemilihan pembicara terdistribusi multi-agen.

Kami akan menggunakan kelas DialogueAgent dan DialogueSimulator yang sama seperti yang didefinisikan dalam Multi-agent authoritarian speaker selection

DialogueAgent

  • Metode send mengirim pesan ke model obrolan menggunakan riwayat percakapan saat ini dan awalan agen, lalu mengembalikan respons.

  • Metode receive menambahkan pesan yang dikirim oleh agen lain ke dalam riwayat percakapan.

from typing import Callable, List


from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage,
)
from langchain_openai import ChatOpenAI


class DialogueAgent:
    def __init__(
        self,
        name: str,
        system_message: SystemMessage,
        model: ChatOpenAI,
    ) -> None:
        # Menetapkan nama agen.
        self.name = name
        # Menetapkan pesan sistem.
        self.system_message = system_message
        # Menetapkan model LLM.
        self.model = model
        # Menetapkan nama agen.
        self.prefix = f"{self.name}: "
        # Menginisialisasi agen.
        self.reset()

    def reset(self):
        """
        Menginisialisasi riwayat percakapan.
        """
        self.message_history = ["Ini adalah percakapan sejauh ini."]

    def send(self) -> str:
        """
        Menambahkan pesan sistem + riwayat percakapan dan akhirnya tambahkan nama agen.
        """
        message = self.model(
            [
                self.system_message,
                HumanMessage(content="\n".join(
                    [self.prefix] + self.message_history)),
            ]
        )
        return message.content

    def receive(self, name: str, message: str) -> None:
        """
        Menambahkan pesan yang diucapkan oleh 'name' ke riwayat percakapan.
        """
        self.message_history.append(f"{name}: {message}")

DialogueSimulator

  • Metode inject memulai percakapan dengan nama dan pesan yang diberikan, dan memastikan bahwa semua agen menerima pesan tersebut.

  • Metode step memilih pembicara berikutnya, mengirimkan pesan mereka, dan memastikan bahwa semua agen menerima pesan tersebut. Ini juga meningkatkan langkah saat ini.

Ini menyediakan kemampuan untuk mensimulasikan percakapan antara beberapa agen.

DialogueAgent mewakili agen individu, sedangkan DialogueSimulator mengoordinasikan dan mengelola percakapan antara para agen.

DialogueAgentWithTools

Mendefinisikan kelas DialogueAgentWithTools untuk memperluas DialogueAgent sehingga dapat menggunakan alat.

  • Kelas DialogueAgentWithTools diimplementasikan dengan mewarisi kelas DialogueAgent.

  • Metode send bertanggung jawab untuk menghasilkan dan mengembalikan pesan dari agen.

  • Fungsi create_openai_tools_agent digunakan untuk menginisialisasi rantai agen.

  • Mendefinisikan alat yang akan digunakan agen saat inisialisasi.

Pengaturan Alat

Tentukan alat pengambilan dokumen (Retrieval Tool).

Alat pencarian internet

Membuat alat yang dapat mencari di internet.

Mengatur alat yang dapat digunakan oleh setiap agen

  • Dictionary names mendefinisikan nama para debater (nama awalan) dan alat yang dapat digunakan oleh setiap agen diskusi.

  • topic memilih topik untuk diskusi.

1. Alat bantu berbasis dokumentasi

2. Alat bantu berbasis pencarian

Memanfaatkan LLM untuk menambahkan detail pada deskripsi topik

Anda dapat menggunakan LLM (Large Language Model) untuk membuat penjelasan suatu topik menjadi lebih rinci.

Untuk melakukan ini, pertama-tama berikan deskripsi atau gambaran sederhana tentang topik tersebut sebagai input ke LLM. Kemudian, mintalah LLM untuk memberikan penjelasan yang lebih mendetail tentang topik tersebut.

Karena LLM telah mempelajari sejumlah besar data teks, LLM dapat menghasilkan informasi tambahan dan detail terkait dengan topik yang diberikan. Melalui proses ini, Anda dapat memperluas penjelasan sederhana awal menjadi konten yang lebih kaya dan lebih mendetail.

  • Deskripsi percakapan dihasilkan berdasarkan topik percakapan yang diberikan dan nama peserta.

  • agent_descriptor_system_message adalah SystemMessage yang menunjukkan bahwa dimungkinkan untuk menambahkan deskripsi tentang peserta percakapan.

  • Fungsi generate_agent_description membuat deskripsi yang dihasilkan oleh LLM untuk setiap peserta.

  • agent_specifier_prompt terdiri dari HumanMessage yang mencakup deskripsi percakapan, nama peserta, dan batasan kata (word_limit).

  • Menggunakan model ChatOpenAI, deskripsi tentang peserta (agent_description) dihasilkan berdasarkan agent_specifier_prompt.

Anda dapat langsung menulis pernyataan singkat yang menjelaskan posisi masing-masing peserta dalam diskusi.

Mengatur Pesan Sistem (System Message)

Pesan sistem adalah pesan yang dihasilkan oleh sistem sebelum input pengguna dalam sistem AI percakapan.

Pesan-pesan ini menetapkan konteks percakapan dan memberi tahu pengguna tentang sikap dan tujuan masing-masing agen AI.

Menulis pesan sistem yang efektif dapat memperlancar interaksi dengan pengguna dan meningkatkan kualitas percakapan.

Deskripsi Prompt

  • Berikan nama dan deskripsi agen.

  • Agen harus menggunakan alat untuk mencari informasi dan membantah klaim lawan.

  • Agen harus mencantumkan sumber dan tidak boleh membuat kutipan palsu atau mencantumkan sumber yang belum mereka teliti.

  • Agen harus mengakhiri percakapan segera setelah mereka menyelesaikan pernyataan dari perspektif mereka.

Tentukan topic_specifier_prompt untuk membuat prompt yang lebih mendetail mengenai topik yang diberikan.

  • Sesuaikan temperature untuk menghasilkan topik yang lebih beragam.

Atau, Anda bisa menentukan secara langsung seperti berikut.

Loop Diskusi

Loop diskusi adalah bagian inti dari eksekusi program di mana tugas utama dilakukan secara berulang.

  • Tugas utama di sini meliputi mendengarkan pesan setiap agen, menggunakan alat untuk mencari bukti pendukung, dan menyajikan argumen balasan.

Fungsi select_next_speaker bertanggung jawab untuk memilih pembicara berikutnya dalam percakapan.

Di sini, kita menjalankan maksimal 6 putaran diskusi (max_iters=6).

  • Buat instance dari kelas DialogueSimulator yang bernama simulator, dengan agents dan fungsi select_next_speaker sebagai parameter.

  • Inisialisasi simulator dengan memanggil metode simulator.reset().

  • Gunakan metode simulator.inject() untuk menyuntikkan specified_topic ke dalam agen "Moderator".

  • Cetak specified_topic yang diucapkan oleh "Moderator".

  • Ulangi selama n kurang dari max_iters:

  • Panggil metode simulator.step() untuk mendapatkan nama (name) dan pesan (message) agen berikutnya.

  • Cetak nama dan pesan agen.

  • Tambahkan n sebanyak 1.

Last updated