2024年在线市场平台的11大最佳支付解决方案
通过计量代币使用量实现基于Gen-AI的ChatBot API货币化
对于许多基于 Gen AI 的应用程序来说,基于使用量的计费至关重要。如果您使用的是第三方模型,这些模型会向您收取所用代币的费用,这一点尤其重要。除了收取您自己的增值费用外,您还希望确保您所用代币的成本由您的客户承担。
在本教程中,我们将使用 OpenAI 的 ChatGPT 构建一个快速聊天机器人 API,然后使用 Moesif 和 Stripe 来计量使用的代币数量并将使用情况报告给 Stripe 以进行收费。
构建简单的聊天 API
创建一个名为的文件requirements.txt
并添加以下内容:
Flask==3.0.0
openai==0.27.0
python-dotenv==1.0.1
moesifwsgi
然后安装依赖项。
pip install -r requirements.txt
创建一个名为 的文件.env
,我们将在其中放置您的 API 密钥。您可以使用 OpenAI 创建一个帐户,并且您可能需要在您的 OpenAI 帐户中存入至少 1 美元。对于 Moesif 应用程序 ID,您可以从免费帐户中获取它。
OPENAI_API_KEY="Obtain from your Open AI Account"
MOESIF_APPLICATION_ID="Obtain from your Moesif Account"
创建一个名为 的新文件app.py
,聊天 API 的代码非常简单:
from flask import Flask, request, jsonify
import openai
from dotenv import load_dotenv
import os
from moesifwsgi import MoesifMiddleware
# Load environment variables from .env file
load_dotenv()
# Set your OpenAI API key here
openai.api_key = os.getenv('OPENAI_API_KEY')
app = Flask(__name__)
@app.route('/chat', methods=['POST'])
def chat():
user_input = request.json.get('message')
# Define the onboarding conversation
conversation = [
{"role": "system", "content": "You are a customer onboarding agent."},
{"role": "user", "content": user_input}
]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=conversation,
max_tokens=150
)
# Extract the response text and token usage
response_text = response.choices[0].message['content'].strip()
tokens_used = response.usage.total_tokens
response_obj = jsonify({
'response': response_text,
})
# Add the token usage to the response headers
response_obj.headers['X-Tokens-Used'] = tokens_used
# Adding the value to header is just one of many approaches.
# Since Moesif can do metering on almost any field, you can add the
# value to Header, Body, or even Metadata.
return response_obj
该 API 是 ChatGPT 的一个简单外观,但我们添加了一个响应标头X-Tokens-Used
。还有其他方法可以捕获这些数据,上一节将简要讨论这些方法。
添加 Moesif 中间件
## Moesif Middleware Setup:
def identify_user(app, environ, response_headers=dict()):
# Your custom code that returns a user id string
user_id = "my-chat-user"
return user_id
def identify_company(app, environ, response_headers=dict()):
# Your custom code that returns a company id string
# hardcoded to this value for now.
company_id = "my-chat-company"
return company_id
moesif_settings = {
'APPLICATION_ID': os.getenv('MOESIF_APPLICATION_ID'),
'DEBUG': False,
'LOG_BODY': True,
'IDENTIFY_USER': identify_user,
'IDENTIFY_COMPANY': identify_company,
'CAPTURE_OUTGOING_REQUESTS': False
}
# flask
app.wsgi_app = MoesifMiddleware(app.wsgi_app, moesif_settings)
if __name__ == "__main__":
app.run(debug=True)
在这个例子中,我们没有实现身份验证,但是当您实现身份验证时,您可以轻松地用实际 ID 替换占位符 user_id 和/或 company_id。(顺便说一句,请参阅Moesif 实体图以查看用户、公司和订阅的关系模型。
这基本上就是您需要的所有代码。让我们运行它。
python app.py
请使用下面的 curl 命令发送一些 API 请求。
curl --request POST \
--url http://localhost:5000/chat \
--header 'Content-Type: application/json' \
--data '{
"message": "How are you? What do you do?"
}'
您应该能够看到在Moesif 事件流中捕获的 API 调用。
现在,我们只需要配置您的 Moesif 和 Stripe 帐户。
将 Moesif 连接到 Stripe
按照 Moesif Docs 上的详细说明将Moesif 连接到您的 Stripe 帐户。
为了演示的目的,在配置 id 映射时,将 Moesif 字段映射company_id
到 Stripe 字段customer.company_id
此映射可帮助 Moesif 识别与 API 事件关联的 company_id 的 Stripe 客户。
使用 Moesif 的产品目录创建计划/价格
对于基于使用量的计费,您需要一个包含一个或多个价格的计划。每个价格代表您要对其收取使用费的一项资源。
尽管您可以直接在 Stripe 中创建计划和价格,但 Moesif 的产品目录功能可以简化这一过程,并在 Stripe 中为您创建同步计划。
继续创建测试计划和每单位代币的价格,参见下面的图片示例。
创建计费表
计费计量器将指标与计划/价格绑定,然后将该指标值报告给 Stripe 或其他计费提供商。在这里,我们将为我们之前设置的 response.Headers.X-Token-Used 标头的 SUM 创建计费计量器。
在 Moesif 中,点击 Billing Meter,然后点击 Create new,在 Billing Meter 表单中:
- 选择计费提供商 Stripe,以及我们刚刚创建的计划和价格。
- (可选)设置过滤器,以便
request.URI Route
。/chat
(您可以添加其他条件,例如状态为 200。) - 对于指标配置,选择自定义指标。然后使用字段选择来选择
response.headers.X-Tokens-Used
,并使用sum
作为函数将它们相加。
验证
以上基本上就是您需要的所有设置。让我们测试并验证一下。
在 Stripe 中创建客户并订阅
通常,客户和订阅会在 Stripe 的结帐流程中自动创建。但为了实现此目的,请在Stripe 的仪表板中手动创建这两个对象。
- 1:创建客户。
- 2:添加客户的元数据,并设置
company_id
为值my-chat-company
,即上面 MoesifMiddleware 示例中当前硬编码的“identify_company”钩子。这就是条纹的客户 ID 与 company_id 绑定的方式。 - 3:使用我们之前在 Moesif 中创建的计划为客户添加订阅,该计划应同步到 Stripe。
再次发送更多 API 请求。
现在,发送到您的测试服务器的 API 调用应该被计量并报告给 Stripe 以收取付款。
接下来该怎么做:
Gen-AI 产品价格昂贵,因此计量各种资源的使用情况非常重要。以上示例展示了如何快速设置使用计费并将成本与您为客户创造的价值挂钩。
本示例中的代码在Github上。
下一步,请探索 Moesif 文档,了解计费计量解决方案的灵活性和强大性。
- 场景:您没有使用 Flask 或 Python。
- 探索适用于各种 SDK 和平台的Moesif 中间件,以及可用于设置元数据、identify_user 和 determine_company 的选项。
- 场景:您使用的计费提供商与 Stripe 不同:
- 查看支持的计费提供商。
- 或者使用自定义 Webhook 来接收使用情况报告。
- 场景:您的使用数据不与 API 绑定,而是与一些后端处理任务绑定。
- Moesif 支持两种类型的事件:API和自定义操作。在后端处理任务中,您可以将自定义操作发送给 Moesif。
- 场景:我们的使用情况指标与传入 API 无关,而是与传出 API 相关,例如传出到 OpenAI 的 API。
- 解决方案:我们的许多 SDK 都支持“captureOutgoing”选项。您可以捕获这些 API 调用并发送给 Moesif,然后针对它们创建指标。
- 场景:您需要根据不同的指标进行衡量:
- 请参阅有关选择可计费指标的文档。
- 对于更高级的场景,请参见强大的脚本字段功能,您可以使用任何其他字段计算新值。
- 在大多数 Moesif SDK 中实现
GET_METADATA
钩子来预先计算任何值并添加到事件中。
原文链接:https://www.moesif.com/blog/technical/gen-ai/ChatBot-API-OpenAI-Token-Usaged-Based-Monetization/