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同名

相关推荐

  1. Django集成第三方标签功能

    2024-06-19 10:10:05       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-19 10:10:05       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-19 10:10:05       5 阅读
  3. 在Django里面运行非项目文件

    2024-06-19 10:10:05       4 阅读
  4. Python语言-面向对象

    2024-06-19 10:10:05       4 阅读

热门阅读

  1. C# 用RFC的方式调用SAP接口

    2024-06-19 10:10:05       20 阅读
  2. ngrok 进行安全的内网穿透:使用指南

    2024-06-19 10:10:05       23 阅读
  3. 【C语言】信号

    2024-06-19 10:10:05       20 阅读
  4. kotlin 注解 @Parcelize 使用

    2024-06-19 10:10:05       21 阅读
  5. Hadoop+Spark大数据技术(自命题试卷测试)

    2024-06-19 10:10:05       18 阅读
  6. Bash sleep随机时间

    2024-06-19 10:10:05       21 阅读
  7. elasticsearch安装(centos7)

    2024-06-19 10:10:05       19 阅读
  8. Vue3使用component动态展示组件

    2024-06-19 10:10:05       19 阅读
  9. 前端面试题——网络篇

    2024-06-19 10:10:05       18 阅读
  10. 数据传输安全(为支付宝第三方做铺垫)

    2024-06-19 10:10:05       21 阅读