Langroid adalah kerangka kerja python yang intuitif, ringan, dapat diperluas dan berprinsip untuk dengan mudah membangun aplikasi bertenaga LLM, dari peneliti CMU dan UW-Madison. Anda mengatur agen, melengkapi mereka dengan komponen opsional (LLM, Vector-store dan alat/fungsi), menetapkan tugas, dan meminta mereka secara kolaboratif menyelesaikan masalah dengan bertukar pesan. Paradigma multi-agen ini terinspirasi oleh kerangka kerja aktor (tetapi Anda tidak perlu tahu apa-apa tentang ini!).
Langroid adalah pandangan baru tentang pengembangan aplikasi LLM, di mana banyak pemikiran telah menyederhanakan pengalaman pengembang; Itu tidak menggunakan Langchain , atau kerangka kerja LLM lainnya.
Baca tinjauan (WIP) dari arsitektur Langroid
? Perusahaan menggunakan/mengadaptasi langroid dalam produksi . Ini kutipan:
Nulify menggunakan agen AI untuk pengembangan perangkat lunak yang aman. Ia menemukan, memprioritaskan, dan memperbaiki kerentanan. Kami telah mengadaptasi kerangka kerja orkestrasi multi-agen Langroid secara internal dalam produksi, setelah mengevaluasi Crewai, Autogen, Langchain, Langflow, dll. Kami menemukan Langroid jauh lebih unggul dari kerangka kerja tersebut dalam hal kemudahan pengaturan dan fleksibilitas. Agen dan abstraksi tugas Langroid intuitif, dipikirkan dengan baik, dan memberikan pengalaman pengembang yang hebat. Kami menginginkan cara tercepat untuk mendapatkan sesuatu dalam produksi. Dengan kerangka kerja lain, kami akan memakan waktu berminggu -minggu, tetapi dengan Langroid kami mendapatkan hasil yang baik dalam hitungan menit. Sangat direkomendasikan!
- Jacky Wong, kepala AI di Nullify.
Lihat posting blog intro ke Langroid ini dari tim LANCEDB
Baru saja diterbitkan di ML untuk Healthcare (2024): Sistem Rag Multi-Agen Berbasis Langroid untuk Pharmacovigilance, lihat posting blog
Kami menyambut kontribusi: Lihat dokumen kontribusi untuk ide -ide tentang apa yang harus dikontribusikan.
Apakah Anda membangun aplikasi LLM, atau ingin bantuan dengan Langroid untuk perusahaan Anda, atau ingin memprioritaskan fitur Langroid untuk kasus penggunaan perusahaan Anda? Prasad Chalasani tersedia untuk konsultasi (penasihat/pengembangan): pchalasani di gmail dot com.
Sponsorship juga diterima melalui sponsor GitHub
Pertanyaan, umpan balik, ide? Bergabunglah dengan kami di Perselisihan!
Ini hanya penggoda; Masih banyak lagi, seperti pemanggilan fungsi/alat, kolaborasi multi-agen, ekstraksi informasi terstruktur, docChatagent (RAG), sqlchatagent, non-openai lokal/llms jarak jauh, dll. Gulir ke bawah atau lihat dokumen untuk lebih. Lihat colab cepat Langroid Quick-start yang membangun hingga contoh 2-agen-agen-ekstraksi menggunakan OpenAI Chatcompletion API. Lihat juga versi ini yang menggunakan API Openai Assistants sebagai gantinya.
Baru saja dirilis! Contoh skrip yang menunjukkan bagaimana Anda dapat menggunakan multi-agen dan alat Langroid untuk mengekstrak informasi terstruktur dari dokumen hanya menggunakan LLM lokal (Mistral-7b-instruct-V0.2).
import langroid as lr
import langroid . language_models as lm
# set up LLM
llm_cfg = lm . OpenAIGPTConfig ( # or OpenAIAssistant to use Assistant API
# any model served via an OpenAI-compatible API
chat_model = lm . OpenAIChatModel . GPT4o , # or, e.g., "ollama/mistral"
)
# use LLM directly
mdl = lm . OpenAIGPT ( llm_cfg )
response = mdl . chat ( "What is the capital of Ontario?" , max_tokens = 10 )
# use LLM in an Agent
agent_cfg = lr . ChatAgentConfig ( llm = llm_cfg )
agent = lr . ChatAgent ( agent_cfg )
agent . llm_response ( "What is the capital of China?" )
response = agent . llm_response ( "And India?" ) # maintains conversation state
# wrap Agent in a Task to run interactive loop with user (or other agents)
task = lr . Task ( agent , name = "Bot" , system_message = "You are a helpful assistant" )
task . run ( "Hello" ) # kick off with user saying "Hello"
# 2-Agent chat loop: Teacher Agent asks questions to Student Agent
teacher_agent = lr . ChatAgent ( agent_cfg )
teacher_task = lr . Task (
teacher_agent , name = "Teacher" ,
system_message = """
Ask your student concise numbers questions, and give feedback.
Start with a question.
"""
)
student_agent = lr . ChatAgent ( agent_cfg )
student_task = lr . Task (
student_agent , name = "Student" ,
system_message = "Concisely answer the teacher's questions." ,
single_round = True ,
)
teacher_task . add_sub_task ( student_task )
teacher_task . run ()November 2024:
Agent S dengan format output skema JSON yang ketat pada LLM yang kompatibel dan mode ketat untuk OpenAI Tools API.Qwen2.5-Coder-32b-Instruct ) yang di-host di Glhf.chatOkt 2024:
Sep 2024:
o1-mini dan o1-preview .DocChatAgent menggunakan fusi peringkat timbal balik (RRF) untuk memberi peringkat potongan yang diambil dengan metode yang berbeda.run_batch_task Opsi baru - stop_on_first_result - memungkinkan penghentian batch segera setelah tugas apa pun mengembalikan hasilnya.Agustus 2024:
Task.run(), Task.run_async .Jul 2024:
Jun 2024:
RewindTool , yang memungkinkan agen "mundur dan mengulang" pesan masa lalu (dan semua pesan tergantung dibersihkan berkat pelacakan garis keturunan). Baca catatan di sini.Mei 2024:
doc-chat , db (untuk dependensi terkait basis data). Lihat instruksi instal yang diperbarui di bawah ini dan di dokumen.examples nama kelas bernama, dan contoh acak dari daftar ini akan digunakan untuk menghasilkan contoh 1-shot untuk LLM. Ini telah ditingkatkan sehingga Anda sekarang dapat memberikan daftar contoh di mana setiap contoh adalah instance alat, atau tuple dari (deskripsi, instance alat), di mana deskripsi adalah "pemikiran" yang membuat LLM menggunakan alat (lihat contoh dalam dokumen). Dalam beberapa skenario ini dapat meningkatkan akurasi pembuatan alat LLM. Juga, sekarang alih-alih contoh acak, semua contoh digunakan untuk menghasilkan beberapa contoh.TaskConfig . Hanya mendeteksi loop yang tepat , daripada perkiraan loop di mana entitas mengatakan pada dasarnya hal yang sama (tetapi tidak persis sama) berulang kali.RecipientTool , dengan tradeoff bahwa karena ini bukan alat, tidak ada cara untuk menegakkan/mengingatkan LLM untuk secara eksplisit menentukan penerima (dalam skenario di mana ini penting).DocChatAgent .gpt-4o sekarang menjadi LLM default di seluruh; Perbarui tes dan contoh untuk bekerja dengan LLM ini; Gunakan tokenizer yang sesuai dengan LLM.gemini 1.5 pro melalui litellmQdrantDB: Pembaruan untuk mendukung embeddings jarang yang dipelajari.Apr 2024:
chat_model="groq/llama3-8b-8192" . Lihat tutorial.Task.run(), Task.run_async(), run_batch_tasks memiliki max_cost dan max_tokens params untuk keluar ketika token atau biaya melebihi batas. Hasil ChatDocument.metadata sekarang termasuk bidang status yang merupakan kode yang menunjukkan kode alasan penyelesaian tugas. task.run() dll juga dapat dipanggil dengan bidang session_id eksplisit yang digunakan sebagai kunci untuk mencari berbagai pengaturan dalam cache Redis. Saat ini hanya digunakan untuk mencari "status bunuh" - ini memungkinkan membunuh tugas yang sedang berjalan, baik dengan task.kill() atau oleh classmethod Task.kill_session(session_id) . Misalnya penggunaan, lihat test_task_kill di tes/main/test_task.pyMar 2024:
DocChatAgent , lihat test_doc_chat_agent.py khususnya test_doc_chat_batch() ; Tugas baru menjalankan utilitas: run_batch_task_gen di mana generator tugas dapat ditentukan, untuk menghasilkan satu tugas per input.DocChatAgent sekarang akan bekerja dengan gambar-PDFS).DocChatAgent Context-Window memperbaikiURLLoader : Deteksi waktu file dari header ketika URL tidak berakhir dengan akhiran yang dapat dikenali seperti .pdf , .docx , dll.sentence_transformer tersedia.unstructured , haystack , chromadb , mkdocs , huggingface-hub , sentence-transformers .import langroid as lrFeb 2024:
chat_model="ollama/mistral" . Lihat catatan rilis.Jan 2024:
SQLChatAgent ). Lihat contoh skrip menggunakan agen ini untuk menjawab pertanyaan tentang dependensi Python PKG..doc (selain .docx )formatter opsional di OpenAIGPTConfig untuk memastikan pemformatan obrolan yang akurat untuk LLM lokal.DocChatAgentConfig memiliki param baru: add_fields_to_content , untuk menentukan bidang dokumen tambahan untuk dimasukkan ke dalam bidang content utama, untuk membantu meningkatkan pengambilan.Desember 2023:
DocChatAgent : menelan Data Pandas dan Penyaringan PANDAS.LanceDocChatAgent memanfaatkan LanceDB Vector-DB untuk pencarian vektor yang efisien dan pencarian dan penyaringan teks lengkap.LanceRAGTaskCreator untuk membuat sistem 2-agen yang terdiri dari LanceFilterAgent yang memutuskan filter dan ulang kueri untuk dikirim ke agen kain.Task yang lebih sederhana dengan ChatAgent default.November 2023:
0.1.126: Agen OpenaiAssistant: Dukungan caching.
0.1.117: Dukungan untuk Alat API Asisten OpenAI: Pemalsuan Fungsi, Kode-Intepri, dan Retriever (RAG), unggahan file. Ini bekerja mulus dengan orkestrasi tugas Langroid. Sampai dokumen siap, yang terbaik adalah melihat contoh penggunaan ini:
Tes:
Contoh skrip:
0.1.112: OpenAIAssistant adalah subclass dari ChatAgent yang memanfaatkan API Asisten Openai yang baru. Ini dapat digunakan sebagai pengganti drop-in untuk ChatAgent , dan bergantung pada Asisten API untuk mempertahankan keadaan percakapan, dan memanfaatkan utas dan asisten yang terus-menerus untuk menghubungkan kembali jika diperlukan. Contoh: test_openai_assistant.py , test_openai_assistant_async.py
0.1.111: Mendukung model OpenAI terbaru: GPT4_TURBO (lihat test_llm.py misalnya penggunaan)
0.1.110: Tingkatkan dari OpenAI V0.X ke V1.1.1 (dalam persiapan untuk Asisten API dan banyak lagi); ( litellm Dinonaktifkan sementara karena konflik versi openai).
Okt 2023:
DocChatAgent Re-rankers: rank_with_diversity , rank_to_periphery (hilang di tengah).DocChatAgentConfig.n_neighbor_chunks > 0 memungkinkan potongan konteks pengembalian di sekitar kecocokan.DocChatAgent menggunakan RelevanceExtractorAgent untuk memiliki LLM Extract Porsi yang relevan dari sepotong menggunakan penilaian kalimat, menghasilkan pengurangan kecepatan dan biaya yang sangat besar dibandingkan dengan pendekatan "pengkhianat kalimat" yang naif (menuliskan kalimat penuh seluruh kalimat yang relevan) yang digunakan LangChain dalam LLMChainExtractor mereka.import langroid as lr . Lihat dokumentasi untuk penggunaan.Sep 2023:
docx (pendahuluan).SQLChatAgent yang secara efisien mengambil info skema yang relevan saat menerjemahkan bahasa alami ke SQL.Agustus 2023:
GoogleSearchTool untuk mengaktifkan agen (LLM mereka) untuk melakukan pencarian Google melalui pemanggilan fungsi/alat. Lihat contoh obrolan ini untuk betapa mudahnya menambahkan alat ini ke agen.SQLChatAgent - Terima kasih kepada kontributor terbaru kami Rithwik Babu!Juli 2023:
TableChatAgent untuk mengobrol dengan set data tabular (DataFrames, File, URL): LLM menghasilkan kode panda, dan kode dieksekusi menggunakan mekanisme alat/fungsi-panggilan Langroid.DocChatAgent sekarang menerima file atau URL PDF.Misalkan Anda ingin mengekstrak informasi terstruktur tentang ketentuan utama dari dokumen sewa komersial. Anda dapat dengan mudah melakukan ini dengan langroid menggunakan sistem dua agen, seperti yang kami tunjukkan dalam langroid-icel-icelar repo. (Lihat skrip ini untuk versi dengan fungsionalitas yang sama menggunakan model Mistral-7B lokal.) Demo ini hanya menampilkan beberapa dari banyak fitur Langroid, seperti:
LeaseExtractor bertanggung jawab atas tugas tersebut, dan LLM (GPT4) -nya menghasilkan pertanyaan yang harus dijawab oleh DocAgent .DocAgent LLM (GPT4) menggunakan pengambilan dari toko vektor untuk menjawab pertanyaan LeaseExtractor , mengutip kutipan spesifik yang mendukung jawaban tersebut.LeaseExtractor LLM menyajikan informasi dalam format terstruktur menggunakan panggilan fungsi.Inilah yang terlihat seperti sedang beraksi (video MP4 yang dapat dijeda ada di sini).

