我觉得 Function Calling 才是基石。没有它,后面的 MCP 和 Skills 都是空中楼阁。至于 MCP 和 Skills,感觉 Skills 更灵活,毕竟直接用文字定义流程,更符合 AI Agent 应该有的样子。但 MCP 解决了快速集成的问题,各有千秋,短期内应该会并存吧。
其实我觉得函数化 Agent 是一种工程上的妥协,为了落地不得不做的。Agent 的核心优势在于处理不确定性,但函数是确定的。所以,函数化 Agent 可能会牺牲 Agent 的一些核心能力。但话说回来,不落地,再强的能力也是空谈。
可以借鉴 GraphQL 的思路,让用户自行定义需要的数据字段,而不是一股脑把所有信息都塞给模型。这样既能减少模型处理的信息量,也能提高任务的准确性。而且,用户也能更清楚地知道需要提供哪些信息。
个人更看好 MCP,虽然 Skills 看似更智能,但长期来看,标准化、可维护性更重要。MCP 提供了一套标准化的协议,方便各种系统接入,这对于构建生态至关重要。而且,我觉得 Skills 的文字定义流程,本质上还是 Prompt Engineering,容易受到模型能力的影响,不如 MCP 稳定。
可以试试 Prompt Engineering 的一些技巧,比如 Few-shot learning,在 SKILL.md 里面多放一些例子,告诉模型在什么情况下应该做什么。或者用更明确的自然语言来描述,比如使用关键词、约束条件等等。还可以让用户参与验证,让 Agent 生成一个执行计划,用户确认后再执行。
个人更看好Skills的发展潜力。现在的关键在于如何让Agent真正理解人类的意图,而不仅仅是执行预设的步骤。Skills通过自然语言描述流程,给了Agent更大的自由度去适应变化。MCP更像是对现有系统的妥协,虽然解决了集成问题,但牺牲了Agent的灵活性。当然,短期内MCP可能更实用,毕竟现有系统太多了,但长期来看,Agent应该朝着更智能、更自主的方向发展,Skills更符合这个趋势。
其实我觉得现在Prompt Engineering的方向已经开始朝着结构化发展了,比如最近很火的Pydantic,就可以用来定义Prompt的结构,并进行类型检查。我们可以把Pydantic和Skills结合起来,让Skill的开发者能够更方便地定义Skill的输入输出,并保证数据的类型安全。当然,这需要对现有的Skills框架进行一些改造。
谢邀,利益相关,我是函数式编程的忠实拥趸。我认为Lynxe的思路最大的意义在于它强调了Agent的输入输出的结构化。现在很多Agent方案都过于依赖自然语言,导致信息传递的效率和准确性都比较低。而函数化能够让Agent更好地理解用户的意图,并返回结构化的结果,从而更好地与现有系统集成。至于挑战,我觉得主要是如何让开发者接受这种新的编程范式,毕竟很多人已经习惯了面向对象编程。
确实,现在的Skills主要靠自然语言描述,容易产生歧义。我觉得可以引入一些结构化的描述方式,比如使用JSON Schema来定义Skill的输入输出,或者使用GraphQL来查询数据。这样可以提高Skill的准确性和可复用性。
我觉得可以借鉴知识图谱的思想,将Skill的描述信息组织成一个知识图谱,包含Skill的名称、描述、依赖关系、输入输出等等。然后,我们可以使用自然语言处理技术将用户的需求映射到这个知识图谱上,从而更准确地找到合适的Skill。这有点像搜索引擎的原理,只不过搜索的对象不是网页,而是Skill。
同意楼上的观点!函数化的核心优势在于可组合性和可复用性,这对于构建复杂的AI应用非常重要。我们可以把不同的Agent能力封装成函数,然后像搭积木一样组合起来,构建出各种各样的应用。但是,函数化也会引入新的复杂性,比如如何管理大量的函数,如何保证函数之间的兼容性,如何进行调试和监控等等。感觉有点像微服务架构的思想,好处很多,但挑战也很大。
个人觉得MCP可能更适合需要高度标准化的场景,例如金融或者政务领域,需要严格的接口协议和数据安全保障。Skills更灵活,适合快速迭代和探索新功能的场景,比如在创意内容生成或者个人助手方面。
从长远来看,我更看好Skills,因为它更符合AI Agent的发展趋势:将更多的决策权交给模型。随着大模型能力的提升,未来我们可能只需要用文字描述任务目标,Agent就能自动分解任务、选择工具并完成执行,而不需要复杂的协议转换和代码编写。当然,前提是模型的安全性和可靠性能够得到保障。
这个问题很有意思!我觉得不能一概而论,要看具体的需求。如果你的系统交互非常复杂,涉及多种异构系统,那MCP提供的标准化协议可能更省事,能减少很多适配工作。但如果你的任务逻辑更复杂,需要模型具备更强的自主决策能力,那Skills的文字化流程定义就更香了,毕竟Prompt Engineering的上限更高嘛!
Lynxe的思路确实很棒!个人理解,它主要解决了Agent与现有系统集成的问题,让Agent不再只是一个对话框,而是能够像普通函数一样被调用和组合。但挑战也很明显,函数化Agent需要更精细的接口设计和错误处理,对开发者的要求更高。另外,如何保证函数调用的安全性和可靠性也是一个重要问题。
我也觉得你这个现象很关键,本质上就是 description 还没从“示例匹配”走到“语义归一”,所以换个说法就掉匹配很正常。你们后来是靠补充同义表达、还是改成先做意图归一再进 skill 的?如果是后者,匹配稳定性应该会好很多。
这个现象我也遇到过:description 写得像“能力说明”时反而不稳,写成包含触发边界、反例和 3-5 个典型说法的“小路由规则”会好一些。你说必须大部分匹配提问示例才能命中,我怀疑问题不只在语义理解,也在 skill 选择阶段的候选召回太窄;如果把 description 拆成“适用场景/不适用场景/输入特征”三段,你那边命中率会有变化吗?
你这个现象我也遇到过:description 写成“查询客户余额”和示例里“帮我查一下账户余额”,模型有时会把它当成两个意图,说明 skill 路由更吃关键词覆盖而不是语义泛化。我后来会在 description 里拆成“触发条件 / 反例 / 同义表达”三小段,比单纯堆示例稳定一些。你那边不匹配主要发生在多个 skill 语义接近的时候,还是单个 skill 的描述换说法也会掉?
你提到的这个现象我也遇到过:description 写成自然语言说明时,模型有时像是在做近似的 pattern matching,换个问法就掉不到对应 skill。后来我更倾向于把 description 写成“触发条件 + 不触发条件 + 典型输入输出”,示例只放 2~3 个代表性变体,避免它把示例当成唯一入口。你那边失败的 case 更像是同义改写不命中,还是任务边界稍微一扩展就被分到别的 skill 了?