django 我如何分配聊天内存到openai模型

kiayqfof  于 2023-05-30  发布在  Go
关注(0)|答案(1)|浏览(118)

我在django工作,我有一个视图,我在那里调用openai API,在前端我使用react,我有一个聊天机器人,我希望模型有一个数据记录,就像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)

我计划创建一个模型并将问题保存在数据库中,但我不知道如何将这些信息集成到视图中,我担心令牌支出,我真的不知道它是如何工作的。我希望有人能为我澄清这些疑问。非常感谢。

qacovj5a

qacovj5a1#

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

保存到数据库

通过保存到数据库中,您可以永久保存历史,如下所示
https://docs.djangoproject.com/en/4.2/topics/db/queries/
https://docs.djangoproject.com/en/4.0/intro/tutorial02/#database-setup
1.您需要创建包含用户标识和历史的数据库模型

import jsonfield
from django.db import models

class ChatHistory(models.Model):
    owner_uid = models.CharField(max_length=100)
    chat = jsonfield.JSONField() # would be {USER, BOT} interaction

    def __str__(self):
        return self.name

1.创建获取历史记录端点

from .models import ChatHistory
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)
    def get(self, request):
        uid = request.GET.get('uid')  # Assuming the uid is passed as a query parameter

        if uid is None:
            return Response({'errors': {'uid': ['UID parameter is required.']}}, 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)

在前端显示?

好吧idk关于你的前端代码它只是一个json数据
你应该轻而易举地做到这一点!

担心成本?

那么你不应该使用text-davinci-3聊天机器人的目的摆在首位!
text-davinci-3是一个InstructGPT模型Instruct模型被优化为遵循单轮指令。阿达是最快的型号,而达芬奇是最强大的(也非常昂贵)
你应该用chatgpt-3.5-turbo代替ChatCompletion
https://platform.openai.com/docs/api-reference/chat/create?lang=python

import os
import openai
openai.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 /1 K代币
Davinci $0.0200 /1 K代币
性价比是原来的10倍!

相关问题