追踪 LangChain🦜⛓️
LangChain 是一个用于构建由 LLM 驱动的应用程序的开源框架。
MLflow Tracing 为 LangChain 提供了自动追踪能力。通过调用 mlflow.langchain.autolog()
函数即可启用 LangChain 的追踪,并且嵌套追踪会在链调用时自动记录到当前的 MLflow Experiment 中。
import mlflow
mlflow.langchain.autolog()
提示
MLflow LangChain 集成不仅限于追踪。MLflow 为 LangChain 提供了完整的追踪体验,包括模型追踪、提示词管理和评估。请查看 MLflow LangChain Flavor 以了解更多信息!
示例用法
import mlflow
import os
from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
# Enabling autolog for LangChain will enable trace logging.
mlflow.langchain.autolog()
# Optional: Set a tracking URI and an experiment
mlflow.set_experiment("LangChain")
mlflow.set_tracking_uri("https://:5000")
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7, max_tokens=1000)
prompt_template = PromptTemplate.from_template(
"Answer the question as if you are {person}, fully embodying their style, wit, personality, and habits of speech. "
"Emulate their quirks and mannerisms to the best of your ability, embracing their traits—even if they aren't entirely "
"constructive or inoffensive. The question is: {question}"
)
chain = prompt_template | llm | StrOutputParser()
# Let's test another call
chain.invoke(
{
"person": "Linus Torvalds",
"question": "Can I just set everyone's access to sudo to make things easier?",
}
)
注意
上面的示例已确认在以下版本要求下有效
pip install openai==1.30.5 langchain==0.2.1 langchain-openai==0.1.8 langchain-community==0.2.1 mlflow==2.14.0 tiktoken==0.7.0
支持的 API
LangChain 的自动追踪支持以下 API。
invoke
batch
stream
ainvoke
abatch
astream
get_relevant_documents
(适用于检索器)__call__
(适用于链和 AgentExecutor)
定制追踪行为
有时您可能希望定制追踪中记录的信息。您可以通过创建一个继承自 MlflowLangchainTracer
的自定义回调处理器来实现。MlflowLangchainTracer 是一个注入到 LangChain 模型推理过程中的回调处理器,用于自动记录追踪。它在链的一系列操作(如 on_chain_start、on_llm_start 等)开始时启动一个新的 span,并在操作完成时结束。各种元数据(如 span 类型、操作名称、输入、输出、延迟等)会自动记录到 span 中。
以下示例演示了如何在聊天模型开始运行时向 span 记录一个附加属性。
from mlflow.langchain.langchain_tracer import MlflowLangchainTracer
class CustomLangchainTracer(MlflowLangchainTracer):
# Override the handler functions to customize the behavior. The method signature is defined by LangChain Callbacks.
def on_chat_model_start(
self,
serialized: Dict[str, Any],
messages: List[List[BaseMessage]],
*,
run_id: UUID,
tags: Optional[List[str]] = None,
parent_run_id: Optional[UUID] = None,
metadata: Optional[Dict[str, Any]] = None,
name: Optional[str] = None,
**kwargs: Any,
):
"""Run when a chat model starts running."""
attributes = {
**kwargs,
**metadata,
# Add additional attribute to the span
"version": "1.0.0",
}
# Call the _start_span method at the end of the handler function to start a new span.
self._start_span(
span_name=name or self._assign_span_name(serialized, "chat model"),
parent_run_id=parent_run_id,
span_type=SpanType.CHAT_MODEL,
run_id=run_id,
inputs=messages,
attributes=kwargs,
)
禁用自动追踪
通过调用 mlflow.langchain.autolog(disable=True)
或 mlflow.autolog(disable=True)
,可以全局禁用 LangChain 的自动追踪。