2026山东大学软件学院创新项目实训博客(二)

张开发
2026/4/13 6:13:48 15 分钟阅读

分享文章

2026山东大学软件学院创新项目实训博客(二)
【智绘博弈】智谱 GLM-4V 接入实战项目智绘博弈 —— 人机对抗绘画猜词与心理解读系统角色AI 识别 心理解读模块负责人日期2026.4.6 - 2026.4.12一、本周目标上周完成了多模态大模型调研和选型确定使用智谱 GLM-4V-Flash 作为主力模型。这周目标是完成 zhipuai SDK 的安装和配置搞懂多模态消息的格式怎么同时传图片和文字写出第一个能跑通的调用 demo测试 temperature 参数对 AI 猜词的影响二、SDK 安装与 API Key 获取2.1 注册智谱开放平台打开 https://open.bigmodel.cn/手机号注册注册完就送2000 万 Token对短期项目测试够用2.2 获取 API Key登录后进入控制台 → API Keys → 创建新的 API Key⚠️安全提醒千万不要把 Key 写死在代码里提交到网络 包括 Git后面会讲怎么安全管理。2.3 安装 SDKpip install zhipuai安装完可以验证一下 import zhipuai zhipuai.__version__ 2.1.5三、多模态消息格式详解这是我这周花最多时间理解的部分。3.1 什么是“多模态消息”普通的文本对话很简单messages [{role: user, content: 你好}]但我们要让 AI同时看到图片和文字就需要用多模态消息格式messages [ { role: user, content: [ { type: image_url, image_url: { url: data:image/png;base64,xxxxx... # 图片 } }, { type: text, text: 这幅画画的是什么 # 文字提示 } ] } ]关键点content从字符串变成了数组数组里可以放多个元素每个元素有type字段标明类型type: image_url表示图片type: text表示文字图片和文字的顺序可以调换AI 会同时理解它们3.2 为什么用 Base64 而不是 URL智谱的 API 支持两种传图方式URL 方式传一个图片的网络地址Base64 方式把图片编码成文本字符串直接传我们选择 Base64原因是我们的图片是 Canvas 画布实时生成的根本没有 URLBase64 直接嵌入请求不需要额外的图片服务器避免了”AI 服务器去下载图片“这一步的延迟3.3 Base64 编码示例import base64 ​ # 假设 image_bytes 是 PNG 图片的二进制数据 image_base64 base64.b64encode(image_bytes).decode(utf-8) ​ # 拼成 data URL 格式 data_url fdata:image/png;base64,{image_base64}前端 Canvas 导出图片时也是类似的// 前端代码 const canvas document.getElementById(drawing-board); const dataUrl canvas.toDataURL(image/png); // 结果就是 data:image/png;base64,xxxxx...四、第一次成功调用4.1 最简代码from zhipuai import ZhipuAI ​ # 初始化客户端 client ZhipuAI(api_key你的API Key) ​ # 调用多模态模型 response client.chat.completions.create( modelglm-4v-flash, # 模型名 messages[ { role: user, content: [ { type: image_url, image_url: { url: fdata:image/png;base64,{image_base64} } }, { type: text, text: 这幅简笔画画的是什么请用2-4个中文字回答。 } ] } ], temperature0.3, max_tokens200, ) ​ # 获取回复 answer response.choices[0].message.content print(answer)4.2 实际运行结果我画了一个蘑菇AI 的回复五、temperature 参数的作用在测试过程中我发现一个重要参数temperature。5.1 temperature 是什么简单说temperature 控制 AI 回答的”随机性“temperature效果0.0 ~ 0.3回答更确定、更稳定每次问同样的问题结果差不多0.7 ~ 1.0回答更有创意、更多样但可能不太稳定5.2 对猜词游戏的影响我用同一张 “苹果” 的简笔画测试了不同 temperaturetemperature5次测试结果分析0.1苹果、苹果、苹果、苹果、苹果非常稳定0.5苹果、苹果、水果、苹果、苹果偶尔飘0.9苹果、球、樱桃、苹果、红果很不稳定5.3 我们的选择对于猜词游戏我们需要 AI 的回答稳定可预测不然游戏体验会很混乱所以最终设置temperature0.3。response client.chat.completions.create( modelglm-4v-flash, messages[...], temperature0.3, # 低温度 稳定输出 max_tokens200, )六、API Key 的安全管理老师的文件里强调了代码安全这里记录一下我们的做法。6.1 问题Key 不能写死在代码里如果这样写# 错误示范 client ZhipuAI(api_keysk-xxxxxxxxxxxxxxxx)一旦代码提交到 Git任何人都能看到你的 Key可能被盗用。6.2 解决用环境变量我们在config.py里这样写import os ​ # 从环境变量读取如果没有就用空字符串 ZHIPU_API_KEY os.environ.get(ZHIPU_API_KEY, )然后在启动脚本里设置环境变量# Linux/Mac export ZHIPU_API_KEY你的密钥 python app.py ​ # Windows (start.bat) set ZHIPU_API_KEY你的密钥 python app.py这样 Key 只存在于本地环境不会被提交到代码仓库。七、遇到的问题问题 1第一次调用报错zhipuai.APIError原因API Key 复制的时候多了个空格……仔细检查后解决了。问题 2返回结果格式不稳定有时候 AI 会返回这是一个苹果有时候返回{guess: 苹果, confidence: 0.9}这个问题下周会专门处理——需要设计 Prompt 来约束输出格式。问题 3图片太大导致请求超时一开始传原图2000x2000请求要好几秒。后来在前端压缩到 400x400 后响应时间降到了 1 秒内。八、下周计划Prompt Engineering设计三档难度的 prompt让 AI 按我们要求的 JSON 格式返回响应解析处理 AI “不听话” 的情况写一个健壮的解析函数通义千问备份实现自动降级机制智谱挂了自动切换到千问九、本周总结这周完成了 AI 模块的“从 0 到 1”理解了多模态消息的格式content 数组 type 字段搞懂了 Base64 图片传输的原理成功调用了智谱 GLM-4V-FlashAI 能识别简笔画了测试了 temperature 参数确定用 0.3学会了用环境变量保护 API Key下周继续完善 Prompt 和错误处理本文代码在 AI 辅助下完成。与 AI 的交互过程我描述了 “需要调用智谱的多模态接口识别 Canvas 画布的图片” 这个需求AI 提供了代码框架和多模态消息格式的写法我根据智谱官方文档做了验证和调整。

更多文章