集成:Azure
通过 Azure 服务部署的 OpenAI 模型与 Haystack 一起使用
目录
概述
Azure OpenAI 服务 提供对 OpenAI 强大的语言模型(包括 GPT-4、GPT-4 Turbo with Vision、GPT-3.5-Turbo 和 Embeddings 模型系列)的 REST API 访问。要获得 Azure OpenAI 端点的访问权限,请访问 Azure OpenAI 服务 REST API 参考。
安装
安装 Haystack
pip install haystack-ai
使用
要使用 Azure 组件,您需要 Azure OpenAI API 密钥、Azure Active Directory 令牌以及 Azure OpenAI 端点。
组件
所有组件默认使用 AZURE_OPENAI_API_KEY 和 AZURE_OPENAI_AD_TOKEN 环境变量。否则,您可以在初始化时使用 Secret 类传递 api_key 和 azure_ad_token。有关 Secret Handling 的更多信息。
Embedding 模型
您可以通过两个组件利用 Azure OpenAI 的嵌入模型:AzureOpenAITextEmbedder 和 AzureOpenAIDocumentEmbedder。
要为文档创建语义嵌入,请在索引管道中使用 AzureOpenAIDocumentEmbedder。要为查询生成嵌入,请使用 AzureOpenAITextEmbedder。选择适合您特定用例的组件后,请使用必需的参数初始化该组件。
以下是使用 InMemoryDocumentStore、AzureOpenAIDocumentEmbedder 和 DocumentWriter 的示例索引管道
from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.embedders import AzureOpenAITextEmbedder, AzureOpenAIDocumentEmbedder
from haystack.components.writers import DocumentWriter
os.environ["AZURE_OPENAI_API_KEY"] = "Your Azure OpenAI API key"
os.environ["AZURE_OPENAI_AD_TOKEN"] = "Your Azure Active Directory Token"
document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")
documents = [Document(content="My name is Wolfgang and I live in Berlin"),
Document(content="I saw a black horse running"),
Document(content="Germany has many big cities")]
indexing_pipeline = Pipeline()
indexing_pipeline.add_component("embedder", AzureOpenAIDocumentEmbedder(azure_endpoint="https://example-resource.azure.openai.com/", azure_deployment="text-embedding-ada-002"))
indexing_pipeline.add_component("writer", DocumentWriter(document_store=document_store))
indexing_pipeline.connect("embedder", "writer")
indexing_pipeline.run({"embedder": {"documents": documents}})
生成模型(LLMs)
您可以通过两个组件利用 Azure OpenAI 模型:AzureOpenAIGenerator 和 AzureOpenAIChatGenerator。
要使用通过 Azure 服务部署的 OpenAI 模型进行文本生成,请使用 azure_deployment 和 azure_endpoint 初始化 AzureOpenAIGenerator。然后,您可以在 PromptBuilder 之后的管道中使用 AzureOpenAIGenerator 实例。
以下是使用 RAG 和 PromptBuilder 以及 AzureOpenAIGenerator 的生成式问答管道示例
from haystack import Pipeline
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
from haystack.components.builders.prompt_builder import PromptBuilder
from haystack.components.generators import AzureOpenAIGenerator
os.environ["AZURE_OPENAI_API_KEY"] = "Your Azure OpenAI API key"
os.environ["AZURE_OPENAI_AD_TOKEN"] = "Your Azure Active Directory Token"
template = """
Given the following information, answer the question.
Context:
{% for document in documents %}
{{ document.content }}
{% endfor %}
Question: What's the official language of {{ country }}?
"""
pipe = Pipeline()
pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
pipe.add_component("prompt_builder", PromptBuilder(template=template))
pipe.add_component("llm", AzureOpenAIGenerator(azure_endpoint="https://example-resource.azure.openai.com/", azure_deployment="gpt-35-turbo"))
pipe.connect("retriever", "prompt_builder.documents")
pipe.connect("prompt_builder", "llm")
pipe.run({
"prompt_builder": {
"country": "France"
}
})
