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

调用OpenAI接口时遇TypeError: View.__init__参数不匹配问题求助

错误原因分析
  • 类视图与函数视图装饰器冲突:@api_view(['POST'])是专门用于装饰函数视图的,不能直接作用于View子类的类视图,这会导致视图初始化时参数传递异常,触发TypeError。
  • URL配置错误:类视图在URL中注册时,必须调用.as_view()方法将类转换为可调用的视图函数,直接传入类本身会导致实例化时参数不匹配。
  • get_help函数参数错误:代码中prompt="user_input"是把字符串"user_input"作为提示词传递给OpenAI,而非变量user_input的实际值,会导致模型无法处理用户真实输入。
解决方法

方法一:改为函数视图(适配@api_view,推荐)

将类视图改为函数视图,配合@api_view使用,更符合DRF的使用习惯:

from rest_framework.decorators import api_view
from rest_framework.response import Response
import openai

def get_help(user_input):
    response = openai.Completion.create(
        engine="text-davinci-002",
        prompt=user_input,  # 移除引号,使用变量实际值
        temperature=0.5,
        max_tokens=1024,
        top_p=1,
        frequency_penalty=0,
        presence_penalty=0
    )
    return response["choices"][0]["text"]

@api_view(['POST'])
def receive_response(request):
    user_input = request.data.get("user_input")
    if not user_input:
        return Response({"error": "缺少user_input参数"}, status=400)
    response_text = get_help(user_input)
    return Response({"response": response_text})

修改urls.py:

urlpatterns = [
    path("get", get_help, name="get_help"),
    path("post", receive_response, name="post"),
]

方法二:保留类视图,修正配置

如果坚持使用类视图,需移除@api_view装饰器,并在URL中调用.as_view():

from django.views import View
from django.http import HttpResponse
import openai

def get_help(user_input):
    response = openai.Completion.create(
        engine="text-davinci-002",
        prompt=user_input,  # 修复prompt参数
        temperature=0.5,
        max_tokens=1024,
        top_p=1,
        frequency_penalty=0,
        presence_penalty=0
    )
    return response["choices"][0]["text"]

class receive_response(View):
    def post(self, request):
        user_input = request.POST.get("user_input")
        if not user_input:
            return HttpResponse("缺少user_input参数", status=400)
        response_text = get_help(user_input)
        return HttpResponse(response_text)

修改urls.py:

urlpatterns = [
    path("get", get_help, name="get_help"),
    path("post", receive_response.as_view(), name="post"),  # 添加.as_view()
]

关键额外修复

无论采用哪种方法,都必须将get_help函数中的prompt="user_input"改为prompt=user_input,否则OpenAI无法接收用户的实际输入内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:10:47