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)
暂无评论