6.2LLM交互回调


文档摘要

6.2 LLM交互回调 本教程演示如何使用 和 来监控LLM请求与响应。 学习目标 理解LLM交互回调 学习如何监控LLM请求与响应 跟踪令牌使用情况和响应时间 估算API费用 监控LLM性能指标 项目结构 设置 安装依赖: 设置API密钥: 运行演示 命令行演示 Web界面 核心概念:LLM交互监控 LLM交互回调允许您监控代理与底层语言模型之间的通信,为您提供关于请求、响应和性能指标的洞察。 LLM交互流程 回调执行时间线 代码详解 1.

6.2 LLM交互回调

本教程演示如何使用before_model_callbackafter_model_callback来监控LLM请求与响应。

学习目标

  • 理解LLM交互回调
  • 学习如何监控LLM请求与响应
  • 跟踪令牌使用情况和响应时间
  • 估算API费用
  • 监控LLM性能指标

项目结构

6_2_llm_interaction_callbacks/ ├── agent.py # Agent with LLM interaction callbacks ├── app.py # Streamlit web interface ├── requirements.txt # Python dependencies └── README.md # This file

设置

  1. 安装依赖:

    pip install -r requirements.txt
  2. 设置API密钥:

    # Create .env file echo "GOOGLE_API_KEY=your_api_key_here" > .env

运行演示

命令行演示

python agent.py

Web界面

streamlit run app.py

核心概念:LLM交互监控

LLM交互回调允许您监控代理与底层语言模型之间的通信,为您提供关于请求、响应和性能指标的洞察。

LLM交互流程

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ User Input │───▶│ LLM Request │───▶│ LLM Response │ │ │ │ Callback │ │ Callback │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ │ Model API │ │ Token Usage │ │ (Gemini) │ │ & Performance │ └─────────────────┘ └─────────────────┘

回调执行时间线

Timeline: ──────────────────────────────────────────────────────────▶ User Message │ ▼ ┌─────────────────┐ │ before_model │ ← Records start time, model info │ _callback │ └─────────────────┘ │ ▼ ┌─────────────────┐ │ LLM API Call │ ← Actual request to Gemini │ (Gemini 3 Flash) │ └─────────────────┘ │ ▼ ┌─────────────────┐ │ after_model │ ← Calculates duration, tokens, cost │ _callback │ └─────────────────┘ │ ▼ Response to User

代码详解

1. 回调函数

这些回调成对工作,以监控完整的LLM交互:

前置回调 (before_model_callback):

  • llm_request中提取模型信息
  • 记录请求时间戳
  • 将数据存储在会话状态中,供后置回调使用
  • 记录请求详情(模型、时间、代理)

后置回调 (after_model_callback):

  • 从会话状态中获取存储的请求数据
  • 计算响应时长
  • llm_response.usage_metadata中提取令牌使用情况
  • 根据令牌数量估算API费用
  • 记录性能指标

2. 回调之间的状态管理

Session State Flow: ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ before_callback │───▶│ Session State │───▶│ after_callback │ │ stores: │ │ │ │ retrieves: │ │ - start_time │ │ - llm_request_ │ │ - start_time │ │ - model │ │ time │ │ - model │ │ - prompt_length │ │ - llm_model │ │ - prompt_length │ └─────────────────┘ └─────────────────┘ └─────────────────┘

3. 代理设置

代理配置了两个回调:

  • before_model_callback:监控请求发起
  • after_model_callback:监控响应完成
  • 使用InMemoryRunner确保正确触发回调

测试示例

示例输出格式

LLM Request to gemini-3-flash-preview ⏰ Request time: 19:15:30 Agent: llm_monitor_agent LLM Response from gemini-3-flash-preview ⏱️ Duration: 1.45s Tokens: 156 Estimated cost: $0.0004

每个指标说明

  • ⏰ 请求时间:LLM请求发起的时间
  • ⏱️ 时长:从请求到响应的总时间
  • ** 令牌**:消耗的总令牌数(输入+输出)
  • ** 估算费用**:根据令牌使用量估算的近似API费用

关键概念

LLM请求监控

  • 模型信息:跟踪正在使用的模型
  • 计时:记录请求时间戳
  • 状态管理:存储请求数据以便分析响应

LLM响应监控

  • 响应时间:计算从请求到响应的时长
  • 令牌使用:跟踪消耗的总令牌数
  • 费用估算:近似API费用

使用元数据

  • 令牌数量llm_response.usage_metadata.total_token_count
  • 模型信息:可在请求和响应中获取
  • 计时数据:存储在回调之间的会话状态中

使用场景

  • 性能监控:跟踪LLM响应时间
  • 成本管理:监控API使用量和费用
  • 质量保证:分析提示和响应模式
  • 调试:排查LLM交互问题
  • 分析:收集使用统计和指标

常见错误

  1. 回调签名不正确:

    # ❌ Wrong def before_model_callback(context, model, prompt): # ✅ Correct def before_model_callback(callback_context: CallbackContext, llm_request):
  2. 令牌提取错误:

    # ❌ Wrong tokens = llm_response.usage_metadata.get('total_token_count') # ✅ Correct tokens = getattr(llm_response.usage_metadata, 'total_token_count', 0)
  3. 未使用InMemoryRunner:

    # ❌ Wrong - callbacks won't trigger agent.run(message) # ✅ Correct runner.run_async(...)

下一步

  • 尝试教程6.3:工具执行回调
  • 实验不同的成本估算模型
  • 添加响应质量指标
  • 实现速率限制和配额管理
  • 创建自定义分析仪表板

免责声明
本文档采用基于机器的 AI 翻译服务进行翻译。尽管我们力求准确,但请注意,自动翻译可能存在错误或不准确之处。应以原文语言版本的文档作为权威依据。如需获取关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。


作者与出处
原作者: Shubhamsaboo
来源:Shubhamsaboo
许可证:Apache-2.0
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: Shubhamsaboo 转发
评论区 (0)
U