Django集成OpenAI

简介: Django集成OpenAI

Django集成OpenAI

通过前面 django 框架的基本开发知识,我们现在可以开始在 django 上做稍微深一点当然应用开发了。

这一章开始编写怎么集成调用 openai ,设置环境以及 openai 的基础知识。

大家都知道 ai 的多模态逐渐扩大,各种应用层出不穷,不管是做图片多媒体,知识库,还是 ai 助手,都逃不开使用大模型,我们最后的任务都要交给大模型。

这一篇我们就开始大模型最基础的调用,文章里面选择的是 openaiGPT-3GPT-3.5 模型。

一 、引入配置文件

安装 python-decouple ,这是一个用于管理项目配置的 python 包。

它允许我们将所有配置项从代码中分离出来,并且支持从  .env 文件中读取配置。

pip install python-decouple

可以看到下面运行情况,安装成功:

image.png

然后进入我们 testsite 的根目录,新建 .env 文件,添加下列配置项,它就是我们所需要的 openaikey ,这里需要进入 openai 的官网获取:

OPENAI_API_KEY = 'openai-api-key'

再打开我们的 testsite/testsite/setting.py 文件,添加下列代码:

from decouple import config
# 基础设置
DEBUG = config('DEBUG', default=False, cast=bool)
OPENAI_API_KEY = config('OPENAI_API_KEY')

env文件里的配置项就加载成功,想要调用它直接 settings.OPENAI_API_KEY 就可以,注意引入 setting 文件。

二、集成OpenAI到应用里面

在我们调用 openai 接口之前,我们先修改一下我们的 question 模型,好做数据持久化,打开 testsite/members/model.py 文件,将 Question 添加 answer_text 字段:

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    answer_text = models.CharField(max_length=200, default="")
    pub_date = models.DateTimeField('date published')

由于模型改变,需要更新数据库迁移文件:

py manage.py makemigrations

image.png

执行数据库迁移:

py manage.py migrate

image.png

这个时候可以看到我们数据库多了一个字段 answer_text

image.png

开始安装 openai 的库:

pip install --upgrade openai

得到下面的输出:

image.png

准备工作到此完成,接下来我们开始新增调用大模型的视图。

打开 testsite/members/views.py 文件,添加下列视图方法:

import openai
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
# 设置OpenAI API的密钥
openai.api_key = settings.OPENAI_API_KEY
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
@require_http_methods(["POST"])
@csrf_exempt
def generate_gpt3_text(request):
    message = request.POST.get('message')
    client = OpenAI()
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",  # 使用最新的模型名称,例如 "gpt-3.5-turbo"
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": message}
        ],
        max_tokens=100,
        n=1,
        stop=None,
        temperature=0.5,
    )
    # 示例:直接在视图中创建并保存Question对象
    new_question = Question(question_text=message, answer_text=response['choices'][0]['text'],
                            pub_date=timezone.now())
    new_question.save()
    return JsonResponse({'response': response['choices'][0]['text']})

我们来详细讲解一下上面代码,通过 openai.api_key = settings.OPENAI_API_KEY 设置 openaikey

我们前面在 .env 文件里配置好了的,再在视图方法里通过 openai.Completion.create 调用接口,response['choices'][0]['text'] 是模型返回的答案,最后执行 Question 保存。

看到 @csrf_exempt 这一行了吗,由于 django 默认开启 CSRF token 中间件,我们在开发环境,可以给我们需要调试的方法上面添加 @csrf_exempt ,我们就可以为特定的视图禁用 CSRF 检查,而不是整个应用。

调用我们的 http://127.0.0.1:8000/polls/chat/ 接口:

image.png

再打开我们的数据库,可以看到结果:

image.png

