You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django开发ChatGPT聊天机器人遇InvalidRequestError求助

Django + OpenAI API 报错解决:InvalidRequestError 问题处理

问题描述

基于Django框架开发聊天机器人时,调用OpenAI API频繁触发Internal Server Error,最终抛出以下错误:

openai.error.InvalidRequestError: This is a chat model and not supported in the v1/completions endpoint. Did you mean to use v1/chat/completions?

更换模型为gpt-4后问题仍存在。

报错栈信息

Internal Server Error: /
Traceback (most recent call last):
  File "C:\Users\Nathan A\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Nathan A\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Nathan A\Downloads\finalproject\finalproject\django_chatbot\chatbot\views.py", line 23, in chatbot
    response = ask_openai(message)
               ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Nathan A\Downloads\finalproject\finalproject\django_chatbot\chatbot\views.py", line 9, in ask_openai
    response = openai.Completion.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Nathan A\AppData\Local\Programs\Python\Python311\Lib\site-packages\openai\api_resources\completion.py", line 25, in create
    return super().create(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Nathan A\AppData\Local\Programs\Python\Python311\Lib\site-packages\openai\api_resources\abstract\engine_api_resource.py", line 153, in create
    response, _, api_key = requestor.request(
                           ^^^^^^^^^^^^^^^^^^
  File "C:\Users\Nathan A\AppData\Local\Programs\Python\Python311\Lib\site-packages\openai\api_requestor.py", line 298, in request
    resp, got_stream = self._interpret_response(result, stream)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Nathan A\AppData\Local\Programs\Python\Python311\Lib\site-packages\openai\api_requestor.py", line 700, in _interpret_response
    self._interpret_response_line(
  File "C:\Users\Nathan A\AppData\Local\Programs\Python\Python311\Lib\site-packages\openai\api_requestor.py", line 763, in _interpret_response_line
    raise self.handle_error_response(
openai.error.InvalidRequestError: This is a chat model and not supported in the v1/completions endpoint. Did you mean to use v1/chat/completions?

原代码

from django.shortcuts import render
from django.http import JsonResponse
import openai

openai_api_key = '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■j5LuDiSb'
openai.api_key = openai_api_key

def ask_openai(message):
    response = openai.Completion.create(
        model="text-davinci-003",
        prompt = message,
        max_tokens=150,
        n=1,
        stop=None,
        temperature=0.7,
    )  
    answer = response.choice[0].text.strip()
    return answer

def chatbot(request):
    if request.method == 'POST':
        message = request.POST.get('message')
        response = ask_openai(message)
        return JsonResponse({'message': message, 'response': response})
    return render(request, 'index.html')

解决方案

错误原因

openai.Completion.create对应文本补全接口(v1/completions),仅支持text-davinci-003这类传统补全模型;而gpt-4、gpt-3.5-turbo属于聊天模型,必须使用openai.ChatCompletion.create接口(对应v1/chat/completions)。原代码即使指定text-davinci-003,也可能存在运行时模型参数被覆盖的情况,导致接口不匹配。

修改步骤

  1. 替换接口调用方法:将openai.Completion.create改为openai.ChatCompletion.create
  2. 调整参数格式:聊天模型需要传入messages列表,每个元素包含role(可选值:system/user/assistant)和content字段,不再使用prompt参数
  3. 修正响应解析:聊天模型的响应结果路径为response.choices[0].message.content.strip(),注意是choices(复数)而非原代码的choice(单数)

修改后的代码

from django.shortcuts import render
from django.http import JsonResponse
import openai

openai_api_key = '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■j5LuDiSb'
openai.api_key = openai_api_key

def ask_openai(message):
    # 使用ChatCompletion接口适配聊天模型
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",  # 可替换为"gpt-4"
        messages=[
            {"role": "user", "content": message}
        ],
        max_tokens=150,
        n=1,
        temperature=0.7,
    )  
    # 解析聊天模型的响应结果
    answer = response.choices[0].message.content.strip()
    return answer

def chatbot(request):
    if request.method == 'POST':
        message = request.POST.get('message')
        response = ask_openai(message)
        return JsonResponse({'message': message, 'response': response})
    return render(request, 'index.html')

内容的提问来源于stack exchange,提问作者Memetendo64

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:15:23