*作者|观测云 徐季秋*
现在基于 OpenAI 的 Chat+ 应用井喷,但给开发者带来了两个难点,一是因为 OpenAI 基于 tokens 的计费机制导致不容易规划消费;另一是 OpenAI 提供的调用本身不稳定,很难分辨是传参错误或是访问失败。这导致许多开发者,需要在调试时一边小心翼翼地时刻关注余额,又要担心服务质量抖动,挺让人糟心。
其实,通过简单地对 OpenAI 设置些使用监测,就能大幅提升使用体验,以下用 SaaS 监控观测平台——观测云举例。
基于观测云强大的可编程机制可以轻松实现 OpenAI 可观测,记录所有请求的输入输出内容、调用请求延迟、调用成功率、以及费用详情,而完成这些功能就是几分钟动动手的事情。观测云已预置了下文用到的所有数据采集与仪表板模板,略作配置即可使用。
## 展示效果图
### 仪表板视图
![0.png](https://dev-media.amazoncloud.cn/990590c0f20942efac90f2443b03c920_0.png "0.png")
### 日志查看器视图
![1.png](https://dev-media.amazoncloud.cn/587345806b524d32bd651e2bdfe8667d_1.png "1.png")
如果已经是观测云用户,也安装过 DataFlux Func 组件,可以跳过前置准备步骤,直接从第 6 步打开采集开始;
新用户请从前置准备步骤开始操作。
## 前置准备
1. 在观测云官网注册账号 www.guance.com。
关于注册步骤和站点选择,可参考:
https://docs.guance.com/billing/commercial-register/
本文使用观测云-中国区1(杭州)站点,商业版账号。直接开通商业版可获得 500 元无限制代金券,实现本文观测场景每天消费仅需几分钱,可以用几十年了。
或可以选择开通体验版,每天可免费上报 100 万条增量日志,也足够用了,可参考:
https://docs.guance.com/billing/trail/#register-trail
![2.png](https://dev-media.amazoncloud.cn/82c0d23912b74806a1de005cf6b11066_2.png "2.png")
完成观测云账号注册后,会登录到观测云工作空间控制台,之后的数据可视化都会在这里展现。
2. 准备一台可连通公网,并能访问 OpenAI API(务必确认这条)的主机,最小规格建议 2C/4G/20GB,Ubuntu 16.04 LTS 或 CentOS 7.2 以上 OS,可参考:
https://func.guance.com/doc/maintenance-guide-requirement/
3. 在这台主机上,安装 DataFlux Func GSE(观测云特别版)。执行以下命令即可:
1. /bin/bash -c "$(curl -fsSL t.guance.com/func-portable-download)" -- --for=GSE
2. sudo /bin/bash {安装文件所在目录}/run-portable.sh
可参考:https://func.guance.com/doc/quick-start
安装完成后,即可通过浏览器登录 DataFlux Func 控制台,记住登录地址和账号,之后会用到。
![3.png](https://dev-media.amazoncloud.cn/70188b8f387e49fcb7db3e0616cff661_3.png "3.png")
>DataFlux Func 是一款函数开发、管理、执行平台。简单易用、无需从零搭建 Web 服务,无需管理服务器等基础设施,只需编写代码并发布,简单配置即可为函数生成 HTTP API 接口。主页地址:func.guance.com
4. 仍在这台主机上,安装 DataKit 数据采集器。回到在第 1 步开通的观测云工作空间控制台,左侧功能面板选择【集成】->【DataKit】,复制 Linux 安装命令到主机上执行。由于命令行里默认注入了当前工作空间 token,所以这个 DataKit 安装后会默认上报数据到本工作空间,该 token 之后也可以修改。请参考:
https://docs.guance.com/datakit/datakit-install/
![4.png](https://dev-media.amazoncloud.cn/f29d24853cc04383a0a09e39db099467_4.png "4.png")
5. 将 DataFlux Func 作为数据源,和 DataKit 数据采集器绑定,实现以下数据采集和上报路径:
![5.png](https://dev-media.amazoncloud.cn/c1c9e8fee1e94e93b5b16d7e2d9232fd_5.png "5.png")
1)仍在这台主机上,修改 DataKit 的本地配置文件参数:
- 打开 DataKit 配置文件:sudo vim /usr/local/datakit/conf.d/datakit.conf
- 将 http_listen = "localhost:9529" 修改为 http_listen = "0.0.0.0:9529"
- 重启 DataKit 服务:sudo datakit service -R
2)进入第 3 步的 DataFlux Func 控制台,选择 【开发】->【连接器】标签页,可以看到有一个默认的 DataKit 连接器,类型:HTTP;ID:datakit;主机 IP 指向本机;端口:9529;点击右下角【保存】确认无误。
![6.png](https://dev-media.amazoncloud.cn/3ed0dd55b26d4823b7ff633452cd41e5_6.png "6.png")
好了,至此,已完成了所有前置步骤。接下来就进入正题,如何用启动 ChatGPT 采集模板和打开观测云仪表板。
>DataFlux Func 托管版预计在 2023 年 5 月 22 日发布,届时第 2 步到第 5 步可以合并为一步完成,Func 数据直接上报到观测云工作空间,省略和 DataKit 绑定步骤。
## 打开采集
6. 安装 ChatGPT 监测脚本。进入 DataFlux Func 控制台(见第 3 步),进入【脚本市场】->【官方脚本市场-详情】,搜索到 ChatGPT 脚本,然后点击【安装】。
![7.png](https://dev-media.amazoncloud.cn/8b799b7f858d413a99477b4a2361c6a6_7.png "7.png")
![8.png](https://dev-media.amazoncloud.cn/39c5e13068f84d06a52fd8ab9b50e0a7_8.png "8.png")
安装成功后,点击菜单【开发】->【脚本库】,可以看到刚安装的 ChatGPT 监控脚本,具体实现逻辑都在里面。
![9.png](https://dev-media.amazoncloud.cn/57d60e445b7c47e5813e3ec0499aec28_9.png "9.png")
7. 将 DataFlux Func 配置为和 ChatGPT 应用通讯的代理。
点击菜单【管理】->【授权链接】->【新建】,找到【ChatGPT 监控】函数创建一个授权链接,全部保持默认选项;
![10.png](https://dev-media.amazoncloud.cn/2c6d36ab215f43acba00ee98a1bd61e3_10.png "10.png")
![11.png](https://dev-media.amazoncloud.cn/988a0a7eaa5b4a28b7eef9f97802e0c2_11.png "11.png")
创建完成后,在授权链接列表里,可以找到这个函数。 点击这个函数右侧的【示例】;
![14.png](https://dev-media.amazoncloud.cn/183d30967fb844c992159c34f04f5f88_14.png "14.png")
选择【POST 简化形式(JSON)】,会看到一个链接,指向本机地址。这个链接就是魔法所在,我们称之为【魔法链接】,请把它复制下来。
![15.png](https://dev-media.amazoncloud.cn/1c6dc92cb7cd48359f6ce8698045fc84_15.png "15.png")
8. 在 Chat+ 应用里,把 API 调用地址,替换为【魔法链接】。
以 ChatGPT 客户端举例 :
https://github.com/anse-app/chatgpt-demo
1)按照 readme 里的指引,把客户端跑起来;
2)应用【魔法链接】:
https://github.com/anse-app/chatgpt-demo/blob/main/src/pages/api/generate.ts 里的 46 行, 把调用的 url 从
https://api.openai.com/v1/chat/completions
改为【魔法链接】,比如在本次示例中为:https://func-dev.dataflux.cn/api/v1/al/auln-VbUBSOEYNxqv/simplified 。
(!!注意每人得到的【魔法链接】都不一样,不要照搬复制示例链接。)
至此,大家应该都理解原理了,通过【魔法链接】,把原来发给 Chat+ 应用向 OpenAI 的请求先发给 Func 函数,由 Func 作为代理转发,以采集过程状态指标。
3)配置更新后,在 chatgpt-demo 里,比如我这里是 http://localhost:3000, 向 ChatGPT 提问吧,生成些原始数据。
9. 最后一步了,打开观测云仪表板。
登录观测云工作空间,选择左侧功能面板【场景】->【仪表板】->【新建仪表板】;
![16.png](https://dev-media.amazoncloud.cn/d8fc729b7ca4450dafa44285d12da415_16.png "16.png")
找到 ChatGPT 仪表板模板,创建实例;
![17.png](https://dev-media.amazoncloud.cn/56afb236f10e4bdb8893bb05f323ced2_17.png "17.png")
点击完成添加后,注意调整下右上角时间范围到实际的采集时间段,就能看到可视化图表了。
![18.png](https://dev-media.amazoncloud.cn/fe1a84839e08463aaf6d831138a58af9_18.png "18.png")
再选择左侧功能面板【场景】->【查看器】->【新建查看器】,创建 ChatGPT 查看器实例,就能看到所有采集到的原始日志视图。
![19.png](https://dev-media.amazoncloud.cn/93cac55905de46b1a2db71fab956217f_19.png "19.png")
最后,再看下效果图。
![20.png](https://dev-media.amazoncloud.cn/a389d3a026224737bfcbf17ac2e6868b_20.png "20.png")
在工作空间左侧功能栏【场景】->【查看器】里可以看到本次采集到的原始日志。
![21.png](https://dev-media.amazoncloud.cn/eb5bee092bba44acaf228f9a87678f79_21.png "21.png")
>对 DataFlux Func 感兴趣的同学,可以尝试自己写监测脚本,可参考:
如何开发自定义巡检
https://func.guance.com/doc/script-market-guance-monitor/
## 可观测性扩展
还能进一步利用观测云把 Chat+ 应用的端到端全部监控起来, 包含 RUM,APM,Log 以及 Chat+应用的运行环境,这样能带来额外两个好处,让可观测性更加完整:
1. 不是所有对用户体验有影响的情况是由 OpenAI 调用引起的,有可能是前端代码,或者网络抖动,防止 OpenAI 无故背锅
2. 可识别每一次 OpenAI 调用失败时,到底影响了哪些具体的用户,整个链条清晰可见
像这个客户端基于 nodejs 的,可参考:
https://docs.guance.com/integrations/rum/rum-web-h5/
https://docs.guance.com/integrations/apm/ddtrace-nodejs/
## 实现原理
1. 原本的请求路径是 应用 -> OpenAI , 为了监控 OpenAI 的调用,我们需要使用 Func 做一层代理,请求路径变为:应用 -> Func -> OpenAI
2. 具体如何转发,采集了哪些数据,上报了哪些数据, 可以参考开启步骤第 6 步里的脚本库里的代码逻辑。
## 关于价格
1. DataFlux Func 开源免费, 托管版 Func 成本取决于主机成本;
2. www.guance.com 体验版可每天免费使用 100 万条增量日志,大多数情况够用了,超过的部分按 1 万条增量,保存 3 天, 收费 0.01 元。可参考:https://www.guance.com/billing#business
## 未来规划
可以预计未来会出现更多的基于 MaaS 的应用,观测云会持续提供适用于商用或开源大模型服务的监测模板,开发者借助观测云开箱即可观测的能力,可以把这些大模型用得明明白白,更专注在应用研发上。
对于本文的任何问题或者疑惑,大家可以加入观测云官方社区随时咨询(详情见官网 guance.com)。