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
@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
设置 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
等模型的流行,是我们做应用避不开的话题,后面我也会逐一说明。
– 欢迎点赞、关注、转发、收藏【我码玄黄】,gonghao同名