维基框架 (Wiki Framework) 1.1.0 版本发布 提供多模型AI辅助开发

介绍

多模型AI辅助开发

维基框架1.1.0集成了主流AI引擎的统一接口,支持开发者按需调用不同模型的优势能力:

  • DeepSeek​:专注代码生成与重构,擅长复杂业务逻辑实现

  • ChatGPT​:多模态推理能力,适用于系统架构设计

  • Grok​:实时数据分析,优化生产环境问题诊断

  • DouBao​:中文语义深度理解,提升本土化文档质量

  • Qwen3 ​:强化数学推理,专精财务/统计模块开发,支持在线搜索功能

通过智能路由机制,系统根据代码特征自动选择最佳模型(可手动配置)。开发者可同时使用多个模型协同工作,例如用DeepSeek生成代码,Qwen3验证事务,DouBao编写文档。

使用

运行环境要求

最低JDK版本:17+(1.0.7及更早版本支持Java 8)

统一接口架构

java 复制代码
  public static void main(String[] args) {
    CdkjApplication.run(AiApplication.class, args);
    QwenConfig config = new QwenConfig();
    config.setApiKey("sk-xxxx");
    QwenService chatService = (QwenService) AiUtils.findAiService(config);
    System.out.printf("AI回复" + chatService.chat("你好,请介绍一下你呢。"));

    config.setModel(Qwen.QWEN_VL_MAX_LATEST.getModel());
    QwenService service = AiUtils.findAiService(config, QwenService.class);
    System.out.printf("AI回复" + service.chatVision(List.of("介绍这个图片。"), List.of("https://framewiki.com/logo.png")));
  }

依赖引入

XML 复制代码
<dependency>
  <groupId>com.framewiki</groupId>
  <artifactId>wiki-all</artifactId>
  <version>1.1.0</version>
</dependency>

模块介绍

模块目录

配置读取

java 复制代码
package com.cdkjframework.ai.model.qwen;

import com.cdkjframework.ai.core.impl.BaseAiConfig;
import com.cdkjframework.ai.enums.ModelsName;
import com.cdkjframework.ai.enums.Openai;
import com.cdkjframework.ai.enums.Qwen;
import com.cdkjframework.util.tool.StringUtils;

/**
 * @ProjectName: wiki-framework
 * @Package: com.cdkjframework.ai.model.qwen
 * @ClassName: QwenConfig
 * @Description: java类作用描述
 * @Author: xiaLin
 * @Date: 2025/8/3 9:07
 * @Version: 1.0
 */
public class QwenConfig extends BaseAiConfig {
  /**
   * 构造函数
   */
  public QwenConfig() {
    // API接口地址
    super.setApiUrl("https://dashscope.aliyuncs.com/compatible-mode/v1");
    if (StringUtils.isNullAndSpaceOrEmpty(super.getModel())) {
      super.setModel(Qwen.QWEN_PLUS.getModel());
    }
  }

  /**
   * 构造函数
   *
   * @param apiKey API密钥
   */
  public QwenConfig(String apiKey) {
    this();
    super.setApiKey(apiKey);
  }

  /**
   * 获取模型(厂商)名称
   *
   * @return 返回模型(厂商)名称
   */
  @Override
  public String getModelName() {
    return ModelsName.QWEN.getValue();
  }
}

服务注入

java 复制代码
package com.cdkjframework.ai.model.qwen;

import com.cdkjframework.ai.core.AiConfig;
import com.cdkjframework.ai.core.AiProvider;
import com.cdkjframework.ai.enums.ModelsName;
import com.cdkjframework.ai.model.qwen.impl.QwenServiceImpl;

/**
 * @ProjectName: wiki-framework
 * @Package: com.cdkjframework.ai.model.qwen
 * @ClassName: QwenProvider
 * @Description: java类作用描述
 * @Author: xiaLin
 * @Date: 2025/8/3 9:08
 * @Version: 1.0
 */
public class QwenProvider implements AiProvider {
  /**
   * 获取服务名称
   *
   * @return 返回服务名称
   */
  @Override
  public String getServiceName() {
    return ModelsName.QWEN.getValue();
  }

  /**
   * 创建服务
   *
   * @param config 配置信息
   */
  @Override
  public QwenService create(AiConfig config) {
    return new QwenServiceImpl(config);
  }
}

接口

服务接口

java 复制代码
package com.cdkjframework.ai.model.qwen;

import java.util.List;
import java.util.function.Consumer;

