3 min read

LLM:Function Call(1)从传统工具调用到函数驱动

LLM 系列导航

1 LLM:关注因果推断研究进展 2023-06-22
2 LLM:人机协作 2024-05-19
3 LLM:分层管理风险定性 2024-08-08
4 LLM:二阶段FN分层分析与模型提升空间测算 2024-09-12
5 LLM:二阶段FN分层分析与模型提升空间测算(2) 2024-09-12
6 LLM:二阶段FN分层分析与模型提升空间测算(3) 2024-09-12
7 LLM:二阶段FN分层分析与模型提升空间测算(4) 2024-09-12
8 LLM:推理不可复现的探索 2025-06-11
9 LLM:SFT 与 RL 的关系 2025-07-29
10 LLM:SFT 与 RL 的关系(理论修正与实践补充) 2025-07-30
11 LLM:SFT 与 RL 的关系(理论修正与实践补充II) 2025-07-31
12 LLM:低数据场景的决策树生成 2025-08-03
13 LLM:低数据场景的决策树生成(2)落地冷启动 2025-08-03
14 LLM:表格数据特征工程 2025-08-03
15 LLM:撰写大模型落地提示词的关键 2025-08-27
16 LLM:从 Prompt 设计到工作流落地 2025-08-28
17 LLM:RL's Razor 抗遗忘 2025-09-04
18 LLM:RL's Razor 抗遗忘(2) 2025-09-04
19 LLM:RL's Razor 抗遗忘(3)SFT 与 RL 的认知偏差及应用 2025-09-04
20 LLM:RL's Razor 抗遗忘(4)on-policy认知误区 2025-09-04
21 LLM:RL's Razor 抗遗忘(5)RL在线生成样本 2025-09-04
22 LLM:MuseGraph融合GNN与LLM的通用图挖掘新框架 2025-09-05
23 LLM:幻觉成因与解决 2025-09-08
24 LLM:Agent 逻辑与应用场景 2025-09-23
25 LLM:拆解大模型缩放定律失效的三重分解 2025-10-05
26 LLM:近似on-policy数据抗遗忘 2025-10-21
27 LLM:近似on-policy数据抗遗忘(2)Iterative-SFT 2025-10-21
28 LLM:幻觉治理 2025-10-28
29 LLM:先验偏见(1)变量名带偏判断 2025-11-13
30 LLM:先验偏见(2)分层分析应对 2025-11-13
31 LLM:先验偏见(3)实验效度的场景化适配 2025-11-13
32 LLM:分层落地 2025-11-13
33 LLM:零样本在金融场景落地 2025-11-13
34 LLM:跨难度泛化的局限与量化 2025-11-26
35 LLM:重复提示词解锁非推理性能上限 2025-12-17
36 LLM:用失败样本提升指令遵循能力 2025-12-29
37 LLM:概率引导的高价值信号筛选 2026-01-14
38 LLM:低成本安全检测的级联方案 2026-01-16
39 LLM:定性编码的假阳性解决方案 2026-01-16
40 LLM:先验偏见(4)挑战与落地解决方案 2026-01-22
41 LLM:先验偏见(5)工程化方案 2026-01-22
42 LLM:SimRL(1)分层评估 2026-02-03
43 LLM:SimRL(2)理论逻辑与工程落地 2026-02-03

最近我关注了一部分Functional Call的技术分享,感觉到这项技术在打破LLM与业务系统壁垒上的潜力,进而开始深入思考其在反欺诈领域的落地路径——如何让大语言模型精准调用反欺诈工具,将自然语言需求转化为高效的风险核查动作,正是本文要探讨的内容。

一、工具调用的范式迁移

传统系统中,工具调用依赖固定规则引擎与硬编码逻辑,例如反欺诈系统需通过预设条件判断是否调用识别模型接口,交易监测模块依赖人工定义的规则触发风险核查工具。这一阶段的工具调用呈现规则刚性特征,无法适配自然语言交互场景,且参数解析依赖结构化输入(如表单填写),难以处理模糊表达或隐式需求(如用户提及“刚注册就下单的账号”而非明确“注册时间20xx-11-27 10:00,下单时间20xx-11-27 10:05的账号信息”)。

