?維基框架 (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)

統一接口架構

  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")));}

依賴引入

<dependency><groupId>com.framewiki</groupId><artifactId>wiki-all</artifactId><version>1.1.0</version>
</dependency>

模塊介紹

模塊目錄

配置讀取

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 返回模型(廠商)名稱*/@Overridepublic String getModelName() {return ModelsName.QWEN.getValue();}
}

服務注入

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 返回服務名稱*/@Overridepublic String getServiceName() {return ModelsName.QWEN.getValue();}/*** 創建服務** @param config 配置信息*/@Overridepublic QwenService create(AiConfig config) {return new QwenServiceImpl(config);}
}

接口

服務接口

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);
}

服務接口實現

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回復的消息*/@Overridepublic 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回復的消息*/@Overridepublic 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 流式數據回調函數*/@Overridepublic 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 流式數據回調函數*/@Overridepublic 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回復的消息*/@Overridepublic 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 流式數據回調函數*/@Overridepublic 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回答內容*/@Overridepublic 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 流式數據回調函數*/@Overridepublic 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工廠

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工具

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

如果喜歡博主的分享記得給博主點點小星星

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96852.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LabVIEW調用MATLAB 的分形生成

LabVIEW 調用 MATLAB&#xff0c;可借前者可視化流程與硬件交互優勢&#xff0c;結合后者強數值計算、算法能力&#xff0c;復用成熟算法提速開發&#xff0c;還能靈活改代碼。但需匹配版本、裝運行環境&#xff0c;數據傳遞有性能損耗&#xff0c;腳本出錯需跨軟件調試。?優點…

ubuntu20.04開發ros2,使用docker安裝部署的詳細教程

學習docker的教程&#xff1a;可以直接在菜鳥教程上學習即可階段 0&#xff1a;系統檢查| 內容 | 建議 | |------|------| | 操作系統 | Ubuntu 22.04&#xff08;與 ROS2 Humble 最匹配&#xff09; | | 用戶權限 | 能執行 sudo |&#x1f9e9; 階段 1&#xff1a;在 Ubuntu 上…

SQL Server縮小日志文件.ldf的方法(適用于開發環境)

SQL Server縮小日志文件.ldf的方法&#xff08;適用于開發環境&#xff09; 核心概念&#xff1a;為什么日志文件會變大&#xff1f; 首先&#xff0c;理解原因至關重要。事務日志文件在以下情況下會增長&#xff1a; 大量操作&#xff1a;執行了大批量插入、更新或刪除操作&am…

2.3零基礎玩轉uni-app輪播圖:從入門到精通 (咸蝦米總結)

還在uni-app中的輪播圖組件頭疼嗎&#xff1f;看完這篇&#xff0c;讓你輕松掌握swiper的所有秘密&#xff01;輪播圖的重要性 在現代移動應用開發中&#xff0c;輪播圖&#xff08;Swiper&#xff09;已成為展示焦點內容、廣告推廣和產品展示的首選組件。無論是電商平臺的商品…

FPGA學習筆記——AHT20溫濕度讀取并在串口顯示(IIC協議)

目錄 一、任務 二、分析 1.需要了解的 2.需要用到的模塊 3.流程分析 三、Visio圖 四、代碼 五、實驗現象 一、任務 使用IIC協議通信的AHT20&#xff0c;將溫濕度數據讀取出來&#xff0c;并在串口助手上顯示。 二、分析 1.需要了解的 需要了解IIC協議簡介 也可以看看E…

Pycharm SSH連接

添加遠程服務器文件——>設置——>項目下的Python解釋器——>添加解釋器——>SSH在彈出的彈窗中&#xff0c;輸入遠程的主機、端口和用戶名、一直下一步&#xff0c;得到如下圖所示的結果&#xff1a;選擇Conda 環境&#xff1a;第一步選擇Conda環境&#xff1b;第…

c# 讀取xml文件內的數據

好多大型的項目&#xff0c;把一些固定的參數都存在 xml文件里。創建c# winfom 項目&#xff0c;test_xml創建resources文件夾存放xml文件創建parameters.xml文件<root><test_xml><param name "threshold" value "128"/><param name …

Legion Y7000P IRX9 DriveList

Legion Y7000P IRX9 DriveList 聯想Y7000P驅動列表 驅動列表 intelwlan-TYY5057FK6MQBRF0.exe NVVGA-TYY5057F3M0H9RF0.exe RTKwlan-TYY5077FFSNECRF0.exe audio-TYY5057F4N1JARF0.exe chipset-TYY5037FB10X3RF0.exe hdr-TYY5027FXNF9AWF0.exe intelVGA-TYY5057F5R9J7RF…

