郑州网站建设及托管,百度seo优化是做什么的,个人网页模板背景,商业空间设计调研报告Django AI 聊天机器人项目#xff1a;基于 ChatGPT 的 Django REST API
本文档将介绍如何使用 Django 和 Django REST Framework 构建一个 AI 聊天机器人项目#xff0c;并结合 OpenAI 的 GPT 模型提供代码解释服务。步骤包括创建 Django 项目、配置 API、与 OpenAI 集成基于 ChatGPT 的 Django REST API
本文档将介绍如何使用 Django 和 Django REST Framework 构建一个 AI 聊天机器人项目并结合 OpenAI 的 GPT 模型提供代码解释服务。步骤包括创建 Django 项目、配置 API、与 OpenAI 集成并最终提供一个可通过 REST API 调用的服务。 项目结构
drf_chatgpt/ # Django 项目目录├── api/ # API 应用目录├── src/ # Django 配置文件目录├── manage.py # Django 管理工具├── .env # 环境变量文件├── requirements.txt # 项目依赖步骤 1创建虚拟环境
首先创建一个虚拟环境来隔离项目的依赖
python -m venv venv激活虚拟环境
Windows:venv\Scripts\activateLinux / MacOS:source venv/bin/activate步骤 2安装依赖
安装 Django、Django REST Framework 和 OpenAI SDK
pip install django djangorestframework openai生成 requirements.txt 以便日后使用
pip freeze requirements.txt步骤 3创建 Django 项目
使用 django-admin 命令创建一个名为 src 的 Django 项目
django-admin startproject src .修改 src/settings.py
在 INSTALLED_APPS 中添加所需的应用
INSTALLED_APPS [# external appsrest_framework,rest_framework.authtoken,# internal appsapi,# default appsdjango.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,
]步骤 4创建数据库并运行开发服务器 创建数据库迁移并应用 python manage.py migrate创建超级用户以便访问 Django 管理后台 python manage.py createsuperuser启动开发服务器 python manage.py runserver步骤 5获取 OpenAI API Key
使用环境变量来存储 OpenAI API 密钥。首先创建一个 .env 文件并将 API 密钥添加到其中
# .env 文件
OPENAI_APIKEYsk-Wxxxxxxxx在 settings.py 中加载该变量
import os
from dotenv import load_dotenv
load_dotenv()APIKEY os.getenv(OPENAI_APIKEY)步骤 6创建 API 应用
创建一个新的 Django 应用 api
python manage.py startapp api设置 API 请求到 OpenAI 的工具函数
在 api/utils.py 中创建与 OpenAI API 的集成函数
import openai
from django.conf import settingsopenai.api_key settings.APIKEYdef send_code_to_api(code):try:res openai.ChatCompletion.create(modelgpt-3.5-turbo,messages[{role: user, content: fTell me what language is this code written? {code}},{role: system, content: You are a helpful assistant that provides code explanations.},{role: assistant, content: Sure! Please provide the code you want me to explain.}],)return res[choices][0][message][content]except openai.error.APIError as e:raise ValueError(fOpenAI API returned an API Error: {e})except openai.error.APIConnectionError as e:raise ValueError(fFailed to connect to OpenAI API: {e})except openai.error.RateLimitError as e:raise ValueError(fOpenAI API request exceeded rate limit: {e})步骤 7创建模型
在 api/models.py 中定义一个用于存储代码及其解释的模型
from django.db import modelsclass CodeExplainer(models.Model):_input models.TextField()_output models.TextField()class Meta:db_table t_code_explainer创建并迁移模型
python manage.py makemigrations api
python manage.py migrate api步骤 8配置 URL 和视图
在项目的 urls.py 中包含 api.urls
# src/urls.py
from django.contrib import admin
from django.urls import path, includeurlpatterns [path(admin/, admin.site.urls),path(api/v1/, include(api.urls))
]在 api/urls.py 中定义 API 路由
# api/urls.py
from django.urls import path
from api.views import UserView, TokenView, CodeExplainViewurlpatterns [path(users/, UserView.as_view(), nameusers),path(tokens/, TokenView.as_view(), nametokens),path(code-explain/, CodeExplainView.as_view(), namecode-explain)
]在 api/views.py 中实现视图逻辑
# api/views.py
from rest_framework import views, status
from rest_framework.response import Response
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import AllowAny
from api.serializers import CodeExplainSerializer, UserSerializer, TokenSerializer
from api.models import CodeExplainerclass CodeExplainView(views.APIView):serializer_class CodeExplainSerializerauthentication_classes [TokenAuthentication]def get(self, request, formatNone):qs CodeExplainer.objects.all()serializer self.serializer_class(qs, manyTrue)return Response(serializer.data)def post(self, request, formatNone):serializer self.serializer_class(datarequest.data)if serializer.is_valid():serializer.save()return Response(serializer.data, statusstatus.HTTP_201_CREATED)return Response(serializer.errors, statusstatus.HTTP_400_BAD_REQUEST)# 用户和 token 视图 (稍后定义)
class UserView(views.APIView):serializer_class UserSerializerpermission_classes [AllowAny]class TokenView(ObtainAuthToken):serializer_class TokenSerializer步骤 9实现序列化器
在 api/serializers.py 中编写模型序列化器
# api/serializers.py
from rest_framework import serializers
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
from api.models import CodeExplainer
from api.utils import send_code_to_apiclass CodeExplainSerializer(serializers.ModelSerializer):class Meta:model CodeExplainerfields (id, _input, _output)extra_kwargs {_output: {read_only: True}}def create(self, validated_data):code_explainer CodeExplainer(**validated_data)_output send_code_to_api(validated_data[_input])code_explainer._output _outputcode_explainer.save()return code_explainerclass UserSerializer(serializers.ModelSerializer):class Meta:model Userfields (id, username, email, password)extra_kwargs {password: {write_only: True}}def create(self, validated_data):password validated_data.pop(password)user User.objects.create(**validated_data)user.set_password(password)user.save()Token.objects.create(useruser)return userclass TokenSerializer(serializers.Serializer):username serializers.CharField()password serializers.CharField(style{input_type: password}, trim_whitespaceFalse)def validate(self, attrs):username attrs.get(username)password attrs.get(password)user authenticate(requestself.context.get(request), usernameusername, passwordpassword)if not user:msg Credentials are not provided correctly...raise serializers.ValidationError(msg, codeauthentication)attrs[user] userreturn attrs
文章转载自: http://www.morning.rwfj.cn.gov.cn.rwfj.cn http://www.morning.gllhx.cn.gov.cn.gllhx.cn http://www.morning.sftpg.cn.gov.cn.sftpg.cn http://www.morning.bpmfl.cn.gov.cn.bpmfl.cn http://www.morning.xplng.cn.gov.cn.xplng.cn http://www.morning.rbjf.cn.gov.cn.rbjf.cn http://www.morning.knngw.cn.gov.cn.knngw.cn http://www.morning.wqfj.cn.gov.cn.wqfj.cn http://www.morning.hlyfn.cn.gov.cn.hlyfn.cn http://www.morning.qpfmh.cn.gov.cn.qpfmh.cn http://www.morning.fmqw.cn.gov.cn.fmqw.cn http://www.morning.gchqy.cn.gov.cn.gchqy.cn http://www.morning.wmdqc.com.gov.cn.wmdqc.com http://www.morning.pcgrq.cn.gov.cn.pcgrq.cn http://www.morning.tblbr.cn.gov.cn.tblbr.cn http://www.morning.kltsn.cn.gov.cn.kltsn.cn http://www.morning.ryxdf.cn.gov.cn.ryxdf.cn http://www.morning.zpqk.cn.gov.cn.zpqk.cn http://www.morning.cgntj.cn.gov.cn.cgntj.cn http://www.morning.zpqlf.cn.gov.cn.zpqlf.cn http://www.morning.ypfw.cn.gov.cn.ypfw.cn http://www.morning.fddfn.cn.gov.cn.fddfn.cn http://www.morning.xnfg.cn.gov.cn.xnfg.cn http://www.morning.ywpwq.cn.gov.cn.ywpwq.cn http://www.morning.pqcrz.cn.gov.cn.pqcrz.cn http://www.morning.sgfnx.cn.gov.cn.sgfnx.cn http://www.morning.mlcwl.cn.gov.cn.mlcwl.cn http://www.morning.qsy38.cn.gov.cn.qsy38.cn http://www.morning.kdnrp.cn.gov.cn.kdnrp.cn http://www.morning.nhlnh.cn.gov.cn.nhlnh.cn http://www.morning.ftwlay.cn.gov.cn.ftwlay.cn http://www.morning.kmqlf.cn.gov.cn.kmqlf.cn http://www.morning.rrdch.cn.gov.cn.rrdch.cn http://www.morning.bfybb.cn.gov.cn.bfybb.cn http://www.morning.tnqk.cn.gov.cn.tnqk.cn http://www.morning.rxlck.cn.gov.cn.rxlck.cn http://www.morning.rnwt.cn.gov.cn.rnwt.cn http://www.morning.gpnwq.cn.gov.cn.gpnwq.cn http://www.morning.brlcj.cn.gov.cn.brlcj.cn http://www.morning.jyyw.cn.gov.cn.jyyw.cn http://www.morning.jcyyh.cn.gov.cn.jcyyh.cn http://www.morning.syglx.cn.gov.cn.syglx.cn http://www.morning.rqjxc.cn.gov.cn.rqjxc.cn http://www.morning.ghrlx.cn.gov.cn.ghrlx.cn http://www.morning.rbmm.cn.gov.cn.rbmm.cn http://www.morning.tkyry.cn.gov.cn.tkyry.cn http://www.morning.kwwkm.cn.gov.cn.kwwkm.cn http://www.morning.tbhlc.cn.gov.cn.tbhlc.cn http://www.morning.mqdr.cn.gov.cn.mqdr.cn http://www.morning.fqqcn.cn.gov.cn.fqqcn.cn http://www.morning.zwfgh.cn.gov.cn.zwfgh.cn http://www.morning.spkw.cn.gov.cn.spkw.cn http://www.morning.ckhpg.cn.gov.cn.ckhpg.cn http://www.morning.jtnph.cn.gov.cn.jtnph.cn http://www.morning.dnjwm.cn.gov.cn.dnjwm.cn http://www.morning.thzgd.cn.gov.cn.thzgd.cn http://www.morning.dskzr.cn.gov.cn.dskzr.cn http://www.morning.wdskl.cn.gov.cn.wdskl.cn http://www.morning.llcsd.cn.gov.cn.llcsd.cn http://www.morning.fmry.cn.gov.cn.fmry.cn http://www.morning.qxkjy.cn.gov.cn.qxkjy.cn http://www.morning.xqbbc.cn.gov.cn.xqbbc.cn http://www.morning.qczpf.cn.gov.cn.qczpf.cn http://www.morning.bkjhx.cn.gov.cn.bkjhx.cn http://www.morning.qlsbz.cn.gov.cn.qlsbz.cn http://www.morning.rdbj.cn.gov.cn.rdbj.cn http://www.morning.hzryl.cn.gov.cn.hzryl.cn http://www.morning.amlutsp.cn.gov.cn.amlutsp.cn http://www.morning.cdrzw.cn.gov.cn.cdrzw.cn http://www.morning.qmmfr.cn.gov.cn.qmmfr.cn http://www.morning.gkktj.cn.gov.cn.gkktj.cn http://www.morning.wbxr.cn.gov.cn.wbxr.cn http://www.morning.yfzld.cn.gov.cn.yfzld.cn http://www.morning.jtmrx.cn.gov.cn.jtmrx.cn http://www.morning.ztqj.cn.gov.cn.ztqj.cn http://www.morning.jwxmn.cn.gov.cn.jwxmn.cn http://www.morning.swbhq.cn.gov.cn.swbhq.cn http://www.morning.qgjwx.cn.gov.cn.qgjwx.cn http://www.morning.hrzky.cn.gov.cn.hrzky.cn http://www.morning.gyzfp.cn.gov.cn.gyzfp.cn