随着AI和机器学习应用变得越来越复杂,确保它们的可观察性变得至关重要。跟踪有助于识别和解决性能瓶颈和错误,提供内部运作的见解。LangChain已成为构建使用大型语言模型的应用程序的一个流行框架。将LangChain应用部署到生产环境时,跟踪和监控对于理解性能以及解决问题是必不可少的。在这篇文章中,我们将介绍如何在Azure上使用OpenTelemetry和Application Insights进行追踪LangChain代码。我们将利用OpenInference、Azure的OpenTelemetry导出器和Application Insights等工具和库。
追踪为何对LangChain应用很重要
LangChain应用通常涉及复杂的操作链——提示语言模型进行操作、调用外部API接口、访问向量数据库等。跟踪帮助开发人员可视化这些操作、识别瓶颈并调试错误。这在可能具有不可预测行为的AI应用中尤为重要。
前提条件在我们开始具体实现之前,确保已经安装了以下这些:
- Python 3.7+
- Azure 帐号
- 基本的 Python 和 LangChain 知识(了解)
- OpenAI API 密钥(或令牌)
第一步:设置OpenInference插桩:
OpenInference 为 LangChain 提供了自动仪器功能,使其能够与 OpenTelemetry 兼容。我们从安装所需包开始。
requirements.txt
azure-monitor-opentelemetry-exporter
openinference-instrumentation-langchain (开放推理-语言链监控)
langchain
opentelemetry-sdk
opentelemetry-exporter-otlp
openai
现在通过运行 pip install -r requirements.txt
来安装所需的包。
步骤 2:设置 Azure Monitor Exporter:
Azure Monitor 提供了强大的工具来监控应用程序,其中包括 Application Insights。我们将使用 Azure Monitor Exporter 将追踪数据发送至 Application Insights 中。
import os
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from dotenv import load_dotenv
# 加载环境变量文件 'azure.env'
load_dotenv('azure.env')
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter
# 使用应用洞察连接字符串创建导出器
exporter = AzureMonitorTraceExporter.from_connection_string(os.environ["APPLICATIONINSIGHTS_CONNECTION_STRING"])
步骤 3:将 LangChain Instrumentor 与 Azure Monitor 集成
Azure Monitor 提供了强大的工具来监控应用程序,包括 Application Insights。我们将使用 Azure Monitor OpenTelemetry 导出器将跟踪数据发送到 Application Insights。以下代码为 LangChain 应用程序设置了 OpenTelemetry 跟踪,配置为每 60 秒批量导出跨度数据,并自动为 LangChain 操作添加跟踪代码。这将帮助您收集关于 LangChain 应用程序性能和行为的详细遥测数据。
tracer_provider = TracerProvider()
from openinference.instrumentation.langchain import LangChainInstrumentor
from opentelemetry import trace as trace_api
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk import trace as trace_sdk
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor
trace_api.set_tracer_provider(tracer_provider)
trace_api.set_tracer_provider(tracer_provider)
tracer = trace_api.get_tracer(__name__)
span_processor = BatchSpanProcessor(exporter, schedule_delay_millis=60000)
trace_api.get_tracer_provider().add_span_processor(span_processor)
LangChainInstrumentor().instrument()
第三步:构建LangChain LLM链条
现在让我们设置一个LangChain应用来使用Azure的OpenAI服务生成笑话。首先,从这些模块中导入所需的类。创建一个提示模板,其模板会根据提供的形容词来生成一个笑话。然后,使用从环境变量中获取的API密钥、端点URL、API版本和模型名称来实例化AzureChatOpenAI
类。这样配置后,应用就可以与Azure的OpenAI服务互动,生成符合指定模板的响应,从而生成相应的笑话。
from langchain_openai import *
prompt_template = "告诉我一个{adjective}的笑话"
prompt = PromptTemplate(input_variables=["adjective"], template=prompt_template)
llm = AzureChatOpenAI(api_key = os.environ['AZURE_OPENAI_API_KEY'],
azure_endpoint = os.environ['AZURE_OPENAI_ENDPOINT'],
api_version = '2024-06-01',
model= os.environ.get('AZURE_OPENAI_GPT_DEPLOYMENT'))
第四步:在Azure Monitor中查看追踪
在查看跟踪记录之前,让我们先调用 LangChain 链。
chain = LLMChain(llm=llm, prompt=prompt, metadata={"category": "幽默"})
completion = chain.predict(adjective="滑稽的", metadata={"variant": "滑稽的"})
print(completion)
在集成 Azure Monitor 导出器后,您的 LangChain 应用将把跟踪数据发送到 Application Insights。您可以在 Application Insights 中查看这些跟踪数据。
- 导航到 Azure 门户网站。
- 选择你的 Application Insights 资源。
- 转到“交易”部分查看跟踪记录。
你可以从OpenAI追踪单个的向量搜索呼叫。
最后
通过遵循这些步骤,您可以有效地使用OpenTelemetry来跟踪LangChain应用,并在Azure Monitor的Application Insights中查看这些跟踪。这种设置不仅增强了可观测性,还有助于高效识别和解决性能问题。如需更多详情,可参阅官方文档:
尽情追踪吧!