import com.cdkjframework.ai.constant.AiCommon;
import com.cdkjframework.ai.core.AiService;
import com.cdkjframework.ai.core.Message;
import com.cdkjframework.builder.ResponseBuilder;

/**
 * @ProjectName: wiki-framework
 * @Package: com.cdkjframework.ai.model.qwen
 * @ClassName: QwenService
 * @Description: java类作用描述
 * @Author: xiaLin
 * @Date: 2025/8/3 9:08
 * @Version: 1.0
 */
public interface QwenService extends AiService {

  /**
   * 搜索
   */
  String EXTRA_BODY = "extra_body";

  /**
   * 搜索值
   */
  String EXTRA_BODY_VALUE = "{\"enable_search\": True\"}";

  /**
   * 流式参数
   */
  String STREAM_OPTIONS = "stream_options";

  /**
   * 流式参数值
   */
  String STREAM_OPTIONS_VALUE = "{\"include_usage\": True}";

  /**
   * 对话
   * messages 可以由当前对话组成的消息列表,可以设置role,content。详细参考官方文档
   *
   * @param messages 消息列表
   * @return 返回AI回复的消息
   */
  String chatSearch(final List<Message> messages);

  /**
   * 对话-SSE 流式输出
   * messages 可以由当前对话组成的消息列表,可以设置role,content。详细参考官方文档
   *
   * @param messages 消息列表
   * @param callback 流式数据回调函数
   */
  void chatSearch(final List<Message> messages, final Consumer<ResponseBuilder> callback);

  /**
   * 图像理解:模型会依据传入的图片信息以及问题,给出回复。
   *
   * @param prompts 提问
   * @param images 图片列表/或者图片Base64编码图片列表(URI形式)
   * @return AI回答内容
   */
  String chatVision(List<String> prompts, final List<String> images);

  /**
   * 图像理解-SSE流式输出
   *
   * @param prompts   提问
   * @param images   传入的图片列表地址/或者图片Base64编码图片列表(URI形式)
   * @param callback 流式数据回调函数
   */
  void chatVision(List<String> prompts, final List<String> images, final Consumer<ResponseBuilder> callback);

  /**
   * 图像理解:模型会依据传入的图片信息以及问题,给出回复。
   *
   * @param prompts 提问
   * @param videos 视频列表(URI形式)
   * @return AI回答内容
   */
  String chatVideoVision(List<String> prompts, final List<List<String>> videos);

  /**
   * 图像理解-SSE流式输出
   *
   * @param prompts   提问
   * @param videos   视频列表(URI形式)
   * @param callback 流式数据回调函数
   */
  void chatVideoVision(List<String> prompts, final List<List<String>> videos, final Consumer<ResponseBuilder> callback);
}

服务接口实现

java 复制代码
package com.cdkjframework.ai.model.qwen.impl;

import com.cdkjframework.ai.core.AiConfig;
import com.cdkjframework.ai.core.Message;
import com.cdkjframework.ai.core.impl.BaseAiService;
import com.cdkjframework.ai.model.qwen.QwenService;
import com.cdkjframework.builder.ResponseBuilder;
import com.cdkjframework.constant.IntegerConsts;
import com.cdkjframework.util.tool.JsonUtils;
import com.cdkjframework.util.tool.ThreadUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;

import static com.cdkjframework.ai.constant.AiConstant.*;
import static com.cdkjframework.ai.constant.AiConstant.Qwen.*;

/**
 * @ProjectName: wiki-framework
 * @Package: com.cdkjframework.ai.model.qwen.impl
 * @ClassName: QwenServiceImpl
 * @Description: Qwen AI 服务实现类
 * @Author: xiaLin
 * @Date: 2025/8/3 9:08
 * @Version: 1.0
 */
public class QwenServiceImpl extends BaseAiService implements QwenService {

  /**
   * 构造函数
   *
   * @param config AI 服务接口
   */
  public QwenServiceImpl(AiConfig config) {
    super(config);
  }

  /**
   * 对话
   * messages 可以由当前对话组成的消息列表,可以设置role,content。详细参考官方文档
   *
   * @param messages 消息列表
   * @return 返回AI回复的消息
   */
  @Override
  public String chat(List<Message> messages) {
    final String paramJson = buildChatRequestBody(messages, Boolean.FALSE);
    // 发送POST请求
    final StringBuilder response = post(CHAT_ENDPOINT, paramJson);
    // 返回结果
    return response.toString();
  }

