本文首发于博客 LLM 应用开发实践
Helicone 是一个开源的 LLM 应用可观测性平台,用于记录所有请求到 OpenAI 的日志,并提供用户友好的 UI 界面、缓存、自定义速率限制和重试等功能。它可以通过用户和自定义属性跟踪成本和延迟,并为每个请求提供一个调试环境(playground),以在 UI 中迭代提示和聊天对话内容。此外,Helicone 还提供了 Python 和 Node.JS 支持,以及开发者文档和社区支持。该项目已入选 YC W23(Y Combinator 2023冬季批次加速器计划)。本篇我将对 Helicone 具备的一些关键能力进行说明。
我的新书《LangChain编程从入门到实践》 已经开售!推荐正在学习AI应用开发的朋友购买阅读!
总体架构图
请求监控
内置仪表盘,可实时监控应用程序的关键指标,如成本、使用情况和延迟等,还可以通过一个界面查看所有请求,按时间、用户和自定义属性过滤请求,优化 API 使用情况,降低成本。
请求调试
对每次请求内容进行了统计,对有问题的请求可以直接进入实验区(Playground)进行测试。
速率限制
可让控制在特定时间范围内使用 API 密钥发出的请求数。例如,可以将用户限制为每天 1000 个请求或每分钟 60 个请求,通过实施速率限制,可以防止滥用。
openai.api_base = "https://oai.hconeai.com/v1"
openai.Completion.create(
model="text-davinci-003",
prompt="How do I enable retries?",
headers={
"Helicone-Property-IP": "111.1.1.1",
"Helicone-RateLimit-Policy": "1000;w=60;s=ip_address",
}
)
缓存功能
具备缓存功能, 减少 LLM 端点的重复调用,可以节省成本, 并且缓存策略可配置。可以设置缓存存储桶的大小,以便在第 n 个请求之后,我们从存储桶中先前缓存的元素中随机选择,下面是存储桶大小为 3 的示例
openai.completion("give me a random number") -> "42"
# Cache Miss
openai.completion("give me a random number") -> "47"
# Cache Miss
openai.completion("give me a random number") -> "17"
# Cache Miss
openai.completion("give me a random number") -> This will randomly choose 42 | 47 | 17
# Cache Hit
兼容性好
支持与多种语言和库集成,包括 cURL、Python、Node、langchain 等,使其可以无缝集成到现有工作流中。
异步和代理方式
当前只支持 OpenAI 和 Anthropic 两家模型,其他模型个人要按需进行开发,其中 OpenAI 模型支持异步和代理方式。
两种代理方式的区别
Proxy 代理 | Async 异步 | |
---|---|---|
Easy setup 易于设置 | ✅ | ❌ |
Custom rate limiting 自定义速率限制 | ✅ | ❌ |
Bucket Cache 存储桶缓存 | ✅ | ❌ |
Retries 重试 | ✅ | ❌ |
Not on critical path 不在关键路径上 | ❌ | ✅ |
0 Propagation Delay 0 传播延迟 | ❌ | ✅ |
Open source 开源 | ✅ | ✅ |
Custom Properties 自定义属性 | ✅ | ✅ |
User Metrics 用户指标 | ✅ | ✅ |
Negligible Logging Delay 日志记录延迟可忽略不计 | ✅ | ✅ |
Streaming Support 流媒体支持 | ✅ | ✅ |
代理方式
Proxy 允许用户轻松集成,因为用户只需将他们对 LLM 的调用替换为对代理的调用。然后,代理会将请求转发给 LLM,并将响应返回给用户。由于代理位于边缘并且是请求的守门人,因此能够将一套工具(如缓存、退避和速率限制)直接检测到代理中。
对 Helicone 代理进行基准测试
-
500 个请求
-
两者都在相同的 1s 窗口中收到相同的请求
-
最大化了提示上下文窗口,以使这些请求尽可能大
-
使用了
text-ada-001
-
记录了完成两次往返的往返时间的延迟
结果统计
Statistic Openai (s) Helicone (s) Mean 2.21 2.21 Median 2.87 2.90 Standard Deviation 1.12 1.12 Min 0.14 0.14 Max 3.56 3.76 p10 0.52 0.52 p90 3.27 3.29
异步方式
异步允许更灵活的工作流程,其中事件的实际日志记录不在关键路径上。这让一些用户更有信心,如果停机或存在网络问题,它不会影响应用程序。
属性配置
可以通过配置属性的方式对请求进行分组标记和管理,比如下面通过会话、对话或应用 ID 字段进行记录。
openai.api_base = "https://oai.hconeai.com/v1"
openai
openai.Completion.create(
model="text-davinci-003",
prompt="Say this is a test",
headers={
"Helicone-Auth": "Bearer HELICONE_API_KEY"
"Helicone-Property-Session": "24",
"Helicone-Property-Conversation": "support_issue_2",
"Helicone-Property-App": "mobile",
}
)
支持自部署
开源使用,支持个人在云平台和本地环境中进行部署。
更多内容在公号:LLM 应用全栈开发