Django集成OpenAI

Django集成OpenAI

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

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

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

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

一 、引入配置文件

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

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

pip install python-decouple

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

然后进入我们 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

执行数据库迁移:

 py manage.py migrate

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


开始安装 openai 的库:

pip install --upgrade openai

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

打开 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/ 接口:


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

在这里可能大家对 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 等模型的流行,是我们做应用避不开的话题,后面我也会逐一说明。

– 欢迎点赞、关注、转发、收藏【我码玄黄】,gonghao同名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么采集阿里巴巴1688的商品或商家数据?

怎么使用简数采集器批量采集阿里巴巴1688的商品或商家相关信息呢? 简数采集器暂时不支持采集阿里巴巴1688的相关数据,谢谢。 简数采集器采集网络网页数据非常简单高效:输入要采集的网址,简数智能算法会自动提取出网页上的关键信…

探索数据结构:集合、线性结构、树状结构和图形结构

在计算机科学中,数据结构是用于组织和存储数据的基础。不同的数据结构有不同的特点和适用场景。今天,我们将深入探讨四种主要的数据结构:集合、线性结构、树状结构和图形结构。通过对它们的理解,您可以更好地选择和应用这些结构来…

IOS Swift 从入门到精通:算术运算,运算符重载,符合赋值运算,比较运算,条件,结合条件,三元运算,Swift语句,范围运算

目录 算术运算符 运算符重载 复合赋值运算符 比较运算符 条件 结合条件 三元运算符 Switch 语句 范围运算符 总结 算术运算符 现在您已经了解了 Swift 中的所有基本类型,我们可以开始使用运算符将它们组合在一起。运算符是那些像和 这样的小数学符号-&…

外贸找客户软件

外贸找客户软件在帮助外贸企业或个人寻找潜在客户、提高销售效率方面起着重要作用。以下是一些常用的外贸找客户软件,它们各有特点和优势,可以根据具体需求选择使用。 阿里巴巴国际版: 阿里巴巴国际版App为外贸人提供了一个巨大的B2B平台&am…

qt 开发对信号槽进行二次封装,实现信号槽管理接口。

最近做的一个项目,由于工程需要模块之间能够互相通信,但又不想模块之间耦合度太高 使用信号槽的话,需要两个类的对象或者指针在其中一个类都要体现,这样达不到效果, 想要一个管理类对这些互相通信的类之间进行管理,只需要在各自的类注册发送者和接收者即可,双方通过一…

Charles抓取安卓应用https包演示

一、准备软件 夜神安卓模拟器 (yeshen.com) Charles (charlesproxy.com) 二、配置抓包 2.1 Charles安装PC根证书 记住这里的ip端口 三、安卓模拟器配置 3.1 配置安卓客户端网络代理 填写上文的ip端口,保存 3.2 安装根证书 3.2.1 导出根证书 linux主机执行 op…

推荐4款实用工具,非常好用,建议收藏

PDFREAL PDFReal 是一个功能强大的在线PDF编辑工具,提供多种实用的PDF处理功能。用户可以在一个网站上完成包括PDF合并、PDF拆分、PDF压缩、PDF保护、PDF解锁等多种操作。此外,PDFReal 还支持将文本转换为PDF、将图片转换为PDF、添加水印、提取页面内容等…

基于Django、Bootstrap的电影推荐系统,算法基于用户的协同过滤算法,有爬虫有可视化后台

背景 基于Django和Bootstrap的电影推荐系统结合了用户协同过滤算法,通过爬虫技术获取电影数据,并在可视化后台展示推荐结果。该系统旨在提供个性化的电影推荐服务,帮助用户发现符合其喜好的电影。 用户协同过滤算法是一种常用的推荐算法&am…

qt开发-09_分裂器

QSplitter 是 Qt 框架中的一个非常实用的控件,用于创建可调整大小的窗格。它允许用户通过拖动子窗口间的边界(也称为分割条)来动态调整子窗口的尺寸。这在开发需要多个视图同时显示,且用户需要根据需要调整每个视图大小的应用程序…

【408考点之数据结构】表达式求值和括号匹配

表达式求值和括号匹配 表达式求值 表达式求值是计算机科学中的一个基本问题,涉及将数学表达式转换为计算机可以理解和处理的形式。通常,我们使用栈来辅助求值过程,特别是在处理中缀表达式转后缀表达式和后缀表达式求值时。 中缀表达式转后…

机器学习python实践——由特征选择引发的关于卡方检验的一些个人思考

最近在用python进行机器学习实践,在做到特征选择这一部分时,对于SelectPercentile和SelectKBest方法有些不理解,所以去了查看了帮助文档,但是在帮助文档的例子中出现了"chi2",没接触过,看过去就更…

基于SpringBoot+Vue在线考试报名系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

【APP移动端性能测试】第四节.APP移动端常见的性能测试点(下)

文章目录 前言五、流量性能测试 5.1 流量基本情况说明 5.2 流量的测试步骤 5.3 流量的优化方法六、电量性能测试 6.1 电量基本情况说明 6.2 电量的测试步骤 6.2 电量的结果分析七、APP启动测试 7.1 APP启动的两种方式 7.2 APP启动的测…

简单了解JDBC相关操作

JDBC 1、概念 JDBC就是使用java语言操作关系型数据库的一套API,全称java数据库连接。 2、具体步骤 创建工程,导入驱动jar包注册驱动获取连接定义SQL语句获取执行SQL语句的对象执行SQL处理返回结果释放资源 Testpublic void jdbcTest() throws Class…

Python中列表的常用操作

列表的基本使用 arr []# append arr.append(1) print(arr)arr.append("a") print(arr)列表的增删改查 arr []arr.append(1) arr.append(2) arr.append(3)print(arr)# pop arr.pop() print(arr)# update arr[0] 333 print(arr)# get print(arr[0])列表的复制 ar…

Qt Quick介绍

一.Qt Quick介绍 Qt Quick 是 QML 类型和功能的标准库,包括视觉类型、交互式类型、动画、模型和视图、粒子效果和着色效果 Qt Quick 使用 QML 作为声明语言,来设计以用户界面为中心的应用程序 QML 包含大量使用手机移动设备的功能模块,比如基…

python-邮票组合问题

[题目描述] 某人有四张3分的邮票和三张5分的邮票,用这些邮票中的一张或若干张可以得到多少种不同的邮资?输入格式: 此题无输入。输出格式: 输出可以得到不同邮资的数量。 样例输入 无样例输出 19数据范围: 对于100%的…

使用invokeMethod异步执行QT函数操作

在QT窗口初始化加载的时候如果执行比较耗时的操作,很容易阻塞主界面的显示,导致用户体验差。这时候一般我们可以通过定时器延时加载对应的操作。其实使用QMetaObject::invokeMethod方法也可以实现异步加载,操作更简单效果更好。两种方式如下: //异步执行loadData函数 //Qt:…

【抽代复习笔记】21-群(十五):循环群引理及定义

例4:证明,如果σ(i1 i2 … ik)是Sn中的一个k-循环,而r∈Sn,则rσr^(-1)也是一个k-循环,且rσr^(-1)(r(i1),r(i2),…,r(ik))。 证:①设σ(i1 i2 … ik)(i1 ik)(i1 ik-1)…(i1 i2), 则rσr^(-1)…

触想工业一体机在智慧医疗智能采血管理系统中的应用

一、行业发展前景 作为医院重点科室之一,传统的检验科采血环节存在诸多痛点,特别在备管阶段,大量患者信息的核对、试管条码打印、选管、贴标等繁琐步骤均依赖人工操作,工作强度大、效率低,易出错。 随着智慧医院建设的…