vue+python flask实现智谱清言接口web服务

创建个主py文件和副py接口,主py先引入运行代码:

1
2
3
4
5
6
7
8
9
from flask import Flask

from blog import blog

app = Flask(__name__)
app.register_blueprint(blog)

if __name__ == '__main__':
app.run()

这里我的副py文件叫blog.py,所以就引入它的名字了(记得放在同一个目录下)

接下来是blog接口代码~

引入配置:

1
2
3
4
5
6
7
8
9
import os

import requests
from flask import Blueprint, request
from zhipuai import ZhipuAI

blog = Blueprint('blog', __name__)

client = ZhipuAI(api_key="替换为你的Api key")

接口代码

普通的GLM4文本对话接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
@blog.route('/chat', methods=['POST'])
def chat_GLM4():
content = request.form['content']
print(request.form['content'])
response = client.chat.completions.create(
model="glm-4",
messages=[
{"role": "system", "content": "你是一个和蔼可亲,粘人的女友,你在回答用户问题时可以带点儿甜言蜜语"},
{"role": "user", "content": content}
],
)
print(response.choices[0].message.content)
return response.choices[0].message.content

这里的message中的system内容是让模型扮演个对应角色或提出要求,下面的content才是提出问题

GLM-4v图像文本对话:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
@blog.route('/chatgv', methods=['POST'])
def chat_GLM4V():
img = request.files.get('img')
# print(img)
header = {
"token": "你的IMGTP图床token",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}

# 本地方法
# image_filename = "abc.png"
# directory = os.getcwd()
# image_path = os.path.join(directory, image_filename)

files = {
"image": ('img.jpg', img, 'multipart/form-data')
}
r2 = requests.post(url="https://www.imgtp.com/api/upload", files=files, headers=header)

r2_data = r2.json()

if r2.status_code == 200:
# print(f"信息:{r2_data}")
img_url = r2_data.get("data", {}).get("url")
img_name = r2_data.get("data", {}).get("name")
img_id = r2_data.get("data", {}).get("id")
print(f"图片地址:{img_url},图片名:{img_name},图片id: {img_id}")
else:
print(r2.status_code)

content = request.form['content']
response = client.chat.completions.create(
model="glm-4v",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": content
},
{
"type": "image_url",
"image_url": {
"url": img_url
}
}
]
}
]
)
print(response.choices[0].message.content)
r = requests.post("https://www.imgtp.com/api/delete", headers=header, data={'id': img_id})
print(r.json())
return response.choices[0].message.content

记得替换你的IMGTP图床token,获取token方法:登录网站:ImgTP - 免费公共图床,在设置里面可以看到你账号的token:

它里面也提供了官方接口文档

我这里的逻辑是先通过imgtp图床上传图片,将上传的图片链接返回并传给GLM-4v对话模型,调用完成后就删除图片了(删除它可以不占用图床空间,也可以不删看自己需求)

cogview-3图像生成

1
2
3
4
5
6
7
8
9
10
@blog.route('/draw', methods=['POST'])
def draw():
content = request.form.get('content')
response = client.images.generations(
model="cogview-3", # 填写需要调用的模型名称
prompt=content,
)
print(response.data[0].url)
return response.data[0].url

会返回图片链接

调用实例

工具:postman

运行主py文件,普通文本对话:

图像文本对话:

图像生成接口: