Phi-3-mini-128k-instruct构建技能智能体(Skill-Agent)框架探索

Phi-3-mini-128k-instruct构建技能智能体(Skill-Agent)框架探索最近在尝试用一些轻量级的模型来搭建智能体系统 发现微软开源的 Phi 3 mini 128k instruct 是个挺有意思的选择 它体积小 推理速度快 而且指令跟随能力不错 特别适合用来做那种能理解你意图 然后调用各种工具帮你干活的 技能智能体 简单来说 我想做的就是一个框架

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



最近在尝试用一些轻量级的模型来搭建智能体系统,发现微软开源的Phi-3-mini-128k-instruct是个挺有意思的选择。它体积小,推理速度快,而且指令跟随能力不错,特别适合用来做那种能理解你意图、然后调用各种工具帮你干活的“技能智能体”。

简单来说,我想做的就是一个框架:你告诉它“帮我查一下北京的天气,然后换算成华氏度是多少”,它就能自己分析这句话,先调用天气查询工具,拿到结果后再调用汇率换算工具,最后把整理好的信息回复给你。整个过程完全自动化,不需要你手动去操作不同的应用。今天就来聊聊怎么用Phi-3-mini来实现这个想法,从设计思路到代码实现,一步步拆开看。

首先得说说为什么选它。现在大模型很多,但很多动辄几十上百GB,部署和推理成本都高。Phi-3-mini-128k-instruct是个“小个子”,参数量不大,但它在设计上针对指令理解和遵循做了优化,上下文长度支持128K,这意味着它能处理很长的对话和复杂的任务描述。

对于技能智能体来说,核心需求就几点:准确理解用户意图能规划任务步骤知道什么时候该调用什么工具。Phi-3-mini在这几方面的基础能力是够用的。它的响应速度快,本地部署门槛低,非常适合作为智能体的“大脑”,负责最核心的推理和决策工作。

你可以把它想象成一个聪明的调度员。用户抛过来一个复杂请求,这个调度员要自己琢磨:“他到底要什么?我得先干什么,再干什么?我手头有哪些工具能用?” Phi-3-mini就扮演这个调度员的角色。

一个完整的技能智能体框架,通常包含几个关键部分。我设计的这个框架结构比较清晰,主要分三层。

2.1 核心推理层:智能体的“大脑”

这一层就是Phi-3-mini模型本身。它的任务是进行自然语言理解、任务分解和规划。当用户输入一句话后,模型需要解析出用户的意图相关参数。比如用户说“上海明天天气怎么样?”,意图是“查询天气”,参数是{“地点”: “上海”, “时间”: “明天”}。

更复杂一点的任务,比如“查完北京天气后告诉我用美元买100人民币需要多少美金”,模型需要能识别出这里面包含两个子任务:1. 查询天气;2. 货币换算。并且知道这两个任务有先后顺序。这就是任务规划能力。

2.2 工具调用层:智能体的“双手”

大脑想清楚了要做什么,就得靠手来执行。工具调用层就是智能体的“双手”,它由一系列预定义的、可执行的函数组成。每个工具都有明确的用途、输入参数和输出格式。

在我们的框架里,每个工具都用一个标准的格式来描述,方便模型理解。比如天气查询工具,我们会告诉模型:“这是一个天气查询工具,功能是获取指定城市的天气信息。你需要提供‘city’这个参数。” 模型在决定调用这个工具时,就必须生成符合要求的参数。

2.3 执行与协调层:智能体的“工作流”

这是把大脑的决策和手的动作串联起来的部分。它负责管理整个对话状态,记录已经执行了哪些步骤,还有哪些步骤待办。当模型决定调用一个工具时,协调层就找到对应的函数,传入参数执行,然后把执行结果返回给模型,让模型根据结果决定下一步是继续调用工具,还是直接给用户最终答复。

这个层还处理错误。比如工具调用失败了,或者返回的结果模型看不懂,协调层需要能捕获这些异常,并决定是重试、换种方式,还是向用户求助。

理论说完了,我们来看看具体怎么实现。我会用一个简单的例子,包含两个工具:天气查询和货币换算。

3.1 第一步:定义你的工具库

工具是智能体能力的扩展。我们先定义两个简单的工具函数,并给它们配上清晰的描述。

