Spring Ai (Function Calling / Tool Calling) 工具調用

1.工具調用介紹

工具調用是現代大語言模型(LLM)的一項重要能力,允許模型在生成回復時“決定”是否需要調用某個外部函數來獲取信息或執行操作。例如:

  • 聯網搜索 (實現查詢到大模型未學習和RAG知識庫中不存在的數據)
  • 網頁抓取(給大模型一個鏈接地址 讓大模型進行分析網頁)

模型會返回一個結構化的調用請求(如函數名和參數),由框架負責執行該函數并將結果返回給模型,最終生成自然語言回復。

工具調用 是一個能解決大模型非常多能力的方法,使得原先只有對話能力的大模型依靠工具能夠生成 PDF 或者 根據你當前的位置信息進行附近公園 或者 游玩景點進行推薦,有或者聯網搜索

2.工具調用的流程

流程解讀:

  1. 用戶提問?→?應用發送:將用戶問題和可用工具列表一起發送給LLM

  2. LLM分析?→ 判斷是否需要調用工具

  3. 需要工具?→?返回調用?→?執行工具?→?返回結果

  4. LLM生成最終自然語言回答

  5. 返回用戶最終結果

3.編寫工具

3.1 網頁抓取工具

引入Maven坐標 , 這個解析器主要用于把你傳入的鏈接解析成HTML

<!--jsoup HTML 解析庫網頁抓取工具-->
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.19.1</version>
</dependency>

編寫網頁抓取工具代碼

返回值是String 是為了告訴大模型