(Untuk daftar yang lebih terbaru, lihat bagian Pembaruan/Rilis di atas)
Task.run() memiliki tanda tangan yang sama dengan metode responden agen, dan ini adalah kunci bagaimana tugas agen dapat mendelegasikan ke sub-tugas lain: dari sudut pandang tugas, sub-tugas hanyalah responden tambahan, untuk digunakan dalam mode round-robin setelah responden agen sendiri.Agent dan abstraksi Task memungkinkan pengguna untuk merancang agen dengan keterampilan khusus, membungkusnya dalam tugas, dan menggabungkan tugas dengan cara yang fleksibel.ToolMessage yang setara yang bekerja dengan LLM apa pun, bukan hanya OpenAi. Panggilan fungsi dan alat memiliki antarmuka yang menghadap pengembang yang sama, diimplementasikan menggunakan Pydantic, yang membuatnya sangat mudah untuk mendefinisikan alat/fungsi dan memungkinkan agen untuk menggunakannya. Manfaat menggunakan Pydantic adalah bahwa Anda tidak perlu menulis spesifikasi JSON yang kompleks untuk panggilan fungsi, dan ketika LLM berhalusinasi malformed JSON, pesan kesalahan Pydantic dikirim kembali ke LLM sehingga dapat memperbaikinya.langroid Langroid membutuhkan Python 3.11+. Kami merekomendasikan menggunakan lingkungan virtual. Gunakan pip untuk menginstal versi langroid versi sederhana (dari PYPI) ke lingkungan virtual Anda:
pip install langroid Paket inti Langroid memungkinkan Anda menggunakan model OpenAI Embeddings melalui API mereka. Jika Anda sebaliknya ingin menggunakan model penyematan sentence-transformers dari Huggingface, instal Langroid seperti ini:
pip install " langroid[hf-embeddings] "Untuk banyak skenario praktis, Anda mungkin memerlukan dependensi opsional tambahan:
doc-chat Extra: pip install " langroid[doc-chat] "db Extra: pip install " langroid[db] "
` `pip install " langroid[doc-chat,db] "all ekstra (tetapi perhatikan bahwa ini akan menghasilkan waktu beban/startup yang lebih lama dan ukuran instalasi yang lebih besar): pip install " langroid[all] " Jika Anda menggunakan SQLChatAgent (misalnya examples/data-qa/sql-chat/sql_chat.py ), dengan db postgres, Anda harus:
sudo apt-get install libpq-dev di ubuntu,brew install postgresql di mac, dll.pip install langroid[postgres] atau poetry add langroid[postgres] atau poetry install -E postgres . Jika ini memberi Anda kesalahan, coba pip install psycopg2-binary di VirtualEnv Anda. Jika Anda mendapatkan kesalahan aneh yang melibatkan mysqlclient , coba lakukan pip uninstall mysqlclient diikuti oleh pip install mysqlclient .
Untuk memulai, yang Anda butuhkan hanyalah kunci API Openai. Jika Anda tidak memilikinya, lihat halaman Openai ini. ;
Di root repo, salin file .env-template ke file baru .env :
cp .env-template .env Kemudian masukkan kunci API OpenAI Anda. File .env Anda harus terlihat seperti ini (organisasi opsional tetapi mungkin diperlukan dalam beberapa skenario).
OPENAI_API_KEY=your-key-here-without-quotes
OPENAI_ORGANIZATION=optionally-your-organization-idAtau, Anda dapat mengatur ini sebagai variabel lingkungan di shell Anda (Anda perlu melakukan ini setiap kali Anda membuka shell baru):
export OPENAI_API_KEY=your-key-here-without-quotesSemua pengaturan variabel lingkungan berikut adalah opsional, dan beberapa hanya diperlukan untuk menggunakan fitur tertentu (seperti disebutkan di bawah).
.env , sebagai nilai MOMENTO_AUTH_TOKEN (lihat file contoh di bawah),.env set CACHE_TYPE=momento (bukan CACHE_TYPE=redis yang merupakan default).GoogleSearchTool . Untuk menggunakan pencarian Google sebagai alat LLM/plugin/fungsi fungsi, Anda harus mengatur tombol Google API, lalu mengatur mesin pencari kustom Google (CSE) dan mendapatkan ID CSE. (Dokumentasi untuk ini bisa menantang, kami sarankan meminta GPT4 untuk panduan langkah demi langkah.) Setelah mendapatkan kredensial ini, menyimpannya sebagai nilai GOOGLE_API_KEY dan GOOGLE_CSE_ID dalam file .env Anda. Dokumentasi lengkap tentang penggunaan ini (dan alat "tanpa kewarganegaraan" ini akan segera hadir, tetapi sementara itu mengintip contoh obrolan ini, yang menunjukkan bagaimana Anda dapat dengan mudah melengkapi agen dengan GoogleSearchtool . Jika Anda menambahkan semua variabel opsional ini, file .env Anda akan terlihat seperti ini:
OPENAI_API_KEY=your-key-here-without-quotes
GITHUB_ACCESS_TOKEN=your-personal-access-token-no-quotes
CACHE_TYPE=redis # or momento
REDIS_PASSWORD=your-redis-password-no-quotes
REDIS_HOST=your-redis-hostname-no-quotes
REDIS_PORT=your-redis-port-no-quotes
MOMENTO_AUTH_TOKEN=your-momento-token-no-quotes # instead of REDIS* variables
QDRANT_API_KEY=your-key
QDRANT_API_URL=https://your.url.here:6333 # note port number must be included
GOOGLE_API_KEY=your-key
GOOGLE_CSE_ID=your-cse-id Saat menggunakan Azure Openai, variabel lingkungan tambahan diperlukan dalam file .env . Halaman ini Microsoft Azure Openai memberikan informasi lebih lanjut, dan Anda dapat mengatur setiap variabel lingkungan sebagai berikut:
AZURE_OPENAI_API_KEY , dari nilai API_KEYAZURE_OPENAI_API_BASE dari nilai ENDPOINT , biasanya terlihat seperti https://your.domain.azure.com .AZURE_OPENAI_API_VERSION , Anda dapat menggunakan nilai default di .env-template , dan versi terbaru dapat ditemukan di siniAZURE_OPENAI_DEPLOYMENT_NAME adalah nama model yang digunakan, yang ditentukan oleh pengguna selama pengaturan modelAZURE_OPENAI_MODEL_NAME azure openai memungkinkan nama model tertentu saat Anda memilih model untuk penyebaran Anda. Anda harus menempatkan nama model yang tepat yang dipilih. Misalnya, GPT-4 (harus gpt-4-32k atau gpt-4 ).AZURE_OPENAI_MODEL_VERSION diperlukan jika AZURE_OPENAI_MODEL_NAME = gpt=4 , yang akan membantu Langroid untuk menentukan biaya model Kami menyediakan versi wadah dari langroid-examples Repository melalui gambar Docker ini. Yang perlu Anda lakukan adalah mengatur variabel lingkungan dalam file .env . Harap ikuti langkah -langkah ini untuk mengatur wadah:
# get the .env file template from `langroid` repo
wget -O .env https://raw.githubusercontent.com/langroid/langroid/main/.env-template
# Edit the .env file with your favorite editor (here nano), and remove any un-used settings. E.g. there are "dummy" values like "your-redis-port" etc -- if you are not using them, you MUST remove them.
nano .env
# launch the container
docker run -it --rm -v ./.env:/langroid/.env langroid/langroid
# Use this command to run any of the scripts in the `examples` directory
python examples/ < Path/To/Example.py > Ini adalah penggoda cepat untuk memberikan sekilas tentang apa yang dapat Anda lakukan dengan langroid dan bagaimana kode Anda akan terlihat.
langroid-examples .
Berbagai petunjuk LLM dan instruksi di Langroid telah diuji untuk bekerja dengan baik dengan GPT-4 (dan sampai batas tertentu GPT-4O). Beralih ke LLM lain (lokal/terbuka dan hak milik) mudah (lihat panduan yang disebutkan di atas), dan mungkin cukup untuk beberapa aplikasi, tetapi secara umum Anda dapat melihat hasil yang lebih rendah kecuali Anda menyesuaikan petunjuk dan/atau pengaturan multi-agen.
Juga lihat Getting Started Guide untuk tutorial terperinci.
Klik untuk memperluas salah satu contoh kode di bawah ini. Semua ini dapat dijalankan dalam buku catatan Colab:
import langroid . language_models as lm
mdl = lm . OpenAIGPT ()
messages = [
lm . LLMMessage ( content = "You are a helpful assistant" , role = lm . Role . SYSTEM ),
lm . LLMMessage ( content = "What is the capital of Ontario?" , role = lm . Role . USER ),
]
response = mdl . chat ( messages , max_tokens = 200 )
print ( response . message ) cfg = lm . OpenAIGPTConfig (
chat_model = "local/localhost:8000" ,
chat_context_length = 4096
)
mdl = lm . OpenAIGPT ( cfg )
# now interact with it as above, or create an Agent + Task as shown below. Jika model didukung oleh liteLLM , maka tidak perlu meluncurkan server proxy. Cukup atur param chat_model di atas ke litellm/[provider]/[model] , misalnya litellm/anthropic/claude-instant-1 dan gunakan objek konfigurasi seperti di atas. Perhatikan bahwa untuk menggunakan litellm Anda perlu menginstal langroid dengan litellm tambahan: poetry install -E litellm atau pip install langroid[litellm] . Untuk model jarak jauh, Anda biasanya perlu mengatur tombol API dll sebagai variabel lingkungan. Anda dapat mengaturnya berdasarkan dokumen litellm. Jika ada variabel lingkungan yang diperlukan hilang, Langroid memberikan pesan kesalahan yang bermanfaat yang menunjukkan mana yang diperlukan. Perhatikan bahwa untuk menggunakan langroid dengan litellm Anda perlu menginstal litellm Extra, yaitu pip install langroid[litellm] di env virtual Anda, atau jika Anda berkembang di dalam repo langroid , poetry install -E litellm .
pip install langroid[litellm] import langroid as lr
agent = lr . ChatAgent ()
# get response from agent's LLM, and put this in an interactive loop...
# answer = agent.llm_response("What is the capital of Ontario?")
# ... OR instead, set up a task (which has a built-in loop) and run it
task = lr . Task ( agent , name = "Bot" )
task . run () # ... a loop seeking response from LLM or User at each turn Permainan angka mainan, di mana saat diberikan nomor n :
repeater_task hanya mengembalikan n ,even_task Returns n/2 If n Even, Lain lain mengatakan "do-not-know"odd_task Mengembalikan 3*n+1 jika n ganjil, kalau tidak, "do-not-know" Masing -masing Task ini secara otomatis mengkonfigurasi ChatAgent default.
import langroid as lr
from langroid . utils . constants import NO_ANSWER
repeater_task = lr . Task (
name = "Repeater" ,
system_message = """
Your job is to repeat whatever number you receive.
""" ,
llm_delegate = True , # LLM takes charge of task
single_round = False ,
)
even_task = lr . Task (
name = "EvenHandler" ,
system_message = f"""
You will be given a number.
If it is even, divide by 2 and say the result, nothing else.
If it is odd, say { NO_ANSWER }
""" ,
single_round = True , # task done after 1 step() with valid response
)
odd_task = lr . Task (
name = "OddHandler" ,
system_message = f"""
You will be given a number n.
If it is odd, return (n*3+1), say nothing else.
If it is even, say { NO_ANSWER }
""" ,
single_round = True , # task done after 1 step() with valid response
) Kemudian tambahkan even_task dan odd_task sebagai sub-tugas repeater_task , dan jalankan repeater_task , kicking dengan angka sebagai input:
repeater_task . add_sub_task ([ even_task , odd_task ])
repeater_task . run ( "3" )Langroid memanfaatkan Pydantic untuk mendukung API panggilan fungsi OpenAI serta alat asli sendiri. Manfaatnya adalah Anda tidak perlu menulis JSON apa pun untuk menentukan skema, dan juga jika LLM berhalusinasi sintaks alat yang cacat, Langroid mengirimkan kesalahan validasi Pydantic (yang sesuai disanitasi) ke LLM sehingga dapat memperbaikinya!
Contoh Sederhana: Katakanlah agen memiliki daftar nomor rahasia, dan kami ingin LLM menemukan angka terkecil dalam daftar. Kami ingin memberikan LLM alat/fungsi probe yang mengambil satu bilangan n sebagai argumen. Metode pawang alat dalam agen mengembalikan berapa banyak angka dalam daftarnya paling banyak n .
Pertama -tama tentukan alat menggunakan kelas ToolMessage Langroid:
import langroid as lr
class ProbeTool ( lr . agent . ToolMessage ):
request : str = "probe" # specifies which agent method handles this tool
purpose : str = """
To find how many numbers in my list are less than or equal to
the <number> you specify.
""" # description used to instruct the LLM on when/how to use the tool
number : int # required argument to the tool Kemudian tentukan SpyGameAgent sebagai subclass dari ChatAgent , dengan probe metode yang menangani alat ini:
class SpyGameAgent ( lr . ChatAgent ):
def __init__ ( self , config : lr . ChatAgentConfig ):
super (). __init__ ( config )
self . numbers = [ 3 , 4 , 8 , 11 , 15 , 25 , 40 , 80 , 90 ]
def probe ( self , msg : ProbeTool ) -> str :
# return how many numbers in self.numbers are less or equal to msg.number
return str ( len ([ n for n in self . numbers if n <= msg . number ]))Kami kemudian instantiate agen dan memungkinkannya untuk menggunakan dan menanggapi alat:
spy_game_agent = SpyGameAgent (
lr . ChatAgentConfig (
name = "Spy" ,
vecdb = None ,
use_tools = False , # don't use Langroid native tool
use_functions_api = True , # use OpenAI function-call API
)
)
spy_game_agent . enable_message ( ProbeTool ) Untuk contoh kerja lengkap, lihat skrip obrolan langroid-examples .
Misalkan Anda ingin agen untuk mengekstrak ketentuan utama sewa, dari dokumen sewa, sebagai struktur JSON bersarang. Pertama -tama tentukan struktur yang diinginkan melalui model Pydantic:
from pydantic import BaseModel
class LeasePeriod ( BaseModel ):
start_date : str
end_date : str
class LeaseFinancials ( BaseModel ):
monthly_rent : str
deposit : str
class Lease ( BaseModel ):
period : LeasePeriod
financials : LeaseFinancials
address : str Kemudian tentukan alat LeaseMessage sebagai subclass dari Langroid's ToolMessage . Catatan Alat ini memiliki terms argumen yang diperlukan dari jenis Lease :
import langroid as lr
class LeaseMessage ( lr . agent . ToolMessage ):
request : str = "lease_info"
purpose : str = """
Collect information about a Commercial Lease.
"""
terms : Lease Kemudian tentukan LeaseExtractorAgent dengan metode lease_info yang menangani alat ini, instantiate agen, dan memungkinkannya untuk menggunakan dan menanggapi alat ini:
class LeaseExtractorAgent ( lr . ChatAgent ):
def lease_info ( self , message : LeaseMessage ) -> str :
print (
f"""
DONE! Successfully extracted Lease Info:
{ message . terms }
"""
)
return json . dumps ( message . terms . dict ())
lease_extractor_agent = LeaseExtractorAgent ()
lease_extractor_agent . enable_message ( LeaseMessage ) Lihat skrip chat_multi_extract.py dalam langroid-examples repo untuk contoh kerja penuh.
Langroid menyediakan DocChatAgent kelas agen khusus untuk tujuan ini. Ini menggabungkan sharding dokumen, penyematan, penyimpanan dalam vektor-DB, dan generasi query-janswer pengambilan. Menggunakan kelas ini untuk mengobrol dengan koleksi dokumen itu mudah. Pertama -tama buat instance DocChatAgentConfig , dengan bidang doc_paths yang menentukan dokumen untuk mengobrol.
import langroid as lr
from langroid . agent . special import DocChatAgentConfig , DocChatAgent
config = DocChatAgentConfig (
doc_paths = [
"https://en.wikipedia.org/wiki/Language_model" ,
"https://en.wikipedia.org/wiki/N-gram_language_model" ,
"/path/to/my/notes-on-language-models.txt" ,
],
vecdb = lr . vector_store . QdrantDBConfig (),
) Kemudian instantiate DocChatAgent (ini memasukkan dokumen ke dalam toko vektor):
agent = DocChatAgent ( config )Lalu kita bisa mengajukan pertanyaan sekaligus agen,
agent . llm_response ( "What is a language model?" ) Atau bungkus dalam Task dan jalankan loop interaktif dengan pengguna:
task = lr . Task ( agent )
task . run () Lihat skrip kerja lengkap di folder docqa dari langroid-examples Repo.
Menggunakan Langroid Anda dapat mengatur TableChatAgent dengan dataset (jalur file, URL atau DataFrame), dan menanyakannya. Agen LLM menghasilkan kode panda untuk menjawab kueri, melalui pemalsuan fungsi (atau alat/plugin), dan metode penanganan fungsi agen menjalankan kode dan mengembalikan jawabannya.
Inilah cara Anda dapat melakukan ini:
import langroid as lr
from langroid . agent . special import TableChatAgent , TableChatAgentConfig Siapkan TableChatAgent untuk file data, URL, atau DataFrame (pastikan tabel data memiliki baris header; pembatas/pemisah yang terdeteksi secara otomatis):
dataset = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
# or dataset = "/path/to/my/data.csv"
# or dataset = pd.read_csv("/path/to/my/data.csv")
agent = TableChatAgent (
config = TableChatAgentConfig (
data = dataset ,
)
)Siapkan tugas, dan ajukan pertanyaan sekali saja seperti ini:
task = lr . Task (
agent ,
name = "DataAssistant" ,
default_human_response = "" , # to avoid waiting for user input
)
result = task . run (
"What is the average alcohol content of wines with a quality rating above 7?" ,
turns = 2 # return after user question, LLM fun-call/tool response, Agent code-exec result
)
print ( result . content )Atau sebagai alternatif, atur tugas dan jalankan dalam loop interaktif dengan pengguna:
task = lr . Task ( agent , name = "DataAssistant" )
task . run () Untuk contoh kerja penuh, lihat skrip table_chat.py dalam langroid-examples Repo.
Jika Anda menyukai proyek ini, tolong berikan bintang dan? Sebarkan berita di jaringan atau media sosial Anda:
Dukungan Anda akan membantu membangun momentum dan komunitas Langroid.