編程與數學 02-017 Python 面向對象編程 23課題、測試面向對象的程序

編程與數學 02-017 Python 面向對象編程 23課題、測試面向對象的程序一、單元測試&#xff08;Unit Testing&#xff09;使用 unittest 模塊使用 pytest二、集成測試&#xff08;Integration Testing&#xff09;三、模擬對象&#xff08;Mocking&#xff09;四、測試驅動開發&…

[React]Antd Cascader組件地區選擇

前言表單中添加一個地區選擇功能&#xff0c;要求支持增刪改查功能。Cascader 使用Cascader組件動態加載地區選項。使用 loadData 實現動態加載選項&#xff0c;&#xff08;loadData 與 showSearch 無法一起使用&#xff09;。 這里使用了Form.Item組件。 <Form.Itemlabel{…

深度學習-----《PyTorch神經網絡高效訓練與測試:優化器對比、激活函數優化及實戰技巧》

一、訓練過程并行批量訓練機制一次性輸入64個批次數據&#xff0c;創建64個獨立神經網絡并行訓練。所有網絡共享參數&#xff08;Ω&#xff09;&#xff0c;更新時計算64個批次的平均損失&#xff0c;統一更新全局參數。梯度更新策略使用torch.no_grad()上下文管理器清理反向傳…

Matplotlib 可視化大師系列(五):plt.pie() - 展示組成部分的餅圖

目錄Matplotlib 可視化大師系列博客總覽Matplotlib 可視化大師系列&#xff08;五&#xff09;&#xff1a;plt.pie() - 展示組成部分的餅圖一、 餅圖是什么&#xff1f;何時使用&#xff08;何時避免&#xff09;&#xff1f;二、 函數原型與核心參數三、 從入門到精通&#x…

C++ Core Guidelines 核心理念

引言 C 是一門功能強大但復雜性極高的編程語言。為了幫助開發者更高效、安全地使用現代 C&#xff0c;C 核心指南&#xff08;CppCoreGuidelines&#xff09;應運而生。這份由 C 之父 Bjarne Stroustrup 等人主導的指南&#xff0c;提供了大量關于 C 編碼的規則、最佳實踐和設…

vue3 - 組件間的傳值

組件間傳參 父傳子v-on/props 父組件使用v-on:綁定要傳的參數:parentData"parentData"&#xff1a; <template><div><Child1 :parentData"parentData"></Child1></div> </template> <script setup lang"ts…

Kafka 在 6 大典型用例的落地實踐架構、參數與避坑清單

一、選型速查表場景關鍵目標推薦清單&#xff08;示例&#xff09;消息&#xff08;Messaging&#xff09;解耦、低延遲、可靠投遞acksall、enable.idempotencetrue、retries>0、min.insync.replicas2、合理分區鍵、DLT網站活動追蹤吞吐極高、可回放主題按類型拆分&#xff…

Node.js(1)—— Node.js介紹與入門

前面我們談到一些前端開發的內容&#xff0c;學習了HTML、css和JavaScript&#xff0c;已經掌握了如何編寫一些簡單功能的網頁。但是只屬于前端部分&#xff0c;我們只能在本地打開文件進行瀏覽&#xff0c;不能讓其他人打開我們編寫的網站&#xff1b;這時就需要后端部分上場了…

Python辦公——爬蟲百度翻譯網頁版(自制翻譯小工具——進階更新版)

目錄 專欄導讀 前言 項目概述 功能特點 技術棧 核心架構設計 類結構設計 界面布局設計 核心功能實現 1. 智能語言檢測 2. 異步翻譯處理 3. HTTP請求處理 4. 結果解析與顯示 界面設計亮點 1. 響應式布局 2. 用戶體驗優化 3. 現代化組件 技術難點與解決方案 1. 跨線程UI更新 2. U…

CentOS7 + Docker 部署 Dify 超詳細圖文教程

如今Agent在互聯網上大行其道&#xff0c;網上吵得火熱&#xff0c;各個企業也都想搭建自己的Agent。COZE的開源還有最近新出的JoyAgent也都讓大家躍躍欲試&#xff0c;今天為大家帶來的是Dify的部署方式&#xff0c;相比其他工作流平臺&#xff0c;Dify對于整個Agent制作的流程…

vscode(MSVC)進行c++開發的時,在debug時查看一個eigen數組內部的數值

vscode進行c開發的時&#xff0c;在debug時查看一個eigen數組內部的數值問題描述解決方案拓展其他可視化使用visual studio時的可視化使用別的編譯器的可視化問題描述 使用vscode進行c開發&#xff0c;編譯器是MSVC&#xff0c;在debug的時候想查看一個eigen數組的數值&#x…