# 手把手教你将Phoenix集成到Jupyter Notebook,实时追踪OpenAI/通义千问API调用
在数据科学和算法开发的日常工作中,Jupyter Notebook已经成为不可或缺的工具。它提供了一个交互式的环境,让开发者能够快速迭代和测试代码。然而,当涉及到调用大模型API(如OpenAI或通义千问)时,开发者常常面临一个挑战:如何实时监控和分析每次API调用的性能指标、token消耗和响应质量?
这正是Arize Phoenix大显身手的地方。Phoenix是一个开源的ML可观测性平台,专门设计用于监控、调试和优化机器学习模型的表现。通过将其集成到Jupyter Notebook环境中,开发者可以在熟悉的界面中获得实时的API调用追踪和可视化分析能力。
1. 环境准备与依赖安装
在开始之前,确保你的开发环境满足以下基本要求:
- Python 3.10或更高版本
- Jupyter Notebook或JupyterLab已安装
- 能够访问OpenAI API或通义千问API
首先,我们需要安装必要的Python包。在Jupyter Notebook中新建一个cell,执行以下命令:
%pip install arize-phoenix openinference-instrumentation-openai opentelemetry-sdk opentelemetry-exporter-otlp
这个命令会安装以下关键组件:
arize-phoenix: Phoenix的核心库openinference-instrumentation-openai: 专门用于监控OpenAI API调用的instrumentationopentelemetry-sdk: OpenTelemetry的核心SDKopentelemetry-exporter-otlp: 用于将追踪数据导出到Phoenix
2. 配置API访问与环境变量
为了确保Phoenix能够正确捕获API调用数据,我们需要设置一些环境变量。这些配置包括:
- API密钥和基础URL(适用于OpenAI或通义千问)
- Phoenix服务器的连接信息
import os # 配置OpenAI/通义千问API os.environ["OPENAI_API_KEY"] = "your-api-key-here" os.environ["OPENAI_BASE_URL"] = "https://api.openai.com/v1" # 或通义千问的API地址 # 配置Phoenix os.environ["PHOENIX_COLLECTOR_ENDPOINT"] = "http://localhost:6006" os.environ["PHOENIX_PORT"] = "6006"
> 注意:在实际使用时,请将"your-api-key-here"替换为你真实的API密钥。对于通义千问用户,需要将OPENAI_BASE_URL修改为对应的API端点。
3. 初始化Phoenix追踪器
接下来,我们需要设置OpenTelemetry追踪器,并将Phoenix配置为数据接收端。这个过程涉及几个关键步骤:
- 创建TracerProvider
- 配置Span处理器
- 初始化OpenAI instrumentation
from opentelemetry import trace as trace_api from opentelemetry.sdk import trace as trace_sdk from opentelemetry.sdk.trace.export import SimpleSpanProcessor from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter from openinference.instrumentation.openai import OpenAIInstrumentor # 创建Phoenix Span处理器 phoenix_processor = SimpleSpanProcessor( OTLPSpanExporter(endpoint="http://localhost:6006/v1/traces") ) # 配置TracerProvider tracer_provider = trace_sdk.TracerProvider() tracer_provider.add_span_processor(phoenix_processor) trace_api.set_tracer_provider(tracer_provider) # 初始化OpenAI instrumentation OpenAIInstrumentor().instrument()
这段代码完成了Phoenix的核心集成工作。现在,任何通过OpenAI客户端发出的API调用都将被自动追踪并发送到Phoenix服务器。
4. 启动Phoenix服务器并验证集成
在开始进行API调用之前,我们需要启动Phoenix服务器来接收和展示追踪数据。在终端中执行以下命令:
phoenix serve
这个命令会启动Phoenix的Web界面,默认情况下可以通过http://localhost:6006访问。
为了验证集成是否成功,我们可以进行一个简单的测试调用:
import openai client = openai.OpenAI() response = client.chat.completions.create( model="gpt-3.5-turbo", # 或"yi-large"等模型 messages=[{"role": "user", "content": "解释一下机器学习中的过拟合现象"}], max_tokens=100, ) print(response.choices[0].message.content)
执行这段代码后,打开Phoenix的Web界面,你应该能看到刚刚的API调用记录。Phoenix会展示以下关键信息:
- 请求和响应时间
- Token使用情况
- 响应延迟
- 请求和响应的具体内容
5. 高级配置与使用技巧
5.1 追踪多个模型提供商的API
Phoenix不仅支持OpenAI官方API,还可以追踪兼容OpenAI API的其他服务,如通义千问。只需修改环境变量中的OPENAI_BASE_URL即可无缝切换:
# 切换到通义千问API os.environ["OPENAI_BASE_URL"] = "https://api.lingyiwanwu.com/v1"
5.2 自定义追踪数据
除了默认收集的指标外,你还可以添加自定义属性到追踪数据中:
from opentelemetry import trace tracer = trace.get_tracer(__name__) with tracer.start_as_current_span("custom_operation") as span: span.set_attribute("experiment_id", "exp_123") span.set_attribute("prompt_version", "v2.1") # 在这里执行API调用 response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "解释一下机器学习中的过拟合现象"}], )
5.3 批量操作的追踪
当需要处理大量API调用时,Phoenix可以帮助你分析整体性能:
import time from tqdm.notebook import tqdm prompts = ["解释{}的概念".format(topic) for topic in ["过拟合", "欠拟合", "正则化", "交叉验证"]] responses = [] for prompt in tqdm(prompts): start_time = time.time() response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], ) responses.append(response)
在Phoenix界面中,你可以看到所有调用的聚合统计信息,帮助你识别性能瓶颈或异常情况。
5.4 本地化部署选项
对于需要更高安全性和控制权的团队,Phoenix支持完全本地化部署。以下是本地化部署的主要步骤:
- 克隆Phoenix仓库:
git clone https://github.com/Arize-ai/phoenix.git
- 使用Docker启动服务:
cd phoenix docker-compose up -d
- 修改环境变量指向本地服务:
os.environ["PHOENIX_COLLECTOR_ENDPOINT"] = "http://localhost:6006"
本地化部署特别适合以下场景:
- 处理敏感数据的企业环境
- 需要长期保存追踪数据的项目
- 需要自定义Phoenix功能的团队
6. 实际应用案例分析
让我们通过一个真实的数据科学工作流场景,展示Phoenix如何提升开发效率。
6.1 Prompt工程优化
假设我们正在开发一个文本摘要系统,需要测试不同prompt的效果:
prompt_versions = [ ("v1", "请用一句话总结以下文本:{}"), ("v2", "请用简洁的语言概括以下内容,不超过20字:{}"), ("v3", "提取以下文本的核心思想:{}") ] text_to_summarize = "机器学习是人工智能的一个分支,它通过算法让计算机从数据中学习并做出决策或预测,而不需要显式编程。" results = [] for version, template in prompt_versions: response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": template.format(text_to_summarize)}], ) results.append((version, response.choices[0].message.content))
在Phoenix界面中,我们可以:
- 比较不同prompt版本的响应时间
- 分析token使用效率
- 直接查看各版本的输出质量
6.2 成本监控与优化
大模型API的使用成本主要与token消耗相关。Phoenix可以帮助我们识别不必要的token使用:
# 不优化的查询 response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "请详细解释机器学习中的过拟合现象,包括它的定义、产生原因、常见表现、可能带来的问题以及常用的解决方法"}], ) # 优化后的查询 response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "请用简洁的语言回答,每个要点不超过10个字"}, {"role": "user", "content": "解释过拟合"} ], )
通过Phoenix的token使用分析,我们可以清楚地看到两种方式的成本差异,从而优化我们的查询策略。
6.3 模型性能对比
当需要评估不同模型的性能时,Phoenix提供了直观的比较工具:
models_to_test = ["gpt-3.5-turbo", "yi-large", "claude-instant"] for model in models_to_test: try: response = client.chat.completions.create( model=model, messages=[{"role": "user", "content": "用Python实现快速排序算法"}], ) except Exception as e: print(f"Error with {model}: {str(e)}")
Phoenix会自动记录每个模型的响应时间、成功率和响应质量,帮助我们做出更明智的模型选择决策。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/268954.html