OpenAI的API正在迅速成为与大型语言模型交互的事实上的标准。从实用工程的角度来看,这意味着你无需为自己的大型语言模型实现客户端库,从而使开发人员更容易使用它。
界面的简洁性非常重要。
我的贡献只是提供了这个提示。我没有查阅OpenAI的文档,而是直接让ChatGPT为我编写了一个简易服务器,这样我就可以快速查看实现。在测试代码并添加更多指标和日志后,我会进行更新。目的是比较响应时间的度量。
提示:可以跳过下面的内容,看看 Saar Berkovich 的这篇文章:https://towardsdatascience.com/how-to-build-an-openai-compatible-api-87c8edea2f06
编写一个Python服务器,实现OpenAI端点的模拟(即空实现)。这是为了模拟与第三方LLM(大型语言模型)兼容的OpenAI API接口环境,并进行性能测试。
回个响应一个简单的 Python 服务器,使用 Flask 实现,用于实现 OpenAI API 的端点。这将使你能够模拟一个与 OpenAI 兼容的第三方语言模型的 API。
首先,如果你还没有安装 Flask,先来安装它吧:
运行以下命令来安装 Flask 库:
pip install Flask
然后,你可以创建一个Python脚本fake_openai_api.py
,如下所示:
from flask import Flask, request, jsonify
app = Flask(__name__)
# 模拟 OpenAI 的 completion API
@app.route('/v1/completions', methods=['POST'])
def completions():
data = request.json
prompt = data.get('prompt', '')
# 响应
response = {
'id': 'cmpl-1',
'object': 'text_completion',
'created': 1234567890,
'model': 'text-davinci-002',
'choices': [{
'text': '这是提示为:' + prompt,
'index': 0,
'logprobs': None,
'finish_reason': 'length'
}],
'usage': {
'prompt_tokens': len(prompt.split()),
'completion_tokens': 10,
'total_tokens': len(prompt.split()) + 10
}
}
return jsonify(response)
# 模拟 OpenAI 的 chat completion API
@app.route('/v1/chat/completions', methods=['POST'])
def chat_completions():
data = request.json
messages = data.get('messages', [])
# 响应
response_text = "这是基于聊天消息的模拟回复:" + " ".join([message['content'] for message in messages])
response = {
'id': 'chatcmpl-1',
'object': 'chat.completion',
'created': 1234567890,
'model': 'gpt-3.5-turbo',
'choices': [{
'index': 0,
'message': {
'role': 'assistant',
'content': response_text
},
'finish_reason': 'stop'
}],
'usage': {
'prompt_tokens': sum(len(message['content'].split()) for message in messages),
'completion_tokens': len(response_text.split()),
'total_tokens': sum(len(message['content'].split()) for message in messages) + len(response_text.split())
}
}
return jsonify(response)
# 模拟 OpenAI 的 embeddings API
@app.route('/v1/embeddings', methods=['POST'])
def embeddings():
data = request.json
input_text = data.get('input', '')
# 响应
response = {
'object': 'list',
'data': [{
'object': 'embedding',
'index': 0,
'embedding': [0.0] * 768 # 模拟嵌入
}],
'model': 'text-embedding-ada-002',
'usage': {
'prompt_tokens': len(input_text.split()),
'total_tokens': len(input_text.split())
}
}
return jsonify(response)
# 模拟 OpenAI 的 edits API
@app.route('/v1/edits', methods=['POST'])
def edits():
data = request.json
input_text = data.get('input', '')
# 响应
response = {
'object': 'edit',
'created': 1234567890,
'choices': [{
'text': '这是针对输入的模拟编辑响应:' + input_text,
'index': 0
}],
'usage': {
'prompt_tokens': len(input_text.split()),
'completion_tokens': 10,
'total_tokens': len(input_text.split()) + 10
}
}
return jsonify(response)
# 运行 Flask 应用程序
if __name__ == '__main__':
app.run(debug=True, port=5000)
这个脚本建立了一个简单的Flask服务器,该服务器具有模拟OpenAI API完成、聊天完成、嵌入和编辑功能的端点。响应是模拟实际OpenAI API响应结构的假数据。您可以在本地运行此服务器,并用来测试与第三方LLM的集成。