智谱API使用
如何注册和调用api网上都有对应的内容,直接一搜就可以,本文针对代码的书写提出建议
info
个人建议使用流式获取的方法,这个是类似gpt那种自然生成的效果的。
利用python使用zhipu ai,利用js得到内容
使用前记得 pip install zhipuai
如果想获得更多代码,比如实现对话文本框的效果可以关注私我
my_client = ZhipuAI(api_key='自己的api key')
def generate_stream(ai_response):
try:
for chunk in ai_response:
# Simulating a delay for each message chunk
# 这是必写的形式,不这么写你会得到出了答案的其他的内容
yield f"{chunk.choices[0].delta.content}"
except GeneratorExit:
print("Client disconnected")
@utils.route('/api/ai-assistant', methods=['GET', 'POST'])
def ai_assistant():
if request.method == 'GET':
return jsonify({'success': True, 'message': 'AI assistant is running'})
else:
data = request.get_json()
user_message = data.get('message')
# 使用智谱AI的API进行消息处理
ai_response = my_client.chat.completions.create(
model="glm-4",
messages=[
# sys就是你想让你系统扮演什么角色,使用字符串,此时的内容是我自己设定好的,暂时不展示,反正想字符串多长都可以
# user表示用户输入的内容,使用这个来表示从前端获得的信息
{"role": "system", "content": waste_types_info_en},
{"role": "user", "content": user_message}
],
stream=True, # 必有
)
return Response(generate_stream(ai_response), content_type='text/event-stream') # 必须这个格式
async function getAIResponse(content) {
const response = await fetch('/api/ai-assistant', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({message: content}),
});
const reader = response.body.getReader();
# createMessageBubble是自己写的创造文本框的方法
let aiBubble = createMessageBubble('ai-message');
let totalText = ''; // 用于累积读取的文本
while (true) {
const {done, value} = await reader.read();
totalText += decoder.decode(value);
# 下面这个marked.parse是把ai反馈的内容变成markdown格式,记得提前下好marked.js这个js插件。不使用这个也行,只不过样式丑了
aiBubble.innerHTML = marked.parse(totalText);
if (done) {
break;
}
}
}
light
此时可以清楚的看到成功流式得到结果,并且使用marked.js的效果