随着大语言模型(LLM)的广泛渗透,Function Call技术实现了工具调用的范式迁移:从规则驱动转向意图驱动,模型可直接解析自然语言中的各类反欺诈需求,自动匹配工具并提取参数,完成从用户提问到工具执行的端到端闭环。这一演变不仅降低了反欺诈产品的交互门槛(如风控运营人员通过提问即可完成账号风险检测),更拓展了工具调用的适用场景,使复杂风险分析流程(如跨平台账号关联核查)的自动化成为可能。

二、Function Call的核心价值

1. 提升业务交互效率

传统系统的工具调用需用户完成多步表单填写,而Function Call支持自然语言直接触发工具。例如在反欺诈核查场景中,风控人员仅需提问“检测这个账号是否为黑灰产”,模型即可自动调用“账号风险识别”工具,提取账号ID或关联手机号作为参数,返回风险等级及依据,无需用户手动输入关键信息。

2. 降低系统集成复杂度

反欺诈业务往往涉及多系统工具调用(如设备指纹校验、行为轨迹分析、黑灰产标签匹配),传统集成方式需通过API网关进行硬编码适配。Function Call通过统一的工具描述Schema(如工具名称、参数类型、返回格式),实现模型与多系统工具的柔性对接。例如在交易风险评估场景中,模型可根据风控需求,自动调用“交易IP画像”“历史欺诈记录查询”“设备异常检测”等多个工具,按业务逻辑顺序执行并汇总风险结果,无需人工编写集成流程。

3. 增强业务场景适配性

反欺诈业务存在部分模糊需求场景,如风控运营人员提问“这个交易是不是异常的”,模型需先调用交易风险评估工具,根据交易金额、付款方式、账号历史行为等参数获取风险数据,再返回自然语言结果。Function Call支持动态参数补全(如缺失交易时间时自动询问风控运营人员),以及多工具协同调用(如结合账号风险工具与设备风险工具提供综合评估),使模型能够处理复杂且不确定的业务需求。

三、训练数据构建:实操要点

1. 样本类型设计

(1)正样本(占比60%-70%)

需覆盖核心业务场景的标准工具调用流程,明确工具名称、参数格式与业务逻辑对应关系。示例如下:


{
  "user_query": "检测账号A20xx001是否为黑灰产",
  "assistant": {
    "tool": "detect_malicious_account",
    "args": {
      "user_id": "A20xx001",
      "account_type": "电商账号",
      "register_time": "20xx-11-27"
    }
  },
  "sample_type": "positive"
}

正样本需包含反欺诈业务的关键参数类型,如标识类(用户ID、账号类型)、时间类(注册时间、交易时间)、行为类(登录频次、操作轨迹)等,确保模型能精准提取结构化参数。

(2)难例样本(占比20%-30%)

聚焦反欺诈场景的模糊表达、俗称转换、多轮补参等复杂情况,提升模型鲁棒性:

  • 模糊表达:用户提问“刚注册就下单的账号风险”(需解析“刚注册”为“注册时间距下单时间<1小时”);

  • 行业俗称:用户提及“养号”(对应工具“detect_farmed_account”)、“刷单账号”(对应工具“detect_order_brushing_account”);

  • 多轮补参:用户提问“评估这个交易的风险”,模型先调用“transaction_risk_evaluate”工具,发现缺失交易IP后,自动询问“请问该交易的IP地址是什么?”。

(3)负样本(占比10%)

明确不可调用工具的场景,避免无效调用或风险操作:

  • 非业务需求:用户提问“反欺诈有哪些手段”(无需调用工具,直接返回方法列表);

  • 参数无效:用户提问“检测20xx年13月注册的账号”(日期格式错误,需提示用户修正);

  • 权限限制:普通员工查询高敏感欺诈案件信息(需拒绝调用工具,提示无权限)。

