如何为openai模型分配聊天内存

我在使用django开发,我有一个视图调用了openai的API,而在前端我使用react开发了一个聊 bot,我想让模型能够记录数据,就像chatgpt页面那样做到的。

class chatbot(APIView):    def post(self, request):        chatbot_response = None        if api_key is not None and request.method == 'POST':            openai.api_key = api_key            user_input = request.data.get('user_input')            prompt = user_input            response = openai.Completion.create(                model = 'text-davinci-003',                             prompt = prompt,                max_tokens=250,                temperature=0.5            )                       chatbot_response = response["choices"][0]["text"]        if chatbot_response is not None:            return Response({"response": chatbot_response}, status=status.HTTP_200_OK)        else:            return Response({'errors': {'error_de_campo': ['Promt vacio']}},                                status=status.HTTP_404_NOT_FOUND)

我计划创建一个模型并将问题保存到数据库中,但我不知道如何将这些信息整合到视图中,我担心token的消耗,我不太清楚它是如何运作的。希望有人能为我解答这些疑问,非常感谢。


回答:

如何为openai模型分配聊天内存?

保存到数据库

通过将数据保存到数据库中,你可以永久保存历史记录,按照以下步骤操作:

https://docs.djangoproject.com/en/4.2/topics/db/queries/

https://docs.djangoproject.com/en/4.0/intro/tutorial02/#database-setup

  1. 你需要创建一个包含用户标识和历史记录的数据库模型
import jsonfieldfrom django.db import modelsclass ChatHistory(models.Model):    owner_uid = models.CharField(max_length=100)    chat = jsonfield.JSONField() # 将是 {USER, BOT} 交互    def __str__(self):        return self.name
  1. 创建一个获取历史记录的端点
from .models import ChatHistoryclass chatbot(APIView):    def post(self, request):        chatbot_response = None        if api_key is not None and request.method == 'POST':            openai.api_key = api_key            user_input = request.data.get('user_input')            prompt = user_input            response = openai.Completion.create(                model = 'text-davinci-003',                             prompt = prompt,                max_tokens=250,                temperature=0.5            )                       chatbot_response = response["choices"][0]["text"]        if chatbot_response is not None:            return Response({"response": chatbot_response}, status=status.HTTP_200_OK)        else:            return Response({'errors': {'error_de_campo': ['Promt vacio']}},                                status=status.HTTP_404_NOT_FOUND)    def get(self, request):        uid = request.GET.get('uid')  # 假设uid作为查询参数传递        if uid is None:            return Response({'errors': {'uid': ['需要提供UID参数。']}}, status=status.HTTP_400_BAD_REQUEST)        chat_history = ChatHistory.objects.filter(owner_uid=uid)        serialized_data = ChatHistorySerializer(chat_history, many=True).data        return Response({'data': serialized_data}, status=status.HTTP_200_OK)

在前端显示?

嗯,我不了解你的前端代码,这只是JSON数据

你应该能够轻松处理它!

担心成本?

首先,你不应该将text-davinci-3用于聊天机器人目的!

text-davinci-3是一个InstructGPT模型,Instruct模型被优化用于单轮指令。Ada是最快的模型,而Davinci是最强大的(而且非常昂贵)

你应该使用ChatCompletion和chatgpt-3.5-turbo

https://platform.openai.com/docs/api-reference/chat/create?lang=python

import osimport openaiopenai.api_key = os.getenv("OPENAI_API_KEY")completion = openai.ChatCompletion.create(  model="gpt-3.5-turbo",  messages=[    {"role": "user", "content": "Hello!"}  ])print(completion.choices[0].message)

为什么?看看定价

gpt-3.5-turbo $0.002 / 1K tokens

Davinci $0.0200 / 1K tokens

成本效益是10倍!

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注