0%

随着 AI Agent 连接的服务增多(Slack、GitHub、Jira、MCP 服务器等),工具库迅速膨胀。一个典型的多服务器设置很容易拥有 50+ 工具,在对话开始之前就消耗 55,000+ Token。当模型面对 30+ 名称相似的工具时,工具选择准确性也会下降。

工具搜索工具模式通过按需工具发现解决这个问题:

Spring AI 在2.0版本提供了该机制,可用于实现Tool的渐进加载,更好的为agent服务

  1. 模型初始只收到一个搜索工具 — 最小化 Token 使用
  2. 当需要某种能力时,模型用自然语言查询调用搜索工具
  3. 匹配的工具定义被动态展开到上下文中
  4. 模型随后可以正常调用被发现的工具

这实现了显著的 Token 节省,同时保持对大型工具目录的访问。

Read more »

工具调用概述

工具调用(Tool Calling,也称为 函数调用 Function Calling)是 AI 应用中的一种常见模式,允许模型与一组 API 或”工具”交互,从而扩展模型的能力。

工具主要用于以下场景:

  • 信息检索(Information Retrieval):此类工具用于从外部源(如数据库、Web 服务、文件系统或搜索引擎)检索信息,目的是增强模型的知识,使其能回答原本无法回答的问题,比如适用于 检索增强生成(RAG) 场景。工具的使用例子有“获取某地的当前天气”、“检索最新新闻文章”、“查询数据库中的特定记录”等等
  • 执行操作(Taking Action):此类工具可在软件系统中执行操作,如发送邮件、在数据库中创建记录、提交表单或触发工作流,旨在自动化原需人工干预或显式编程的任务。比如“为聊天机器人用户预订航班”、“填写网页表单”、“在代码生成场景中依据自动化测试实现 Java 类(TDD)”

虽然通常称”工具调用”是模型的能力,但实际上由客户端应用程序提供工具调用逻辑。模型只能请求调用工具并提供输入参数,应用程序负责执行工具并返回结果。模型永远不会直接接触被注册为工具的 API。

Read more »

这篇文章我我们来探讨一下分布式ID常用的几种生成策略思想。

UUID

UUID(Universally Unique Identifier)的标准形式包含32个16进制数字,以短划线(-)分为五段,形式为8-4-4-4-12的36个字符,示例:

1
123e4567-e89b-12d3-a456-426655440000
Read more »

一个合适的应用架构不仅能促使项目朝着好的方向发展,易于维护,也能指导团队成员有效协作。

DDD是站在领域的角度来驱动应用架构的落地,接下来将介绍一种落地方案。

Read more »

战略设计

战略设计是将“混沌”解构成“清晰”的过程,在该过程从开始到结束的历程之中,我们会划分出领域、界定通用语言范围、确定出系统限界上下文以及上下文之间的映射方式。

Read more »

SVG 介绍

以下信息摘自 维基百科

可缩放矢量图形(英语:Scalable Vector Graphics,缩写:SVG)是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG由W3C制定,是一个开放标准。

SVG允许3种图形对象类型:矢量图形、栅格图像以及文本。图形对象(包括PNG、JPEG这些栅格图像)能够被编组、设计、转换及集成进先前的渲染对象中。文本可以在任何适用于应用程序的XML名字空间之内,从而提高SVG图形的搜索能力和无障碍性。SVG提供的功能集涵盖了嵌套转换、裁剪路径、Alpha通道、滤镜效果、模板对象以及可扩展性。SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。

Read more »

ReentrantLock简介

ReentrantLock是可重入锁的实现,可重入锁的含义是:如果已经拥有锁的线程再次获取锁时会立即响应成功,这点可以使用isHeldByCurrentThreadgetHoldCount方法来检验。ReentrantLock可重入互斥锁具有同synchronized的隐式监视器锁相同的基本行为和语义,但是其更具有扩展能力。

ReentrantLock提供公平锁和非公平锁的特性,如果设置为公平锁,那么锁倾向于访问等待时间最长的线程;如果是非公平锁,那便不会保证任何特定的访问顺序。公平锁会导致整体的吞吐量降低,不过却可以在最少的时间差内获取到锁和保证锁饥饿。不过请注意,锁是公平并不能保证线程调度的公平性。

Read more »

AQS简介

AQS(AbstractQueuedSynchronizer)是一个模板类,其提供一个先进先出(FIFO)的等待队列,旨在为大多数依赖单个原子int值表示状态的同步器提供有用的基础。

AQS类支持默认的排他锁和共享锁之一或两者。在排他锁模式下获取时,其他线程尝试获取是不会成功的,共享模式由多个线程获取可能会(但不一定)成功。AQS类不会“理解”这些区别,只是锁意义上说,当成功获取共享模式时,下一个等待线程(如果存在)也必须确定它是否也能够获取。在不同模式下等待的线程共享相同的FIFO队列。

Read more »