2. 样本生成方式(兼顾效率与真实性)

(1)合成数据生成(核心来源)

通过模板+参数组合自动生成大量正样本,适配反欺诈业务的参数多样性。示例代码如下(基于账号风险检测场景):


import random
import json

# 定义反欺诈业务参数模板
user_ids = ["A20xx001", "A20xx002", "A20xx003", "A20xx004"]
account_types = ["电商账号", "支付账号"]
register_channels = ["APP注册", "网页注册", "第三方授权", "短信注册"]
risk_labels = ["正常", "疑似养号", "黑灰产确认"]
query_templates = [
    "检测账号{user_id}的风险,类型是{account_type},注册渠道{register_channel}",
    "帮我评估{account_type}账号{user_id}的欺诈风险,注册来源{register_channel}",
    "{user_id}这个{account_type}有风险吗?注册方式是{register_channel}"
]

# 生成1000条合成样本
synthetic_data = []
for _ in range(1000):
    user_id = random.choice(user_ids)
    account_type = random.choice(account_types)
    register_channel = random.choice(register_channels)
    risk_label = random.choice(risk_labels)
    query = random.choice(query_templates).format(
        user_id=user_id, account_type=account_type, register_channel=register_channel
    )
    sample = {
        "user_query": query,
        "assistant": {
            "tool": "detect_malicious_account",
            "args": {
                "user_id": user_id,
                "account_type": account_type,
                "register_channel": register_channel,
                "risk_label": risk_label
            }
        },
        "sample_type": "positive_synthetic"
    }
    synthetic_data.append(sample)

# 保存合成数据
with open("anti_fraud_fc_synthetic_data.json", "w", encoding="utf-8") as f:
    json.dump(synthetic_data, f, ensure_ascii=False, indent=2)

(2)真实日志转换

从反欺诈系统的风控对话、用户交互日志中提取有效样本,例如将风控运营人员与系统的交互“查一下账号A20xx001的历史欺诈记录”转换为标准工具调用样本,确保数据贴合真实业务表达习惯。

(3)Badcase驱动补充

收集生产环境中的错误案例,如模型误调用工具(如将“设备风险检测”调用为“账号风险检测”工具)、参数提取错误(如将“注册时间20xx-11”解析为“20xx-01”),转换为修正样本,形成数据迭代机制。

3. 样本格式规范

反欺诈场景的Function Call样本需符合数据合规要求,敏感信息(如完整手机号、设备MAC地址)需脱敏处理(如用“****”替换中间字段),同时明确工具调用的Schema格式,例如:

  • 工具名称采用英文下划线命名(如“detect_transaction_risk”);

  • 参数类型标注明确(如时间格式统一为“YYYY-MM-DD”,风险等级为枚举类型);

  • 多工具调用按执行顺序排列,用列表存储。

四、LoRA微调

反欺诈领域的LLM应用需兼顾训练效率与成本,LoRA(Low-Rank Adaptation)微调通过冻结预训练模型权重,仅训练低秩矩阵参数,实现Function Call能力的高效适配,具体实操如下:

1. 环境配置与依赖安装


pip install transformers torch peft datasets accelerate

2. 数据预处理(适配反欺诈样本格式)


from datasets import Dataset
import json

# 加载反欺诈场景训练数据
with open("anti_fraud_fc_train_data.json", "r", encoding="utf-8") as f:
    data = json.load(f)

# 数据处理:将样本转换为模型输入格式(文本+标签)
def process_sample(sample):
    # 构建输入文本:用户需求 + 工具调用格式提示
    input_text = f"用户需求:{sample['user_query']}\n工具调用格式:{'tool': '工具名称', 'args': {参数名: 参数值}}"
    # 构建输出文本:标准工具调用JSON
    if isinstance(sample["assistant"], dict) and "tool" in sample["assistant"]:
        output_text = json.dumps(sample["assistant"], ensure_ascii=False)
    else:
        output_text = sample["assistant"]  # 非工具调用场景(负样本)
    return {"input_text": input_text, "output_text": output_text}

