empower-functions
基于 Llama3.1 微调的函数调用大模型家族,在 Berkeley BFCL 基准上达到同规模 SOTA,支持本地 GGUF 部署
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 Llama3.1 微调的函数调用大模型家族,在 Berkeley BFCL 基准上达到同规模 SOTA,支持本地 GGUF 部署
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下这样的场景:你对 AI 助手说"帮我查一下北京今天的天气,再看看我下周三有没有会议",AI 不是给你一堆文字,而是直接调用天气 API 查到气温,同时查询你的日历系统,把结果整合成一句自然的回答返回给你。这就是 Function Calling(函数调用)——让大语言模型真正"动手"操控外部工具和 API 的关键技术。
Empower Functions 就是这样一套专注于函数调用能力的开源大模型家族,由 AI 初创公司 Empower 研发,基于 Llama3.1 进行微调,在 Berkeley Function Calling Leaderboard(BFCL)基准测试中取得了同规模最优(SOTA)成绩,v1.1 版本在多个指标上已超越 GPT-4 的函数调用水平。
图1:Empower Functions 官方 Logo
大语言模型擅长理解和生成文字,但本身无法直接执行操作——它不知道明天的天气,不知道你的股票账户余额,也不知道你的待办事项列表。函数调用技术赋予模型"调用工具"的能力,让它可以将自然语言请求转化为结构化的 API 调用。
Berkeley Function Calling Leaderboard(BFCL)是 UC Berkeley 推出的函数调用权威评测基准,涵盖单函数调用、多函数并行调用、多轮对话、复杂依赖链等多种真实场景,被视为评估 Agent 能力的"入场券"。Empower Functions 在 BFCL 上的出色表现,意味着它在以下核心能力上达到了前沿水准:
Empower Functions 的训练分为两个阶段,不同于简单 SFT(监督微调)的"填鸭式"学习,它采用了更精细的方法:
第一阶段:SFT 监督微调,夯实基础
团队收集了超过 10 万条 高质量函数调用对话数据,涵盖:
模型被训练识别特殊的控制 token——<f> 标签表示"接下来我要调用函数",<c> 标签表示"我要正常对话回复"。这种设计让流式输出(streaming)集成变得极为自然:模型先输出 <f> 标签,然后流式输出 JSON 格式的函数调用参数,最后输出 </f> 结束标记。
第二阶段:DPO 偏好优化,纠错提精
Supervise Fine-Tuning 擅长"教正确",但对"纠错误"效率不高。团队引入 DPO(Directly Preference Optimization)来解决 SFT 不擅长的场景,比如:
当函数文档中的参数示例被模型误认为应该直接使用时(如文档写了 examples: [{"location": "北京"}],模型可能直接生成 "location": "北京" 而不是等用户实际指定),DPO 能够有效纠正这类"套用例"的幻觉行为。
1. 自动模式(Auto Mode)
模型自动判断用户意图是应该调用函数还是正常对话。你不需要在 prompt 里写"如果需要查天气就调用工具"——模型自己知道什么时候该动手。
2. 多轮对话(Multi-turn)
支持跨多轮对话的上下文追踪,第一轮的函数调用结果可以影响后续的调用决策。例如:
check_emails()3. 并行调用(Parallel Calling)
一次请求触发多个独立的函数调用,显著降低延迟:
{"tool_calls": [
{"name": "get_weather", "arguments": {"location": "北京"}},
{"name": "get_news", "arguments": {"category": "科技"}}
]}
4. 顺序调用(Sequential Calling)
处理有依赖关系的函数链——A 函数的结果作为 B 函数的输入,模型自动编排执行顺序。
5. 参数澄清(Clarification)
当用户说"帮我订一张去上海的机票"但缺少具体日期时,模型不会随意填一个日期,而是会主动追问:"您计划哪天出发?"
6. 内置思维链(Built-in CoT)
模型在生成函数调用前会先展示推理过程,提高可解释性。
方式一:通过 Empower API(最简)
完全兼容 OpenAI SDK,零代码改造:
from openai import OpenAI
client = OpenAI(
base_url="https://app.empower.dev/api/v1",
api_key="YOUR_API_KEY"
)
response = client.chat.completions.create(
model="empower-functions",
messages=[{"role": "user", "content": "What's the weather in Beijing?"}],
tools=[{"type": "function", "function": {...}}]
)
方式二:本地运行小型模型(免费可跑)
llama3-empower-functions-small(8B 参数)支持 GGUF 量化格式,在 Mac M2 Pro(32GB RAM)上 4bit 量化版只需 7.56GB 内存:
pip install empower-functions
python -m empower_functions.server --model <path-to-gguf> --chat_format empower-functions
方式三:Windows + CUDA 加速
官方提供 Windows 平台 CUDA 支持的详细安装指南,需要 CUDA 12.1 + Visual Studio C++ 工具链,安装 llama-cpp-python 的 CUDA 分支版本即可享受 GPU 加速推理。
图2:Empower Functions v1.1 在 Berkeley Function Calling Leaderboard 上的评测结果(2024年9月),同规模最优
图3:Empower Functions 在医疗中心协调机器人场景中的应用演示
图4:内置思维链(Thinking)模式输出示例,展示模型的推理过程
一个成熟的开源项目不应该回避自己的局限性。Empower Functions 官方文档坦诚列出了当前版本的能力边界:
getWeather(getCurrentLocation()) 这种函数嵌套场景,模型暂不擅长项目采用清晰的模块化设计,核心代码约 700 行 Python(不含依赖库),主要结构:
| 文件 | 职责 |
|---|---|
chat_handler.py | 核心 EmpowerFunctionsCompletionHandler,继承 llama-cpp-python 的 LlamaChatCompletionHandler,处理消息模板和函数调用解析 |
server.py | 基于 llama-cpp-python 的 OpenAI 兼容 API 服务器,支持 --chat_format empower-functions 一键启用 |
prompt.py | Jinja2 模板渲染,处理消息格式化和函数 schema 注入 |
monkey_patch/app.py | 运行时补丁,修复 LlamaProxy 的兼容性问题 |
依赖极简:jinja2(模板渲染)+ llama-cpp-python[server](推理引擎)+ pydantic(数据校验),没有沉重的深度学习框架依赖,安装轻量。
Empower Functions 的出现标志着函数调用能力从"只有 GPT-4 能用"走向"人人可本地运行"。相比闭源 API 的高昂调用成本,8B 版本让中小企业和独立开发者也能以极低成本部署生产级函数调用能力。
结合 OpenAI 兼容接口设计,现有的 LangChain、AutoGen、CrewAI 等 Agent 框架可以零成本迁移到 Empower Functions,降低了 Agent 应用开发的技术和资金门槛。
Empower Functions 是一款专注于函数调用场景的微调大模型家族,基于 Llama3.1 8B/70B,通过 10 万+条高质量数据和两阶段训练(SFT + DPO)实现了同规模 SOTA 的工具调用能力。它以极简的依赖、OpenAI 兼容的接口和完整的本地运行支持,为开发者提供了一个高性价比的函数调用开源方案。如果你正在构建需要调用外部 API 的 AI 应用或 Agent 系统,Empower Functions 是一个值得重点关注和尝试的选择。
项目信息
- GitHub:empower-ai/empower-functions ⭐ 217
- 模型:Llama3.1-8B / Llama3.1-70B(GGUF 量化版可本地运行)
- 许可证:Apache 2.0
- 官网:https://www.empower.dev
- 在线体验:https://app.empower.dev/chat-demo