  /**
   * 对话-检索增强
   * messages 可以由当前对话组成的消息列表,可以设置role,content。详细参考官方文档
   *
   * @param messages 消息列表
   * @return 返回AI回复的消息
   */
  @Override
  public String chatSearch(List<Message> messages) {
    final String paramJson = buildChatRequestBody(messages, Boolean.TRUE);
    // 发送POST请求
    final StringBuilder response = post(CHAT_ENDPOINT, paramJson);
    // 返回结果
    return response.toString();
  }

  /**
   * 对话-SSE 流式输出
   * messages 可以由当前对话组成的消息列表,可以设置role,content。详细参考官方文档
   *
   * @param messages 消息列表
   * @param callback 流式数据回调函数
   */
  @Override
  public void chat(List<Message> messages, Consumer<ResponseBuilder> callback) {
    Map<String, Object> paramMap = buildChatStreamRequestBody(messages, Boolean.FALSE);
    ThreadUtils.newThread(() -> postStream(CHAT_ENDPOINT, paramMap, callback), QWEN_CHAT_SSE).start();
  }

  /**
   * 对话-SSE 流式输出
   * messages 可以由当前对话组成的消息列表,可以设置role,content。详细参考官方文档
   *
   * @param messages 消息列表
   * @param callback 流式数据回调函数
   */
  @Override
  public void chatSearch(List<Message> messages, Consumer<ResponseBuilder> callback) {
    Map<String, Object> paramMap = buildChatStreamRequestBody(messages, Boolean.TRUE);
    ThreadUtils.newThread(() -> postStream(CHAT_ENDPOINT, paramMap, callback), QWEN_CHAT_SSE).start();
  }

  /**
   * 对话-检索增强
   * messages 可以由当前对话组成的消息列表,可以设置role,content。详细参考官方文档
   *
   * @param prompts 消息列表
   * @return 返回AI回复的消息
   */

  @Override
  public String chatVision(List<String> prompts, List<String> images) {
    // 构建请求体
    String paramJson = buildChatVisionRequestBody(prompts, images);
    return post(CHAT_ENDPOINT, paramJson).toString();
  }

  /**
   * 对话 VISION SSE 流式输出
   * messages 可以由当前对话组成的消息列表,可以设置role,content。详细参考官方文档
   *
   * @param prompts   提词
   * @param images   图片列表
   * @param callback 流式数据回调函数
   */
  @Override
  public void chatVision(List<String> prompts, List<String> images, Consumer<ResponseBuilder> callback) {
    // 构建请求体
    Map<String, Object> paramMap = buildChatVisionStreamRequestBody(prompts, images);
    ThreadUtils.newThread(() -> postStream(CHAT_ENDPOINT, paramMap, callback), QWEN_CHAT_VISION_SSE).start();
  }

  /**
   * 图像理解:模型会依据传入的图片信息以及问题,给出回复。
   *
   * @param prompts 提问
   * @param videos  视频列表(URI形式)
   * @return AI回答内容
   */
  @Override
  public String chatVideoVision(List<String> prompts, List<List<String>> videos) {
    // 构建请求体
    String paramJson = buildChatVideoRequestBody(prompts, videos);
    return post(CHAT_ENDPOINT, paramJson).toString();
  }

  /**
   * 图像理解-SSE流式输出
   *
   * @param prompts  提问
   * @param videos   视频列表(URI形式)
   * @param callback 流式数据回调函数
   */
  @Override
  public void chatVideoVision(List<String> prompts, List<List<String>> videos, Consumer<ResponseBuilder> callback) {
    // 构建请求体
    Map<String, Object> paramMap = buildChatVideoStreamRequestBody(prompts, videos);
    ThreadUtils.newThread(() -> postStream(CHAT_ENDPOINT, paramMap, callback), QWEN_CHAT_VISION_SSE).start();
  }

  /**
   * 构建chat请求体
   *
   * @param messages 消息列表
   * @param search   是否搜索
   * @return 返回消息字符串
   */
  private String buildChatRequestBody(final List<Message> messages, boolean search) {
    final Map<String, Object> paramMap = new HashMap<>();
    buildRequestBody(Boolean.FALSE, search, paramMap, messages);
    // 合并其他参数
    paramMap.putAll(config.getAddConfigMap());

    // JSON 序列化
    return JsonUtils.objectToJsonString(paramMap);
  }