processed_data = [process_sample(s) for s in data]
dataset = Dataset.from_list(processed_data).train_test_split(test_size=0.2)

3. LoRA微调配置


from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model

# 加载基础模型
model_name = "modelscope/Llama-2-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.pad_token = tokenizer.eos_token  # 补充pad token
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")

# 配置LoRA参数(反欺诈场景优化:降低秩维度,减少训练成本)
lora_config = LoraConfig(
    r=4,  # 低秩矩阵维度,4-8即可满足需求
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],  # 针对Transformer的query和value投影层
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"  # 因果语言模型任务
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # 输出可训练参数占比(约0.05%-0.1%)

4. 训练执行与模型部署


# 配置训练参数
training_args = TrainingArguments(
    output_dir="./anti_fraud_fc_lora_model",
    per_device_train_batch_size=4,
    per_device_eval_batch_size=4,
    num_train_epochs=3,
    learning_rate=1e-4,
    logging_steps=10,
    evaluation_strategy="epoch",
    save_strategy="epoch",
    fp16=True  # 混合精度训练,提升效率
)

# 定义训练器
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"],
    tokenizer=tokenizer
)

# 启动训练
trainer.train()

# 保存LoRA适配器(仅几MB,便于部署)
model.save_pretrained("./anti_fraud_fc_lora_adapter")

5. 反欺诈场景推理示例(账号风险检测工具调用)


from transformers import pipeline
from peft import PeftModel, PeftConfig

# 加载LoRA适配器
peft_config = PeftConfig.from_pretrained("./anti_fraud_fc_lora_adapter")
base_model = AutoModelForCausalLM.from_pretrained(peft_config.base_model_name_or_path, device_map="auto")
model = PeftModel.from_pretrained(base_model, "./anti_fraud_fc_lora_adapter")
tokenizer = AutoTokenizer.from_pretrained(peft_config.base_model_name_or_path)

# 构建推理管道
generator = pipeline(
    "text-generation",
    model=model,
    tokenizer=tokenizer,
    max_new_tokens=128,
    temperature=0.1  # 降低随机性,确保工具调用稳定性
)

# 反欺诈场景推理:检测账号风险
user_query = "评估电商账号A20xx001的风险,它是今天通过APP注册的"
input_text = f"用户需求:{user_query}\n工具调用格式:{'tool': '工具名称', 'args': {参数名: 参数值}}"
result = generator(input_text)[0]["generated_text"]

# 提取工具调用结果
import json
tool_call = result.split("\n")[-1]
tool_call_dict = json.loads(tool_call)
print("工具名称:", tool_call_dict["tool"])
print("调用参数:", tool_call_dict["args"])

输出结果示例:


工具名称: detect_malicious_account
调用参数: {'user_id': 'A20xx001', 'account_type': '电商账号', 'register_time': '20xx-11-27', 'register_channel': 'APP注册'}

五、落地挑战与解决方案

1. 数据合规与隐私保护

反欺诈业务涉及大量用户隐私数据,对数据使用与工具调用权限有严格要求,解决方案包括:

  • 样本数据脱敏:对手机号、身份证号、设备唯一标识等敏感信息进行加密或部分替换;

  • 工具调用鉴权:在Function Call流程中加入风控人员身份与权限校验,确保高敏感工具(如黑灰产数据库查询)仅核心人员可调用;

  • 操作日志留存:记录所有工具调用行为,包括调用人员、参数信息、执行结果,满足监管审计要求。

2. 参数提取准确性

反欺诈场景的参数往往具有专业性(如“设备指纹”“IP画像”“交易归因”),易出现提取错误,解决方案包括:

  • 样本中补充反欺诈专业术语与俗称映射(如“设备码”对应“设备指纹”,“异常IP”对应“高风险IP”);

  • 在微调时加入参数校验逻辑,如IP格式校验、时间合理性校验(避免“注册时间晚于下单时间”的参数错误);

  • 多轮对话补参优化:针对模糊参数,设计引导式提问模板,确保参数提取完整准确。

