package com.xly.tool; import com.xly.service.SkillService; import dev.langchain4j.agent.tool.P; import dev.langchain4j.agent.tool.Tool; import org.springframework.stereotype.Component; import java.util.Map; /** * Skill 加载工具(架构 §6,渐进披露)。 * *

system prompt 里只常驻 Skill 的「name + 何时用」摘要;当用户的需求命中某个 Skill 时,agent 调 * {@code load_skill(name)} 拉取该 Skill 的完整 playbook(详细步骤 + 建议工具)再照做。Skill 是无状态、 * 全局的,因此本工具是单例。 */ @Component public class SkillTool { private final SkillService skills; public SkillTool(SkillService skills) { this.skills = skills; } @Tool("加载某个业务 Skill(playbook)的完整操作指南。当用户的需求匹配 system prompt 中列出的某个 Skill 名时," + "先调用它拿到详细步骤,再按步骤用其它工具完成。入参 = Skill 名称(如 新建报价 / 月度对账 / 库存查询)。") public String loadSkill(@P("Skill 名称") String name) { Map s = skills.load(name); if (s == null) { return "没有找到名为「" + name + "」的 Skill。可用的 Skill 见系统提示里的清单。"; } String instr = String.valueOf(s.get("sInstructions")); Object suggested = s.get("sSuggested"); StringBuilder sb = new StringBuilder(); sb.append("【Skill:").append(s.get("sName")).append("】\n").append(instr); if (suggested != null && !String.valueOf(suggested).isBlank()) { sb.append("\n建议用到的工具:").append(suggested); } return sb.toString(); } }