You are currently viewing ラングチェーンとは何ですか?

ラングチェーンとは何ですか?

LangChain は、Python と JavaScript で書かれたフレームワークで、LLM に基づいてアプリケーションを操作および構築するためのツールを提供します。LangChain のインストール手順は、こちらでご覧いただけます。LangChain は、LLM を使用する際の問題を解決することを目的としているため、以下に LangChain のコア モジュールを示します。

モデルI/O

使用できる LLM は数多くあります (OpenAI、Hugging Face など)。LangChain は、さまざまなモデルを簡単に操作できるインターフェイスを提供します。

画像.png

API キーを使用して、OpenAI などのプロバイダーからのモデル LLM を使用できます。

from langchain_openai import ChatOpenAI
from langchain_openai import OpenAI

llm = OpenAI(openai_api_key="...")
chat_model = ChatOpenAI()

Ollamaを使用して、ローカルで実行されているモデルと直接対話することもできます。これはオープン ソース プロジェクトであり、外部サービス プロバイダーに接続せずに LLM と対話するために使用されます。オラマについては別の記事で学びます。LangChain で Ollama を使用する例を次に示します。

from langchain_community.llms import Ollama
from langchain_community.chat_models import ChatOllama

llm = Ollama(model="llama2")
chat_model = ChatOllama()

オブジェクトllmとを使用してchat_model、LLM モデルとの対話を開始できます。

プロンプト

LangChain は、LLM の入力を効果的に構造化するのに役立つプロンプト テンプレートを提供します。使用目的に応じて変化するパラメータを含む動的プロンプトを作成できます。

prompt = PromptTemplate(
    template="Tell me a joke in {language}", input_variables=["language"]
)

print(prompt.format(language="spanish"))
'Tell me a joke in spanish'

出力パーサー

LLM の出力はテキストです。多くの場合、返される結果を JSON、CSV などの別の形式にしたい場合は、出力パーサーがこれに役立ちます。以下の例を見てみましょう。

template = "Generate a list of 5 {text}.\n\n{format_instructions}"

chat_prompt = ChatPromptTemplate.from_template(template)
chat_prompt = chat_prompt.partial(format_instructions=output_parser.get_format_instructions())

chain = chat_prompt | chat_model | output_parser
chain.invoke({"text": "colors"})
['red', 'blue', 'green', 'yellow', 'orange']

検索

通常、LLM はトレーニング時のデータセットによって制限されます。Chat-GPT と同様に、2021 年以降に行われるイベントに関連する質問には答えることができません。多くの場合、要求した他のドキュメントを理解するためにモデルも必要になります。RAG (Retrieval Augmented Generation) は、これらの問題を解決するために生まれました。

画像.png

LangChain は、完全な RAG アプリケーションの構築に役立つモジュールを提供します。外部から追加されたデータの埋め込みから操作まで。

ドキュメントローダー

これは、Github、S3… などのソースからのドキュメントの読み込みと、….txtなどのさまざまな形式をサポートするモジュールです。.csv

from langchain_community.document_loaders import TextLoader

loader = TextLoader("./main.rb")
documents = loader.load()
[Document(page_content='puts("Hello LangChain!")\n', metadata={'source': './main.rb'})]

テキストの分割

データをロードした後、意味のある情報を抽出するためにデータが処理され、次のステップに進む前に小さな部分に分割されます。

from langchain.text_splitter import Language
from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.RUBY, chunk_size=2000, chunk_overlap=200
)

documents = splitter.split_documents(raw_documents)
[Document(page_content='puts("Hello LangChain!")', metadata={'source': './main.rb'})]

テキスト埋め込みモデル

データは引き続きベクトル空間に変換され、再利用するためにキャッシュすることもできます。

from langchain_community.embeddings import OllamaEmbeddings

embeddings_model = OllamaEmbeddings()
embeddings = embeddings_model.embed_documents(documents)

ベクターストア

ベクター変換後のデータはベクターストアに保存できます。LangChain はこれを行うためのモジュールを提供します。

from langchain_community.vectorstores import Chroma

db = Chroma.from_documents(documents, OllamaEmbeddings())

レトリバー

これで、Retriever を使用して上記のデータを操作できるようになります。

from langchain.chains import RetrievalQA
from langchain.llms import Ollama

retriever = db.as_retriever(search_kwargs={"k": 1})
llm = Ollama(model="codellama:7b")

qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever)
qa.invoke("What's inside this document?")["result"]
'The text "Hello LangChain!" is a string of characters written in the Ruby programming language. It is not clear what "LangChain" refers to or what context it may be used in, so I cannot provide a helpful answer without more information.'

