LangChain は、大規模言語モデル (LLM) の力を活用するために開発された最先端の堅牢なツールです。
これらの LLM は優れた機能を備えており、幅広いタスクに効率的に取り組むことができます。 ただし、彼らの強みは、深い分野の専門知識ではなく、一般的な性質にあることに注意することが重要です。 GPT-4 の導入以来、その人気は急速に高まりました。
LLM はさまざまなタスクの処理に優れていますが、特定の答えを提供したり、深いドメイン知識を必要とするタスクに取り組んだりする場合には制限に直面する可能性があります。 たとえば、医学や法律などの専門分野での質問に答えたり、タスクを実行したりするために LLM を利用することを考えてみましょう。
LLM はこれらの分野に関する一般的な質問には確かに対応できますが、専門的な知識や専門知識が必要な、より詳細または微妙な回答を提供するのは難しい場合があります。
これは、LLM がさまざまなソースからの膨大な量のテキスト データでトレーニングされ、パターンを学習し、コンテキストを理解し、一貫した応答を生成できるようにするためです。 ただし、彼らのトレーニングには通常、その分野の人間の専門家と同程度に、ドメイン固有の知識や特殊な知識の習得は含まれません。
したがって、LangChain を LLM と組み合わせると、幅広いタスクに非常に貴重なツールとなり得ますが、特定の状況では依然として深いドメインの専門知識が必要になる可能性があることを認識することが重要です。 専門知識を持つ人間の専門家は、LLM だけでは不可能な、必要な深さ、微妙な理解、およびコンテキスト固有の洞察を提供できます。
LangChain のドキュメントを参照するか、 GitHubの リポジトリを参照して、その典型的な使用例をより深く理解してください。 このバンドルの全体像を把握することを強くお勧めします。
それはどのように動作しますか?
LangChain の目的と働きを理解するために、実際の例を考えてみましょう。 GPT-4 には優れた一般知識があり、幅広い質問に対して信頼できる回答が得られることを私たちは認識しています。
しかし、個人的な文書、書籍、PDF ファイル、独自のデータベースなど、自分自身のデータから特定の情報が必要な場合はどうすればよいでしょうか?
LangChain を使用すると、 大規模な言語モデル GPT-4 などを独自のデータソースに適用します。 これは、単にテキストの断片をチャット インターフェイスに貼り付けるだけではありません。 代わりに、独自のデータが格納されたデータベース全体を参照できます。
必要な情報を取得したら、LangChain は特定のアクションの実行を支援します。 たとえば、特定の詳細を含む電子メールを送信するように指示できます。
これを実現するために、LangChain を使用したパイプライン アプローチに従います。 まず、必要なドキュメントを取得します。 言語モデル 参照して小さなチャンクに分割します。 これらのチャンクは埋め込みとして保存されます。 ベクトル データベース内のテキストのベクトル表現.
この設定を使用すると、標準パイプラインに従う言語モデル アプリケーションを構築できます。つまり、ユーザーが最初に質問をし、それが言語モデルに送信されます。 質問のベクトル表現は、ベクトル データベース内で類似性検索を実行するために使用され、関連する情報のチャンクが取得されます。
これらのチャンクは言語モデルにフィードバックされ、答えを提供したり、必要なアクションを実行したりできるようになります。
LangChain は、ベクター ストアで独自のデータを参照できるため、データ認識型のアプリケーションの開発を促進します。また、質問に答えるだけでなくアクションを実行できるため、信頼できるアプリケーションの開発を容易にします。 T
これにより、特にパーソナル アシスタンスにおいて、航空券の予約、送金、税金関連の支援などのタスクを大規模な言語モデルで処理できる、多くの実用的な使用例が開かれます。
さらに、言語モデルはシラバス全体を参照し、学習プロセスを促進できるため、新しい科目の学習と学習に大きな影響を与えます。 コーディング、データ分析、データ サイエンスも、これらの進歩によって大きな影響を受けることが予想されます。
最も魅力的な展望の XNUMX つは、大規模な言語モデルを顧客情報やマーケティング データなどの既存の企業データに接続することです。 Meta の API や Google の API などの高度な API とのこの統合により、データ分析とデータ サイエンスの飛躍的な進歩が約束されます。
Webページの構築方法(デモ)
現在、Langchain は Python および JavaScript パッケージとして利用できます。
Streamlit、LangChain、OpenAI GPT-3 モデルを利用してデモ Web アプリを作成し、LangChain の概念を実装できます。
ただし、その前に、Streamlit、LangChain、OpenAI などの依存関係をいくつかインストールする必要があります。
前提条件
ストリームリット: データ サイエンス関連の Web アプリケーションを作成するための人気のある Python パッケージ
オープンAI: OpenAI の GPT-3 言語モデルへのアクセスが必要です。
これらの依存関係をインストールするには、cmd で次のコマンドを使用します。
pip install streamlit
pip install langchain
pip install openai
パッケージのインポート
まず、OpenAI、LangChain、Streamlit などの必要なパッケージをインポートします。 言語モデル チェーンは、LangChain の XNUMX つのクラス (LLMChain、SimpleSequentialChain、PromptTemplate) を使用して定義および実行されます。
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
基本設定
次に、Streamlit 構文を使用してプロジェクトの構造的基盤を構築しました。 私たちはアプリに「真実: シンプル シーケンシャル チェーンの使用」というタイトルを付け、アプリのインスピレーションとなった GitHub リポジトリへのマークダウン リンクを含めました。
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
フロントエンドウィジェット
単純な Streamlit 構文を使用して、関連情報をほとんど持たずにアプリをセットアップします。
# If an API key has been provided, create an OpenAI language model instance
if API:
llm = OpenAI(temperature=0.7, openai_api_key=API)
else:
# If an API key hasn't been provided, display a warning message
st.warning("Enter your OPENAI API-KEY. Get your OpenAI API key from [here](https://platform.openai.com/account/api-keys).\n")
フロントエンド ウィジェットを追加するには
さらに、ユーザーが質問を入力できるようにする入力ウィジェットを提供する必要があります。
# Add a text input box for the user's question
user_question = st.text_input(
"Enter Your Question : ",
placeholder = "Cyanobacteria can perform photosynthetsis , are they considered as plants?",
)
すべて完了! チェーンも稼働中です!
私たちはさまざまな業務チェーンを採用しています。 SimpleSequentialChain
ユーザーのクエリに応答するため。 ユーザーが選択すると、チェーンは次の順序で実行されます。 "Tell me about it"
ボタン:
if st.button("Tell me about it", type="primary"):
# Chain 1: Generating a rephrased version of the user's question
template = """{question}\n\n"""
prompt_template = PromptTemplate(input_variables=["question"], template=template)
question_chain = LLMChain(llm=llm, prompt=prompt_template)
# Chain 2: Generating assumptions made in the statement
template = """Here is a statement:
{statement}
Make a bullet point list of the assumptions you made when producing the above statement.\n\n"""
prompt_template = PromptTemplate(input_variables=["statement"], template=template)
assumptions_chain = LLMChain(llm=llm, prompt=prompt_template)
assumptions_chain_seq = SimpleSequentialChain(
chains=[question_chain, assumptions_chain], verbose=True
)
# Chain 3: Fact checking the assumptions
template = """Here is a bullet point list of assertions:
{assertions}
For each assertion, determine whether it is true or false. If it is false, explain why.\n\n"""
prompt_template = PromptTemplate(input_variables=["assertions"], template=template)
fact_checker_chain = LLMChain(llm=llm, prompt=prompt_template)
fact_checker_chain_seq = SimpleSequentialChain(
chains=[question_chain, assumptions_chain, fact_checker_chain], verbose=True
)
# Final Chain: Generating the final answer to the user's question based on the facts and assumptions
template = """In light of the above facts, how would you answer the question '{}'""".format(
user_question
)
template = """{facts}\n""" + template
prompt_template = PromptTemplate(input_variables=["facts"], template=template)
answer_chain = LLMChain(llm=llm, prompt=prompt_template)
overall_chain = SimpleSequentialChain(
chains=[question_chain, assumptions_chain, fact_checker_chain, answer_chain],
verbose=True,
)
# Running all the chains on the user's question and displaying the final answer
st.success(overall_chain.run(user_question))
question_chain
: これはパイプラインの最初のステップであり、ユーザーの質問を入力および出力として受け取ります。 ユーザーのクエリはチェーンのテンプレートとして機能します。- 質問にリンクされている声明に基づいて、
assumptions_chain
からの出力を使用して仮定の箇条書きリストを生成します。question_chain
入力として。 のLLMChain
&OpenAI
LangChain のモデルを使用してステートメントを構築しました。 ユーザーは、このチェーンのテンプレートを使用してステートメントを作成するために行われた仮定のリストを作成するタスクを負います。 - からの出力に基づいて、
question_chain
&assumptions_chain
fact_checker_chain
アサーションのリストを箇条書き形式で生成します。 クレームは、OpenAI
モデルとLLMChain
ラングチェーンから。 ユーザーは、各主張が正確か不正確かを判断し、その正当性を示す責任を負います。 -
answer_chain
からの出力を使用しますquestion_chain
,assumptions_chain
,fact_checker_chain
を入力として使用し、以前のチェーンによって生成されたデータを使用してユーザーの質問に対する応答を作成します。 このチェーンのテンプレートは、作成されたファクトを使用して最初のクエリに応答することをユーザーに要求します。 - 以前のチェーンによって生成された情報に基づいてユーザーの問い合わせに対する最終的な応答を提供するために、これらのチェーンをチェーン全体に統合します。 チェーンが完成したら、
st.success()
ユーザーに解決策を示すためです。
まとめ
さまざまな言語モデルのアクションを単純に連鎖させて、より複雑なパイプラインを作成できます。 SimpleSequentialChain
LangChainのモジュール。 チャットボット、質疑応答システム、言語翻訳ツールなど、さまざまな NLP アプリケーションにとって、これは非常に役立つ場合があります。
LangChain の優れた点は、ユーザーが言語モデリングの詳細ではなく現在の問題に集中できる抽象化能力にあります。
LangChain は、事前トレーニングされたモデルと選択されたテンプレートを提供することで、洗練された言語モデルを作成するプロセスをよりユーザーフレンドリーにします。
独自のデータを使用して言語モデルを微調整するオプションが提供され、言語モデルのカスタマイズが簡単になります。 これにより、特定のジョブに対して、トレーニングされたモデルよりも優れたパフォーマンスを発揮する、より正確なドメイン固有のモデルの開発が可能になります。
SimpleSequentialChain
LangChain のモジュールやその他の機能により、LangChain は高度な NLP システムを迅速に開発および展開するための効果的なツールになります。
コメントを残す