Langroidは、大規模言語モデル(LLM)によって駆動されるアプリケーションの構築プロセスを簡素化するために設計された、研究者や開発者のためのPythonフレームワークです。カーネギーメロン大学とウィスコンシン大学マディソン校の研究者によって開発されたこのフレームワークの核となるアイデアは、マルチインテリジェントボディプログラミングによってLLMのパワーを活用することである。このフレームワークでは、開発者は複数のエージェントをセットアップし、大規模な言語モデル、ベクターデータベース、ツールを装備させ、タスクを割り当てることで、これらのエージェントがメッセージのやり取りによって複雑な問題を共同で解決することができます。直感的で軽量かつスケーラブルに設計されたLangroidは、他のLLMフレームワーク(LangChainなど)とは独立しており、事実上どのようなタイプの大規模LLMでも動作します。Langroidは、他のLLMフレームワーク(LangChainなど)に依存せず、ほぼすべてのタイプの大規模言語モデルで使用でき、開発者に柔軟で強力な開発環境を提供します。
機能一覧
- マルチインテリジェンス・コラボレーション。 複雑なタスクに一緒に取り組むために、メッセージングを通じて協力できる複数のインテリジェンスの創造をサポートする。
- 仕事のプログラム とおす
Task
クラスでインテリジェンスをパッケージ化し、彼らに明確な指示と目標を設定し、階層的かつ再帰的な方法でタスクの委譲を可能にする。 - 広範なLLMサポート。 OpenAIのモデルファミリーのサポートに加え、エージェントライブラリやローカルサーバー(ollama、LiteLLMなど)を通じて、オープンソース、ローカルデプロイ、商用モデルを含む数百の他のプロバイダーのLLMがサポートされている。
- ツール/ファンクションコール OpenAIの関数呼び出し機能をサポートし、独自の
ToolMessage
あらゆるLLMに適用可能なこのメカニズムは、Pydanticを使って定義されているため、開発プロセスが簡素化され、LLMが生成するJSONのフォーマットが正しくない場合の処理が可能になる。 - 検索拡張世代(RAG)。 内蔵
DocChatAgent
ローカルファイルやURLを含むドキュメント・コレクションと簡単にやりとりでき、ドキュメントのチャンキング、埋め込み、ベクトルの保存と検索をサポートしている。 - 複数のベクトルデータベースをサポート。 Qdrant、Chroma、LanceDB、Pinecone、pgvector、その他多くのベクトルデータベースをサポートし、効率的なRAGを実現します。
- キャッシュメカニズム。 RedisまたはMomentoを使用したLLM APIレスポンスのキャッシュをサポートし、繰り返し呼び出すコストと時間を削減します。
- 観測可能性とロギング。 マルチ・インテリジェンス・インタラクションの詳細なログを生成し、開発者がトレースやデバッグを行えるように、メッセージの発信元と送信元を管理する。
ヘルプの使用
Langroidは強力なPythonフレームワークで、様々な "インテリジェンス "を組み合わせて複雑なアプリケーションを構築することができます。以下では、Langroidをインストールし、基本的な操作と高度な操作を行うための使い方を詳しく説明します。
ラングロイドのインストール
LangroidにはPython 3.11以上が必要です。他のプロジェクトとの依存関係の衝突を避けるため、仮想環境にインストールすることを強く推奨します。
- 基礎工事
コアのインストールは非常に簡単で、必要なコマンドは1つだけだ:pip install langroid
この基本バージョンには、OpenAIのモデルを使用するために必要なコア機能が含まれています。
- 追加機能のインストール
Langroidはモジュール設計になっており、多くの高度な機能は追加の依存関係をインストールする必要があります。必要に応じてインストールすることができます:- ドキュメントチャット機能(RAG)。 インテリジェンスにPDFやWord文書などを読ませ、理解させる必要がある場合は、次のものをインストールする必要があります。
doc-chat
アドオン・パッケージ。pip install "langroid[doc-chat]"
- データベース連動機能。 スマートボディにデータベースへの接続と問い合わせをさせるには
db
アドオン・パッケージ。pip install "langroid[db]"
- 複数のアドオンパッケージを同時にインストールすることもできます:
pip install "langroid[doc-chat,db]"
- すべての機能のインストール。 オプションの依存関係をすべて一度にインストールしたい場合は
all
タグを使用することができますが、これはインストールにかかる時間とサイズを大幅に増加させる可能性があります。pip install "langroid[all]"
- ドキュメントチャット機能(RAG)。 インテリジェンスにPDFやWord文書などを読ませ、理解させる必要がある場合は、次のものをインストールする必要があります。
環境設定
インストールが完了したら、必要な環境変数、主にBig Language Model APIキーを設定する必要があります。
- 確立
.env
書類
プロジェクトのルートディレクトリに、リポジトリの.env-template
ファイルの名前を.env
.cp .env-template .env
- APIキーの設定
見せる.env
ファイルに、OpenAI APIキーを記入してください。これがLangroidを立ち上げて動かすための最も基本的な条件です。OPENAI_API_KEY=your-key-here-without-quotes
コア・コンセプトとオペレーション
ラングロイドの核心はAgent
(インテリジェンシア)とTask
(タスク)。インテリゲンチアはパフォーマーであり、タスクはインテリゲンチアがどのように行動すべきかを指示する指示書である。
1.LLMとの直接対話
インテリジェンスをスキップして、設定されたLLMに直接話しかけることができます。これはモデルの応答を素早くテストするのに便利です。
import langroid.language_models as lm
# 配置要使用的模型,例如GPT-4o
# 或者使用本地模型 "ollama/mistral"
llm_config = lm.OpenAIGPTConfig(
chat_model=lm.OpenAIChatModel.GPT4o,
)
model = lm.OpenAIGPT(llm_config)
# 直接发送问题并获取回答
response = model.chat("中国的首都是哪里?", max_tokens=20)
print(response.message)
2.対話のための知性の活用
インテリジェント・ボディChatAgent
) 対話履歴を保持し、文脈に応じたコミュニケーションを可能にする能力。
import langroid as lr
# 创建一个默认配置的聊天智能体
agent = lr.ChatAgent()
# 智能体能够记住之前的对话
agent.llm_response("中国的首都是哪里?")
response = agent.llm_response("那印度的呢?") # 智能体会理解“那”指代的是首都
print(response.content)
3.タスクを通してインテリジェンスを管理する
Task
(タスク)は、インテリジェンスがその役割や目標を定義し、ユーザーとの相互作用のサイクルを管理するための運用フレームワークを提供する。
import langroid as lr
# 1. 创建一个智能体
agent = lr.ChatAgent()
# 2. 为智能体创建一个任务,并赋予系统消息(角色设定)
task = lr.Task(
agent,
name="Bot",
system_message="你是一个乐于助人的助手。"
)
# 3. 运行任务,这将启动一个与用户的交互循环
task.run("你好") # 以用户的 "你好" 开始对话
4.マルチインテリジェンスの連携
これはラングロイドの最も強力な機能の一つです。複数の知能を作成し、それらを組織してより複雑な問題を解決することができます。
例えば、「先生」と「生徒」のインテリジェンスを作り、質疑応答をさせる。
import langroid as lr
# 通用的大模型配置
llm_config = lr.ChatAgentConfig(
llm=lr.language_models.OpenAIGPTConfig(
chat_model=lr.language_models.OpenAIChatModel.GPT4o,
),
)
# 创建老师智能体和任务
teacher_agent = lr.ChatAgent(llm_config)
teacher_task = lr.Task(
teacher_agent,
name="Teacher",
system_message="""
向你的学生提出简明的数学问题,并给予反馈。
请从一个问题开始。
"""
)
# 创建学生智能体和任务
student_agent = lr.ChatAgent(llm_config)
student_task = lr.Task(
student_agent,
name="Student",
system_message="简明地回答老师的问题。",
single_round=True, # 学生回答一轮后就等待
)
# 将学生任务设置为老师任务的子任务
teacher_task.add_sub_task(student_task)
# 运行主任务,整个对话将自动进行
teacher_task.run()
この例ではteacher_task
が最初に発言し(質問し)、その後、コントロールをstudent_task
生徒が答えると、コントロールは教師に戻される。
5.書類とのチャット(RAG)
利用するDocChatAgent
多くの文書に簡単に質問することができる。
import langroid as lr
from langroid.agent.special import DocChatAgent, DocChatAgentConfig
# 配置文档路径,可以是网址或本地文件
config = DocChatAgentConfig(
doc_paths=[
"https://arxiv.org/pdf/2308.08155.pdf", # 一篇关于语言模型的论文
"/path/to/your/notes.txt",
],
)
# 创建DocChatAgent,它会自动处理文档的加载、切分和索引
agent = DocChatAgent(config)
# 将智能体包装在任务中,并开始交互式聊天
task = lr.Task(agent, name="DocAssistant")
task.run("请总结一下这篇论文的核心思想。")
このプロセスの背後で、Langroidはドキュメントのダウンロード、テキスト抽出、チャンクへのセグメンテーション、ベクトル埋め込み生成、ベクトルデータベースへの保存の全プロセスを自動化している。あなたが質問をすると、まずデータベースから最も関連性の高い文書断片を取得し、それをあなたの質問とともにLLMに渡して、十分に理由のある答えを生成します。
アプリケーションシナリオ
- 自動化されたリサーチ・アシスタントの構築
検索エンジンを使って情報を見つけることを担当するインテリジェンス、ダウンロードした文書から重要な情報を抽出することを担当するインテリジェンス、そしてこれらの情報をレポートにまとめることを担当するインテリジェンスを作成することができる。 - インタラクティブなデータ分析ツールの開発
用いるTableChatAgent
ユーザーはCSVファイルやデータベースのデータを自然言語で照会できる。例えば、「前四半期に最も売れた商品は何か?インテリジェンスは自動的に適切なクエリーコードを生成し、実行する。 - ドメインに特化したQ&Aシステムの構築
とおすDocChatAgent
専門分野の文書(法律文書、医学マニュアル、技術文書など)を読み込み、専門的な質問に的確に回答できるインテリジェントなQ&Aロボットを素早く構築できます。 - 複雑なシステムとプロセスのモデリング
ビジネスや社会科学の研究では、さまざまな役割(消費者、供給者、規制者など)を表すインテリジェンスを設定し、その相互作用を通じて市場のダイナミクスや社会現象をシミュレーションすることができる。 - コードの生成と解釈
あるインテリジェンスは、要件に基づいてコードを生成することだけを担当し、別のインテリジェンスはコードのロジックや使用法を解釈したり、コードが間違っている場合にデバッグしたりすることを担当するように設計することができる。
品質保証
- LangroidとLangChainの違いは何ですか?
Langroidは、LangChainを使用しないスタンドアローンのフレームワークです。その設計哲学は、マルチインテリジェンス・コラボレーションによるアプリケーションの構築に重点を置いており、そのコアとなる抽象化機能は以下の通りです。Agent
歌で応えるTask
対照的に、LangChainは異なるコンポーネント(モデル、ヒント、ツール)をつなぐ "チェーン "構造に焦点を当てている。対照的に、LangChainは異なるコンポーネント(モデル、ヒント、ツール)をつなぐ "チェーン "構造に焦点を当てており、Langroidは複雑なタスクを扱う場合、マルチインテリジェンスアーキテクチャの方がより柔軟でスケーラブルだと考えている。 - ローカルにデプロイされたオープンソースのビッグモデルを使うことはできますか?
Langroidは、OllamaやLiteLLMなどのツールと統合することで、LlamaやMistralなどのローカルで動いているオープンソースモデルに簡単に接続できます。必要なのはchat_model
ローカル・モデル・サービスのアドレスを指定してください。"ollama/mistral"
. - ツールとは?どのように機能するのか?
ツールとは、言語モデル自体の能力を超えて、インテリジェンスがコードを実行したり、APIを呼び出したりするための機能です。Langroidでは、言語モデルから継承したオブジェクトを定義することでこれを行うことができます。ToolMessage
フレームワークはPydanticモデルを使ってツールを作成する。インテリジェントボディ(LLM)がツールを使う必要があると考えたとき、特別にフォーマットされた「メッセージ」を生成し、それをフレームワークが受け取り、フレームワークがあらかじめ定義されたPython関数を呼び出して実際の操作を行い、その結果をインテリジェントボディに返します。このプロセスは開発者にとって非常に直感的である。 - インテリジェンスの間で、誰が発言するかをどのように決めるのか?
構成Task
タスクのスケジューリングロジックが決定される。階層構造では、親タスクが子タスクの実行順序を調整する責任を持つ。デフォルトでは、タスクは順番に実行されます(ユーザーとのインタラクションを含む)。開発者はsingle_round
そしてdone_if
などのパラメータを使って、タスクの実行フローと終了条件を精密に制御する。 - ラングロイドはストリーミング出力に対応していますか?
Langroidの多くのメソッドは、非同期(async)バージョンと、ストリーミングレスポンスをサポートしています。これは、ChatGPTインターフェイスのように、モデルのレスポンスが単語ごとに表示されることを意味します。