一、Tools将LLM能力发挥到无限大
LLM具有庞大知识储备,更神奇的是LLM理解自然语言,可以补充知识,进行多轮对话达到目标。
在调用侧,LLM SDK和Agent 框架都提供了Tools能力,当信息不足时提供"神助攻",不断补充相关信息,直到LLM可以从给定的足够丰富的上下文中归纳出答案。
从某种程度上,LLM可以看做是具有足够知识储备,智商情商均在线的高超转述者。
目前LLM上下文窗口普遍能够到达1M Token,利用各种Tools往上下文中放入所有有关信息。
一百万Token,可以看做一本约30万汉字的书,让LLM做阅读理解解答各种提问。
当前AI开发领域中耳熟能详的技术,如Skills/MCP/ComputerUse等等,都是利用Tools实现的。
可以说能把Tools功能做好,Agent框架就成功了一半。
二、最重要的Tools功能
LangChain框架文档中,罗列出内建的重要Tools:
这些无疑就是最重要的Tools。
前段时间火爆的龙虾OpenClaw,依赖的核心Agent库pi-mono中也定义了最基本的Tools:
export const allTools = {read: readTool, bash: bashTool, edit: editTool, write: writeTool, grep: grepTool, find: findTool,ls: lsTool,};
可以看到,一个Agent框架只要做到:
1. 浏览文件系统,找到文件
2. 读写,编辑文件
3. 执行shell脚本
理论上就可以实现一切功能。
Agent框架通过管道等IPC机制和shell的启动程序通信,就可以获取到想要的信息,也可以发送指令、修改数据等。
三、盘点主流Python Agent框架中附带的Tools
综合LangChain,Ango,CrewAI三款人气高的Agent框架,可以将Tools分为以下几类:
本地目录、文件和格式文档读写
数据库访问,数据处理工具
网站搜索工具
网页浏览和抓取
社交网站内容获取,生产力工具
云数据存储,业务结构化
集成和自动化流
模型和机器学习
前两类可以看做是访问本地资源和数据库。中间四类是通过WebAPI访问网络资源,各自举一个例子:
3. 搜索。比如利用Arxiv API访问各种论文
4. 网页抓取。利用Firecrawl强大引擎抓取网络信息
5. 社交内容。通过Slack API获得讨论组信息
6. 云数据。通过JIRA API获取issue列表
具体的Tools列表较长,罗列在文末。
四、Python Agent框架的Tools实现
上述三个Agent框架,均采用继承父类Tools方式。
LangChain: BaseTool(langchain_core.tools) 定义了超过80个Tools
Agno:Toolkit(agno.tools) 定义了超过140个Tools
CrewAI: BaseTool(crewai.tools) 定义了近80个Tools
访问网络资源方式,有通过Web API直接访问,也有通过python 三方库。
五、Java开发框架中的Tools
这里简单提一下Java开发框架中的Tools实现。
无论是Spring AI还是LangChain4j中,Java的AI开发框架更多的是将精力放在实现完备的Tools能力,框架并未自带众多的各种功能Tools。
如LangChain4j,定义了@Tool注解,应用在方法上。
static classCalculator{ @Tool("Calculates the sum of two numbers") int add(int a, int b) { System.out.println("Called add() with a=" + a + ", b=" + b); return a + b; }}
Spring AI,早期版本通过实现Function来定义Tools。现在的版本也还支持Function定义。
运行时动态解析@Bean,或者利用低层FunctionToolCallback编程实现。
public class WeatherService implements Function<WeatherRequest, WeatherResponse> { public WeatherResponse apply(WeatherRequest request) { return new WeatherResponse(30.0, Unit.C); }}
更推荐的方式,是通过注解@Tool来定义方法。
classDateTimeTools{ @Tool(description = "Get the current date and time in the user's timezone") String getCurrentDateTime() { return LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString(); }}
Spring AI和LangChain4j均实现了Tool Specification定义,可运行时动态解析,包括Tool Callback,JSON Schema,Tool Context,Result Conversion, Return Direct等,通过反射执行@Tool定义的代码内容。
六、总结
Python的Agent框架起步更早,发展的更成熟些,也因为Python语言动态性,可以自由的调用各种库和shell。
而Java的LLM开发框架,需要具备生产级稳定性,自身并不附带众多的集成三方功能,留给社区及客户实现。
附A、LangChain Tools
附B、Ango Tools
agentql
airflow
apify
api
arxiv
aws_lambda
aws_ses
baidusearch
bitbucket
brandfetch
bravesearch
brightdata
browserbase
calcom
calculator
cartesia
clickup
coding
confluence
crawl4ai
csv_toolkit
dalle
daytona
decorator
desi_vocal
discord
docker
docling
duckdb
duckduckgo
e2b
eleven_labs
email
evm
exa
fal
file_generation
file
financial_datasets
firecrawl
function
giphy
github
gitlab
gmail
google/auth
google/bigquery
google/calendar
google/drive
google/gmail
google/maps
google/sheets
google/slides
google_bigquery
googlecalendar
google_drive
google_maps
googlesheets
hackernews
jina
jira
knowledge
linear
linkup
llms_txt
local_file_system
lumalab
mcp_toolbox
mem0
memory
mlx_transcribe
models/azure_openai
models/gemini
models/groq
models/morph
models/nebius
models_labs
moviepy_video
nano_banana
neo4j
newspaper4k
newspaper
notion
openai
openbb
opencv
openweather
oxylabs
pandas
parallel
perplexity
postgres
pubmed
python
reasoning
reddit
redshift
replicate
resend
salesforce
scheduler
scrapegraph
searxng
seltz
serpapi
serper
shell
shopify
slack
sleep
spider
spotify
sql
streamlit
tavily
telegram
todoist
toolkit
tool_registry
trafilatura
trello
twilio
unsplash
user_control_flow
user_feedback
valyu
visualization
webbrowser
webex
websearch
website
webtools
whatsapp
wikipedia
workflow
workspace
x
yfinance
youtube
zendesk
zep
zoom
附C、CrewAI Tools
ai_mind
apify_actors
arxiv_paper
brave_search
brightdata
browserbase_load
code_docs_search
composio
contextualai_create_agent
contextualai_parse
contextualai_query
contextualai_rerank
couchbase
crewai_platforms
csv_search
dalle
databricks_query
daytona_sandbox
directory_read
directory_search
docx_search
e2b_sandbox
exas
file_read
files_compressor
file_writer
firecrawl_crawl_website
firecrawl_scrape_website
firecrawl_search
generate_crewai_automation
github_search
hyperbrowser_load
invoke_crewai_automation
jina_scrape_website
json_search
linkup
llamaindex
mdx_search
merge_agent_handler
mongodb_vector_search
multion
mysql_search
nl2sql
ocr
oxylabs_amazon_product_scraper
oxylabs_amazon_search_scraper
oxylabs_google_search_scraper
oxylabs_universal_scraper
parallels
patronus_eval
pdf_search
qdrant_vector_search
rag
scrape_element_from_website
scrapegraph_scrape
scrape_website
scrapfly_scrape_website
selenium_scraping
serpapi
serper_dev
serper_scrape_website
serply_api
singlestore_search
snowflake_search
spider
stagehand
tavily_extractor
tavily_get_research
tavily_research
tavily_search
txt_search
vision
weaviate
website_search
xml_search
youtube_channel_search
youtube_video_search
zapier_action