  /**
   * 构建chatVision请求体
   *
   * @param prompts 提词
   * @param images 图片列表
   * @return 请求体字符串
   */
  private String buildChatVisionRequestBody(List<String> prompts, final List<String> images) {
    // 使用JSON工具
    Map<String, Object> paramMap = buildRequestBody(Boolean.FALSE, prompts, images);
    return JsonUtils.objectToJsonString(paramMap);
  }

  /**
   * 构建chatStream请求体
   *
   * @param messages 消息列表
   * @return 返回消息集合
   */
  private Map<String, Object> buildChatStreamRequestBody(final List<Message> messages, boolean search) {
    final Map<String, Object> paramMap = new HashMap<>();
    buildRequestBody(Boolean.TRUE, search, paramMap, messages);
    // 合并其他参数
    paramMap.putAll(config.getAddConfigMap());

    return paramMap;
  }

  /**
   * 构建图片生成请求体
   *
   * @param prompts 描述
   * @param images 图片
   * @return 请求体
   */
  private Map<String, Object> buildChatVisionStreamRequestBody(List<String> prompts, final List<String> images) {
    // 返回参数
    return buildRequestBody(Boolean.TRUE, prompts, images);
  }

  /**
   * 构建视频生成请求体
   *
   * @param prompts 描述
   * @param videos 图片
   * @return 请求体
   */
  private String buildChatVideoRequestBody(List<String> prompts, final List<List<String>> videos) {
    // 使用JSON工具
    Map<String, Object> paramMap = buildVideoRequestBody(Boolean.FALSE, prompts, videos);
    return JsonUtils.objectToJsonString(paramMap);
  }

  /**
   * 构建视频生成请求体
   *
   * @param prompts 描述
   * @param videos 图片
   * @return 请求体
   */
  private Map<String, Object> buildChatVideoStreamRequestBody(List<String> prompts, final List<List<String>> videos) {
    // 返回参数
    return buildVideoRequestBody(Boolean.TRUE, prompts, videos);
  }

  /**
   * 构建请求体
   *
   * @param stream 是否流式
   * @param prompts 提词
   * @param videos 图片列表
   * 
   * @return 请求体集合
   */
  private Map<String, Object> buildVideoRequestBody(boolean stream, List<String> prompts,
      final List<List<String>> videos) {
    // 定义消息结构
    final List<Message> messages = new ArrayList<>();
    final List<Object> content = getVideoObjects(prompts, videos);

    messages.add(new Message(USER, content));

    // 使用JSON工具
    final Map<String, Object> paramMap = new HashMap<>();
    if (stream) {
      paramMap.put(STREAM, Boolean.TRUE);
    }
    paramMap.put(MODEL, config.getModel());
    paramMap.put(MESSAGES, messages);
    // 合并其他参数
    paramMap.putAll(config.getAddConfigMap());
    return paramMap;
  }

  /**
   * 构建请求体
   *
   * @param stream  是否流式
   * @param prompts 提词
   * @param images  图片列表
   * 
   * @return 请求体集合
   */
  private Map<String, Object> buildRequestBody(boolean stream, List<String> prompts, final List<String> images) {
    // 定义消息结构
    final List<Message> messages = new ArrayList<>();
    final List<Object> content = getObjects(prompts, images);

    messages.add(new Message(USER, content));

    // 使用JSON工具
    final Map<String, Object> paramMap = new HashMap<>();
    if (stream) {
      paramMap.put(STREAM, Boolean.TRUE);
    }
    paramMap.put(MODEL, config.getModel());
    paramMap.put(MESSAGES, messages);
    // 合并其他参数
    paramMap.putAll(config.getAddConfigMap());
    return paramMap;
  }

  /**
   * 获取图片内容
   *
   * @param prompts 提词
   * @param videos 图片列表
   * 
   * @return 图片内容
   */
  private static List<Object> getVideoObjects(List<String> prompts, List<List<String>> videos) {
    final List<Object> content = new ArrayList<>(videos.size());
    for (List<String> video : videos) {
      int idx = videos.indexOf(video);
      String prompt = prompts.get(idx);
      // 构建视频内容
      HashMap<String, Object> urlMap = new HashMap<>(IntegerConsts.TWO);
      urlMap.put(TYPE, VIDEO);
      urlMap.put(VIDEO, video);
      content.add(urlMap);

      // 构建文本内容
      final Map<String, String> contentMap = new HashMap<>(IntegerConsts.TWO);
      contentMap.put(TYPE, TEXT);
      contentMap.put(TEXT, prompt);
      content.add(contentMap);
    }
    return content;
  }

