llm-functions
用熟悉的语言写函数,让 AI 获得调用工具「动手做事」的能力
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用熟悉的语言写函数,让 AI 获得调用工具「动手做事」的能力
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:项目维护者 sigoden 的 GitHub 头像
想象这样一个场景:你对 AI 说「帮我查一下北京现在的天气,然后把这个结果发给我同事」。一个只会「动嘴」的 AI 只能回答天气数据;但一个会「动手」的 AI,能够真正执行命令——调用天气 API、抓取数据、自动发送邮件,完成整个工作流。
LLM Functions 正是这样一个框架,它让你用最熟悉的 Bash、JavaScript 或 Python 编写函数,然后把这些函数直接「喂」给大语言模型,让模型获得调用工具的能力。整个过程不需要学习新的编程范式,不需要写复杂的 JSON Schema,只需要写一个带有注释的普通函数——框架会自动从注释中提取参数描述,生成符合 OpenAI Function Calling 规范的 JSON 声明。
这个项目的作者是 sigoden,他还开发了同样广受欢迎的 AIChat(一个支持多模型、集成 MCP 协议的 CLI 对话工具)。LLM Functions 最初就是为了给 AIChat 提供函数调用能力而诞生的,如今已发展成一个独立的、通用的 LLM 工具构建框架。截至 2026 年初,项目获得 757 颗星、134 个 Fork,在 GitHub AI 工具分类下有稳定增长。
LLM Functions 的核心理念是用注释驱动声明生成。以一个 Bash 工具为例:
#!/usr/bin/env bash
set -e
# @describe 获取指定地点的当前天气
# @option --location! 查询的城市,如 "北京" 或 "San Francisco, CA"
main() {
curl -fsSL "https://wttr.in/$(echo "$argc_location" | sed 's/ /+/g')?format=4&M" \
>> "$LLM_OUTPUT"
}
eval "$(argc --argc-eval "$0" "$@")"
只需要在注释中写 @describe 和 @option,框架就会自动解析,生成如下 JSON 声明:
{
"name": "get_current_weather",
"description": "获取指定地点的当前天气",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "查询的城市,如 "北京" 或 "San Francisco, CA""
}
},
"required": ["location"]
}
}
JavaScript 和 Python 工具同理,只需在函数/JSDoc 注释中标注参数说明。这种注释即声明的模式,极大降低了工具开发成本——任何熟悉 Bash/Python/JS 的开发者都可以在几分钟内编写一个新的 LLM 工具。
LLM Functions 随项目附带了 20+ 预置工具,覆盖多个高频场景:
文件系统操作:fs_cat(读取文件)、fs_ls(列出目录)、fs_write(写入文件)、fs_patch(打补丁)、fs_mkdir(创建目录)、fs_rm(删除文件)。这些工具让 AI 能够直接操作本地文件系统,执行复杂的文件处理任务。
代码执行:execute_command.sh(执行任意 Shell 命令)、execute_js_code.js(运行 JavaScript)、execute_py_code.py(运行 Python)、execute_sql_code.sh(执行 SQL 查询)。其中代码执行工具支持将输出写入指定文件,适合 AI 生成代码后的自动化验证。
网络与信息获取:fetch_url_via_curl.sh / fetch_url_via_jina.sh(网页抓取)、web_search_perplexity.sh / web_search_tavily.sh / web_search_aichat.sh(多引擎网页搜索)、search_arxiv.sh(学术论文搜索)、search_wikipedia.sh(维基百科查询)、search_wolframalpha.sh(计算知识引擎)。
通信与通知:send_mail.sh(发送邮件)、send_twilio.sh(发送短信/Twilio)。
系统工具:get_current_time.sh(获取时间)、get_current_weather.sh(天气查询)。
用户可以根据需要选择工具:通过 tools.txt 文件指定加载哪些工具,使用 argc link-web-search 指令灵活切换不同的搜索引擎实现。
在 LLM Functions 的架构中,Agent = Prompt + Tools + Documents(RAG),等价于 OpenAI 的 GPTs。每个 Agent 是一个独立目录,包含:
agents/myagent/
├── index.yaml # Agent 定义(名称、描述、指令、知识库)
├── tools.txt # 共享工具列表
├── tools.sh/js/py # Agent 专属工具
└── functions.json # 自动生成的函数声明(由 argc build 生成)
Agent 的 index.yaml 使用模板变量实现动态上下文注入。例如 {{__cwd__}} 在运行时替换为当前工作目录,{{__now__}} 注入当前时间,{{username}} 来自环境变量。这使得 Agent 能够感知真实的运行环境上下文,而非活在真空里。
项目内置了 5 个 Agent 示例:coder(代码生成与执行)、todo(任务管理)、sql(数据库查询)、json-viewer(JSON 可视化)、demo(演示用)。开发者可以在此基础上快速创建自己的 Agent。
LLM Functions 在 2024-2025 年间逐步完善了对 MCP(Model Context Protocol) 的支持,这是由 Anthropic 主导的 AI 上下文协议标准。MCP 支持包含两个方向:
MCP Server(对外暴露):通过 mcp/server 目录中的 Node.js 服务,将 LLM Functions 的工具和 Agent 以 MCP 协议暴露给外部 AI 客户端。配置方式极为简洁,在 Claude Desktop 或其他 MCP 客户端中加入 JSON 配置即可使用 LLM Functions 提供的全部工具。
MCP Bridge(引入外部):通过 mcp/bridge 目录,让 LLM Functions 能够调用外部 MCP 服务器提供的工具。这打通了 LLM Functions 与更广泛的 MCP 工具生态的连接——用户可以在 LLM Functions 中使用任何兼容 MCP 的外部工具。
这一双向往返的 MCP 架构,使 LLM Functions 成为一个真正的 MCP 原生工具平台,而非仅仅是一个孤立的工具集。
从仓库结构来看,LLM Functions 采用分层模块化设计:
代码质量整体较好:遵循 Unix 工具风格(单工具单职责、管道式组合),错误处理使用 set -e(Bash)、完善的类型标注(Python/JS)。文档质量突出:README 结构清晰,docs/ 目录下有详细的工具编写指南(tool.md,10KB+)、Agent 定义说明(agent.md)和环境变量文档。
需要注意的局限:
LLM Functions 是目前上手最简单、功能最完整的开源 Function Calling 工具框架之一——用你最熟悉的语言写函数,加几行注释,AI 立刻就能调用这些工具来「动手做事」。虽然生态封闭(强依赖 argc 和 AIChat),但其 MCP 双向支持使其正在成为更广泛的 AI 工具生态中的一环。对于希望快速为 AI 助手赋予工具调用能力的开发者,这是一个值得关注的轻量级选择。