package com.xiaog.aiapp.tools;import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;/*** 網頁抓取工具*/
public class WebScrapingTool {@Tool(description = "網頁抓取工具,用于抓取網頁內容")public String scrapeWebPage(@ToolParam (description = "要抓取的網頁URL") String url){try {Connection connect = Jsoup.connect(url); //鏈接至url網址Document elements = connect.get();return elements.html();} catch (Exception e) {return "Error 網頁抓取失敗"+e.getMessage() ;}}}

就是這么簡單,那么我們編寫一下測試吧

我傳入的Url是博主自己的主頁

package com.xiaog.aiapp.tools;import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import static org.junit.jupiter.api.Assertions.*;@SpringBootTest
class WebScrapingToolTest {@Testpublic void testScrapeWebPage() throws Exception {WebScrapingTool webScrapingTool=new WebScrapingTool();String result = webScrapingTool.scrapeWebPage("https://blog.csdn.net/typeracer/article/details/140711057");System.out.println( result);}}

返回的結果是博主主頁被解析成為HTML的結構

3.2 聯網搜索工具

通過HTTP遠程調用方式訪問 通曉WebSearch服務

具體文檔地址:

通用搜索-通曉統一接口_信息查詢服務(IQS)-阿里云幫助中心

3.2.1?響應數據結構 - PageItem

package com.xiaog.aiapp.tools.tongxiaoWebSearch;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;// 響應數據結構 - PageItem@Data@JsonIgnoreProperties(ignoreUnknown = true)public class PageItem {//網站標題@JsonProperty("title")private String title;//網站地址@JsonProperty("link")private String link;//網頁發布時間,ISO時間格式//2025-04-27T20:36:04+08:00@JsonProperty("publishedTime")private String publishedTime;@JsonProperty("hostname")private String hostname;@JsonProperty("summary")private String summary;/*** 解析得到的網頁全正文,長度最大3000字符,召回比例超過98%*/@JsonProperty("mainText")private String mainText;/*** 網頁動態摘要,匹配到關鍵字的部分內容,平均長度150字符*/@JsonProperty("snippet")private String snippet;/*** 解析得到的網頁全文markdown格式*/@JsonProperty("markdownText")private String markdownText;@JsonProperty("hostLogo")private String hostLogo;@JsonProperty("rerankScore")private Double rerankScore;@JsonProperty("hostAuthorityScore")private Double hostAuthorityScore;// Getter 方法public String getTitle() { return title; }public String getLink() { return link; }public String getPublishedTime() { return publishedTime; }public String getHostname() { return hostname; }public String getSummary() { return summary; }public String getMainText() { return mainText; }public String getSnippet() { return snippet; }public String getMarkdownText() { return markdownText; }public String getHostLogo() { return hostLogo; }public Double getRerankScore() { return rerankScore; }public Double getHostAuthorityScore() { return hostAuthorityScore; }@Overridepublic String toString() {return "PageItem{" +"title='" + title + '\'' +", link='" + link + '\'' +", publishedTime='" + publishedTime + '\'' +", hostname='" + hostname + '\'' +'}';}}


3.2.2 響應數據結構 - SceneItem (垂直領域的結構)

package com.xiaog.aiapp.tools.tongxiaoWebSearch;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;/*** 垂類場景結果類型*/
// 響應數據結構 - SceneItem@JsonIgnoreProperties(ignoreUnknown = true)public class SceneItem {/*** 垂類場景結果類型(如天氣、時間、日歷等)*/@JsonProperty("type")private String type;/*** 返回的是一個json 類型字符串*/@JsonProperty("detail")private String detail;public String getType() { return type; }public String getDetail() { return detail; }@Overridepublic String toString() {return "SceneItem{" +"type='" + type + '\'' +", detail='" + detail + '\'' +'}';}}

? ? ? ?3.2.3 完整的相應結構類型 - SearchResponse?

package com.xiaog.aiapp.tools.tongxiaoWebSearch;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;import java.util.List;// 完整的響應數據結構@JsonIgnoreProperties(ignoreUnknown = true)public class SearchResponse {@JsonProperty("requestId")private String requestId;@JsonProperty("pageItems")private List<PageItem> pageItems;@JsonProperty("sceneItems")private List<SceneItem> sceneItems;@JsonProperty("searchInformation")//搜索消耗時間private Object searchInformation;@JsonProperty("queryCo ntext")private Object queryContext;@JsonProperty("costCredits")/*** 計算費用*/private Object costCredits;public String getRequestId() { return requestId; }public List<PageItem> getPageItems() { return pageItems; }public List<SceneItem> getSceneItems() { return sceneItems; }public Object getSearchInformation() { return searchInformation; }public Object getQueryContext() { return queryContext; }public Object getCostCredits() { return costCredits; }@Overridepublic String toString() {return "SearchResponse{" +"requestId='" + requestId + '\'' +", pageItems=" + pageItems +", sceneItems=" + sceneItems +'}';}}

3.2.4 完整的請求類型 - SearchRequest?

package com.xiaog.aiapp.tools.tongxiaoWebSearch;import com.fasterxml.jackson.annotation.JsonProperty;// 請求數據結構public class SearchRequest {@JsonProperty("query")/*** 搜索內容*/private String query;@JsonProperty("numResults")/*** 返回條數*/private Integer numResults;public SearchRequest() {}public SearchRequest(String query) {this.query = query;}public SearchRequest(String query, Integer numResults) {this.query = query;this.numResults = numResults;}public String getQuery() { return query; }public void setQuery(String query) { this.query = query; }public Integer getNumResults() { return numResults; }public void setNumResults(Integer numResults) { this.numResults = numResults; }}

3.2.5 通曉客戶端的編寫 - TongXiaoSearchClient?

package com.xiaog.aiapp.tools.tongxiaoWebSearch;import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
import java.time.Duration;import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;public class TongXiaoSearchClient {private static final String API_URL = "https://cloud-iqs.aliyuncs.com/search/llm";private final String apiKey ;;private final HttpClient httpClient;private final ObjectMapper objectMapper;public TongXiaoSearchClient(String apiKey) {this.apiKey=apiKey;this.httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build();this.objectMapper = new ObjectMapper();}/*** 執行搜索請求* @param request 搜索請求對象* @return 搜索響應對象* @throws Exception 如果請求失敗或解析錯誤*/public SearchResponse executeSearch(SearchRequest request) throws Exception {// 將請求對象轉換為JSON字符串String jsonBody;try {jsonBody = objectMapper.writeValueAsString(request);} catch (JsonProcessingException e) {throw new RuntimeException("Failed to serialize request to JSON", e);}// 構建HTTP請求HttpRequest httpRequest = HttpRequest.newBuilder().uri(URI.create(API_URL)).header("Authorization", "Bearer " + apiKey).header("Content-Type", "application/json").POST(BodyPublishers.ofString(jsonBody)).timeout(Duration.ofSeconds(30)).build();// 發送請求并獲取響應HttpResponse<String> response = httpClient.send(httpRequest,HttpResponse.BodyHandlers.ofString());// 檢查HTTP狀態碼if (response.statusCode() != 200) {throw new RuntimeException("HTTP error: " + response.statusCode() + ", body: " + response.body());}// 解析JSON響應try {return objectMapper.readValue(response.body(), SearchResponse.class);} catch (JsonProcessingException e) {throw new RuntimeException("Failed to parse response JSON: " + response.body(), e);}}/*** 簡化搜索方法* @param query 搜索查詢詞* @param numResults 返回結果數量(可選,最大10)* @return 搜索響應對象* @throws Exception 如果請求失敗或解析錯誤*/public SearchResponse search(String query, Integer numResults) throws Exception {SearchRequest request;if (numResults != null) {request = new SearchRequest(query, numResults);} else {request = new SearchRequest(query);}return executeSearch(request);}/*** 最簡單的搜索方法,只使用查詢詞* @param query 搜索查詢詞* @return 搜索響應對象* @throws Exception 如果請求失敗或解析錯誤*/public SearchResponse search(String query) throws Exception {return search(query, 5);}}

3.2.6 將客戶端封裝 成為 - WebSearchTool 工具

package com.xiaog.aiapp.tools.tongxiaoWebSearch;import jakarta.annotation.Resource;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.beans.factory.annotation.Autowired;/*** 給AI提供網頁搜索的功能*/
public class WebSearchTool {String apiKey;public WebSearchTool(String apiKey) {this.apiKey = apiKey;}@Tool(description = "網頁搜索工具,用于互聯網搜索")public String webSearch(@ToolParam(description = "需要搜索的內容") String query){try{TongXiaoSearchClient tongXiaoSearchClient = new TongXiaoSearchClient(apiKey);//進行問題查詢返回前 5條查詢到的信息SearchResponse response = tongXiaoSearchClient.search(query, 5);StringBuilder result = new StringBuilder();// 處理網頁搜索結果if (response.getPageItems() != null && !response.getPageItems().isEmpty()) {result.append("網頁搜索結果數量: ").append(response.getPageItems().size()).append("\n");for (PageItem item : response.getPageItems()) {result.append("標題: ").append(safeToString(item.getTitle())).append("\n");result.append("鏈接: ").append(safeToString(item.getLink())).append("\n");result.append("摘要: ").append(safeToString(item.getSummary())).append("\n");result.append("片段: ").append(safeToString(item.getSnippet())).append("\n");result.append("發布時間: ").append(safeToString(item.getPublishedTime())).append("\n");result.append("重新排名分數: ").append(safeToString(item.getRerankScore())).append("\n");result.append("---\n");}} else {result.append("網頁搜索結果數量: 0\n");}// 處理垂類場景結果if (response.getSceneItems() != null && !response.getSceneItems().isEmpty()) {result.append("垂類場景結果數量: ").append(response.getSceneItems().size()).append("\n");for (SceneItem item : response.getSceneItems()) {result.append("類型: ").append(safeToString(item.getType())).append("\n");result.append("詳情: ").append(safeToString(item.getDetail())).append("\n");result.append("---\n");}} else {result.append("垂類場景結果數量: 0\n");}return result.toString();}catch (Exception e){return "請求 出現 問題 !!"+e.getMessage() ;}}// 輔助方法:防止 null 值導致輸出 "null" 字符串private static String safeToString(Object obj) {return obj == null ? "" : obj.toString();}}

編寫測試(apiKey 更換成為自己的)?

apikey 申請地址 :?信息查詢服務控制臺

package com.xiaog.aiapp.tools.tongxiaoWebSearch;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;import static org.junit.jupiter.api.Assertions.*;@SpringBootTest
class WebSearchToolTest {@Value("${tongxiao.apiKey}")String apiKey;@Testvoid webSearch() {WebSearchTool webSearchTool = new WebSearchTool(apiKey);String result = webSearchTool.webSearch("今天柳州天氣如何呢?");System.out.println(result);}}

測試結果: 聯網搜索成功了

4.將編寫好的工具集中注冊

創建一個集中注冊工具的配置類,別忘記apikey 更換成為自己的

@Configuration
public class ToolRegistration {@Value("${tongxiao.apiKey}")String apiKey;@Beanpublic ToolCallback[] tools() {/*** 網頁搜索工具類(用于互聯網搜索)*/WebSearchTool webSearchTool = new WebSearchTool(apiKey);/*** 網頁抓取工具類(用于抓取網頁內容)*/WebScrapingTool webScrapingTool = new WebScrapingTool();return ToolCallbacks.from( webSearchTool, webScrapingTool);}

編寫一個chatClient

自動注入

  @Component
public class LoveApp {ChatClient chatClient;private static final String SYSTEM_PROMPT = "扮演深耕戀愛心理領域的專家。開場向用戶表明身份,告知用戶可傾訴戀愛難題。" +"圍繞單身、戀愛、已婚三種狀態提問:單身狀態詢問社交圈拓展及追求心儀對象的困擾;" +"戀愛狀態詢問溝通、習慣差異引發的矛盾;已婚狀態詢問家庭責任與親屬關系處理的問題。" +"引導用戶詳述事情經過、對方反應及自身想法,以便給出專屬解決方案。";public LoveApp(ChatModel dashscopeChatModel){// 初始化基于內存的對話記憶ChatMemory chatMemory = new InMemoryChatMemory();//        String basePath = System.getProperty("user.home")+ "/.tmp/chat-memory";
//        System.out.println("basePath:"+basePath);
//        //初始化基于文件的對話記憶
//        ChatMemory chatMemory = new FileBasedChatMemory(basePath);chatClient = ChatClient.builder(dashscopeChatModel) // 創建基于(某個chatModel)大模型的ChatClient.defaultSystem(SYSTEM_PROMPT) // 設置默認系統提示詞.defaultAdvisors(  // 設置默認的Advisornew MessageChatMemoryAdvisor(chatMemory) // 設置基于內存的對話記憶的Advisor
//                        ,new MyLogAdvisor() // 設置日志Advisor
//                        ,new ReReadingAdvisor()).build();//構建返回client}/*** Ai 調用MCP*/@Resourceprivate ToolCallbackProvider toolCallbackProvider; //自動注入已經注冊了的工具public String dochatWhithMCP(String message,String id){ChatResponse chatResponse = chatClient.prompt().user(message).advisors(advisorSpec -> advisorSpec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, id) //根據會話id獲取對話歷史.param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10))//獲取歷史消息的條數.tools(toolCallbackProvider).call().chatResponse();return chatResponse.getResult().getOutput().getText();}
}

5.測試工具是否生效

進行工具測試,編寫測試類

@SpringBootTest
class LoveAppTest {@ResourceLoveApp loveApp;@Testvoid doChatWithTools() {/*** 網頁搜索工具類(用于互聯網搜索)*/testMessage("柳州市的25年 8 月 24日的天氣怎么樣?");/*** 網頁抓取工具類(用于抓取網頁內容)*/testMessage("最近發現了一個博主寫博客很精彩 https://blog.csdn.net/Dajiaonew?type=blog 能不能靠這個網頁和我說一下他寫了什么文章");}private void testMessage(String message) {String chatId = UUID.randomUUID().toString();String answer = loveApp.dochatWhithTools(message, chatId);Assertions.assertNotNull(answer);}}

日志記錄的結果:

這里是我自定義了 advisor 記錄的日志, 如果你看到結果的話 也可以直接進行sout 輸出

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

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

相關文章

LabVIEW 正弦波噪聲濾波

利用 LabVIEW 搭建程序&#xff0c;先合成含噪正弦波&#xff08;正弦信號與高通濾波后的噪聲疊加&#xff09;&#xff0c;再通過低通濾波提取純凈正弦波&#xff0c;實現噪聲去除&#xff0c;常用于信號處理、測試測量場景&#xff0c;驗證濾波算法對正弦信號的降噪效果。?功…

基于django的梧桐山水智慧旅游平臺設計與開發(代碼+數據庫+LW)

摘要 隨著信息技術的飛速發展&#xff0c;旅游行業面臨著用戶需求多樣化、信息獲取不便、服務體驗不佳等問題。傳統的旅游服務多依賴人工管理和線下宣傳&#xff0c;難以高效整合資源與提供個性化服務。為解決這些問題&#xff0c;本文設計開發一個基于Django的梧桐山水智慧旅…

微服務相關面試題

寫在前面 &#x1f525;我把后端Java面試題做了一個匯總&#xff0c;有興趣大家可以看看&#xff01;這里&#x1f449; ??在反復復習面試題時&#xff0c;我發現不同資料的解釋五花八門&#xff0c;容易造成概念混淆。尤其是很多總結性的文章和視頻&#xff0c;要么冗長難…

循環神經網絡——pytorch實現循環神經網絡(RNN、GRU、LSTM)

循環神經網絡——pytorch實現循環神經網絡&#xff08;RNN、GRU、LSTM&#xff09; 本文將深入探討循環神經網絡的理論基礎&#xff0c;并通過PyTorch深度學習框架來展示如何實現循環神經網絡模型。我們將首先介紹循環神經網絡的基本概念。通過PyTorch代碼示例&#xff0c;我們…

系統架構設計師備考第8天——嵌入式系統

一、嵌入式系統概述定義 為特定應用構建的專用計算機系統&#xff0c;軟硬件緊密結合&#xff0c;滿足功能、可靠性、成本、體積、功耗等嚴格要求。核心特征&#xff1a;專用性強、技術融合&#xff08;計算機通信半導體技術&#xff09;、軟硬一體以軟件為主、資源受限、程序固…

HarmonyOS 中的 sharedTransition:實現流暢的頁面過渡動畫

HarmonyOS 中的 sharedTransition&#xff1a;實現流暢的頁面過渡動畫 在移動應用開發中&#xff0c;頁面之間的過渡動畫是提升用戶體驗的關鍵因素之一。HarmonyOS 提供了 sharedTransition 功能&#xff0c;讓開發者能夠輕松實現元素在不同頁面間的平滑過渡效果&#xff0c;創…

【服務器】Apache Superset MCP接入與使用

1. 概述 Apache Superset MCP 集成&#xff08;superset-mcp&#xff09;是一個基于 Model Control Protocol&#xff08;MCP&#xff09;的服務器工具&#xff0c;旨在實現 AI 代理與 Apache Superset 的程序化交互。該項目通過提供標準化的工具接口&#xff0c;使 AI 助手&a…

Postman接口測試:postman設置接口關聯,實現參數化

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快postman設置接口關聯在實際的接口測試中&#xff0c;后一個接口經常需要用到前一個接口返回的結果&#xff0c; 從而讓后一個接口能正常執行&#xff0c;這個過程的…

第一個,QT版本問題:no member named SkipEmptyParts‘in namespace ‘Qt

這是我朋友給我發過來的代碼&#xff0c;但是在我電腦上報錯了&#xff0c;遇到的問題是 Qt 版本兼容導致的編譯錯誤。這是因為我的是5.12版本&#xff0c;他的是6.4版本&#xff0c;Qt::SkipEmptyParts只能在6版本使用&#xff0c;無法在5.12甚至更早的版本使用&#xff0c;具…

【PostgreSQL內核學習:通過 ExprState 提升哈希聚合與子計劃執行效率(二)】

PostgreSQL內核學習&#xff1a;通過 ExprState 提升哈希聚合與子計劃執行效率&#xff08;二&#xff09;引言ExecBuildHash32FromAttrs示例 SQL 查詢函數運行流程與代碼解釋最終 ExprState 結構執行示例總結ExecComputeSlotInfo示例 SQL 查詢函數注釋與解釋作用參數返回值執行…

技術分析 | Parasoft C/C++test如何突破單元測試的隔離難題

單元測試是保證軟件質量的第一道防線&#xff0c;但其推行往往面臨兩大阻力&#xff1a;一是編寫和維護測試用例耗時費力&#xff0c;二是難以與現有項目和團隊習慣無縫集成。Parasoft C/Ctest 通過其強大的圖形化測試創建能力、自動樁函數技術以及卓越的生態集成性&#xff0c…

K8S架構與組件完全解析

目錄 K8S-組件介紹 一、概述 K8S的由來 K8S的功能 K8S解決的問題 K8S的特性 二、K8S架構與組件 K8S架構 K8S組件 master 節點組件 Kube-apiserver Kube-controller-manager Kube-scheduler etcd node節點組件 Kubelet Kube-Proxy Controller Runtime Pod 三…

Jenkins 執行器(Executor)并發數量修改

Jenkins 執行器&#xff08;Executor&#xff09;并發數量修改一、什么是 Jenkins 執行器&#xff08;Executor&#xff09;&#xff1f;二、為什么默認是 2&#xff1f;三、如何修改 Jenkins 執行器數量&#xff1f;1. 進入 Jenkins 管理頁面2. 找到節點配置3. 選擇需要修改的…

vue3使用reactive和ref

<script setup>import { ref } from vueconst count ref(0) console.log(count.value)</script><template></template>ref需要注意&#xff0c;在script腳本區域需要加上.value&#xff0c;然后在template模板區域使用不需要帶.value

(筆記)InputChannel跨進程傳輸機制深度分析

概述 InputChannel是Android輸入系統中負責跨進程事件傳輸的核心組件&#xff0c;它建立了InputDispatcher&#xff08;SystemServer進程&#xff09;與應用程序&#xff08;App進程&#xff09;之間的高效通信通道。本文深入分析InputChannel的實現機制&#xff0c;包括socket…

AI實時故障診斷系統(實時采集信號)

1.摘要 本文設計了一套“基于Labview的旋轉機械信號分析與故障診斷系統&#xff08;可部署AI模型和實時監測設備運行狀態&#xff09;”。首先&#xff0c;LabVIEW 端構建了信號采集與設備狀態實時監測模塊和本地數據故障診斷模塊。該系統實現了“數據采集、數據處理、時頻域特…

【51單片機】【protues仿真】基于51單片機籃球計時計分器數碼管系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、數碼管顯示 1、比賽時間為15&#xff1a;00&#xff0c;甲乙隊比分默認000&#xff0c;通過按鍵修改 3、比賽運行的狀態下&#xff0c;按開始暫停鍵&#xff0c;比賽暫停&#…

[讀論文]Hunyuan 3D 系列

1.0&#xff1a; &#xff08;adaptive clasisfier guidance&#xff0c;input 輸入一個沒cam的branch&#xff1b;提高triplane分辨率&#xff09; 總結&#xff1a; 大規模再train zero123&#xff0c;但角度設置不同&#xff1b;adaptive clasisfier guidance&#xff08;f…

深入理解文本向量嵌入(Vector Embeddings):原理、實踐與應用場景

深入理解文本向量嵌入&#xff08;Vector Embeddings&#xff09;&#xff1a;原理、實踐與應用場景 1. 什么是向量嵌入&#xff1f; 文本向量嵌入&#xff08;Vector Embedding&#xff09;是一種將文本轉化為數值向量的技術&#xff0c;使得字符串之間的關聯性可以通過數值…

微論-神經網絡中記憶的演變

從微突觸到宏認知&#xff1a;論神經網絡中記憶的生成、固化與演化人腦的智能&#xff0c;并非源于單個神經元的孤立活動&#xff0c;而是誕生于由萬億突觸連接所構成的龐大而復雜的網絡動態之中。在這個網絡中&#xff0c;連接權重的強度分布——即強的約束與弱的變數——共同…