  /**
   * 获取视频内容
   *
   * @param prompts 提词
   * @param images  图片列表
   * 
   * @return 图片内容
   */
  private static List<Object> getObjects(List<String> prompts, List<String> images) {
    final List<Object> content = new ArrayList<>(IntegerConsts.ONE);
    for (String img : images) {
      int idx = img.indexOf(img);
      String prompt = prompts.get(idx);

      // 构建图片内容
      HashMap<String, Object> imgUrlMap = new HashMap<>(IntegerConsts.ONE);
      imgUrlMap.put(TYPE, IMAGE_URL);
      HashMap<String, Object> imgMap = new HashMap<>(IntegerConsts.ONE);
      imgMap.put(URL, img);

      imgUrlMap.put(IMAGE_URL, imgMap);
      content.add(imgUrlMap);

      HashMap<String, String> urlMap = new HashMap<>(IntegerConsts.TWO);
      urlMap.put(TYPE, TEXT);
      urlMap.put(TEXT, prompt);

      content.add(urlMap);
    }

    return content;
  }

  /**
   * 构建请求体
   *
   * @param stream   是否流式
   * @param search   是否搜索
   * @param paramMap 参数集合
   * @param messages 聊天消息
   */
  private void buildRequestBody(boolean stream, boolean search, final Map<String, Object> paramMap,
      final List<Message> messages) {
    paramMap.put(MODEL, config.getModel());
    paramMap.put(MESSAGES, messages);
    if (stream) {
      paramMap.put(STREAM, Boolean.TRUE);
      paramMap.put(STREAM_OPTIONS, STREAM_OPTIONS_VALUE);
    }
    if (search) {
      paramMap.put(EXTRA_BODY, EXTRA_BODY_VALUE);
    }
  }

}

AI工厂

java 复制代码
package com.cdkjframework.ai;

import com.cdkjframework.ai.core.AiConfig;
import com.cdkjframework.ai.core.AiProvider;
import com.cdkjframework.ai.core.AiService;
import com.cdkjframework.exceptions.GlobalRuntimeException;

import java.util.Map;
import java.util.ServiceLoader;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 创建 AiFactory 工厂类
 *
 * @ProjectName: wiki-framework
 * @Package: com.cdkjframework.ai
 * @ClassName: AiFactory
 * @Description: 创建 AiFactory 工厂类
 * @Author: xiaLin
 * @Version: 1.0
 */
public class AiFactory {
  /**
   * 创建 AiFactory 工厂类
   */
  private static final Map<String, AiProvider> PROVIDERS = new ConcurrentHashMap<>();

  // 加载所有 AiProvider 实现类
  static {
    final ServiceLoader<AiProvider> loader = ServiceLoader.load(AiProvider.class);
    for (final AiProvider provider : loader) {
      PROVIDERS.put(provider.getServiceName().toLowerCase(), provider);
    }
  }


  /**
   * 获取AI服务
   *
   * @param config AI 配置
   * @return AI服务实例
   */
  public static AiService findAiService(final AiConfig config) {
    return findAiService(config, AiService.class);
  }

  /**
   * 获取AI服务
   *
   * @param config Ai 配置
   * @param clazz  AI服务类
   * @param <T>    AI服务类
   * @return clazz对应的AI服务类实例
   */
  @SuppressWarnings("unchecked")
  public static <T extends AiService> T findAiService(final AiConfig config, final Class<T> clazz) {
    final AiProvider provider = PROVIDERS.get(config.getModelName().toLowerCase());
    if (provider == null) {
      throw new IllegalArgumentException("不支持的模型: " + config.getModelName());
    }

    final AiService service = provider.create(config);
    if (!clazz.isInstance(service)) {
      throw new GlobalRuntimeException("模型服务不属于指定类型: " + clazz.getSimpleName());
    }

    // 返回服务
    return (T) service;
  }
}

AI工具

java 复制代码
package com.cdkjframework.ai;

import com.cdkjframework.ai.core.AiConfig;
import com.cdkjframework.ai.core.AiService;
import com.cdkjframework.ai.core.Message;
import com.cdkjframework.ai.model.deepseek.DeepSeekService;
import com.cdkjframework.ai.model.doubao.DouBaoService;
import com.cdkjframework.ai.model.grok.GrokService;
import com.cdkjframework.ai.model.openai.OpenaiService;
import com.cdkjframework.ai.model.qwen.QwenService;

import java.util.List;