# 工具函数实现 def get_weather(city: str) -> str: """ 模拟查询天气的函数。 在实际应用中,这里会调用真实的天气API。 """ # 模拟数据 weather_data = { "北京": "晴,15-25°C,微风", "上海": "多云,18-28°C,东南风3级", "深圳": "阵雨,22-30°C,南风2级", } return weather_data.get(city, f"未找到{city}的天气信息") def currency_convert(amount: float, from_curr: str = "CNY", to_curr: str = "USD") -> str: """ 模拟货币换算的函数。 这里使用一个固定的模拟汇率。 """ # 模拟汇率 (仅用于演示) rates = {"CNY_TO_USD": 0.14, "USD_TO_CNY": 7.2} if from_curr == "CNY" and to_curr == "USD": converted = amount * rates["CNY_TO_USD"] return f"{amount} 人民币 ≈ {converted:.2f} 美元" elif from_curr == "USD" and to_curr == "CNY": converted = amount * rates["USD_TO_CNY"] return f"{amount} 美元 ≈ {converted:.2f} 人民币" else: return f"暂不支持 {from_curr} 到 {to_curr} 的换算" # 工具描述列表,用于提供给模型 tools_description = [ }, "required": ["city"] } }, { "name": "currency_convert", "description": "进行货币之间的换算。", "parameters": { "type": "object", "properties": { "amount": {"type": "number", "description": "需要换算的金额数量"}, "from_curr": {"type": "string", "description": "原始货币代码,默认是CNY(人民币)"}, "to_curr": {"type": "string", "description": "目标货币代码,默认是USD(美元)"} }, "required": ["amount"] } } ] 

这里的关键是tools_description。我们用结构化的方式,把每个工具的名字、功能、需要什么参数,都清晰地定义出来。后面要把这个描述“教”给Phi-3-mini模型。

3.2 第二步:构建智能体核心逻辑

接下来是核心部分,也就是让Phi-3-mini模型学会使用这些工具。我们需要精心设计给模型的提示词(Prompt),引导它按照我们的期望去思考和行动。

GPT plus 代充 只需 145# 构建系统提示词,用于引导模型行为 def build_system_prompt(tools_desc): """ 构建系统提示词,定义智能体的角色和能力。 """ tools_text = " ".join([f"- {t['name']}: {t['description']} 参数: {t['parameters']}" for t in tools_desc]) prompt = f"""你是一个技能智能体,可以调用工具来帮助用户解决问题。 你可以使用的工具如下: {tools_text} 请遵循以下步骤响应用户: 1. 理解用户的请求。 2. 判断是否需要调用工具,以及调用哪个工具。 3. 如果需要调用工具,请以严格的JSON格式回复,只包含以下字段: {{ "thought": "你的思考过程,解释为什么调用这个工具", "tool": "工具名称", "parameters": {{}} // 具体的参数键值对 }} 4. 如果不需要调用工具,或者工具调用结果已足够回答用户,请直接给出自然语言的最终答复。 记住,一次只调用一个工具。我会把工具执行的结果返回给你,然后你继续下一步。 现在开始,用户的第一条请求是:""" return prompt # 模拟与模型的交互 def simulate_agent_response(user_query, conversation_history, tools_desc): """ 模拟智能体的一轮推理过程。 在实际中,这里会调用Phi-3-mini模型的推理API。 """ # 这里是模拟逻辑。真实情况下,会将构建好的prompt发送给模型。 print(f" 用户: {user_query}") # 模拟模型根据用户输入和工具描述进行推理 if "天气" in user_query: # 模拟模型决定调用天气工具 city = "北京" # 简单模拟参数提取 if "上海" in user_query: city = "上海" elif "深圳" in user_query: city = "深圳" response = { "thought": f"用户想查询天气。从请求中提取到城市参数是'{city}'。", "tool": "get_weather", "parameters": {"city": city} } print(f"智能体决策: {response}") return response elif "换算" in user_query or "人民币" in user_query or "美元" in user_query: # 模拟模型决定调用货币换算工具 amount = 100 # 简单模拟参数提取 response = { "thought": "用户需要进行货币换算。", "tool": "currency_convert", "parameters": {"amount": amount, "from_curr": "CNY", "to_curr": "USD"} } print(f"智能体决策: {response}") return response else: # 模拟模型认为无需调用工具,直接回答 final_answer = "我目前可以帮你查询天气或进行货币换算。请告诉我具体需求。" print(f"智能体直接回复: {final_answer}") return final_answer 

这个simulate_agent_response函数模拟了模型的核心推理过程。在实际部署Phi-3-mini时,你需要将构建好的提示词(包含对话历史、工具描述和用户最新问题)发送给模型,并解析它的输出。模型的输出应该是一个结构化的决策(比如调用哪个工具),或者直接是最终答案。

3.3 第三步:创建主循环与协调器

最后,我们需要一个主循环来驱动整个对话流程,协调用户输入、模型推理和工具执行。

