MistralTextEmbedder

MistralTextEmbedder

Mistral API와 모델을 사용해 문자열을 벡터로 변환하는 컴포넌트예요. 임베딩 검색에서 쿼리를 임베딩으로 바꾸는 데 사용해요. 쿼리/RAG 파이프라인에서 임베딩 Retriever 앞에 두면 돼요.

출처: MistralTextEmbedder

본문

MistralTextEmbedder로 단순한 문자열(쿼리 같은 것)을 벡터로 임베딩해요. 문서 목록을 임베딩할 때는 계산된 임베딩(벡터)을 문서에 채워 넣는 MistralDocumentEmbedder를 사용해요.

개요

MistralTextEmbedder는 Mistral 임베딩 모델을 사용해 의미를 포착하는 벡터로 문자열을 변환해요.

컴포넌트는 현재 mistral-embed 임베딩 모델을 지원해요. 지원되는 모든 모델 목록은 Mistral의 임베딩 모델 문서에서 확인할 수 있어요.

이 통합을 Haystack에서 쓰려면 설치해요.

pip install mistral-haystack

MistralTextEmbedder는 Mistral API 키가 필요해요. 기본적으로 MISTRAL_API_KEY 환경 변수를 사용해요. 아니면 초기화 때 api_key로 API 키를 넘길 수 있어요.

embedder = MistralTextEmbedder(
    api_key=Secret.from_token("<your-api-key>"),
    model="mistral-embed",
)

사용법

단독 사용:

먼저 MISTRAL_API_KEY를 환경 변수로 설정하거나 직접 전달하는 걸 잊지 마세요.

from haystack.utils import Secret
from haystack_integrations.components.embedders.mistral.text_embedder import (
    MistralTextEmbedder,
)

embedder = MistralTextEmbedder(
    api_key=Secret.from_token("<your-api-key>"),
    model="mistral-embed",
)

result = embedder.run(text="How can I ise the Mistral embedding models with Haystack?")

print(result["embedding"])
# [-0.0015687942504882812, 0.052154541015625, 0.037109375...]

파이프라인 안에서:

아래는 문서 검색 파이프라인의 MistralTextEmbedder 예시예요. 두 URL의 내용을 인덱싱한 InMemoryDocumentStore 위에 이 파이프라인을 만들고 있어요.

from haystack import Document, Pipeline
from haystack.utils import Secret
from haystack.components.builders.chat_prompt_builder import ChatPromptBuilder
from haystack.components.fetchers import LinkContentFetcher
from haystack.components.converters import HTMLToDocument
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.components.writers import DocumentWriter
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.embedders.mistral.document_embedder import (
    MistralDocumentEmbedder,
)
from haystack_integrations.components.embedders.mistral.text_embedder import (
    MistralTextEmbedder,
)
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.dataclasses import ChatMessage

# Initialize document store
document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")

# Indexing components
fetcher = LinkContentFetcher()
converter = HTMLToDocument()
embedder = MistralDocumentEmbedder()
writer = DocumentWriter(document_store=document_store)

indexing = Pipeline()
indexing.add_component(name="fetcher", instance=fetcher)
indexing.add_component(name="converter", instance=converter)
indexing.add_component(name="embedder", instance=embedder)
indexing.add_component(name="writer", instance=writer)

indexing.connect("fetcher", "converter")
indexing.connect("converter", "embedder")
indexing.connect("embedder", "writer")

indexing.run(
    data={
        "fetcher": {
            "urls": [
                "https://docs.mistral.ai/self-deployment/cloudflare/",
                "https://docs.mistral.ai/platform/endpoints/",
            ],
        },
    },
)

# Retrieval components
text_embedder = MistralTextEmbedder()
retriever = InMemoryEmbeddingRetriever(document_store=document_store)

# Define prompt template
prompt_template = [
    ChatMessage.from_system("You are a helpful assistant."),
    ChatMessage.from_user(
        "Given the retrieved documents, answer the question.\nDocuments:\n"
        "{% for document in documents %}{{ document.content }}{% endfor %}\n"
        "Question: {{ query }}\nAnswer:",
    ),
]

prompt_builder = ChatPromptBuilder(
    template=prompt_template,
    required_variables={"query", "documents"},
)
llm = OpenAIChatGenerator(
    model="gpt-4o-mini",
    api_key=Secret.from_token("<your-api-key>"),
)

doc_search = Pipeline()
doc_search.add_component("text_embedder", text_embedder)
doc_search.add_component("retriever", retriever)
doc_search.add_component("prompt_builder", prompt_builder)
doc_search.add_component("llm", llm)

doc_search.connect("text_embedder.embedding", "retriever.query_embedding")
doc_search.connect("retriever.documents", "prompt_builder.documents")
doc_search.connect("prompt_builder.prompt", "llm.messages")

query = "How can I deploy Mistral models with Cloudflare?"

result = doc_search.run(
    {
        "text_embedder": {"text": query},
        "retriever": {"top_k": 1},
        "prompt_builder": {"query": query},
    },
)

print(result["llm"]["replies"])

더 알아보기 (Learn more)