2026年7月2日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

使用Ollama和Phi4mini在边缘设备上构建AI Agent

发布日期:2025-03-13 11:28:43 浏览次数: 2557
作者:数字共生

微信搜一搜,关注“数字共生”

推荐语

探索边缘设备上的AI新突破,Phi-4-mini和Phi-4-multimodal的函数调用能力助力高效AI代理构建。

核心内容:
1. Phi-4-mini和Phi-4-multimodal的函数调用功能介绍
2. 函数调用在AI代理构建中的应用场景和工作原理
3. 利用函数调用实现本地知识能力扩展和任务效率执行提升

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

最新发布的Phi-4-mini和Phi-4-multimodal现已支持函数调用功能。该功能使模型能够连接外部工具和API。通过在边缘设备上部署具有函数调用能力的Phi-4-mini和Phi-4-multimodal,我们可以实现本地知识能力的扩展,并提高其任务执行效率。本文将重点介绍如何利用Phi-4-mini的函数调用能力在边缘设备上构建高效的AI代理。




什么是函数调用

工作原理

首先我们需要了解函数调用的工作原理:

  • 工具集成: 函数调用允许LLM/SLM与外部工具和API交互,例如天气API、数据库或其他服务。

  • 函数定义: 定义LLM/SLM可以调用的函数(工具),指定其名称、参数和预期输出。

  • LLM检测: LLM/SLM分析用户输入并确定是否需要函数调用以及使用哪个函数。

  • JSON输出: LLM/SLM输出包含要调用的函数名称和函数所需参数的JSON对象。

  • 外部执行: 应用程序使用LLM/SLM提供的参数执行函数调用。

  • 返回LLM: 将函数调用的输出返回给LLM/SLM,LLM/SLM可以使用此信息生成对用户的响应。


