• 函数调用(Function Calling)是大模型的核心能力,允许模型识别用户意图并将其转化为结构化函数调用。通过这种方式,模型可以与外部系统交互,执行数据查询、API调用、工具使用等操作,并将结果整合到对话中。 函数调用使大模型能够实时获取业务系统数据,弥补知识时效性限制,提供更精准、实时的回答,显著增强模型在专业领域的应用价值。
  • 核心优势:将非结构化自然语言转换为结构化参数,实现人机交互到系统操作的无缝衔接,大幅提升业务流程自动化水平。

业务场景描述

  • 通过自然语言告诉大模型:帮我帮我查询小明同学的数据成绩,那么大模型自动回调具体的 PIG AI 代码实现联动查询数据或api 返回具体的成绩

开发自己的函数

定义接收字段

当用户在前端输入自然语言查询(如”小明成绩是多少?“)时,我们需要将这种非结构化的查询转换为后端可处理的结构化JSON数据。 为此,我们需要定义一个接收实体类,用于接收大模型解析后的结构化参数:

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonClassDescription("学生信息")
public class StudentRequest extends BaseAiRequest {

    @FieldPrompt("学生姓名")
    private String studentName;
}

定义函数

@Component
@RequiredArgsConstructor
public class MathScoreFunctionCalling implements FunctionCalling<StudentRequest> {

    /**
     * 显示名称
     *
     * @return {@link String }
     */
    @Override
    public String showInfo() {
        return "学生成绩查询助手";
    }


    /**
     * 检查参数方法 , 大模型会把用户输入的自然语言 回调到这个 StudentRequest 参数,我们要校验参数是不是正确,这是业务校验
     */
    @Override
    public R checkParams(StudentRequest studentRequest, PigxUser userDetails, ChatMessageDTO.ExtDetails extDetails) {
        return R.ok();
    }

    /**
     * 业务处理逻辑
     */
    @Override
    public R<String> handle(StudentRequest studentRequest, PigxUser userDetails, ChatMessageDTO.ExtDetails extDetails) {
        // 模拟根据学生姓名查询数学成绩
        if ("小明".equals(studentRequest.getStudentName())) {
            return R.ok("98");
        }

        return R.failed("查询失败,学生信息不存在");
    }

}

增加函数提示词

  • pigx-knowledge/src/main/resources/prompts 目录下创建 MathScoreFunctionCalling.st 文件
文件名需与上面定义的类名保持一致,PIG AI 会自动发现并加载该函数
成绩助手:学生成绩查询助手,能根据您的描述帮您查询学生的数学成绩

测试使用

在前端的 AI 联动界面中,您可以使用自然语言进行各种提问,例如”查询小明的数学成绩”、“小明这次考试考得怎么样”或”告诉我小明的成绩”等。系统会自动理解您的意图,调用相应的函数,并准确返回小明的数学成绩。这展示了大模型如何通过函数调用与业务系统无缝集成,将自然语言转化为结构化操作,提升用户交互体验。

业务使用

函数调用(Function Calling)是连接大模型能力与业务系统的关键桥梁。通过将业务功能封装为标准化接口,实现自然语言到结构化操作的智能转换,让AI真正成为业务增长的智能引擎。

行业应用案例

教育场景:智能成绩分析

  • 业务场景:家长询问”小明最近三次数学考试的平均分是多少?”
  • 函数角色:成绩分析函数自动解析时间范围、学科类型、统计维度
  • 实现方式ScoreAnalysisFunction 对接学校考试系统,动态计算指定维度的学习趋势
  • 业务价值:减少教师30%的重复查询工作,提升家长服务响应速度至秒级

电商场景:订单状态追踪

  • 业务场景:用户提问”我昨天买的手机发货了吗?订单号23456”
  • 函数角色OrderQueryFunction 自动提取订单号,对接ERP系统实时查询
  • 实现方式:通过JWT token验证用户身份,确保订单数据隔离
  • 业务价值:降低客服中心50%的常规查询量,提升用户自助服务率

医疗场景:检查报告解读

  • 业务场景:患者询问”上周三做的血常规报告有什么异常指标?”
  • 函数角色MedicalReportFunction 对接HIS系统,智能标记异常数据
  • 实现方式:结合医学知识图谱进行指标关联分析
  • 业务价值:缩短患者报告解读等待时间从2天到实时响应

最佳实践

🔹 精准功能定义:每个函数应聚焦单一业务场景,如PaymentStatusFunction只处理支付状态查询
🔹 安全隔离:通过Spring Security实现函数级权限控制,敏感操作强制二次验证
🔹 性能优化:对高频函数(如订单查询)采用Redis缓存+批量查询策略
🔹 监控体系:通过Prometheus监控函数调用耗时、成功率等关键指标

重要安全规范:所有业务函数必须实现权限校验方法 checkParams(),因为大模型返回的数据不一定稳定!

📌 核心要义:函数调用不是简单的API封装,而是构建以业务目标为导向的智能决策中枢,通过持续的场景挖掘和效果反馈,实现AI能力的螺旋式进化