在这里可能大家对 openai 的接口比较陌生,我这里详细整理了一下。

  • model :指的是我们需要选择的模型,这里可以是 gpt-3.5-turbo 或者 gpt4 ,在更新的 API 中,model 参数被用来取代 engine ,以指定要使用的模型名称。model 代表的是具体的模型版本 。
  • messages :是我们输入消息,在这篇文中它是一个模板,构造用户与系统角色的提示模板。
  • max_tokens :是模型给我们返回相应的最大 token 数量。
  • n :是生成的响应数量。模型生成多条响应,可以用于比较和选择最佳结果。
  • stop :是一个可选的字符串或字符串数组,用于指示模型生成何时应该停止。通常用于控制生成的结束。
  • temperature :控制生成文本的随机性。值越高(最大为 1),输出越随机;值越低,输出越确定。

通过调整这些参数,你可以更好地控制模型的生成行为,满足不同的应用需求。

三、总结

总的来说调用 openai 还是很简单,到现在为止,关于 django 的功能文章体现的都是很基础的功能,我们熟悉完之后,还要结合文档来进行深一步优化,还有各种中间件的集成。

这篇集成 openai 其实是很入门的 demo ,只是为了大家能够对 openai 有个基础的认识。

现在以 ai 作为主流的大环境下面,通义千问文心一言kimi包括本地 ollama 等模型的流行,是我们做应用避不开的话题,后面我也会逐一说明。


相关文章
|
2月前
|
存储 缓存 NoSQL
深入理解Django与Redis的集成实践
深入理解Django与Redis的集成实践
82 0
|
关系型数据库 MySQL 定位技术
Python web框架 之Django + Python3.7 + 集成百度地图【视频讲解】
python集成百度地图 介绍 python集成百度地图demo
629 0
Python web框架 之Django + Python3.7 + 集成百度地图【视频讲解】
|
2月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
101 1
|
8天前
|
人工智能 数据可视化 JavaScript
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
NodeTool 是一个开源的 AI 工作流可视化构建器,通过拖放节点的方式设计复杂的工作流,无需编码即可快速原型设计和测试。它支持本地 GPU 运行 AI 模型,并与 Hugging Face、OpenAI 等平台集成,提供模型访问能力。
62 14
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
|
3月前
|
开发工具 Python
django之drf集成swagger
django之drf集成swagger
|
4月前
|
前端开发 关系型数据库 测试技术
django集成pytest进行自动化单元测试实战
在Django项目中集成Pytest进行单元测试可以提高测试的灵活性和效率,相比于Django自带的测试框架,Pytest提供了更为丰富和强大的测试功能。本文通过一个实际项目ishareblog介绍django集成pytest进行自动化单元测试实战。
68 3
django集成pytest进行自动化单元测试实战
|
5月前
|
前端开发 JavaScript API
【Django+Vue3 线上教育平台项目实战】构建课程详情页与集成视频播放功能
随着数字化教育的兴起,构建一个高效、用户友好的线上教育平台至关重要。本文将探讨如何使用Django与Vue.js 3结合,实现一个包含课程列表和课程详情页(含视频播放功能)的线上教育平台部分。本文主要介绍了如何设计数据库模型、处理数据查询、构建动态前端界面,并集成视频播放功能,为用户带来流畅的学习体验。
【Django+Vue3 线上教育平台项目实战】构建课程详情页与集成视频播放功能
|
4月前
|
消息中间件 NoSQL 调度
Django后端架构开发:Django 与 Celery 的深度集成
Django后端架构开发:Django 与 Celery 的深度集成
218 0
|
5月前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
229 6
|
7月前
|
测试技术 持续交付 Docker
Django中的自动化部署与持续集成实践
【4月更文挑战第15天】本文介绍了Django项目中自动化部署与持续集成的实践方法。自动化部署通过选择Ansible、Fabric或Docker等工具,编写部署脚本,配置持续集成工具(如Jenkins、GitLab CI),确保服务器环境一致,实现快速应用上线。持续集成则涉及配置版本控制系统,设置自动化构建和测试,编写全面的测试用例,集成代码质量检查工具,并配置通知机制,以提升代码质量和开发效率。这两者结合能有效提升项目的迭代速度和可靠性。