Bootstrap

还能这么玩,国产免费大模型全家桶就是强!完全免费...

点击“终码一生”,关注,置顶公众号

每日技术干货,第一时间送达!

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开放平台

;