Django集成OpenAI
通过前面 django
框架的基本开发知识,我们现在可以开始在 django
上做稍微深一点当然应用开发了。
这一章开始编写怎么集成调用 openai
,设置环境以及 openai
的基础知识。
大家都知道 ai
的多模态逐渐扩大,各种应用层出不穷,不管是做图片多媒体,知识库,还是 ai
助手,都逃不开使用大模型,我们最后的任务都要交给大模型。
这一篇我们就开始大模型最基础的调用,文章里面选择的是 openai
的 GPT-3
和 GPT-3.5
模型。
一 、引入配置文件
安装 python-decouple
,这是一个用于管理项目配置的 python
包。
它允许我们将所有配置项从代码中分离出来,并且支持从 .env
文件中读取配置。
pip install python-decouple
可以看到下面运行情况,安装成功:
然后进入我们 testsite
的根目录,新建 .env
文件,添加下列配置项,它就是我们所需要的 openai
的 key
,这里需要进入 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 "POST"]) ([ 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
设置 openai
的 key
我们前面在 .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
等模型的流行,是我们做应用避不开的话题,后面我也会逐一说明。