ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何让mlx-community/LFM2.5-8B-A1B-MLX-8bit替你调用工具:Function Calling开发实战教程

如何让mlx-community/LFM2.5-8B-A1B-MLX-8bit替你调用工具:Function Calling开发实战教程 如何让mlx-community/LFM2.5-8B-A1B-MLX-8bit替你调用工具Function Calling开发实战教程【免费下载链接】LFM2.5-8B-A1B-MLX-8bit项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/LFM2.5-8B-A1B-MLX-8bitmlx-community/LFM2.5-8B-A1B-MLX-8bit 是 Liquid AI 的 LFM2.5 系列大模型针对 Apple Silicon 转换的 MLX 8bit 量化版采用 32 专家 MoE 架构总参数量 8.3B、每次推理只激活 1.5B并原生支持 128K 超长上下文。更关键的是它内置了完整的 Function Calling函数调用/工具调用能力。这是一篇零基础的 Function Calling 开发实战教程从环境安装、工具定义到让模型自动替你调用工具并给出最终答案一步步带你写出第一个会干活的本地 AI 助手。Function Calling 是什么为什么大模型需要它普通大模型只会说不会做。你问它北京今天天气怎么样它只能凭训练记忆编一个答案甚至可能胡编乱造。Function Calling也叫工具调用 / Tool Calling解决的就是这个问题模型在回答之前先输出一个结构化的调用指令比如get_weather(city北京)由你的程序去真实执行——查天气 API、查数据库、精确计算、发消息、调用第三方服务——再把真实结果回传给模型让它基于事实组织回答。一句话总结Function Calling 让模型长出双手替你调用工具。它也是当前 AI Agent智能体应用的核心技术底座。常见应用场景️ 天气、新闻、股票等实时信息查询 精确计算、单位换算、汇率转换️ 数据库查询、文件读写、日志分析 调用第三方 API发邮件、订票、搜索 自动化工作流编排与多步任务处理LFM2.5-8B-A1B-MLX-8bit 凭什么适合做工具调用先给结论这个模型既能本地跑又为 Function Calling 做了原生支持是低成本入门的理想选择。特性说明模型架构lfm2_moe混合架构18 层短卷积 6 层 GQA 注意力参数量总计 8.3B / 每次激活仅 1.5B32 专家 Top-4上下文窗口128K 超长上下文量化精度8bit 分组仿射量化group_size64多语言支持中、英、日、韩、法、德、西、葡、阿等Function Calling内置工具调用模板mlx-lm 原生支持两个关键优势跑得快、吃得少MoE 架构让它在总参数 8.3B的同时只激活 1.5B 参数配合 8bit 量化在 Mac 上仅需约 9GB 内存即可加载运行上下文管够128K 上下文意味着你可以把大量工具说明、历史对话、文档资料一起塞进 prompt工具再多也不慌。这些参数都记录在 config.json 中权重分片信息见 model.safetensors.index.json。而 Function Calling 的真正秘密藏在 chat_template.jinja 里——工具列表如何注入、工具调用如何格式化、特殊 token 如何拼接全部由这个模板自动完成我们马上就会用到它。MLX 模型实战第一步一条命令装好 mlx-lm本教程只依赖一个核心库mlx-lm专为 Apple Silicon 打造的 MLX 推理框架安装只需一条命令pip install mlx-lm克隆本项目到本地git clone https://gitcode.com/hf_mirrors/mlx-community/LFM2.5-8B-A1B-MLX-8bit加载模型同样只需两行代码README.md 中给出了官方标准用法from mlx_lm import load, generate model, tokenizer load(LFM2.5-8B-A1B-MLX-8bit) # 本地目录路径⚠️ 注意MLX 框架目前主要支持 Apple SiliconM 系列芯片的 Mac。模型加载约需 9GB 内存建议 16GB 内存以上的机器体验更流畅。工具定义实战用 JSON Schema 描述你的函数模型并不知道你的程序里有哪些函数你需要用JSON Schema把工具说明书喂给它函数名是什么、负责做什么、有哪些参数、每个参数是什么类型。以天气查询为例weather_tool { type: function, function: { name: get_weather, description: 查询指定城市的实时天气, parameters: { type: object, properties: { city: {type: string, description: 城市名称如北京} }, required: [city] } } }划重点description 写得越清楚模型选对工具、填对参数的概率就越高这是决定 Function Calling 成功率的第一个关键因素。参数建议都加上类型和示例值例如如北京。工具列表注入chat template 自动格式化定义好工具后只需在apply_chat_template中传入tools参数tokenizer 就会调用项目自带的 chat_template.jinja自动完成两件事把工具列表以List of tools: [...]的形式注入 system prompt约定工具调用的输出格式由|tool_call_start|[...]|tool_call_end|特殊 token 包裹模板第一行的|tool_list_start|标记则是 mlx-lm 识别本模型支持工具调用的开关。你完全不需要手动拼接这些 promptmessages [{role: user, content: 北京今天天气怎么样}] prompt tokenizer.apply_chat_template( messages, tools[weather_tool], add_generation_promptTrue )工具调用解析与执行让代码真正跑起来生成时传入构造好的 promptmlx-lm 会自动解析|tool_call_start|与|tool_call_end|之间的内容把解析结果挂在response.tool_calls上response generate(model, tokenizer, promptprompt, verboseFalse) tool_calls response.tool_calls # 解析后的工具调用列表拿到调用指令后就轮到你的程序动手了——真实地查天气 API、算数、读文件然后把结果回传给模型。结果回传与多轮循环拿到最终答案工具执行完毕后把结果作为roletool的消息追加进对话再次生成模型就会基于真实数据组织最终回答。如果模型觉得信息还不够它会继续发起下一次工具调用因此我们要用循环来处理这个工具调用 → 执行 → 回传的过程直到模型不再调用工具。完整代码本地天气助手可直接运行把以上步骤串起来就是一个可运行的完整 demo把get_weather里的模拟数据替换成真实天气 API 即可from mlx_lm import load, generate model, tokenizer load(LFM2.5-8B-A1B-MLX-8bit) # 本地目录路径 weather_tool { type: function, function: { name: get_weather, description: 查询指定城市的实时天气, parameters: { type: object, properties: { city: {type: string, description: 城市名称如北京} }, required: [city] } } } def get_weather(city): # 这里可以换成真实天气 API 请求 return {city: city, weather: 晴, temperature: 28} messages [{role: user, content: 北京今天天气怎么样}] prompt tokenizer.apply_chat_template( messages, tools[weather_tool], add_generation_promptTrue ) response generate(model, tokenizer, promptprompt, verboseFalse) tool_calls response.tool_calls while tool_calls: # 多轮工具调用循环 messages.append({role: assistant, tool_calls: tool_calls}) for call in tool_calls: result get_weather(**call.function.arguments) messages.append({role: tool, content: str(result)}) prompt tokenizer.apply_chat_template( messages, tools[weather_tool], add_generation_promptTrue ) response generate(model, tokenizer, promptprompt, verboseFalse) tool_calls response.tool_calls print(response) # 最终回答北京今天晴气温 28°C至此完整的 Function Calling 闭环就打通了模型理解 → 发起工具调用 → 程序执行 → 回传结果 → 模型总结。你的本地模型已经能干活了Function Calling 避坑指南常见问题与调优技巧模型不调用工具怎么办检查是否在apply_chat_template中正确传入了tools参数把工具的 description 写得更具体必要时在参数描述里加示例值在 system prompt 中明确要求如果需要实时信息请调用工具获取。工具参数解析失败参数值必须与 JSON Schema 中声明的类型一致字符串、数字、布尔不要混用本项目模板会自动把参数格式化成namevalue形式一般无需手动干预。一次返回多个工具调用模型支持一次输出多个调用循环中逐个执行、逐条回传即可代码里已兼容。上下文太长、工具列表太复杂128K 上下文虽然很充裕但仍建议只传入本轮任务可能用到的工具精简的 prompt 会带来更快更准的调用。8bit 量化会影响 Function Calling 效果吗基本不会。8bit 精度对工具选择与参数生成完全够用换来的是显著更低的内存占用和更快的推理速度。生成结束标记是什么模型使用|im_end|作为结束符见 tokenizer_config.json采样相关参数在 generation_config.json 中mlx-lm 已自动处理无需手动设置。总结通过这篇 Function Calling 开发实战教程你已经学会了识别适合工具调用的模型特征、用 JSON Schema 定义工具、利用 chat_template.jinja 自动注入工具列表、解析工具调用并回传结果完成多轮循环。这套流程同样适用于其他支持 Function Calling 的 MLX 模型掌握一次处处可用。下一步你可以把天气助手换成你自己的业务工具——比如查询订单、生成报表、控制智能家居。快去让 mlx-community/LFM2.5-8B-A1B-MLX-8bit 替你调用第一个工具吧【免费下载链接】LFM2.5-8B-A1B-MLX-8bit项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/LFM2.5-8B-A1B-MLX-8bit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表