Stephen Chu d785edb9eb Update README structure: Extract and Scrub PII, Upload
Changed from 'Customer Workflow' and 'LangChain Team Workflow' to:
- Extract and Scrub PII (customer actions)
- Upload (LangChain team action)

Clearer separation of responsibilities.
2025-12-23 18:34:32 -05:00

LangSmith Trace Export & PII Scrubbing

Simple bash scripts to extract, scrub, and upload LangSmith traces.

Quick Start

Extract and Scrub PII

Customers extract their trace and scrub sensitive data before sending:

# 1. Extract trace
export LANGSMITH_API_KEY='your-api-key'
./extract_trace.sh 00000000-0000-0000-f319-b36446ca3f23

# 2. Scrub PII
./scrub_trace.sh trace_00000000-0000-0000-f319-b36446ca3f23.json "inputs.messages,inputs.email"

# 3. Review scrubbed file manually

# 4. Send trace_00000000-0000-0000-f319-b36446ca3f23.scrubbed.json to support

Upload

LangChain team uploads the scrubbed trace:

export LANGSMITH_API_KEY='your-api-key'
./upload_trace.sh customer_trace.scrubbed.json "customer-issue-1234"

Requirements

  • bash
  • curl
  • jq (install: brew install jq or apt-get install jq)

Scripts

extract_trace.sh

Extract a trace by ID.

./extract_trace.sh <trace_id> [output_file]

Output: trace_<id>.json

scrub_trace.sh

Redact PII fields from trace.

./scrub_trace.sh <trace_file> "<field1>,<field2>,..."

Output: <trace_file>.scrubbed.json

Common fields to redact:

  • inputs.messages - User messages
  • inputs.email - Email addresses
  • inputs.query - Search queries
  • outputs.text - Generated text
  • extra.metadata.session_id - Session IDs
  • extra.metadata.user_id - User IDs
  • extra.metadata.api_key - API keys

Handles nested fields: Use dot notation (e.g., extra.metadata.api_key)

upload_trace.sh

Upload scrubbed trace to LangSmith project.

./upload_trace.sh <trace_file> <project_name>

Complete Example

Extract and Scrub PII:

export LANGSMITH_API_KEY='lsv2_pt_...'

# Extract
./extract_trace.sh a1b2c3d4-5678-90ab-cdef-1234567890ab

# Scrub
./scrub_trace.sh trace_a1b2c3d4-5678-90ab-cdef-1234567890ab.json \
  "inputs.messages,inputs.email,extra.metadata.session_id"

# Review and send trace_a1b2c3d4-5678-90ab-cdef-1234567890ab.scrubbed.json to support

Upload:

export LANGSMITH_API_KEY='lsv2_pt_...'

./upload_trace.sh trace_a1b2c3d4-5678-90ab-cdef-1234567890ab.scrubbed.json \
  "customer-acme-issue-5678"

Help

Each script has a --help flag:

./extract_trace.sh --help
./scrub_trace.sh --help
./upload_trace.sh --help

EU Region

Set LANGSMITH_ENDPOINT for EU:

export LANGSMITH_ENDPOINT='https://eu.api.smith.langchain.com'

Troubleshooting

"jq required"

brew install jq  # macOS
apt-get install jq  # Linux

"No runs found"

  • Trace ID doesn't exist
  • Trace not fully ingested (wait a few seconds)
  • Wrong API key

"Failed to create project"

  • API key invalid or expired
  • No write permissions

Important

Customers must manually review scrubbed files before sending to ensure all PII is removed.

S
Description
Bash scripts to extract, scrub, and upload LangSmith traces.
Readme MIT 48 KiB
Languages
Shell 100%