記事一覧に戻る

この記事は中国語版 简体中文 でもご覧いただけます。

Hugging FaceとLangChainが共同でメンテナンスするLangChainのパートナーパッケージ langchain_huggingface のリリースを発表できることを嬉しく思います。この新しいPythonパッケージは、Hugging Faceの最新の開発成果をLangChainに取り入れ、常に最新の状態に保つことを目的としています。

コミュニティから、コミュニティのために

LangChain内のすべてのHugging Face関連クラスはコミュニティによって作成されていましたが、内部者の視点の欠如により、一部が非推奨となりました。

パートナーパッケージになることで、Hugging Faceエコシステムで利用可能になった新機能をLangChainのユーザーに提供するまでの時間を短縮することを目指します。

langchain-huggingface はLangChainとシームレスに統合し、LangChainエコシステム内でHugging Faceモデルを効率的かつ効果的に活用する方法を提供します。このパートナーシップは技術の共有だけでなく、この統合を維持・継続的に改善するという共同のコミットメントでもあります。

はじめに

langchain-huggingface の利用開始は簡単です。以下にパッケージのインストールと使用開始方法を示します:

pip install langchain-huggingface

パッケージのインストールが完了したら、中身を見てみましょう!

LLM

HuggingFacePipeline

transformers の中で、Pipeline はHugging Faceツールボックスの中で最も汎用性の高いツールです。LangChainは主にRAGやエージェントのユースケースに対応するよう設計されているため、ここでのパイプラインの対象範囲は以下のテキスト中心のタスクに限定されています:“text-generation"“text2text-generation"“summarization”“translation”

モデルは from_model_id メソッドで直接読み込めます:

from langchain_huggingface import HuggingFacePipeline

llm = HuggingFacePipeline.from_model_id(
    model_id="microsoft/Phi-3-mini-4k-instruct",
    task="text-generation",
    pipeline_kwargs={
        "max_new_tokens": 100,
        "top_k": 50,
        "temperature": 0.1,
    },
)
llm.invoke("Hugging Face is")

または、クラスに渡す前に自分でパイプラインを定義することもできます:

from transformers import AutoModelForCausalLM, AutoTokenizer,pipeline

model_id = "microsoft/Phi-3-mini-4k-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    load_in_4bit=True,
    #attn_implementation="flash_attention_2", # if you have an ampere GPU
)
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=100, top_k=50, temperature=0.1)
llm = HuggingFacePipeline(pipeline=pipe)
llm.invoke("Hugging Face is")

このクラスを使用すると、モデルはキャッシュに読み込まれ、コンピュータのハードウェアを使用します。そのため、利用可能なコンピュータのリソースによって制限される場合があります。

HuggingFaceEndpoint

このクラスを使用する方法も2つあります。repo_id パラメータでモデルを指定できます。これらのエンドポイントは serverless API を使用しており、プロアカウントエンタープライズハブ を利用する人に特に有益です。また、通常のユーザーでも、コードを実行する環境でHFトークンを接続することで、すでにかなりのリクエスト数にアクセスできます。

from langchain_huggingface import HuggingFaceEndpoint

llm = HuggingFaceEndpoint(
    repo_id="meta-llama/Meta-Llama-3-8B-Instruct",
    task="text-generation",
    max_new_tokens=100,
    do_sample=False,
)
llm.invoke("Hugging Face is")
llm = HuggingFaceEndpoint(
    endpoint_url="<endpoint_url>",
    task="text-generation",
    max_new_tokens=1024,
    do_sample=False,
)
llm.invoke("Hugging Face is")

内部では、このクラスは InferenceClient を使用して、さまざまなユースケースに対応し、serverless APIからデプロイされたTGIインスタンスまでをサポートします。

ChatHuggingFace

すべてのモデルには、それぞれのモデルに最適な特殊トークンがあります。これらのトークンをプロンプトに追加しないと、モデルのパフォーマンスは大幅に低下します。

メッセージのリストから補完プロンプトを作成する際、ほとんどのLLMトークナイザーに存在する属性が chat_template です。

さまざまなモデルにおけるchat_templateの詳細については、私が作成したこの スペース をご覧ください!

このクラスは他のLLMをラップするもので、メッセージのリストを入力として受け取り、tokenizer.apply_chat_template メソッドを使用して正しい補完プロンプトを作成します。

from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint

llm = HuggingFaceEndpoint(
    endpoint_url="<endpoint_url>",
    task="text-generation",
    max_new_tokens=1024,
    do_sample=False,
)
llm_engine_hf = ChatHuggingFace(llm=llm)
llm_engine_hf.invoke("Hugging Face is")

上記のコードは以下と同等です:

# with mistralai/Mistral-7B-Instruct-v0.2
llm.invoke("<s>[INST] Hugging Face is [/INST]")

# with meta-llama/Meta-Llama-3-8B-Instruct
llm.invoke("""<|begin_of_text|><|start_header_id|>user<|end_header_id|>Hugging Face is<|eot_id|><|start_header_id|>assistant<|end_header_id|>""")

埋め込み

Hugging Faceには、パイプラインで直接活用できる非常に強力な埋め込みモデルが多数用意されています。

まず、モデルを選択します。埋め込みモデルを選択する良いリソースとして、MTEBリーダーボード があります。

HuggingFaceEmbeddings

このクラスは sentence-transformers の埋め込みを使用します。埋め込みをローカルで計算するため、コンピュータのリソースを使用します。

from langchain_huggingface.embeddings import HuggingFaceEmbeddings

model_name = "mixedbread-ai/mxbai-embed-large-v1"
hf_embeddings = HuggingFaceEmbeddings(
    model_name=model_name,
)
texts = ["Hello, world!", "How are you?"]
hf_embeddings.embed_documents(texts)

HuggingFaceEndpointEmbeddings

HuggingFaceEndpointEmbeddings は、LLM向けの HuggingFaceEndpoint と非常に似ており、内部でInferenceClientを使用して埋め込みを計算します。 Hub上のモデルや、TEIインスタンス(ローカルまたはオンラインにデプロイされている場合の両方)で使用できます。

from langchain_huggingface.embeddings import HuggingFaceEndpointEmbeddings

hf_embeddings = HuggingFaceEndpointEmbeddings(
    model= "mixedbread-ai/mxbai-embed-large-v1",
    task="feature-extraction",
    huggingfacehub_api_token="<HF_TOKEN>",
)
texts = ["Hello, world!", "How are you?"]
hf_embeddings.embed_documents(texts)

結論

私たちは日々 langchain-huggingface の改善に取り組んでいます。フィードバックや問題を積極的に監視し、できるだけ迅速に対処していきます。また、新機能や機能を追加し、パッケージを拡張して、より幅広いコミュニティのユースケースをサポートする予定です。ぜひこのパッケージをお試しいただき、ご意見をお寄せください。パッケージの将来を形作る上で、皆様のご意見が重要です。