kizumi_header_banner_img

夜晚 未来 永远 恐惧 梦见 终结

加载中

文章导读

Function Calling


avatar
Gouki 2025年11月12日 121

function calling 定义流程

  • 用户:发起查询。
  • 大型语言模型(LLM):直接解析查询,决定是否需要调用函数,并生成响应。
  • 函数声明:预定义的外部函数接口(如天气API的调用方式)。
  • 外部API:提供具体数据或服务。

llm本身只是文本模型(生成式文本模型) 想要使他 可以调用工具 需要提示他操作需求 生成结构化的api调用指令  整合api的返回

个人理解本质上就是规定好定义明确的结果 约束模型生成符合预设接口的结构化响应 有点类似 填空了 生成的文本 有 工具调用的结果的空 这个空的内容就是定义好的函数工具的结果 这个空的排版由开发者决定

简单demo

import json

def get_current_weather(location, time):
“””
获取指定地点和时间的天气信息

Args:
location (str): 城市名称,如”北京”、”东京”
time (str): 时间信息,如”2024-10-27″

Returns:
str: 天气信息的JSON字符串
“””
# 模拟天气数据返回
weather_data = {
“location”: location,
“time”: time,
“temperature”: “22°C”,
“conditions”: “晴朗”,
“humidity”: “65%”,
“wind_speed”: “15km/h”
}
return json.dumps(weather_data, ensure_ascii=False)

# Function Call的函数定义描述
weather_function = {
“name”: “get_current_weather”,
“description”: “获取指定地点的天气情况”,
“parameters”: {
“type”: “object”,
“properties”: {
“location”: {
“type”: “string”,
“description”: “需要查询天气的城市或地区名称,例如:北京、上海、东京”
},
“time”: {
“type”: “string”,
“description”: “查询天气的具体时间,格式为YYYY-MM-DD”
}
},
“required”: [“location”, “time”]
}
}

def main():
# 示例:模拟大模型调用函数
user_query = “查询北京2024-10-27的天气”

# 大模型分析后返回的调用信息
model_response = {
“function_call”: {
“name”: “get_current_weather”,
“arguments”: ‘{“location”: “北京”, “time”: “2024-10-27”}’
}

if model_response.get(“function_call”):
func_name = model_response[“function_call”][“name”]
args = json.loads(model_response[“function_call”][“arguments”])

if func_name == “get_current_weather”:
result = get_current_weather(args[“location”], args[“time”])
print(f”天气查询结果: {result}”)

if __name__ == “__main__”:
main()

功能模块设计

函数注册表

存储格式 json schema规范

关键字段

name 函数标识

description 功能描述

parameters 参数类型与规约

required 必填参数列表

决策引擎

输入

用户query + 函数列表

输出

是否需要函数调用

推荐调用函数名(概率分布)

原理

基于query语义与函数描述的余弦相似度

注意力机制聚焦关键动词(比如“查询” “计算”)

参数生成器

输入:用户query + 选定函数schema

输出:结构化参数对象

关键点:命名实体识别 (ner’)提取关键参数 类型转换(如将“三天后”-》ISO 8601日期格式)默认值填充

执行代理

工作流程:

参数验证(类型检查+范围校验)

调用注册的api处理器

错误处理(超时/异常捕获)

结果规范化(xml/json->模型可读文本)

响应合成器

输入;原始query+api返回结果

输出:自然语言

融合策略:

结果摘要+原始问题描述

多源数据关联推理

 

工作流程

意图识别

用户输入:“帮我查看上海明天早上的天气情况”

模型检测关键词“查”,“天气”

匹配函数注册表中的相应工具函数 get_weather

参数解析

提取用户输入实体:

地点:上海-》location

时间:明天早上-》datetime=xxxx-xxxx-xxxx

填充默认参数:unit=”celsius”

api调用

response = weather_api(

location=”上海”,

datetime=”xxxx-xxxx-xxxx”

unit=’celsius’

)

# 返回:{“temp”:20, “condition”:”多云”}

结果整合

原始结果结构化解析

生成响应:“上海明天早上多云,气温20摄氏度”

关键技术

模式对齐

语义模糊:

多轮澄清 反复确认(“您指的是市还是县”)

参数缺失:

概率推断补全(下午-》14:00)

类型冲突:

强制转换+置信度标准

函数链式调用

多函数协同工作

一个完整的流程势必有多个单独的功能函数协同

例如买票 必定有航班查询 支付等等

动态函数注册

运行时加载 :支持热更新函数库

权限控制:

异常处理

api超时 指数退避重试

参数无效 生成修正建议

权限不足 触发验证流程

性能优化

延迟分解

多阶段 整体流程

决策阶段

耗时

优化 函数聚类索引

参数生成阶段

耗时

优化 实体识别缓存

api调用阶段

耗时

优化 异步非阻塞

响应生成阶段

耗时

优化 模块预处理

流量控制

分级限流:

核心函数(支付/登录): QPS<=10

查询类函数:QPS《=100

熔断机制:错误率指标满足自动降级

安全机制

注入防御

提示注入

输入净化+指令隔离

参数篡改

签名校验

越权访问

jwt声明校验

审计追踪

请求链路

函数决策日志

参数快照

api响应摘要

最终输出

典型应用场景

智能助手

日历管理

邮件操作

数据分析

对比财报

预测营收趋势

物联网控制

智能家电控制



评论(0)

查看评论列表

暂无评论


发表评论

个人信息

avatar

面向kpi编程,python的狗。

15
文章
0
评论
1
用户

分类

最新评论

    广告 10-11