主题
LangSmith 可以通过 OpenTelemetry 工具捕获 LiveKit Agents 生成的追踪信息。本指南将向您展示如何自动捕获来自 LiveKit 语音 AI 智能体的追踪信息,并将其发送到 LangSmith 进行监控和分析。
完整的实现示例,请参阅 演示仓库。
安装
安装所需的软件包:
bash
pip install langsmith livekit livekit-agents livekit-plugins-openai livekit-plugins-silero livekit-plugins-turn-detector opentelemetry-exporter-otlp python-dotenvbash
uv add langsmith livekit livekit-agents livekit-plugins-openai livekit-plugins-silero livekit-plugins-turn-detector opentelemetry-exporter-otlp python-dotenv快速入门教程
按照这个分步教程,创建一个带有 LiveKit 和 LangSmith 追踪功能的语音 AI 智能体。您将通过复制粘贴代码片段来构建一个完整的工作示例。
步骤 1:设置环境
在您的项目目录中创建一个 .env 文件:
bash
OTEL_EXPORTER_OTLP_ENDPOINT=https://api.smith.langchain.com/otel
OTEL_EXPORTER_OTLP_HEADERS=x-api-key=<your-langsmith-api-key>, Langsmith-Project=livekit-voice
LIVEKIT_URL=<your-livekit-url>
LIVEKIT_API_KEY=<your-livekit-api-key>
LIVEKIT_API_SECRET=<your-livekit-api-secret>
OPENAI_API_KEY=<your-openai-api-key>步骤 2:下载 Span 处理器
添加启用 LangSmith 追踪的 自定义 span 处理器文件。将其保存为项目目录中的 langsmith_processor.py。
Span 处理器的作用是什么?
该 span 处理器使用 LangSmith 兼容的属性来丰富 LiveKit Agents 的 OpenTelemetry spans,以便您的追踪信息能在 LangSmith 中正确显示。
主要功能:
- 将 LiveKit span 类型(stt、llm、tts、agent、session、job)转换为 LangSmith 格式。
- 为消息可视化添加
gen_ai.prompt.*和gen_ai.completion.*属性。 - 跨对话轮次跟踪和聚合对话消息。
- 使用多种提取策略来处理各种 LiveKit 属性格式。
当您在代码中导入该处理器时,它会自动激活。
步骤 3:创建您的语音智能体文件
创建一个名为 agent.py 的新文件,并添加以下代码。我们将分部分构建它,以便您可以复制粘贴每个部分。
第 1 部分:导入依赖项并设置追踪
python
import sys
import os
from pathlib import Path
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
# 导入 LiveKit 组件
from livekit import agents
from livekit.agents import AgentServer, AgentSession, Agent
from livekit.agents.telemetry import set_tracer_provider
from livekit.plugins import silero
from livekit.plugins.turn_detector.multilingual import MultilingualModel
from opentelemetry.sdk.trace import TracerProvider
# 导入 span 处理器以启用 LangSmith 追踪
from langsmith_processor import LangSmithSpanProcessor
# 设置 LangSmith 追踪
def setup_langsmith():
"""设置 OpenTelemetry 追踪以将 spans 导出到 LangSmith。"""
endpoint = os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
headers = os.getenv("OTEL_EXPORTER_OTLP_HEADERS")
if not endpoint or not headers:
print("⚠️ 警告:未设置 OTEL 环境变量。追踪已禁用。")
return
# 创建带有自定义 span 处理器的追踪器提供者
trace_provider = TracerProvider()
trace_provider.add_span_processor(LangSmithSpanProcessor())
# 设置为 LiveKit 的追踪器提供者
set_tracer_provider(trace_provider)
print("✅ LangSmith 追踪已启用")
# 在创建智能体之前启用追踪
setup_langsmith()第 2 部分:定义您的智能体
python
class Assistant(Agent):
def __init__(self) -> None:
super().__init__(
instructions="""您是一个乐于助人的语音 AI 助手。
您热切地帮助用户解答问题。
保持回答简洁且对话式。""",
)第 3 部分:设置智能体服务器
python
server = AgentServer()
@server.rtc_session()
async def my_agent(ctx: agents.JobContext):
# 创建带有 STT、LLM、TTS 和 VAD 的智能体会话
session = AgentSession(
stt="deepgram/nova-2:en",
llm="openai/gpt-4o-mini",
tts=openai.TTS(model="tts-1", voice="alloy"),
vad=silero.VAD.load(),
turn_detection=MultilingualModel(),
)
# 启动会话
await session.start(
room=ctx.room,
agent=Assistant(),
)
if __name__ == "__main__":
# 在控制台模式下运行以进行本地测试
sys.argv = [sys.argv[0], "console"]
agents.cli.run_app(server)步骤 4:运行您的智能体
在控制台模式下运行您的语音智能体进行本地测试:
bash
python agent.py console您的智能体将启动并连接到 LiveKit。通过麦克风说话,所有追踪信息将自动出现在 LangSmith 中。以下是 LangSmith 中追踪信息的示例:LangSmith trace with LiveKit
查看完整的 agent.py 代码。
高级用法
自定义元数据和标签
您可以使用 span 属性向追踪信息添加自定义元数据:
python
from opentelemetry import trace
class Assistant(Agent):
def __init__(self) -> None:
super().__init__(
instructions="您是一个乐于助人的助手。",
)
# 获取当前 span 并添加自定义属性
tracer = trace.get_tracer(__name__)
span = trace.get_current_span()
if span:
span.set_attribute("langsmith.metadata.agent_type", "voice_assistant")
span.set_attribute("langsmith.metadata.version", "1.0")
span.set_attribute("langsmith.span.tags", "livekit,voice-ai,production")故障排除
Spans 未出现在 LangSmith 中
如果追踪信息未显示在 LangSmith 中:
- 验证环境变量:确保
.env文件中正确设置了OTEL_EXPORTER_OTLP_ENDPOINT和OTEL_EXPORTER_OTLP_HEADERS。 - 检查设置顺序:确保在创建
AgentServer之前 调用setup_langsmith()。 - 检查 API 密钥:确认您的 LangSmith API 密钥具有写入权限。
- 查找确认信息:启动时,您应该在控制台中看到 "✅ LangSmith tracing enabled"。
消息未正确显示
如果对话消息未正确显示:
- 检查 span 处理器:确认
langsmith_processor.py在您的项目目录中且导入正确。 - 验证导入:确保在您的 agent.py 中导入了
LangSmithSpanProcessor。 - 启用调试日志:在您的环境中设置
LANGSMITH_PROCESSOR_DEBUG=true以查看详细日志。
连接问题
如果您的智能体无法连接到 LiveKit:
- 验证 LiveKit URL:检查
.env文件中LIVEKIT_URL是否正确设置。 - 检查凭据:确保
LIVEKIT_API_KEY和LIVEKIT_API_SECRET正确。 - 测试连接:首先尝试使用 LiveKit CLI 连接到您的 LiveKit 服务器。
- 控制台模式:对于本地测试,始终使用:
python agent.py console。
导入错误
如果您遇到导入错误:
- 安装依赖项:运行步骤 1 中的完整 pip install 命令。
- 检查 Python 版本:确保您使用的是 Python 3.9 或更高版本。
- 验证 langsmith_processor:确保
langsmith_processor.py已下载并与agent.py位于同一目录。 - 检查 LiveKit 插件:确保您已为您的 STT/LLM/TTS 提供商安装了正确的 LiveKit 插件。
智能体无响应
如果您的智能体已连接但无响应:
- 检查 API 密钥:验证您的 OpenAI API 密钥(或其他提供商密钥)是否正确。
- 测试服务:确保您的 STT、LLM 和 TTS 服务可访问。
- 检查指令:确保您的智能体具有正确的指令。
- 查看日志:在控制台输出中查找错误信息。