From 964bf68439a82ec51925631cf317153b9c536f7f Mon Sep 17 00:00:00 2001 From: Rahul Verma Date: Fri, 19 Sep 2025 18:44:32 -0400 Subject: [PATCH 1/2] Add example for configuring an anonymizer for LangGraph --- src/oss/langgraph/observability.mdx | 56 ++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/oss/langgraph/observability.mdx b/src/oss/langgraph/observability.mdx index dc67ae0aa..c601aa6b8 100644 --- a/src/oss/langgraph/observability.mdx +++ b/src/oss/langgraph/observability.mdx @@ -30,6 +30,60 @@ export LANGSMITH_API_KEY= By default, the trace will be logged to the project with the name `default`. To configure a custom project name, see [Log to a project](#log-to-a-project). -For more information, see [Trace with LangGraph](langsmith/trace-with-langgraph). +For more information, see [Trace with LangGraph](/langsmith/trace-with-langgraph). + +## Use anonymizers to prevent logging of sensitive data in traces + +You may want to mask sensitive data to prevent it from being logged to LangSmith. You can create [anonymizers](/langsmith/mask-inputs-outputs#rule-based-masking-of-inputs-and-outputs) and apply them to +your graph using configuration. This example will redact anything matching the Social Security Number format XXX-XX-XXXX from traces sent to LangSmith. + + +```python Python +from langchain_core.tracers.langchain import LangChainTracer +from langgraph.graph import StateGraph, MessagesState +from langsmith import Client +from langsmith.anonymizer import create_anonymizer + +anonymizer = create_anonymizer([ + # Matches SSNs + { "pattern": r"\b\d{3}-?\d{2}-?\d{4}\b", "replace": "" } +]) + +tracer_client = Client(anonymizer=anonymizer) +tracer = LangChainTracer(client=tracer_client) +# Define the graph +graph = ( + StateGraph(MessagesState) + ... + .compile() + .with_config({'callbacks': [tracer]}) +) +``` + +```typescript TypeScript +import { StateGraph } from "@langchain/langgraph"; +import { LangChainTracer } from "@langchain/core/tracers/tracer_langchain"; +import { StateAnnotation } from "./state.js"; +import { createAnonymizer } from "langsmith/anonymizer" +import { Client } from "langsmith" + + +const anonymizer = createAnonymizer([ + # Matches SSNs + { pattern: /\b\d{3}-?\d{2}-?\d{4}\b/, replace: "" } +]) + +const langsmithClient = new Client({ anonymizer }) +const tracer = new LangChainTracer({ + client: langsmithClient, +}); + +export const graph = new StateGraph(StateAnnotation) + .compile() + .withConfig({ + callbacks: [tracer], +}); +``` + From 4d67fac7fb0ef74e0a36c1fd6efbf55c73398402 Mon Sep 17 00:00:00 2001 From: Lauren Hirata Singh Date: Mon, 22 Sep 2025 10:54:31 -0400 Subject: [PATCH 2/2] Apply suggestions from code review --- src/oss/langgraph/observability.mdx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/oss/langgraph/observability.mdx b/src/oss/langgraph/observability.mdx index c601aa6b8..89821a23a 100644 --- a/src/oss/langgraph/observability.mdx +++ b/src/oss/langgraph/observability.mdx @@ -39,7 +39,7 @@ For more information, see [Trace with LangGraph](/langsmith/trace-with-langgraph You may want to mask sensitive data to prevent it from being logged to LangSmith. You can create [anonymizers](/langsmith/mask-inputs-outputs#rule-based-masking-of-inputs-and-outputs) and apply them to your graph using configuration. This example will redact anything matching the Social Security Number format XXX-XX-XXXX from traces sent to LangSmith. - +:::python ```python Python from langchain_core.tracers.langchain import LangChainTracer from langgraph.graph import StateGraph, MessagesState @@ -61,7 +61,8 @@ graph = ( .with_config({'callbacks': [tracer]}) ) ``` - +::: +:::js ```typescript TypeScript import { StateGraph } from "@langchain/langgraph"; import { LangChainTracer } from "@langchain/core/tracers/tracer_langchain"; @@ -86,4 +87,4 @@ export const graph = new StateGraph(StateAnnotation) callbacks: [tracer], }); ``` - +:::