应用场景

  • 数据检索:将自然语言查询转换为API调用以获取数据(例如,“显示我最近的订单"触发数据库查询)

  • 操作执行:将用户请求转换为特定函数调用(例如,“安排会议"变为日历API调用)

  • 计算任务:通过专用函数处理数学或逻辑运算(例如,计算复利或统计分析)

  • 数据处理:将多个函数调用链接在一起(例如,获取数据 → 解析 → 转换 → 存储)

  • UI/UX集成:根据用户交互触发界面更新(例如,更新地图标记或显示图表)


Phi-4-mini / Phi-4-multimodal的函数调用

Phi-4-mini / Phi-4-multimodal支持单函数和并行函数调用。调用时需要注意:

  • 需要在System中定义Tools以启动单函数或并行函数调用

  • 如果要启动并行函数调用,还需要在System提示中添加’some tools'


单函数调用

tools = [  {    "name": "get_match_result",    "description": "获取比赛结果",    "parameters": {      "match": {        "description": "比赛名称",        "type": "str",        "default": "阿森纳 vs 曼城"      }    }  },]messages = [  {    "role": "system",    "content": "你是一个有用的助手",    "tools": json.dumps(tools), # 使用tools参数将工具传递到系统消息中  },  {    "role": "user",    "content": "今天阿森纳对曼城的比赛结果是什么?"  }]


并行函数调用

AGENT_TOOLS = {  "booking_fight": {    "name""booking_fight",    "description""预订航班",    "parameters": {      "departure": {        "description""出发机场代码",        "type""str",      },      "destination": {        "description""目的地机场代码",        "type""str",      },      "outbound_date": {        "description""出发日期",        "type""str",      },      "return_date": {        "description""返回日期",        "type""str",      }    }  },  "booking_hotel": {    "name""booking_hotel",    "description""预订酒店",    "parameters": {      "query": {        "description""城市名称",        "type""str",      },      "check_in_date": {        "description""入住日期",        "type""str",      },      "check_out_date": {        "description""退房日期",        "type""str",      }    }  },}
SYSTEM_PROMPT = """你是我的旅行助手,可以使用以下工具。"""
messages = [  {    "role""system",    "content": SYSTEM_PROMPT,    "tools": json.dumps(AGENT_TOOLS), # 使用tools参数将工具传递到系统消息中  },  {    "role""user",    "content""""我将于2025年3月21日至2025年3月27日从伦敦到纽约出差,你能帮我预订酒店和机票吗"""  }]


使用Ollama和Phi-4-mini函数调用在边缘设备上创建AI代理

Ollama是一个流行的免费工具,用于本地部署LLM/SLM,可与VS Code的AI工具包结合使用。除了可以部署在PC/笔记本电脑上,还可以部署在IoT、手机、容器等设备上。要在Ollama上使用Phi-4-mini,需要使用Ollama 0.5.13+。Ollama支持不同的量化版本,如下图所示:


使用Ollama,我们可以在边缘部署Phi-4-mini,并在有限的计算能力下实现具有函数调用的AI代理,使生成式AI在边缘设备上得到更有效的应用。


当前问题

一个令人遗憾的体验 - 如果直接使用上述方式尝试调用Ollama,你会发现函数调用不会被触发。在Ollama的GitHub Issue上有相关讨论。你可以进入Issue https://github.com/ollama/ollama/issues/9437。通过修改ModelFile中的Phi-4-mini模板来实现单函数调用,但并行函数调用的调用仍然失败。


解决方案

我们通过对模板进行调整实现了修复。我们根据Phi-4-mini的Chat Template进行了改进,并重新修改了Modelfile。当然,量化模型对结果有很大影响。调整如下:

TEMPLATE """{{- if .Messages }}{{- if or .System .Tools }}<|system|>
{{ if .System }}{{ .System }}{{- end }}In addition to plain text responses, you can chose to call one or more of the provided functions.
Use the following rule to decide when to call a function:  * if the response can be generated from your internal knowledge (e.g., as in the case of queries like "What is the capital of Poland?"), do so  * if you need external information that can be obtained by calling one or more of the provided functions, generate a function calls
If you decide to call functions:  * prefix function calls with functools marker (no closing marker required)  * all function calls should be generated in a single JSON list formatted as functools[{"name": [function name], "arguments": [function arguments as JSON]}, ...]  * follow the provided JSON schema. Do not hallucinate arguments or values. Do to blindly copy values from the provided samples  * respect the argument type formatting. E.g., if the type if number and format is float, write value 7 as 7.0  * make sure you pick the right functions that match the user intent
Available functions as JSON spec:{{- if .Tools }}{{ .Tools }}{{- end }}<|end|>{{- end }}{{- range .Messages }}{{- if ne .Role "system" }}<|{{ .Role }}|>{{- if and .Content (eq .Role "tools") }}
{"result": {{ .Content }}}{{- else if .Content }}
{{ .Content }}{{- else if .ToolCalls }}
functools[{{- range .ToolCalls }}{{ "{" }}"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}{{ "}" }}{{- end }}]{{- end }}<|end|>{{- end }}{{- end }}<|assistant|>
{{ else }}{{- if .System }}<|system|>
{{ .System }}<|end|>{{ end }}{{ if .Prompt }}<|user|>
{{ .Prompt }}<|end|>{{ end }}<|assistant|>
{{ end }}{{ .Response }}{{ if .Response }}<|user|>{{ end }}"""


我们使用不同的量化模型测试了该解决方案。在笔记本电脑环境中,我们建议使用以下模型来启用单/并行函数调用:phi4-mini:3.8b-fp16。注意:你需要将定义的Modelfile与phi4-mini:3.8b-fp16绑定在一起才能使其工作。

请在命令行中执行以下命令:

# 如果还没有下载,请先执行此命令ollama run phi4-mini:3.8b-fp16
# 与调整后的Modelfile绑定ollama create phi4-mini:3.8b-fp16 -f {你的Modelfile路径}


测试Phi-4-mini的单函数调用和并行函数调用。

单函数调用


并行函数调用


以上示例只是一个简单的介绍。随着开发的推进,我们希望找到更简单的方法在边缘设备上应用它,使用函数调用扩展Phi-4-mini / Phi-4-multimodal的应用场景,并在垂直行业中开发更多用例。


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