# 主程序:技能智能体工作流 def skill_agent_demo(): """ 演示技能智能体的完整工作流程。 """ print("=== 技能智能体演示开始 ===") # 初始化 available_tools = conversation_history = [] system_prompt = build_system_prompt(tools_description) # 模拟多轮对话 user_queries = [ "今天北京天气怎么样?", "那用100人民币能换多少美元?" ] for query in user_queries: # 1. 智能体推理 agent_decision = simulate_agent_response(query, conversation_history, tools_description) # 2. 判断决策类型并执行 if isinstance(agent_decision, dict) and "tool" in agent_decision: # 决策是调用工具 tool_name = agent_decision["tool"] tool_params = agent_decision["parameters"] if tool_name in available_tools: print(f"执行工具: {tool_name}, 参数: {tool_params}") # 实际调用工具函数 tool_result = available_tools[tool_name](tool_params) print(f"工具结果: {tool_result}") # 将结果加入历史,模拟下一轮模型推理 conversation_history.append({ "user": query, "agent_thought": agent_decision["thought"], "tool_result": tool_result }) # 这里模拟模型根据工具结果生成最终回复 print(f"智能体最终回复: 根据查询,结果是:{tool_result}") else: print(f"错误: 未知工具 {tool_name}") else: # 决策是直接回复 print(f"智能体回复: {agent_decision}") conversation_history.append({"user": query, "agent_response": agent_decision}) print("-" * 40) if __name__ == "__main__": skill_agent_demo() 

运行这个演示,你会看到智能体如何一步步处理用户请求。对于“今天北京天气怎么样?”,它会决定调用get_weather工具,并提取出“北京”作为参数。拿到天气结果后,在我们的模拟中,它直接给出了回复。在更复杂的多步任务中,这个循环会持续进行,直到模型认为任务完成为止。

上面的例子是个最简单的骨架。要让智能体真正好用,还得考虑一些优化。

第一,提升意图识别和参数提取的准确性。 我们之前的模拟是简单的关键词匹配,这在实际中远远不够。Phi-3-mini模型本身具备较强的语言理解能力,我们需要通过高质量的提示词工程,引导它准确地从用户自然语言中提取结构化信息。比如,用户可以问“我想知道纽约的天气”,模型需要能正确映射“纽约”到city参数,尽管我们的工具描述里可能写的是中文城市例子。

第二,处理复杂任务规划。 用户可能会说:“帮我查一下北京和上海的天气,然后告诉我哪里更暖和。” 这涉及并行或条件判断的任务规划。我们需要在提示词中教会模型这种能力,或者设计更复杂的协调逻辑,让模型能生成一个步骤列表,而不仅仅是下一步动作。

第三,工具描述的优化。 工具描述的质量直接决定模型能否正确调用。描述要清晰、无歧义,最好能包含一些调用示例。对于参数复杂的工具,可以考虑让模型以对话的方式澄清缺失的参数,比如用户说“换算点钱”,模型可以反问:“请问您想换算多少金额?是什么货币换算成什么货币?”

第四,错误处理与鲁棒性。 工具可能会调用失败(比如网络问题),返回的结果模型可能无法理解。框架里需要有一套机制来处理这些异常,比如重试、回退到备用方案、或者坦诚地告诉用户“某个服务暂时不可用,您可以稍后再试”。

这种基于轻量级模型构建的技能智能体框架,应用场景其实挺多的。

一个典型的场景是内部效率工具。比如公司内部有一个需要多个系统协作的流程,员工以前需要登录A系统查数据,再到B系统做分析,最后手动写报告。现在可以做一个智能体,它背后连接了这些系统的API(作为工具),员工只需要对智能体说一句:“帮我分析一下上周华东区的销售数据,生成一个简报摘要”,剩下的就自动完成了。

对于个人开发者或小团队,这个框架也很有吸引力。用Phi-3-mini这种小模型,成本低,响应快,可以快速做出一个能处理特定领域任务的聊天机器人。比如做一个专属于你个人的“数字助理”,它集成了你的日历、待办事项、笔记软件和常用的查询工具,你通过自然语言就能管理一切。

另外,在教育或演示场景中也很好用。它的结构清晰,代码不算复杂,非常适合用来学习智能体(Agent)的基本原理,理解模型、工具、协调器是如何协作的。你可以很容易地添加新工具,比如“查股票”、“定闹钟”、“发邮件”,来扩展它的能力。

实际用下来,基于Phi-3-mini搭建这样一个框架是可行的,它确实能理解相对复杂的指令并协调工具调用。当然,它也有局限,比如处理极其复杂或模糊的指令时,可能不如更大的模型稳定。但对于很多明确场景下的自动化任务,它已经能带来显著的效率提升。如果你也想动手试试,建议先从一两个简单的工具开始,把整个流程跑通,再慢慢添加更复杂的功能和优化逻辑。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

小讯
上一篇 2026-03-19 19:57
下一篇 2026-03-19 19:55

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/245103.html