3. 工具兼容性

反欺诈系统中存在大量legacy工具(如老式数据库接口、非标准化风险评分工具),解决方案包括:

  • 构建工具适配层:将非标准化接口封装为符合Function Call Schema的统一接口,实现“老工具新调用”;

  • 工具描述优化:在工具定义中明确反欺诈工具的参数类型、风险阈值范围、错误码含义,帮助模型理解工具特性;

  • 灰度测试:新工具接入时先针对历史欺诈案例进行小流量测试,收集调用日志优化模型适配精度。

LLM 系列导航

1 LLM:关注因果推断研究进展 2023-06-22
2 LLM:人机协作 2024-05-19
3 LLM:分层管理风险定性 2024-08-08
4 LLM:二阶段FN分层分析与模型提升空间测算 2024-09-12
5 LLM:二阶段FN分层分析与模型提升空间测算(2) 2024-09-12
6 LLM:二阶段FN分层分析与模型提升空间测算(3) 2024-09-12
7 LLM:二阶段FN分层分析与模型提升空间测算(4) 2024-09-12
8 LLM:推理不可复现的探索 2025-06-11
9 LLM:SFT 与 RL 的关系 2025-07-29
10 LLM:SFT 与 RL 的关系(理论修正与实践补充) 2025-07-30
11 LLM:SFT 与 RL 的关系(理论修正与实践补充II) 2025-07-31
12 LLM:低数据场景的决策树生成 2025-08-03
13 LLM:低数据场景的决策树生成(2)落地冷启动 2025-08-03
14 LLM:表格数据特征工程 2025-08-03
15 LLM:撰写大模型落地提示词的关键 2025-08-27
16 LLM:从 Prompt 设计到工作流落地 2025-08-28
17 LLM:RL's Razor 抗遗忘 2025-09-04
18 LLM:RL's Razor 抗遗忘(2) 2025-09-04
19 LLM:RL's Razor 抗遗忘(3)SFT 与 RL 的认知偏差及应用 2025-09-04
20 LLM:RL's Razor 抗遗忘(4)on-policy认知误区 2025-09-04
21 LLM:RL's Razor 抗遗忘(5)RL在线生成样本 2025-09-04
22 LLM:MuseGraph融合GNN与LLM的通用图挖掘新框架 2025-09-05
23 LLM:幻觉成因与解决 2025-09-08
24 LLM:Agent 逻辑与应用场景 2025-09-23
25 LLM:拆解大模型缩放定律失效的三重分解 2025-10-05
26 LLM:近似on-policy数据抗遗忘 2025-10-21
27 LLM:近似on-policy数据抗遗忘(2)Iterative-SFT 2025-10-21
28 LLM:幻觉治理 2025-10-28
29 LLM:先验偏见(1)变量名带偏判断 2025-11-13
30 LLM:先验偏见(2)分层分析应对 2025-11-13
31 LLM:先验偏见(3)实验效度的场景化适配 2025-11-13
32 LLM:分层落地 2025-11-13
33 LLM:零样本在金融场景落地 2025-11-13
34 LLM:跨难度泛化的局限与量化 2025-11-26
35 LLM:重复提示词解锁非推理性能上限 2025-12-17
36 LLM:用失败样本提升指令遵循能力 2025-12-29
37 LLM:概率引导的高价值信号筛选 2026-01-14
38 LLM:低成本安全检测的级联方案 2026-01-16
39 LLM:定性编码的假阳性解决方案 2026-01-16
40 LLM:先验偏见(4)挑战与落地解决方案 2026-01-22
41 LLM:先验偏见(5)工程化方案 2026-01-22
42 LLM:SimRL(1)分层评估 2026-02-03
43 LLM:SimRL(2)理论逻辑与工程落地 2026-02-03