LangChain은 개발자가 이러한 이유로 애플리케이션을 쉽게 빌드할 수 있도록 하는 개발 에코시스템입니다. 에코시스템은 여러 구성 요소로 구성됩니다. 대부분의 구성 요소를 단독으로 사용할 수 있으므로 가장 좋아하는 구성 요소를 선택하고 선택할 수 있습니다.
Azure AI Foundry에 배포된 모델은 다음 두 가지 방법으로 LangChain과 함께 사용할 수 있습니다.
Azure AI Foundry 모델 API 사용: Azure AI Foundry에 배포된 모든 모델은 카탈로그의 대부분의 모델에 사용할 수 있는 일반적인 기능 집합을 제공하는 Foundry 모델 API를 지원합니다. 이 API의 이점은 모든 모델에 동일하므로 사용 중인 모델 배포를 변경하는 것만큼 간단하게 한 모델에서 다른 모델로 변경할 수 있다는 것입니다. 더 이상 코드를 변경할 필요는 없습니다. LangChain으로 작업할 때 확장을 설치합니다
langchain-azure-ai
.모델의 공급자별 API 사용: OpenAI, Cohere 또는 Mistral과 같은 일부 모델은 LangChain에 대한 자체 API 및 확장 집합을 제공합니다. 이러한 확장에는 모델에서 지원하는 특정 기능이 포함될 수 있으므로 이를 악용하려는 경우에 적합합니다. LangChain으로 작업할 때 사용하려는 모델과 관련된 확장(예
langchain-openai
: 또는langchain-cohere
.)을 설치합니다.
이 자습서에서는 패키지를 langchain-azure-ai
사용하여 LangChain으로 애플리케이션을 빌드하는 방법을 알아봅니다.
필수 조건
이 자습서를 실행하려면 다음이 필요합니다.
Foundry Models API를 지원하는 모델이 배포되었습니다. 이 예제에서는 Foundry 모델의 배포를 사용합니다
Mistral-Large-2407
.pip를 포함하여 Python 3.9 이상이 설치되었습니다.
LangChain이 설치되었습니다. 다음을 사용하여 수행할 수 있습니다.
pip install langchain-core
이 예제에서는 Foundry Models API를 사용하여 작업하므로 다음 패키지를 설치합니다.
pip install -U langchain-azure-ai
환경 구성
Azure AI Foundry 포털에 배포된 LLM을 사용하려면 엔드포인트 및 자격 증명을 연결해야 합니다. 사용하려는 모델에서 필요한 정보를 가져오려면 다음 단계를 따릅니다.
팁 (조언)
Azure AI Foundry 포털에서 왼쪽 창을 사용자 지정할 수 있으므로 이러한 단계에 표시된 것과 다른 항목이 표시될 수 있습니다. 원하는 항목이 표시되지 않으면 왼쪽 창 아래쪽에 있는 ... 더 보기를 선택하십시오.
Azure AI Foundry로 이동합니다.
아직 열려 있지 않은 경우 모델이 배포된 프로젝트를 엽니다.
모델 + 엔드포인트로 이동하여 필수 구성 요소에 표시된 대로 배포한 모델을 선택합니다.
엔드포인트 URL과 키를 복사합니다.
팁 (조언)
모델이 Microsoft Entra ID 지원과 함께 배포된 경우 키가 필요하지 않습니다.
이 시나리오에서는 엔드포인트 URL과 키를 모두 다음 환경 변수에 넣었습니다.
export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"
구성되면 엔드포인트에 연결할 클라이언트를 만듭니다. 이 경우 채팅 완료 모델을 사용하여 작업하므로 클래스 AzureAIChatCompletionsModel
를 가져옵니다.
import os
from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel
model = AzureAIChatCompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
model="mistral-large-2407",
)
팁 (조언)
Azure OpenAI 모델의 경우 Azure OpenAI 모델 사용에 표시된 대로 클라이언트를 구성합니다.
엔드포인트에서 Microsoft Entra ID를 지원하는 경우 다음 코드를 사용하여 클라이언트를 만들 수 있습니다.
import os
from azure.identity import DefaultAzureCredential
from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel
model = AzureAIChatCompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=DefaultAzureCredential(),
model_name="mistral-large-2407",
)
비고
Microsoft Entra ID를 사용하는 경우 엔드포인트가 해당 인증 방법을 사용하여 배포되었는지 확인하고 이를 호출하는 데 필요한 권한이 있는지 확인합니다.
비동기 호출을 사용하려는 경우 자격 증명에 비동기 버전을 사용하는 것이 좋습니다.
from azure.identity.aio import (
DefaultAzureCredential as DefaultAzureCredentialAsync,
)
from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel
model = AzureAIChatCompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=DefaultAzureCredentialAsync(),
model_name="mistral-large-2407",
)
엔드포인트가 표준 배포와 같이 하나의 모델을 제공하는 경우 매개 변수를 나타낼 model_name
필요가 없습니다.
import os
from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel
model = AzureAIChatCompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
)
채팅 완료 모델 사용
먼저 모델을 직접 사용하겠습니다.
ChatModels
는 LangChain Runnable
의 인스턴스입니다. 즉, 상호 작용을 위한 표준 인터페이스를 노출합니다. 모델을 호출하기 위해 메서드에 메시지 invoke
목록을 전달할 수 있습니다.
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage(content="Translate the following from English into Italian"),
HumanMessage(content="hi!"),
]
model.invoke(messages)
필요에 따라 체인에서 작업을 작성할 수도 있습니다. 이제 프롬프트 템플릿을 사용하여 문장을 번역해 보겠습니다.
from langchain_core.output_parsers import StrOutputParser
system_template = "Translate the following into {language}:"
prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template), ("user", "{text}")]
)
프롬프트 템플릿에서 볼 수 있듯이 이 체인에는 입력이 있습니다 language
text
. 이제 출력 파서 만들기:
from langchain_core.prompts import ChatPromptTemplate
parser = StrOutputParser()
이제 파이프(|
) 연산자를 사용하여 위의 템플릿, 모델 및 출력 파서와 결합할 수 있습니다.
chain = prompt_template | model | parser
체인을 호출하려면 필요한 입력을 식별하고 메서드를 invoke
사용하여 값을 제공합니다.
chain.invoke({"language": "italian", "text": "hi"})
'ciao'
여러 LLM 연결
Azure AI Foundry에 배포된 모델은 모든 모델에서 표준인 Foundry 모델 API를 지원합니다. 각 모델의 기능에 따라 여러 LLM 작업을 연결하여 기능에 따라 올바른 모델을 최적화할 수 있습니다.
다음 예제에서는 두 개의 모델 클라이언트를 만듭니다. 하나는 생산자이고 다른 하나는 검증자입니다. 구분을 명확히 하기 위해 Foundry Models API 와 같은 다중 모델 엔드포인트를 사용하므로 매개 변수 model_name
를 전달하여 Mistral-Large
Mistral-Small
콘텐츠를 생성하는 것이 확인보다 더 복잡하다는 사실을 인용합니다.
from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel
producer = AzureAIChatCompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
model_name="mistral-large-2407",
)
verifier = AzureAIChatCompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
model_name="mistral-small",
)
팁 (조언)
각 모델의 모델 카드를 탐색하여 각 모델에 가장 적합한 사용 사례를 이해합니다.
다음 예제에서는 도시 시인이 쓴 시를 생성합니다.
from langchain_core.prompts import PromptTemplate
producer_template = PromptTemplate(
template="You are an urban poet, your job is to come up \
verses based on a given topic.\n\
Here is the topic you have been asked to generate a verse on:\n\
{topic}",
input_variables=["topic"],
)
verifier_template = PromptTemplate(
template="You are a verifier of poems, you are tasked\
to inspect the verses of poem. If they consist of violence and abusive language\
report it. Your response should be only one word either True or False.\n \
Here is the lyrics submitted to you:\n\
{input}",
input_variables=["input"],
)
이제 조각을 연결해 보겠습니다.
chain = producer_template | producer | parser | verifier_template | verifier | parser
이전 체인은 단계 verifier
의 출력만 반환합니다. LangChain에서 생성된 producer
중간 결과에 액세스하려면 개체를 RunnablePassthrough
사용하여 해당 중간 단계도 출력해야 합니다. 다음 코드는 이 작업을 수행하는 방법을 보여줍니다.
from langchain_core.runnables import RunnablePassthrough, RunnableParallel
generate_poem = producer_template | producer | parser
verify_poem = verifier_template | verifier | parser
chain = generate_poem | RunnableParallel(poem=RunnablePassthrough(), verification=RunnablePassthrough() | verify_poem)
체인을 호출하려면 필요한 입력을 식별하고 메서드를 invoke
사용하여 값을 제공합니다.
chain.invoke({"topic": "living in a foreign country"})
{
"peom": "...",
"verification: "false"
}
포함 모델 사용
동일한 방식으로 LLM 클라이언트를 만들고 embeddings 모델에 연결할 수 있습니다. 다음 예제에서는 환경 변수를 이제 embeddings 모델을 가리키도록 설정합니다.
export AZURE_INFERENCE_ENDPOINT="<your-model-endpoint-goes-here>"
export AZURE_INFERENCE_CREDENTIAL="<your-key-goes-here>"
그런 다음 클라이언트를 만듭니다.
from langchain_azure_ai.embeddings import AzureAIEmbeddingsModel
embed_model = AzureAIEmbeddingsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ['AZURE_INFERENCE_CREDENTIAL'],
model_name="text-embedding-3-large",
)
다음 예제에서는 메모리에서 벡터 저장소를 사용하는 간단한 예제를 보여줍니다.
from langchain_core.vectorstores import InMemoryVectorStore
vector_store = InMemoryVectorStore(embed_model)
몇 가지 문서를 추가해 보겠습니다.
from langchain_core.documents import Document
document_1 = Document(id="1", page_content="foo", metadata={"baz": "bar"})
document_2 = Document(id="2", page_content="thud", metadata={"bar": "baz"})
documents = [document_1, document_2]
vector_store.add_documents(documents=documents)
유사성으로 검색해 보겠습니다.
results = vector_store.similarity_search(query="thud",k=1)
for doc in results:
print(f"* {doc.page_content} [{doc.metadata}]")
Azure OpenAI 모델 사용
패키지 langchain-azure-ai
가 포함된 OpenAI 모델을 Foundry Models 및 Foundry Models 서비스에서 Azure OpenAI와 함께 사용하는 경우, api_version
파라미터를 사용하여 특정 API 버전을 선택해야 할 수 있습니다. 다음 예제에서는 Foundry Models 배포에서 Azure OpenAI에 연결하는 방법을 보여 줍니다.
from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel
llm = AzureAIChatCompletionsModel(
endpoint="https://<resource>.openai.azure.com/openai/deployments/<deployment-name>",
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
api_version="2024-05-01-preview",
)
중요합니다
배포에서 사용 중인 API 버전을 확인합니다. 잘못 api_version
되거나 모델에서 지원되지 않는 것을 사용하면 예외가 발생합니다 ResourceNotFound
.
배포가 Azure AI Services에서 호스트되는 경우 Foundry Models 서비스를 사용할 수 있습니다.
from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel
llm = AzureAIChatCompletionsModel(
endpoint="https://<resource>.services.ai.azure.com/models",
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
model_name="<model-name>",
api_version="2024-05-01-preview",
)
디버깅 및 문제 해결
애플리케이션을 디버그하고 Azure AI Foundry의 모델로 전송된 요청을 이해해야 하는 경우 다음과 같이 통합의 디버그 기능을 사용할 수 있습니다.
먼저 관심 있는 수준으로 로깅을 구성합니다.
import sys
import logging
# Acquire the logger for this client library. Use 'azure' to affect both
# 'azure.core` and `azure.ai.inference' libraries.
logger = logging.getLogger("azure")
# Set the desired logging level. logging.INFO or logging.DEBUG are good options.
logger.setLevel(logging.DEBUG)
# Direct logging output to stdout:
handler = logging.StreamHandler(stream=sys.stdout)
# Or direct logging output to a file:
# handler = logging.FileHandler(filename="sample.log")
logger.addHandler(handler)
# Optional: change the default logging format. Here we add a timestamp.
formatter = logging.Formatter("%(asctime)s:%(levelname)s:%(name)s:%(message)s")
handler.setFormatter(formatter)
요청의 페이로드를 보려면 클라이언트를 인스턴스화할 때 인수 logging_enable
=True
를 다음으로 client_kwargs
전달합니다.
import os
from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel
model = AzureAIChatCompletionsModel(
endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
model_name="mistral-large-2407",
client_kwargs={"logging_enable": True},
)
코드에서 평소와 같이 클라이언트를 사용합니다.
추적
추적기를 만들어 Azure AI Foundry에서 추적 기능을 사용할 수 있습니다. 로그는 Azure 애플리케이션 Insights에 저장되며 Azure Monitor 또는 Azure AI Foundry 포털을 사용하여 언제든지 쿼리할 수 있습니다. 각 AI Hub에는 연결된 Azure 애플리케이션 인사이트가 있습니다.
계측 연결 문자열 가져오기
팁 (조언)
Azure AI Foundry 포털에서 왼쪽 창을 사용자 지정할 수 있으므로 이러한 단계에 표시된 것과 다른 항목이 표시될 수 있습니다. 원하는 항목이 표시되지 않으면 왼쪽 창 아래쪽에 있는 ... 더 보기를 선택하십시오.
다음을 통해 Azure 애플리케이션 Insights에 원격 분석을 보내도록 애플리케이션을 구성할 수 있습니다.
연결 문자열 사용하여 Insights를 직접 Azure 애플리케이션.
Azure AI Foundry 포털로 이동하여 추적을 선택합니다.
데이터 원본 관리를 선택합니다. 이 화면에서 프로젝트와 연결된 인스턴스를 볼 수 있습니다.
연결 문자열에서 값을 복사하고 다음 변수로 설정합니다.
import os application_insights_connection_string = "instrumentation...."
Azure AI Foundry SDK 및 프로젝트 연결 문자열.
사용자 환경에 패키지
azure-ai-projects
가 설치되어 있는지 확인합니다.Azure AI Foundry 포털로 이동합니다.
프로젝트의 연결 문자열 복사하고 다음 코드로 설정합니다.
from azure.ai.projects import AIProjectClient from azure.identity import DefaultAzureCredential project_client = AIProjectClient.from_connection_string( credential=DefaultAzureCredential(), conn_str="<your-project-connection-string>", ) application_insights_connection_string = project_client.telemetry.get_connection_string()
Azure AI Foundry에 대한 추적 구성
다음 코드는 Azure AI Foundry의 프로젝트 뒤에서 Azure 애플리케이션 Insights에 연결된 추적기를 만듭니다. 매개 변수 enable_content_recording
가 .로 설정되어 있는지 확인합니다 True
. 이렇게 하면 전체 애플리케이션의 입력 및 출력과 중간 단계를 캡처할 수 있습니다. 이러한 기능은 애플리케이션을 디버깅하고 빌드할 때 유용하지만 프로덕션 환경에서는 사용하지 않도록 설정할 수 있습니다. 기본값은 환경 변수 AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED
입니다.
from langchain_azure_ai.callbacks.tracers import AzureAIInferenceTracer
tracer = AzureAIInferenceTracer(
connection_string=application_insights_connection_string,
enable_content_recording=True,
)
체인을 사용하여 추적을 구성하려면 작업의 값 구성을 invoke
콜백으로 지정합니다.
chain.invoke({"topic": "living in a foreign country"}, config={"callbacks": [tracer]})
추적을 위해 체인 자체를 구성하려면 다음 메서드를 .with_config()
사용합니다.
chain = chain.with_config({"callbacks": [tracer]})
그런 다음, 평소와 같이 메서드를 invoke()
사용합니다.
chain.invoke({"topic": "living in a foreign country"})
추적 보기
추적을 보려면 다음을 수행합니다.
Azure AI Foundry 포털로 이동합니다.
추적 섹션으로 이동합니다.
만든 추적을 식별합니다. 추적이 표시되려면 몇 초 정도 걸릴 수 있습니다.
추적을 시각화하고 관리하는 방법에 대해 자세히 알아봅니다.