Langroid
、CMUおよびUW-Madisonの研究者からLLMを搭載したアプリケーションを簡単に構築するための直感的で軽量で拡張可能なPythonフレームワークです。エージェントをセットアップし、オプションのコンポーネント(LLM、ベクトルストア、ツール/関数)を装備し、タスクを割り当て、メッセージを交換して問題を共同で解決させます。このマルチエージェントパラダイムは、俳優のフレームワークに触発されています(ただし、これについて何も知る必要はありません!)。
Langroid
は、LLMアプリ開発の新たなテイクであり、開発者エクスペリエンスを簡素化することにかなりの考えがあります。 Langchain
、またはその他のLLMフレームワークは使用しません。
Langroidアーキテクチャの(WIP)概要をお読みください
?企業は、生産にLangroidを使用/適応させています。これが引用です:
Nullifyは、安全なソフトウェア開発にAIエージェントを使用します。脆弱性を見つけ、優先順位付け、修正します。 Crewai、Autogen、Langchain、Langflowなどを評価した後、生産におけるLangroidのマルチエージェントオーケストレーションフレームワークを内部的に適合させました。Langroidは、セットアップと柔軟性の容易さの点でそれらのフレームワークよりもはるかに優れていることがわかりました。 Langroidのエージェントとタスクの抽象化は直感的でよく考えられており、優れた開発者エクスペリエンスを提供します。私たちは、生産で何かを得るための最も迅速な方法を望んでいました。他のフレームワークでは数週間かかりましたが、Langroidでは数分で良い結果を得ました。強くお勧めします!
-NullifyのAIの責任者であるJacky Wong。
LancedBチームからのLangroidブログ投稿のこのイントロを参照してください
ML for Healthcare(2024)に掲載されたばかり:薬物学生用のLangroidベースのマルチエージェントRAGシステム、ブログ投稿を参照してください
貢献を歓迎します。何を貢献するかについてのアイデアについては、貢献ドキュメントを参照してください。
LLMアプリケーションを構築していますか、それとも会社のLangroidのヘルプが必要ですか、それとも会社のユースケースにLangroid機能を優先したいですか? Prasad Chalasaniは、コンサルティング(アドバイザリー/開発):Gmail Dot comのPchalasaniです。
スポンサーシップは、Githubスポンサーを介して受け入れられます
質問、フィードバック、アイデア? Discordに参加してください!
これは単なるティーザーです。関数呼び出し/ツール、マルチエージェントコラボレーション、構造化された情報抽出、Docchatagent(RAG)、SQLChatagent、非Openai Local/Remote LLMSなど、さらに多くのことがあります。スクロールダウンまたはドキュメントを参照してください。 OpenAI ChatCompletion APIを使用して、2エージェントの情報抽出例を構築するLangroidクイックスタートコラブを参照してください。代わりにOpenaiアシスタントAPIを使用するこのバージョンも参照してください。
リリースされたばかり!ラングロイドマルチエージェントとツールを使用して、ローカルLLMのみを使用してドキュメントから構造化された情報を抽出する方法を示す例の例。
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 ()
2024年11月:
Agent
Sのサポートを有効にします。Qwen2.5-Coder-32b-Instruct
)2024年10月:
2024年9月:
o1-mini
およびo1-preview
モデルのサポート。DocChatAgent
、相互ランク融合(RRF)を使用して、さまざまな方法で取得したランクのチャンクをランク付けします。run_batch_task
新しいオプションstop_on_first_result
タスクが結果を返すとすぐにバッチの終了を許可します。2024年8月:
Task.run(), Task.run_async
。2024年7月:
2024年6月:
RewindTool
(そして、すべての依存メッセージが系統の追跡のおかげでクリアされます)。ここでメモを読んでください。2024年5月:
doc-chat
、 db
(データベース関連の依存関係)。以下およびドキュメント内の更新されたインストール手順を参照してください。examples
という名前のクラスメソッドを含めることができました。このリストのランダムな例を使用して、LLMの1ショット例を生成します。これが改善されたため、各例がツールインスタンスまたは(説明、ツールインスタンス)のタプルである例のリストを提供できるようになりました。説明は、LLMにツールを使用する「思考」です(ドキュメントの例を参照)。いくつかのシナリオでは、LLMツールの生成の精度を向上させることができます。また、ランダムな例の代わりに、すべての例を使用して、少数のショット例を生成します。TaskConfig
で構成可能。エンティティが本質的に類似している(ただしまったく同じではない)ことを繰り返し言っている近似ループではなく、正確なループのみを検出します。RecipientTool
メカニズムに代わるより簡単な代替です(これが重要なシナリオで)。DocChatAgent
を使用する場合、大いに改善された引用生成と表示。gpt-4o
は、全体を通してデフォルトのLLMになりました。このLLMで動作するテストと例を更新します。 LLMに対応するトークン剤を使用します。gemini 1.5 pro
litellm
経由のProサポートQdrantDB:
学習したスパース埋め込みをサポートするための更新。2024年4月:
chat_model="groq/llama3-8b-8192"
を指定します。チュートリアルを参照してください。Task.run(), Task.run_async(), run_batch_tasks
はmax_cost
およびmax_tokens
パラメーションがあり、トークンまたはコストが制限を超えると終了します。結果ChatDocument.metadata
には、タスク完了理由コードを示すコードであるstatus
フィールドが含まれるようになりました。また、 task.run()
などは、Redisキャッシュのさまざまな設定を検索するためのキーとして使用される明示的なsession_id
フィールドで呼び出すことができます。現在、「キルステータス」を検索するためにのみ使用されます。これにより、 task.kill()
またはclassmethod Task.kill_session(session_id)
のいずれかで実行されるタスクを殺すことができます。たとえば、Test_task_killのtest_task_kill
/main/test_task.pyを参照してください2024年3月:
DocChatAgent
の同時実行を可能にするための改善、 test_doc_chat_agent.py
を参照してください。特にtest_doc_chat_batch()
;新しいタスク実行ユーティリティ: run_batch_task_gen
タスクジェネレーターを指定できる場所で、入力ごとに1つのタスクを生成します。DocChatAgent
Image-PDFSで動作することを意味します)。DocChatAgent
Context-Window修正URLLoader
:URLが.pdf
、 .docx
などの認識可能なサフィックスで終了しない場合、ヘッダーからファイル時間を検出します。sentence_transformer
モジュールが利用可能かどうかに基づいて、自動選択埋め込み構成。sentence-transformers
依存関係、いくつmkdocs
haystack
重いunstructured
chromadb
オプションhuggingface-hub
します。import langroid as lr
からのより簡単なトップレベルのインポート2024年2月:
chat_model="ollama/mistral"
を指定します。リリースノートを参照してください。2024年1月:
SQLChatAgent
仕組みに類似)。このエージェントを使用したスクリプトの例を参照して、Python PKG依存関係に関する質問に答えてください。.doc
ファイルの解析のサポート( .docx
に加えて)OpenAIGPTConfig
でオプションのformatter
Paramを指定して、ローカルLLMの正確なチャットフォーマットを確保します。DocChatAgentConfig
、 content
フィールドに挿入する追加のドキュメントフィールドを指定して、検索を改善するための新しいparam: add_fields_to_content
があります。2023年12月:
DocChatAgent
:Pandasデータフレームとフィルタリングを摂取します。LanceDocChatAgent
、効率的なベクター検索とフルテキスト検索とフィルタリングのためにLanceDB
Vector-DBを活用します。LanceRAGTaskCreator
、ラグエージェントに送信するフィルターと言い換えのクエリを決定するLanceFilterAgent
で構成される2エージェントシステムを作成します。ChatAgent
を使用したよりシンプルなTask
初期化。2023年11月:
0.1.126: OpenAisistant Agent:キャッシュサポート。
0.1.117: OpenAIアシスタントAPIツールのサポート:関数-Calling、Code-Intepreter、およびRetriver(RAG)、ファイルアップロード。これらは、Langroidのタスクと再構成とシームレスに機能します。ドキュメントが準備が整うまで、これらの使用例を確認するのが最善です。
テスト:
例:スクリプト:
0.1.112: OpenAIAssistant
、新しいOpenaiアシスタントAPIを活用するChatAgent
のサブクラスです。 ChatAgent
のドロップイン交換として使用でき、アシスタントAPIに依存して会話状態を維持することができ、必要に応じて永続的なスレッドとアシスタントをレバレッジして再接続します。例: test_openai_assistant.py
、 test_openai_assistant_async.py
0.1.111:最新のOpenAIモデルをサポート: GPT4_TURBO
(例えば使用法などを参照)
0.1.110: Openai v0.xからv1.1.1へのアップグレード(アシスタントAPIなどの準備中)。 (Openaiバージョンの競合により、 litellm
一時的に無効になっています)。
2023年10月:
DocChatAgent
再ランカー: rank_with_diversity
、 rank_to_periphery
(lost in middle)。DocChatAgentConfig.n_neighbor_chunks > 0
使用すると、コンテキストチャンクを試合中に返すことができます。DocChatAgent
、 RelevanceExtractorAgent
を使用してLLM抽出物に文のンジャリングを使用してチャンクの関連部分を抽出し、 LangChain
でラングLLMChainExtractor
を使用する素朴な「文化パロージング」アプローチ(関連する全体的な文章を書き出す)と比較して、巨大なスピードアップとコスト削減をもたらします。import langroid as lr
ことでアクセスできます。使用法のドキュメントを参照してください。2023年9月:
docx
ファイルのロードのサポート(予備)。SQLChatAgent
改善。2023年8月:
GoogleSearchTool
、エージェント(LLM)が機能コール/ツールを介してGoogle検索を行うことを可能にします。このツールをエージェントに追加するのがどれほど簡単かについては、このチャットの例を参照してください。SQLChatAgent
を追加 - 最新の貢献者Rithwik Babuのおかげです!2023年7月:
TableChatAgent
を追加して表現するようにTabular Datasets(データフレーム、ファイル、URLS)とチャット:LLMはPandasコードを生成し、Langroidのツール/機能コールメカニズムを使用してコードが実行されます。DocChatAgent
PDFファイルまたはURLを受け入れるようになりました。商業リース文書の主要な条件に関する構造化された情報を抽出したいとします。 Langroid-Examplesリポジトリで表示されるように、2エージェントシステムを使用してLangroidで簡単にこれを行うことができます。 (ローカルMistral-7Bモデルを使用して同じ機能を持つバージョンについては、このスクリプトを参照してください。)デモは、次のようなLangroidの多くの機能のいくつかを紹介します。
LeaseExtractor
はタスクを担当し、そのLLM(GPT4)は、 DocAgent
が回答する質問を生成します。DocAgent
LLM(GPT4)は、ベクターストアから検索を使用してLeaseExtractor
の質問に答え、答えをサポートする特定の抜粋を引用します。LeaseExtractor
LLMは、関数コールを使用して構造化された形式で情報を提示します。これが動作中のものです(一時停止可能なMP4ビデオはこちらです)。
(最新のリストについては、上記の更新/リリースセクションを参照してください)
Task.run()
メソッドはエージェントのレスポンダーのメソッドと同じタイプシグネチャーを持っています。これは、エージェントのタスクが他のサブタスクに委任する方法の鍵です。タスクの観点から、サブタスクは単に追加のレスポンダーであり、エージェント自身のレスポンダーの後にラウンドロビンファッションで使用されます。Agent
とTask
抽象化により、ユーザーは特定のスキルを備えたエージェントを設計し、タスクにラップし、タスクを柔軟な方法で組み合わせることができます。ToolMessage
メカニズムをサポートします。関数呼び出しとツールには、Pydanticを使用して実装された同じ開発者向けインターフェイスがあり、ツール/機能を簡単に定義し、エージェントがそれらを使用できるようになります。 Pydanticを使用することの利点は、関数呼び出しのために複雑なJSON仕様を書く必要がないことであり、LLMが奇形のJSONを幻覚すると、PydanticエラーメッセージがLLMに送信され、修正できます。langroid
をインストールしますLangroidにはPython 3.11+が必要です。仮想環境を使用することをお勧めします。 pip
を使用して、 langroid
(Pypiから)のベアボーンスリムバージョンを仮想環境にインストールします。
pip install langroid
Core Langroidパッケージを使用すると、APIを介してOpenai Embeddingsモデルを使用できます。代わりに、Huggingfaceからモデルを埋め込むsentence-transformers
を使用する場合は、次のようにLangroidをインストールします。
pip install " langroid[hf-embeddings] "
多くの実用的なシナリオでは、追加のオプションの依存関係が必要になる場合があります。
doc-chat
extraでlangroidをインストールします。 pip install " langroid[doc-chat] "
db
Extraを使用してください。 pip install " langroid[db] "
` `
pip install " langroid[doc-chat,db] "
all
追加を使用します(ただし、これにより、ロード/起動時間が長くなり、インストールサイズが大きくなることに注意してください): pip install " langroid[all] "
SQLChatAgent
(たとえば、スクリプトのexamples/data-qa/sql-chat/sql_chat.py
)を使用している場合、postgres dbを使用して、次のことが必要です。
sudo apt-get install libpq-dev
on ubuntu、brew install postgresql
pip install langroid[postgres]
poetry add langroid[postgres]
またはpoetry install -E postgres
を追加します。これによりエラーが発生した場合は、virtualenvにpip install psycopg2-binary
みてください。 mysqlclient
含む奇妙なエラーが発生した場合は、 pip uninstall mysqlclient
を実行してからpip install mysqlclient
試してみてください。
開始するには、必要なのはOpenai APIキーだけです。持っていない場合は、このOpenAIページをご覧ください。 (これは開始する最も簡単な方法ですが、LangroidはOpenaiのものだけでなく、実質的にあらゆるLLMを使用します。Open/Local LLMS、およびその他の非Openai Proprietary LLMを使用するガイドをご覧ください。)
リポジトリのルートで、 .env-template
ファイルを新しいファイルにコピーします.env
cp .env-template .env
次に、OpenAI APIキーを挿入します。 .env
ファイルは次のように見えるはずです(組織はオプションですが、一部のシナリオでは必要になる場合があります)。
OPENAI_API_KEY=your-key-here-without-quotes
OPENAI_ORGANIZATION=optionally-your-organization-id
または、これをシェル内の環境変数として設定することもできます(新しいシェルを開くたびにこれを行う必要があります):
export OPENAI_API_KEY=your-key-here-without-quotes
次のすべての環境変数設定はオプションであり、一部は特定の機能を使用するためにのみ必要です(以下のように)。
MOMENTO_AUTH_TOKEN
の値として、 .env
ファイルにMomentoトークンを入力します(以下の例を参照)、.env
ファイルでCACHE_TYPE=momento
( CACHE_TYPE=redis
の代わりにデフォルト)。GoogleSearchTool
を使用できるようにするためにのみ必要です。 Google SearchをLLMツール/プラグイン/機能コールとして使用するには、Google APIキーを設定し、Googleカスタム検索エンジン(CSE)をセットアップしてCSE IDを取得する必要があります。 (これらのドキュメントは困難な場合があります。GPT4にステップバイステップガイドを求めることをお勧めします。)これらの資格情報を取得した後、 .env
ファイルにGOOGLE_API_KEY
およびGOOGLE_CSE_ID
の値として保存します。これを使用することに関する完全なドキュメント(およびそのような「ステートレス」ツール)はまもなく登場しますが、その間にこのチャットの例を覗いてみてください。これは、エージェントにGoogleSearchtool
を簡単に装備する方法を示しています。これらのオプション変数をすべて追加すると、 .env
ファイルは次のようになります。
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
Azure Openaiを使用する場合、 .env
ファイルに追加の環境変数が必要です。このページMicrosoft Azure Openaiはより多くの情報を提供し、次のように各環境変数を設定できます。
AZURE_OPENAI_API_KEY
、 API_KEY
の値からAZURE_OPENAI_API_BASE
ENDPOINT
の値から、通常はhttps://your.domain.azure.com
のように見えます。AZURE_OPENAI_API_VERSION
の場合、デフォルト値を.env-template
で使用でき、最新バージョンはこちらにあります。AZURE_OPENAI_DEPLOYMENT_NAME
は展開モデルの名前であり、モデルのセットアップ中にユーザーによって定義されますAZURE_OPENAI_MODEL_NAME
azure openaiは、展開のモデルを選択する際に特定のモデル名を許可します。選択された正確なモデル名を正確に配置する必要があります。たとえば、GPT-4( gpt-4-32k
またはgpt-4
である必要があります)。AZURE_OPENAI_MODEL_VERSION
が必要ですAZURE_OPENAI_MODEL_NAME = gpt=4
では、ラングロイドがモデルのコストを決定するのを支援しますこのDocker画像を介してlangroid-examples
リポジトリのコンテナ化バージョンを提供します。必要なのは、 .env
ファイルに環境変数をセットアップすることです。コンテナをセットアップするには、次の手順に従ってください。
# 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 >
これらは、Langroidで何ができるか、コードがどのように見えるかを垣間見るための迅速なティーザーです。
langroid-examples
リポジトリを参照することをお勧めします。
LangroidのさまざまなLLMプロンプトと指示は、GPT-4(およびある程度GPT-4O)でうまく機能するようにテストされています。他のLLMS(ローカル/オープンおよび専有)への切り替えは簡単で(上記のガイドを参照)、一部のアプリケーションでは十分かもしれませんが、一般的には、プロンプトやマルチエージェントのセットアップを調整しない限り劣った結果が表示される場合があります。
詳細なチュートリアルについてはGetting Started Guide
も参照してください。
クリックして、以下のコード例を展開します。これらはすべて、コラブノートブックで実行できます。
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.
モデルがliteLLM
によってサポートされている場合、プロキシサーバーを起動する必要はありません。上記のchat_model
paramをlitellm/anthropic/claude-instant-1
litellm/[provider]/[model]
に設定するだけです。 litellm
使用するには、 litellm
Extra: poetry install -E litellm
またはpip install langroid[litellm]
をインストールする必要があることに注意してください。リモートモデルの場合、通常、APIキーなどを環境変数として設定する必要があります。 Litellmドキュメントに基づいてそれらを設定できます。必要な環境変数が欠落している場合、Langroidは、どの環境が必要かを示す役立つエラーメッセージを提供します。 litellm
を使用してlangroid
を使用するには、 litellm
Extra、つまり仮想envにpip install langroid[litellm]
か、 langroid
Repo内で開発している場合は、 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
Number Number n
を与えられた場合、おもちゃ番号ゲーム:
repeater_task
のLLMは単にn
を返します、even_task
のLLMはn/2
均等に返しますn
odd_task
のLLMは、 n
が奇妙な場合は3*n+1
を返します。これらのTask
はそれぞれ、デフォルトのChatAgent
を自動的に構成します。
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
)
次に、 repeater_task
のサブタスクとしてeven_task
とodd_task
を追加し、 repeater_task
を実行し、入力として数字で蹴ります。
repeater_task . add_sub_task ([ even_task , odd_task ])
repeater_task . run ( "3" )
LangroidはPydanticを活用して、Openaiの機能を呼び出すAPIと独自のネイティブツールをサポートします。利点は、スキーマを指定するためにJSONを記述する必要がないこと、およびLLMが奇形のツール構文を幻覚する場合、LangroidはPydantic Validationエラー(適切に消毒された)をLLMに送信して修正できます!
簡単な例:エージェントに数字の秘密リストがあり、LLMにリスト内の最小の数字を見つけてほしいとします。 LLMに、単一の数値n
引数として取得するprobe
ツール/関数を提供したいと考えています。エージェントのツールハンドラーメソッドは、リスト内の数値の数がせいぜいn
であるかどうかを返します。
LangroidのToolMessage
クラスを使用して、最初にツールを定義します。
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
次に、このツールを処理するメソッドprobe
を使用して、 SpyGameAgent
ChatAgent
のサブクラスとして定義します。
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 ]))
次に、エージェントをインスタンス化し、ツールを使用して応答できるようにします。
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 )
完全な例についてはlangroid-examples
RepoのChat-Agent-tool.pyスクリプトを参照してください。
エージェントがネストされたJSON構造として、リース文書からリースの主要な条件を抽出したいとします。最初に、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
次に、LangroidのToolMessage
のサブクラスとしてLeaseMessage
ツールを定義します。注ツールには、タイプLease
の必要な引数terms
があります。
import langroid as lr
class LeaseMessage ( lr . agent . ToolMessage ):
request : str = "lease_info"
purpose : str = """
Collect information about a Commercial Lease.
"""
terms : Lease
次に、このツールを処理するメソッドlease_info
を使用してLeaseExtractorAgent
定義し、エージェントをインスタンス化し、このツールを使用および応答できるようにします。
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 )
langroid-examples
リポジトリのchat_multi_extract.py
スクリプトを参照してください。
Langroidは、この目的のために専門的なエージェントクラスのDocChatAgent
を提供します。ドキュメントシャード、埋め込み、ベクトル-DBでのストレージ、および検索されたクエリ回答生成が組み込まれています。このクラスを使用してドキュメントのコレクションとチャットするのは簡単です。最初に、チャットするドキュメントを指定するdoc_paths
フィールドを使用して、 DocChatAgentConfig
インスタンスを作成します。
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 (),
)
次に、 DocChatAgent
をインスタンス化します(これにより、ドキュメントをベクターストアに摂取します):
agent = DocChatAgent ( config )
その後、エージェントに1回限りの質問をすることができます。
agent . llm_response ( "What is a language model?" )
または、 Task
にラップして、ユーザーとインタラクティブループを実行します。
task = lr . Task ( agent )
task . run ()
langroid-examples
Repoのdocqa
フォルダーの完全な作業スクリプトを参照してください。
Langroidを使用して、データセット(ファイルパス、URL、またはデータフレーム)を備えたTableChatAgent
セットアップして照会できます。エージェントのLLMは、関数コール(またはツール/プラグイン)を介してクエリに回答するためにPandasコードを生成し、エージェントの関数処理メソッドがコードを実行して答えを返します。
これがあなたがこれを行う方法です:
import langroid as lr
from langroid . agent . special import TableChatAgent , TableChatAgentConfig
データファイル、URL、またはデータフレーム用のTableChatAgent
設定します(データテーブルにヘッダー行があることを確認します。
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 ,
)
)
タスクを設定し、次のような一回限りの質問をします。
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 )
または、タスクをセットアップして、ユーザーとのインタラクティブループで実行します。
task = lr . Task ( agent , name = "DataAssistant" )
task . run ()
完全な例についてはlangroid-examples
Repoのtable_chat.py
スクリプトを参照してください。
このプロジェクトが気に入ったら、星を渡してください。ネットワークまたはソーシャルメディアに単語を広めます:
あなたのサポートは、Langroidの勢いとコミュニティの構築に役立ちます。