点击“终码一生”,关注,置顶公众号
每日技术干货,第一时间送达!
1、智谱免费全家桶
前段时间智谱BigModel开放平台,开放了视觉理解模型GLM-4V-Flash的API,供大家买免费调用,新开放的模型是基于图片做深度思考,推理和分析。给许多想要开发AI工具的小伙伴提供了免费的AI底座。遇到不懂的拿手机随手拍一下,直接上传给GLM-4V-Flash就可以了。小编也在获知后第一时间去体验并测试了一把!
算上本次最新开放的GLM-4V-Flash大模型,智谱开放平台目前已经有4款免费大模型,供大家调用,完全是开发者的福利平台了,这些免费模型基本可以满足我们大部分的应用场景。
四款模型分别如下:
-
CogVideoX-flash:免费视频生成模型,具备强大的视频生成能力。
-
CogView-3-flash:免费图像生成模型,可以生成符合指令且美学评分更高的图像。
-
GLM-4v-flash(多模态):免费且强大的图像理解模型,在图像识别、图像问答、图像推理任务等场景上有展现出了良好的效果。
-
GLM-4-flash:免费且好用的语言模型,在智能问答、摘要生成和文本数据处理等多种应用场景中均表现出良好的效果。
这四款模型分别对应文本,视频,文生图,图分析,每个模型针对不同的场景,免费开放给大家使用,这也大大降低了产品的研发成本。
有需要的小伙伴可以去官方体验,如果免费模型无法满足,可以使用更高级的模型,API收费也是非常的低。
另外,针对新用户,智谱开放平台也是诚意满满。注册即可享有超大福利包,大额免费Token额度:
-
模型直达:https://bigmodel.cn
2、在线体验全家桶大模型
我们之前已经体验过其他模型,今天再测试下,包括最新开放的GLM-4V-Flash模型,看看这些模型有那些让人印象深刻的地方。我们通过模型广场直接选择对应的模型,体验即可。
-
模型广场:https://bigmodel.cn/console/modelcenter/square
1、图生文
我们先来个简单的,上传一张美女图片,来个图生文,生成AI绘画的提示词。
按我们想要的输出,并且写的非常详细,这点还是非常满意的。通过AI来生成提示词,效率杠杠的。现在不少在某红书和某宝出售提示词的,是一个不错的副业,其实这些就是信息差,感兴趣的小伙伴也可以去做。
2、数学题解答
下面我们让GLM-4V-Flash模型做道中学几何题。现在市面上有一少作业批改神器,还有专门的作业辅导助手,底层都是基于AI模型对图片理解分析的处理。那么我们看看GLM-4V-Flash模型对于数学理解能力如何?
一道简单的中学数学题,对我们GLM大模型来说,解答起来还是比较简单的。
3、物理题解答
接着,我们增加点难度,来一道高中物理题,看看大模型能力如何?
也可以很丝滑的回答,解答的非常详细,按要求一步一步分析解答,给出了我们想要的答案。
4、热量计算
我们再上传一个食品图片,让他帮我们计算下热量。
回答还不错,先是给出了甜甜圈的成分,配料和制作过程,然后给了一个总热量供我们参考。
5、鉴宝
最后我们来个AI鉴宝,拿出我收藏了四五年的大元宝,看看真伪,值多少钱?
哈哈,GLM大模型并没有给出特别肯定的回答,但是给了我们一些有价值的参考信息,这个回答也相当不错。
3、调用全家桶大模型API
既然智谱开放平台提供了免费全家桶模型,我们肯定要通过代码测试下,下面我们通过Java调用GLM-4V-Flash和GLM-4-Flash模型的API,应用到自己的项目中。
-
模型直达:https://bigmodel.cn
-
开发文档:https://bigmodel.cn/dev/api/normal-model/glm-4v
BigModel开放平台的官方文档,已经非常详细,包括代码Demo,SDK和参数说明,大家可以参考开发文档,自己调试。本次是个人的部分代码调用,仅供参考:
1、引入SDK
首先,我们需要引入官方的最新SDK,添加到自己的项目中。
<dependency>
<groupId>cn.bigmodel.openapi</groupId>
<artifactId>oapi-java-sdk</artifactId>
<version>release-V4-2.3.0</version>
</dependency>
2、代码部分
下面自己封装一个参数类,方便管理
import org.json.JSONObject;
public interface Content {
JSONObject toJson();
}
// 图片类
class ImageContent implements Content {
private String type;
private String imageUrl;
public ImageContent(String imageUrl) {
this.type = "image_url";
this.imageUrl = imageUrl;
}
@Override
public JSONObject toJson() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("type", type);
JSONObject imageObject = new JSONObject();
imageObject.put("url", imageUrl);
jsonObject.put("image_url", imageObject);
return jsonObject;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
}
// 文本类
class TextContent implements Content {
private String type;
private String text;
public TextContent(String text) {
this.type = "text";
this.text = text;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public JSONObject toJson() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("type", type);
jsonObject.put("text", text);
return jsonObject;
}
}
内容管理代码Demo
import com.alibaba.fastjson.JSONObject;
import org.json.JSONArray;
import java.util.ArrayList;
import java.util.List;
public class ContentManager {
private List<Content> contents;
public ContentManager() {
this.contents = new ArrayList<>();
}
public void addContent(Content content) {
contents.add(content);
}
public List<Content> getContents() {
return contents;
}
public void setContents(List<Content> contents) {
this.contents = contents;
}
// 转换内容列表为JSON数组
public JSONArray toJsonArray() {
JSONArray jsonArray = new JSONArray();
for (Content content : contents) {
jsonArray.put(content.toJson());
}
return jsonArray;
}
// 转换内容列表为List<Object>
public List<Object> toObjectList() {
List<Object> objectList = new ArrayList<>();
for (Content content : contents) {
objectList.add(content.toJson());
}
return objectList;
}
public static List<Object> toObjectList(String image, String text) {
// 创建ContentManager对象
ContentManager contentManager = new ContentManager();
// 添加内容
contentManager.addContent(new ImageContent(image));
contentManager.addContent(new TextContent(text));
// 获取内容的List<Object>
return contentManager.toObjectList();
}
public static JSONArray toJsonArray(String image, String text) {
// 创建ContentManager对象
ContentManager contentManager = new ContentManager();
// 添加内容
contentManager.addContent(new ImageContent(image));
contentManager.addContent(new TextContent(text));
// 获取内容的JSON数组
return contentManager.toJsonArray();
}
}
}
流式输出
public static String sseInvoke2(String msg, String modelChat) {
String image_url = "https://www.itmatu.com/wp-content/uploads/2024/12/1735467022-b26747fc8cb2170.png";
List<Object> content2 = ContentManager.toObjectList(image_url, msg);
// System.out.println("content2:"+JSON.toJSONString(content2));
List<ChatMessage> messages = new ArrayList<>();
ChatMessage chatMessage = new ChatMessage(ChatMessageRole.USER.value(), content2);
messages.add(chatMessage);
String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
.model(modelChat)
.stream(Boolean.TRUE)
.messages(messages)
.requestId(requestId)
.build();
ModelApiResponse sseModelApiResp = client.invokeModelApi(chatCompletionRequest);
if (sseModelApiResp.isSuccess()) {
AtomicBoolean isFirst = new AtomicBoolean(true);
ChatMessageAccumulator chatMessageAccumulator = mapStreamToAccumulator(sseModelApiResp.getFlowable(),chatMessage)
.doOnNext(accumulator -> {
{
if (isFirst.getAndSet(false)) {
//System.out.print("Response: ");
}
if (accumulator.getDelta() != null && accumulator.getDelta().getTool_calls() != null) {
String jsonString = mapper.writeValueAsString(accumulator.getDelta().getTool_calls());
//System.out.println("tool_calls: " + jsonString);
}
if (accumulator.getDelta() != null && accumulator.getDelta().getContent() != null) {
// 这句代码是返回的具体结果
System.out.print(accumulator.getDelta().getContent());
}
}
})
.doOnComplete(System.out::println)
.lastElement()
.blockingGet();
Choice choice = new Choice();
choice.setFinishReason(chatMessageAccumulator.getChoice().getFinishReason());
choice.setIndex(0L);
choice.setDelta(chatMessageAccumulator.getDelta());
List<Choice> choices = new ArrayList<>();
choices.add(choice);
ModelData data = new ModelData();
data.setChoices(choices);
data.setUsage(chatMessageAccumulator.getUsage());
data.setId(chatMessageAccumulator.getId());
data.setCreated(chatMessageAccumulator.getCreated());
data.setRequestId(chatCompletionRequest.getRequestId());
sseModelApiResp.setFlowable(null);
sseModelApiResp.setData(data);
}
return JSON.toJSONString(sseModelApiResp);
}
测试:小学作业批改,「让GLM-4V-Flash批改下这个作业?」。
3、代码测试
运行代码,大家可以看到响应也比较快的,而且描述的非常准确。这里不在过多测试,留给大家自己去调试体验吧!
4、国产之光
目前国内几家自研大模型,都非常强悍,部分大模型在一些领域已经取得行业领先。智谱也凭借自身的优势,大量的研发投入,不断的创新,早已跻身国际顶尖大模型行列。
加上本次智谱开放平台开放的GLM-4V-Flash视觉理解大模型,目前智谱开放的免费大模型已经几乎将我们使用到的场景都囊括了,而免费给大家使用就智谱开放平台不惧同行的底气。
我们可以通过智谱开放平台提供的大模型做一些不同场景的工具,比如:作业批改,伴学助手,商业选址,食品热量计算或者美女鉴宝、看风水,看面相等等,只要是能拍下来的,智谱大模型就能搞你轻松解决。。。
好了,今天就给大家分享到这里。如果你也想在自己的项目中引入智谱开放平台的大模型,可以前往官网,了解更多!智谱AI开放平台