/**
 * AI 工具类
 *
 * @ProjectName: wiki-framework
 * @Package: com.cdkjframework.ai
 * @ClassName: AiUtils
 * @Description: AI 工具类
 * @Author: xiaLin
 * @Version: 1.0
 */
public class AiUtils {


  /**
   * 获取AI模型服务,每个大模型提供的功能会不一样,可以调用此方法指定不同AI服务类,调用不同的功能
   *
   * @param config 创建的AI服务模型的配置
   * @param clazz  AI模型服务类
   * @param <T>    AiService实现类
   * @return 返回 AI 模型服务类 的实现类实例
   */
  public static <T extends AiService> T findAiService(final AiConfig config, final Class<T> clazz) {
    return AiFactory.findAiService(config, clazz);
  }

  /**
   * 获取AI模型服务
   *
   * @param config 创建的AI服务模型的配置
   * @return 返回 AI 服务模型 其中只有公共方法
   */
  public static AiService findAiService(final AiConfig config) {
    return findAiService(config, AiService.class);
  }

  /**
   * 获取DeepSeek模型服务
   *
   * @param config 创建的AI服务模型的配置
   * @return DeepSeekService
   */
  public static DeepSeekService findDeepSeekService(final AiConfig config) {
    return findAiService(config, DeepSeekService.class);
  }

  /**
   * 获取DouBao模型服务
   *
   * @param config 创建的AI服务模型的配置
   * @return DouBaoService
   */
  public static DouBaoService findDouBaoService(final AiConfig config) {
    return findAiService(config, DouBaoService.class);
  }

  /**
   * 获取Grok模型服务
   *
   * @param config 创建的AI服务模型的配置
   * @return GrokService
   */
  public static GrokService findGrokService(final AiConfig config) {
    return findAiService(config, GrokService.class);
  }

  /**
   * 获取Openai模型服务
   *
   * @param config 创建的AI服务模型的配置
   * @return OpenAiService
   */
  public static OpenaiService findOpenAiService(final AiConfig config) {
    return findAiService(config, OpenaiService.class);
  }

  /**
   * 获取Qwen模型服务
   *
   * @param config 创建的AI服务模型的配置
   * @return QwenService
   */
  public static QwenService findQwenService(final AiConfig config) {
    return findAiService(config, QwenService.class);
  }

  /**
   * AI大模型对话功能(公共)
   *
   * @param config 创建的AI服务模型的配置
   * @param prompt 需要对话的内容
   * @return 返回 AI模型返回消息内容
   */
  public static String chat(final AiConfig config, final String prompt) {
    return findAiService(config).chat(prompt);
  }

  /**
   * AI大模型对话功能(公共)
   *
   * @param config   创建的AI服务模型的配置
   * @param messages 由目前为止的对话组成的消息列表,可以设置role,content。详细参考官方文档
   * @return 返回 AI模型返回消息内容
   */
  public static String chat(final AiConfig config, final List<Message> messages) {
    return findAiService(config).chat(messages);
  }
}

总结

以上只是博主自己在实际项目中和参考其它文章总结出来,然后在将其实封成工具分享给大家。

相关源码在:维基框架

Gitee: https://gitee.com/cdkjframework/wiki-framework

Github:https://github.com/cdkjframework/wiki-framework

如果喜欢博主的分享记得给博主点点小星星

相关推荐
johnny2333 分钟前
OCR、文档解析工具合集(下)
人工智能
Moshow郑锴2 小时前
实践题:智能客服机器人设计
人工智能·机器人·智能客服
2501_924889552 小时前
商超高峰客流统计误差↓75%!陌讯多模态融合算法在智慧零售的实战解析
大数据·人工智能·算法·计算机视觉·零售
西猫雷婶3 小时前
神经网络|(十二)概率论基础知识-先验/后验/似然概率基本概念
人工智能·神经网络·机器学习·回归·概率论
居7然5 小时前
大模型微调面试题全解析:从概念到实战
人工智能·微调
haidizym5 小时前
质谱数据分析环节体系整理
大数据·人工智能·数据分析·ai4s
Godspeed Zhao5 小时前
Tesla自动驾驶域控制器产品(AutoPilot HW)的系统化梳理
人工智能·机器学习·自动驾驶
fsnine6 小时前
机器学习案例——预测矿物类型(模型训练)
人工智能·机器学习
数据知道6 小时前
机器翻译60天修炼专栏介绍和目录
人工智能·自然语言处理·机器翻译