我在使用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
- 你需要创建一个包含用户标识和历史记录的数据库模型
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
- 创建一个获取历史记录的端点
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倍!