今天我们就来给 AI 装上一套工具箱,让它能够从博客园实时获取最新技术文章。 什么是工具调用? 简单来说,工具调用就是让 AI 能够"借用"外部能力。 AI 决定调用工具 → 4. 程序执行工具 → 5. 结果返回给 AI → 6. 完整的调用链路 如果想深入理解工具调用的每一步,看这个时序图就对了: Jsoup(网页抓取)CnblogsArticleToolChatModel(LLM)LangChain4j框架AiCodeHelperService 用户发起请求(步骤 1-4):Test 调用 Service,Service 转发给 LangChain4j 框架 2. AI 分析意图(步骤 5-7):LLM 分析用户问题,决定需要调用 cnblogsSearch 工具 3. 工具执行(步骤 8-17):Tool 用 Jsoup 抓取博客园页面,解析数据 4.
2 专业测试工具 2.1 CSRFTester CSRFTester是一款CSRF漏洞的测试工具。 此工具的测试原理如下:它使用代理抓取浏览器中访问过的连接以及表单等信息,通过在CSRFTester中修改相应的表单等信息,重新提交,相当于一次伪造客户端请求,如果被测试的请求成功被网站服务器接受,则说明存在 当然此款工具也可以被用来进行CSRF攻击。本书介绍的CSRFTester版本为V1.0。 启动CSRFTester,在命令行总显示127.0.0.1:8008被使用,如39所示。 ? 案例4:电子商务登录功能CSRF测试 打开CSRFTester,设置浏览器代理为:127.0.0.1:8008,点击【Start Recording】按键,在浏览器页面输入电子商务登录页面的IP地址,
超出这个数据范围的问题,靠模型自身是无法解答的,得依赖各种外挂工具来增强体验。参考下图: 这一节,我们来学习longchain4j 如何让大模型能利用工具外挂增强自身。 对于新手而言,请再默念一遍:大模型本身并没有调用外部工具的能力,但是理解上下文后,能表达调用工具的意图。 因此,让AI加上工具外挂的思路是: 帮我回答个问题,如果你搞不定,我这里有一堆工具(及工具使用说明书),你可以告诉我,想用哪个工具 根据你选择的工具,我帮你调用它,然后把工具的结果告诉你 有了工具加持后的结果 * 该方法会构造一个包含订单状态查询意图的用户消息,并利用工具调用机制让AI决定是否需要调用订单状态查询工具。 * 如果AI请求调用工具,则执行工具并再次与AI交互以生成最终响应。 59-61行,第2次请求模型时,把工具调用的结果,一并发给模型。
这篇LangChain4j实战就是把桥搭起来——RAG知识库、工具调用、Guardrail护轨、可观测性、SSE流式输出,五个能力一次讲清。点个收藏,我们开始。 三、工具调用ToolCalling:把Java方法变成模型的手ToolCalling(工具调用):让大模型在回答时调用你准备好的Java方法。 你完全不用管调用循环——工具方法的名称和@Tool描述,就是给模型看的说明书,写得越清楚,调用得越准。 有个坑要提前说:模型是自主决定调不调用、调哪个的,所以有副作用的操作(下单、改库、发消息)别直接给@Tool,要么加人工确认,要么在方法里做权限校验。工具即入口,入口即攻击面。 护轨是生产上线的安全底裤,输入输出都要挂,别指望模型自律。五、可观测性:看懂每次调用模型调用本质也是接口调用,该有的日志、指标、链路追踪一样不能少。
继续学习langchain4j,以下是langchain4j 调用MCP的示例: 1、添加pom依赖 1 <dependency> 2 <groupId>dev.langchain4j</groupId > 3 <artifactId>langchain4j-mcp</artifactId> 4 <version>1.1.0-beta7</version> 5 </dependency> 调用MCP /** * 直接获取订单状态信息 * * @param orderId 订单ID,用于查询指定订单的状态 * @return ResponseEntity mcpClient = initSseClient("http://localhost:8070/sse"); // 构建AI助手服务,配置聊天模型和工具提供者 McpToolProvider.builder().mcpClients(mcpClient).build()) .build(); // 调用
整理一些我自己常用的安全工具分享给大家: 信息收集 dnsmap dnstracer nmap zenmap traceroute ncat smbclient smtpscan 流量劫持 tcpdump sslsniff 内网嗅探 dsniff ettercap wireshark 代码审计 RIPS Jetbrains WIFI airodump-ng aircrack airmon reaver 综合类工具 BackTrack 5(这里面几乎集齐了所有安全工具!) tcptraceroute dnsmap Hping2 sqlscan Nikto Nessus Snort ARPWatch W3af sqlmap 反编译 JD 辅助类 fbd 各类弱口令库 社工库 安全后台
Enum4linux是一个用于枚举来自Windows和Samba系统的信息的工具。 工具特性 RID循环(当Windows 2000上的RestrictAnonymous设置为1时) 用户列表(当Windows 2000上的RestrictAnonymous设置为0时) 组成员信息列表 通常自动找到) -n 做一个nmblookup(类似于nbtstat) -v 详细输出,显示正在运行的完整命令(net,rpcclient等) 牛刀小试 常规扫描 enum4linux -v 192.168.123.1 列出用户名 enum4linux -U 192.168.123.1 列出Windows共享,再次您还可以指定用户名和密码-u-p enum4linux -S 192.168.123.1
一、问题描述使用WorkBuddy连接DeepSeekV4系列模型(deepseek-v4-pro/deepseek-v4-flash)时,当AI响应涉及工具调用(tool_calls),WorkBuddy 错误现象对话在第一轮正常,AI正确触发工具调用并返回结果后,后续轮次立即报错错误码:HTTP400BadRequest不涉及工具调用的纯文本对话不受影响旧模型deepseek-chat/deepseek-reasoner WorkBuddy当前行为WorkBuddy在处理多轮工具调用时,未正确保存和回传reasoning_content字段。该字段在第二轮请求时丢失,触发了DeepSeekV4的400校验失败。 三、复现步骤在WorkBuddy中配置自定义模型,API地址指向DeepSeek官方API选择模型ID为deepseek-v4-pro或deepseek-v4-flash发起一段需要工具调用的对话(例如 预计受影响范围:所有通过WorkBuddy使用DeepSeekAPI且涉及工具调用场景的用户。
打造全能编程助手:DeepSeek V4 Agent 开发与工具调用 摘要: Agent(智能体)是大模型应用的高级形态。 本文详解如何利用 DeepSeek V4 的 Function Calling 能力,构建能够自主调用外部工具的编程助手。 强大的 Function Calling 能力使其能够理解工具的功能描述,并在需要时主动调用。 定义工具 Schema 首先,我们需要告诉 DeepSeek V4 有哪些工具可用,以及每个工具的参数格式。 工具调用陷入死循环 现象: Agent 反复调用同一个工具,无法完成任务。 原因: LLM 未能正确理解工具返回的结果。
文章目录 一、手动空安全管理 二、空安全调用操作符 ? 三、let 函数结合空安全调用操作符使用 一、手动空安全管理 Kotlin 语言中 , 变量类型 分为 可空类型 和 非空类型 , 默认状态 下 , 变量是 非空类型 的 , 如果使用 类型? 二、空安全调用操作符 ? 在 Kotlin 语言中 , 调用 可空类型变量 的 成员 时 , 可以使用 " 安全调用操作符 " 也就是 ? 进行调用 , 使用格式如下 : 可空类型变量?. 成员 使用了 安全调用操作符 之后 , 在调用变量成员前 , 会自动进行 空值检查 , 如果该变量为空 , 则会 跳过后面的 成员调用 , 继续执行下一行代码 ; 代码示例 : 在下面的代码中 , 调用 count() } 三、let 函数结合空安全调用操作符使用 如果想要在 变量 原有基础上 , 继续执行其它操作 , 可以使用 let 标准函数 ; 安全调用操作符 经常与 let 标准函数 一起使用
开发者不希望使用碎片化的工具,也不希望获得太多警报或仪表盘。相反,他们需要对安全工具的结果质量有极高的信任。 他们不想要分散的工具,太多的警报或仪表板,他们需要对其安全工具结果的质量有极大的信任,并且需要保持在不断的上下文和流程中以应对需要解决的任务。 多年来,开发者也在进化。 在构建一个真正可行的安全编排平台时,我们有幸进行了大量研究——是的,研发中经常被忽略的那个关键部分——我们想探索商业工具与开源工具的世界,并了解为用户提供什么以提升我们作为一个行业的水平。 瑞士军刀式安全 我们在安全行业已经走过了漫长的道路,左移安全是众所周知的,现在可以使用出色的工具来覆盖现代软件堆栈的许多层面。 这使我们现在可以将安全能力提升到一个新的水平,并为安全世界解锁急需的开发者体验——安全体验。开发者是新的工具决策者,如果我们不优化系统中的人,我们将使我们的安全计划注定失败。
实验证明,基于该方案微调的模型在工具调用准确率上显著超越现有大型模型,为LLM智能体掌握真实世界工具提供了可行路径。 AI工具调用困境 面对1166个真实世界工具,最先进的AI模型正确率不足40%。 当GPT-4o需要在数千个MCP工具中准确选择并调用时,其表现甚至不如专门训练的小模型。 研究团队发现,现有方法仅覆盖不到20个服务器,依赖人工标注且无法动态更新。 即使在更具挑战性的100工具场景中,Qwen3-4B仍保持81.7%的工具准确率,而GPT-4o和Claude-4-Sonnet分别降至72.3%和68.3%。 使用MCP-Flow生成初始函数调用后,Qwen3-4B的任务成功率从10.68%提升至21.36%,实现100%的相对提升。 应用前景与未来方向 该研究通过自动化流程构建了覆盖1,166个服务器、11,536个工具的大规模MCP数据集,将小模型的工具调用准确率提升至99.2%,显著超越GPT-4o等大型模型。
在本文中,我们将了解Snort是什么以及如何配置它。Snort是最流行的IPS(入侵防御系统)和IDS(入侵检测系统)方法之一。
今天看下在实际Feign调用过程中的一些源码细节。 { @GetMapping("/echo/{message}") String echo(@PathVariable("message") String message); } 调用代码 message); } 完整解析 动态代理 这里的echoService此时的类型其实是jdk动态代理,内部有一个字段,就是实现了jdk的InvocationHandler接口: 实际逻辑如下,会根据被调用的 总结 我们把整体的feign调用的脉络梳理了一遍,下篇继续loadbalancer的部分,那里也是有点坑的。 用讲师的话来结个尾:啥也不是,散会!
3、言归正传 废话不多说 继续Simulink的第四篇教程,这次楼主主要介绍函数声明及调用。函数是我们在编程中经常碰到的,它可实现一定的功能设计,也叫做子程序。 由主函数调用其他函数,其他函数也可以互相调用,同一个函数可以被一个或多个函数调用任意多次。 Simulink如何实现如下函数的声明和调用? void Add(void) { z = x + y; } 其实使用Simulink实现如上代码方式有多种,下面楼主主要介绍两种。 及图形函数创建如下模型; 然后进入Model Explorer中创建信号变量等数据并进行如下设置: 配置完成后,即可生成所需代码,如下: 开工第一天简单写了点,主要介绍了使用Simulink如何实现函数定义和调用
背景与挑战使用感受:沙箱是Agent安全运行的生命线。在评估EdgeOneMakers时,我最关心的是沙箱的安全性——它能不能安全地执行用户提供的代码?工具调用链路是否可能被滥用? 注册模型可用工具展开代码语言:PythonAI代码解释defhandler(context):"""注册工具供模型调用模型通过自然语言触发工具,所有操作在沙箱中隔离执行"""return{'system_prompt :模型有时会以错误的顺序调用工具(先在文件不存在时读取文件),导致链路中断。 file_size}bytes),无法直接读取"#3.读取文件content=sandbox.read_file(path)returncontent3.会话沙箱复用导致状态污染问题:同一对话中,前一次工具调用的临时文件影响后一次调用 在Agent工具调用链路中,如何平衡安全限制和功能完备性?你遇到过哪些沙箱安全相关的真实事故?是如何解决的?总结体验:EdgeOneMakers的沙箱设计是我见过最务实的Agent安全方案。
(1)"云冲印"为了后续的服务,会保存用户的密码,这样很不安全。 (2)Google不得不部署密码登录,而我们知道,单纯的密码登录并不安全。 (4)用户只有修改密码,才能收回赋予"云冲印"的权力。但是这样做,会使得其他所有获得用户授权的第三方应用程序全部失效。 (4)User Agent:用户代理,本文中就是指浏览器。 (5)Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。 知道了上面这些名词,就不难理解,OAuth的作用就是让"客户端"安全可控地获取"用户"的授权,与"服务商提供商"进行互动。
8)-1,占用空间是实际长度+4)。 整数 整数就比较简单了,整数有以下几类TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT,分别占用1字节,2字节,3字节,4字节,8字节。 (4*8-1)-1,BIGINT的表示范围是-2(8*8-1) ~ 2(8*8-1)-1。 大部分浮点数无法精确表示,浮点数可以精确表示的也就只有0.5=1/2,0.25=1/4……如果是0.1=1/10这就没有办法精确表示了,为什么呢? 因此我们可以把字段给抽象成一个类,这个类的构造方法必须有2个必选参数,4个默认参数。
Tool Use的本质:让Agent写代码执行操作 先搞清楚一个概念:Tool Use不是"让Agent调用工具",而是"让Agent写代码调用工具"。 Agent不是直接调用工具,而是写Python代码,代码里调用工具。 这样做的好处有三个: 第一,工具定义在代码库,不在上下文。 限制:工具不能做什么 参数:每个参数的详细说明 返回值:返回数据的结构 异常:可能抛出的错误 ▪ 原则4:工具要有安全的默认值 ✅ 正确的设计: from typing import List, Optional 可用工具: {chr(10).join(tool_descriptions)} 使用方法: 1. 思考用户需要什么 2. 决定使用哪个工具 3. 写Python代码调用工具 4. 一句话带走:Tool Use的核心不是"调用工具",而是"写代码调用工具"。安全、标准化、可扩展,是构建多工具Agent的三个关键。 你用过哪些工具调用方案?遇到过哪些坑?评论区聊聊。
map.drawcoastlines() for lon in range(0, 360, 20): for lat in range(-60, 90, 30): map.tissot(lon, lat, 4, 就像调用 basemap 实例一样 checkbounds 如果为True,将检查 xin 和 yin 是否在 xout 和 yout 边界内。 就像调用 basemap 实例一样 checkbounds 如果为True,将检查 xin 和 yin 是否在 xout 和 yout 边界内。