エージェント

目的の結果を返すには、ユーザー要求ごとに異なる手順を実行する必要があります。たとえば、単純な質問の場合、ユーザーは通常のテキストによる回答のみを必要とします。ただし、表形式の結果を表示する場合、またはデータを PDF 形式にエクスポートするリクエストを行う場合は、最終結果を取得するために追加のアクションを実行する必要があります。LangChain エージェントは、上記の問題の解決に役立ちます。

画像.png

各エージェントは多くのツールの集合であると考えることができ、ツールには次の主要コンポーネントが含まれます。

  • 名前: ツールの名前
  • 説明: ツールの使用目的の簡単な説明です。
  • JSON スキーマ: ツール入力情報が含まれます
  • 関数呼び出し: ツールの実行時に呼び出されるメインのコンテンツです。

名前、説明、JSON スキーマが最も重要なコンポーネントであり、すべてのプロンプトで使用されます。

内蔵ツール

Lang チェーンには、使用できる多くの組み込みツールが用意されています。以下に例を示します。

from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper

api_wrapper = WikipediaAPIWrapper(top_k_results=1, doc_content_chars_max=100)
tool = WikipediaQueryRun(api_wrapper=api_wrapper)

print("Name:", tool.name)
print("Description:", tool.description)
print("JSON schema:", tool.args)

ツール情報:

Name: wikipedia
Description: A wrapper around Wikipedia. Useful for when you need to answer general questions about people, places, companies, facts, historical events, or other subjects. Input should be a search query.
JSON Schema: {'query': {'title': 'Query', 'type': 'string'}}

このツールは次のように簡単に使用できます。

tool.run({"query": "LangChain"})
'Page: LangChain\nSummary: LangChain is a framework designed to simplify the creation of applications '

このツールを使用すると、外部データやインターネット上で完全に対話できるため、モデルの力を最大限に活用できます。

カスタムツールの定義

LangChain は、組み込みツールに制限されず、あらゆる目的に合わせて独自のツールを作成する方法を提供します。ツールを宣言するには、@toolデコレーターを使用する必要があります。

from langchain.tools import tool

@tool
def search(query: str) -> str:
    """Look up things online."""
    return "LangChain"

@tool
def multiply(a: int, b: int) -> int:
    """Multiply two numbers."""
    return a * b

次に、上記のツールからエージェントを作成する必要があります。

from langchain.agents import initialize_agent, AgentType
from langchain.llms import Ollama

tools = [search, multiply]

agent = initialize_agent(
    tools,
    Ollama(),
    agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True,
)

その後、以下を使用できます。

agent.invoke("Multiply two numbers: 2 and 3")
> Entering new AgentExecutor chain...
Action: multiply(a: int, b: int) -> int
Action_input: {"a": 2, "b": 3}
> Finished chain.
{'input': 'Multiply two numbers: 2 and 3', 'output': 'Action: multiply(a: int, b: int) -> int\nAction_input: {"a": 2, "b": 3}\n'}

別の入力を試してください。

agent.invoke("Go online and search")
> Entering new AgentExecutor chain...
Action: search
Action_input: {'query': {'title': 'Query', 'type': 'string'}}
> Finished chain.
{'input': 'Go online and search', 'output': "Action: search\nAction_input: {'query': {'title': 'Query', 'type': 'string'}}\n\n"}

エージェントは期待どおりに機能しました。

結論

LangChain は、LLM の操作とパワーの活用を容易にする非常に強力なフレームワークです。この記事では、LangChain に関する基本情報を説明します。次のセクションでは、LangChain を使用して、非常に興味深いと思われる特定の問題を解決します

出典 : https://viblo.asia/p/langchain-la-gi-WR5JRBPQJGv

Please follow and like us:
Pin Share

1,442件のコメントがあります

  1. Raphaelfub

    A little off-thread, but it’s about travel and culture

    Recently I found a site https://ukraine.tripland.info.

    It’s all about Ukraine — from food to literature, folk traditions to nature trips. They cover architecture, athletes, rituals, festivals, and even legends.

    Topics that stood out:
    – The Klitschko brothers, Bublka, and world champions

    Also found [url=https://ukraine.tripland.info]an inspiring Ukrainian travel and culture guide[/url] — definitely worth exploring!

    Love national culture content?

  2. BJCarlos

    Скільки всього цікавого в Україні – [url=https://travel.justtips.online]внутрішній туризм оживає![/url]

コメントを残す