LangChain4j +DeepSeek大模型應用開發——8 Function Calling 函數調用

Function Calling 函數調用也叫 Tools 工具`

入門案例

例如,大語言模型本身并不擅長數學運算。如果應用場景中偶爾會涉及到數學計算,我們可以**為他提供一個 “數學工具”。**當我們提出問題時,大語言模型會判斷是否使用某個工具。

創建工具類

@Tool 注解的方法:

  • 既可以是靜態的,也可以是非靜態的;
  • 可以具有任何可見性(公有、私有等)。
package com.atguigu.java.ai.langchain4j.tools;@Component
public class CalculatorTools {@Tooldouble sum(double a, double b) {   System.out.println("調用加法運算");return a + b;}@Tooldouble squareRoot(double x) {System.out.println("調用平方根運算");return Math.sqrt(x);}
}
配置工具類

SeparateChatAssistant中添加tools屬性配置

@AiService(wiringMode = EXPLICIT,chatModel = "qwenChatModel",chatMemoryProvider = "chatMemoryProvider",tools = "calculatorTools" //配置tools
)
測試工具類

添加了tools屬性后,AI就能自動根據我們寫的函數進行相應計算

package com.atguigu.java.ai.langchain4j;@SpringBootTest
public class ToolsTest {@Autowiredprivate SeparateChatAssistant separateChatAssistant;@Testpublic void testCalculatorTools() {String answer = separateChatAssistant.chat(1, "1+2等于幾,475695037565的平方根是多少?");//答案:3,689706.4865System.out.println(answer);}
}

測試后可以查看持久化存儲中SYSTEM、USER、AI以及Tools的消息,分析tools的調用流程:

Request:
\- messages:\- SystemMessage:\- text: 系統定義AI的角色\- UserMessage:\- text: 用戶提問\- AiMessage:\- toolExecutionRequests:\- ai獲取提問信息組織參數調用工具方法\- ToolExecutionResultMessage:\- text: 工具方法執行Response :
\- AiMessage:\- text: 根據工具方法的執行ai再次組織結果返回

@Tool 可選字段

@Tool 注解有兩個可選字段:

  • name(工具名稱):工具的名稱。如果未提供該字段,方法名會作為工具的名稱。
  • value(工具描述):工具的描述信息。

根據工具的不同,即使沒有任何描述,大語言模型可能也能很好地理解它(例如,add(a, b) 就很直觀),但通常最好提供清晰且有意義的名稱和描述。這樣,大語言模型就能獲得更多信息,以決定是否調用給定的工具以及如何調用。

@P 注解

方法參數可以選擇使用 @P 注解進行標注。

@P 注解有兩個字段:

  • value:參數的描述信息,這是必填字段。
  • required:表示該參數是否為必需項,默認值為 true,此為可選字段。

@ToolMemoryId

如果你的AIService方法中有一個參數使用 @MemoryId 注解,那么你也可以使用 @ToolMemoryId 注解 @Tool標記的 方法中的一個參數。

提供給AIService方法的值將自動傳遞給 @Tool 方法。如果你有多個用戶,或每個用戶有多個聊天記憶,并且希望在 @Tool 方法中對它們進行區分,那么這個功能會很有用。

package com.atguigu.java.ai.langchain4j.tools;public class CalculatorTools {@Tool(name = "加法", value = "返回兩個參數相加之和")double sum(@ToolMemoryId int memoryId,     //AIservice方法的memory將傳遞到工具類里@P(value="加數1", required = true) double a,@P(value="加數2", required = true) double b) {System.out.println("調用加法運算 " + memoryId);return a + b;}@Tool(name = "平方根", value = "返回給定參數的平方根")double squareRoot(@ToolMemoryId int memoryId, double x) {System.out.println("調用平方根運算 " + memoryId);return Math.sqrt(x);}
}

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

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

相關文章

【Prometheus-Mongodb Exporter安裝配置指南,開機自啟】

目錄 內容概述 一、創建MongoDB監控專用用戶二、安裝MongoDB Exporter三、啟動Exporter服務四、配置Systemd服務五、服務管理命令六、Prometheus集成配置七、Grafana看板 內容概述 本教程詳細演示了如何在Linux系統中部署MongoDB Exporter以監控MongoDB數據庫,并將…

在 Ubuntu 上安裝 cPanel

開始之前,請確保擁有一臺 Ubuntu 服務器,推薦使用 Ubuntu 22.04 LTS。如果沒有,可以查看免費服務器: 11個免費 VPS,夠用一輩子了!(2025最新)Top 11 免費VPS推薦平臺對比&#xff08…

【算法基礎】插入排序算法 - JAVA

一、算法基礎 1.1 什么是插入排序 插入排序是一種簡單直觀的排序算法,它的工作原理類似于我們打牌時整理手牌的過程。插入排序的核心思想是將數組分為已排序和未排序兩部分,每次從未排序部分取出一個元素,插入到已排序部分的適當位置。 1.…

WEB前端小練習——記事本

一、登陸頁面 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>記事本登錄注冊</title><link…

[ACTF2020 新生賽]Include [ACTF2020 新生賽]Exec

[ACTF2020 新生賽]Include 因為前端過濾的太多了 所以直接使用 日志包含 搞 包含這個 /var/log/nginx/access.log [ACTF2020 新生賽]Include蟻劍連接 翻看 flag{1ce7a81e-0339-44ef-a398-a7784d3efe37} [ACTF2020 新生賽]Exec [ACTF2020 新生賽]Exec 127.0.0.1 |echo <?…

VFS Global 攜手 SAP 推動數字化轉型

2025年5月2日&#xff0c;SAP 公司宣布&#xff0c;全球領先的簽證、領事和技術服務提供商 VFS Global 將采用 SAP 的多項核心軟件解決方案&#xff0c;推動其全球政務服務和跨境流動解決方案邁向全面數字化和智能化。此次合作標志著 VFS Global 在 AI 賦能的政府科技&#xff…

GTC2025全球流量大會:領馭科技以AI云端之力,助力中國企業出海破浪前行

在全球化與數字化浪潮下&#xff0c;AI技術正成為中國企業出海的重要驅動力。一方面&#xff0c;AI通過語言處理、數據分析等能力顯著提升出海企業的運營效率與市場適應性&#xff0c;尤其在東南亞等新興市場展現出"高性價比場景適配"的競爭優勢&#xff1b;另一方面…

安全漏洞掃描費用受哪些因素影響?市場價格區間是多少?

安全漏洞掃描費用是個復雜且關鍵的話題。它涉及多種影響因素。合理的費用可讓企業有效防范安全風險。下面我們深入探討一番。 市場價格區間 安全漏洞掃描的費用在市場上差別很大。小型企業進行簡單掃描&#xff0c;可能只要幾千元。大型企業做全面的深度掃描&#xff0c;費用…

n8n工作流自動化平臺的實操:解決中文亂碼

解決問題&#xff1a; 通過ftp讀取中文內容的文件&#xff0c;會存在亂碼&#xff0c;如下圖&#xff1a; 解決方案 1.詳見《安裝 iconv-lite》 2.在code節點&#xff0c;寫如下代碼&#xff1a; const iconv require(iconv-lite);const items $input.all(); items.forEa…

豪越科技消防立庫方案:實現應急物資高效管理

在消防救援工作中&#xff0c;應急物資管理是至關重要的一環。然而&#xff0c;當前應急物資管理的現狀卻令人擔憂。傳統的應急物資管理方式存在諸多弊端&#xff0c;嚴重影響了消防救援的效率和效果。 走進一些傳統的消防倉庫&#xff0c;映入眼簾的往往是雜亂無章的存儲場景。…

zabbix 重置登錄密碼

概述 本節介紹在 Zabbix 中重置用戶密碼的步驟。 步驟 如果您忘記了 Zabbix 密碼并且無法登錄&#xff0c;請聯系您的 Zabbix 管理員。 超級管理員用戶可以更改用戶 配置表單 中所有用戶的密碼。 如果超級管理員忘記了密碼并且無法登錄&#xff0c;則必須運行以下 SQL 查詢…

生成樹、Prime、Kruskal

1、任何一個帶權無向連通圖的最小生成樹——可能是不唯一的。 2、給定有權無向圖的鄰接矩陣如下&#xff0c;其最小生成樹的總權重是&#xff1a;14 3、給定有權無向圖如下。關于其最小生成樹&#xff0c;最小生成樹不唯一&#xff0c;其總權重為23。 4、給出如下圖所示的具有…

用Suno V4.5試了一下1850字的歌詞進行創作出來了6分鐘的歌曲

我的寶貝V1,未來AI視界,5分鐘 之前的Suno 3和Suno 4的版本&#xff0c;創作的音樂最長是4分鐘&#xff0c;這里最大的問題就是&#xff0c;唱到4分鐘歌曲就突然斷了&#xff0c;那么只能使用續寫的方式進行創作。對于續寫的問題&#xff0c;其一增加用戶的使用和理解成本&…

機器人編程基礎---C語言中的表達式和求值

C語言中的表達式和求值 C語言中的表達式和求值表達式示例代碼示例說明C語言中的表達式和求值 表達式是運算符和操作數(變量、常量、表達式等)的組合,它們可以產生一個值。 表達式示例 int x = 10, y = 20; int z = x + y * 2; // 根據運算符優先級,先計算y*2,然后計算x…

[UVM]在SoC中用寄存器模型backdoor訪問寄存器的案例

在SoC中用寄存器模型backdoor訪問寄存器的案例 摘要:在 UVM (Universal Verification Methodology) 驗證環境中,寄存器模型是驗證 DUT (Design Under Test) 寄存器行為的重要工具。特別是對于層次化的驗證環境(如 IP 到 Sub-system 再到 SoC 的集成),使用 UVM 寄存…

NV203NV207SSD固態閃存NV208NV213

NV203NV207SSD固態閃存NV208NV213 美光SSD全解析&#xff1a;NV203/NV207/NV208/NV213技術矩陣 一、產品定位與技術脈絡 在存儲技術迭代浪潮中&#xff0c;美光NV系列產品構建起多層次的技術矩陣。NV203作為入門級SATA SSD&#xff0c;主打成本控制與基礎性能平衡&#xff0c…

迭代器的思想和實現細節

1. 迭代器的本質 迭代器是一種行為類似指針的對象&#xff0c;它可能是指針&#xff08;如 std::vector 的迭代器&#xff09;&#xff0c;也可能是封裝了指針的類&#xff08;如 std::list 的迭代器&#xff09;。如果是指針那天然就可以用下面的運算&#xff0c;如果是類&am…

工業傳動核心部件深度剖析:絲桿升降機與氣缸的技術特性及選型指南

在工業自動化技術飛速發展的當下&#xff0c;絲桿升降機與氣缸作為關鍵的直線傳動部件&#xff0c;廣泛應用于各類機械設備中。對于工程師而言&#xff0c;深入了解它們的技術特性、優缺點及適用場景&#xff0c;是實現高效、精準設備設計的重要前提。本文將從技術原理出發&…

HarmonyOS NEXT——DevEco Studio的使用(還沒寫完)

一、IDE環境的搭建 Windows環境 運行環境要求 為保證DevEco Studio正常運行&#xff0c;建議電腦配置滿足如下要求&#xff1a; 操作系統&#xff1a;Windows10 64位、Windows11 64位 內存&#xff1a;16GB及以上 硬盤&#xff1a;100GB及以上 分辨率&#xff1a;1280*8…

Modbus 通訊協議(超詳細,簡單易懂)

目錄 一、協議中的寄存器定義 二、協議概述 三、使用串口的Modbus 報文幀 ?編輯 3.1、Modbus ASCII 模式 3.2、Modbus RTU 模式 3.3、功能碼概要 3.4、Modbus 報文分析 四、什么是RS-485 RS-232&#xff1f; 一、協議中的寄存器定義 閱讀 Modbus 協議時會發現它的概念別扭…