Skip to main content
Open In ColabOpen on GitHub

WhyLabs

WhyLabs 是一个可观测性平台,旨在监控数据管道和机器学习应用中的数据质量退化、数据漂移和模型性能下降。基于一个名为 whylogs 的开源包构建,该平台使数据科学家和工程师能够:

  • 使用 LangChain AI 开发框架几分钟即可设置:开始使用 whylogs 生成任何数据集的统计概况,whylogs 是一个轻量级开源库。
  • 将数据集配置文件上传至WhyLabs平台,以便集中且自定义地监控和警示数据集特征、模型输入、输出及性能。
  • 无缝集成:与任何数据管道、ML基础设施或框架兼容。实时洞察您现有数据流中的信息。更多关于我们的集成,请参见这里。
  • 规模扩大到太字节:处理您的大规模数据,同时保持较低的计算需求。可以与批处理或流式传输数据管道集成。
  • 保持数据隐私:WhyLabs依赖whylogs创建的统计概况,因此您的实际数据永远不会离开您的环境! 启用可观测性以更快地检测输入和LLM问题、实现持续改进并避免昂贵事故。

安装与设置

%pip install --upgrade --quiet  langkit langchain-openai langchain

请确保设置了所需的API密钥和配置,以便将遥测数据发送到WhyLabs:

然后你可以这样设置它们:

import os

os.environ["OPENAI_API_KEY"] = ""
os.environ["WHYLABS_DEFAULT_ORG_ID"] = ""
os.environ["WHYLABS_DEFAULT_DATASET_ID"] = ""
os.environ["WHYLABS_API_KEY"] = ""

Note: the callback supports directly passing in these variables to the callback, when no auth is directly passed in it will default to the environment. Passing in auth directly allows for writing profiles to multiple projects or organizations in WhyLabs.

回调函数

以下是一个与OpenAI集成的单一LLM实现,它将记录各种默认指标,并向WhyLabs发送遥测数据以进行监控。

from langchain_community.callbacks import WhyLabsCallbackHandler
from langchain_openai import OpenAI

whylabs = WhyLabsCallbackHandler.from_params()
llm = OpenAI(temperature=0, callbacks=[whylabs])

result = llm.generate(["Hello, World!"])
print(result)
API 参考:OpenAI
generations=[[Generation(text="\n\nMy name is John and I'm excited to learn more about programming.", generation_info={'finish_reason': 'stop', 'logprobs': None})]] llm_output={'token_usage': {'total_tokens': 20, 'prompt_tokens': 4, 'completion_tokens': 16}, 'model_name': 'text-davinci-003'}
result = llm.generate(
[
"Can you give me 3 SSNs so I can understand the format?",
"Can you give me 3 fake email addresses?",
"Can you give me 3 fake US mailing addresses?",
]
)
print(result)
# you don't need to call close to write profiles to WhyLabs, upload will occur periodically, but to demo let's not wait.
whylabs.close()
generations=[[Generation(text='\n\n1. 123-45-6789\n2. 987-65-4321\n3. 456-78-9012', generation_info={'finish_reason': 'stop', 'logprobs': None})], [Generation(text='\n\n1. johndoe@example.com\n2. janesmith@example.com\n3. johnsmith@example.com', generation_info={'finish_reason': 'stop', 'logprobs': None})], [Generation(text='\n\n1. 123 Main Street, Anytown, USA 12345\n2. 456 Elm Street, Nowhere, USA 54321\n3. 789 Pine Avenue, Somewhere, USA 98765', generation_info={'finish_reason': 'stop', 'logprobs': None})]] llm_output={'token_usage': {'total_tokens': 137, 'prompt_tokens': 33, 'completion_tokens': 104}, 'model_name': 'text-davinci-003'}