目标:基于商用和开源的强大LLM,在各自项目数据集上进行Prompt调优,目的是得到一个拓展性强、标准化高、效果好的通用PE模版。
- 意图&实体通用Prompt模版,其中大括号部分为可针对场景需求定制化修改
角色与任务
你作为物流领域专业意图分类与实体提取专家,需精准解析用户对话(单轮/多轮)完成两项核心任务:1. 意图分类:匹配至指定类别;2. 实体提取:捕获预定义实体
可选意图
分类的类别:{输入场景下对应的所有意图类别 }
可选实体
实体的名字:{输入场景下对应的所有需要提取的实体 }
分类类别定义
{场景下对应的每一个意图的定义与规则 }
提取实体名称说明
{场景下对应的每一个需要提取的实体的定义 }
输出格式:
以json格式输出
{\"class\": \"\", \"物品名称\": \[\], \"收件人地址\": \[\], \"寄件人地址\": \[\]}
其中,class对应的值是用户问题的类别,\"物品名称\": \[\]表示提取实体的名称和对应存放实体的列表。
注意: 1. 实体值保持原始文本形态。2. 多轮对话需综合所有上下文判断。3. 禁止扩展预定义类别/实体。{可根据需求针对性的进行补充 }
- ToolCall通用PE模版
角色与任务
你是一个智能工具调用助手,负责分析用户请求,并从给定的工具列表中选择最合适的工具来完成任务。你的核心职责是:
-
工具匹配 :理解用户需求,匹配到最相关的工具。
-
参数提取 :根据工具的定义,从用户输入中精确提取所需的参数。
-
生成调用 :严格按照指定的JSON格式,生成工具调用请求。
可用工具列表
以下是你可调用的工具定义(以OpenAI Tools标准格式描述,对于意图&实体,则):
{tools_json_array}
工具选择与调用规则
-
严格匹配 :只能使用上述列表中提供的工具,不得虚构或修改工具。
-
参数要求 :
-
仅提取工具`parameters`中定义的参数。
-
参数值应直接来自用户输入或通过合理推断从上下文获得(如多轮对话中的隐含信息)。
-
保持参数值的原始文本形态,除非需要进行最基本的规范化(如去除首尾空格)。
-
多轮对话 :必须综合所有历史上下文来理解当前请求的完整意图和参数。
-
单一调用 :除非特别要求或逻辑上必须,一次只调用一个工具。
-
无可用工具 :如果没有任何工具适合处理当前请求,则输出一个空的工具调用列表。
{可根据需求针对性的进行补充 }
输出格式
你必须输出一个纯JSON对象数组,每个对象代表一个工具调用请求,格式如下:
```json
{ "name": "\<选择的工具名称\>", "arguments": { "\<参数1名称\>": "\<参数1值\>", "\<参数2名称\>": "\<参数2值\>" } }
一、丰小帮手
1.1 任务描述
丰小帮手 目前一级意图可分为丰晓易、丰小帮(销售知识问答)以及闲聊。
1.2 训练方法
训练目标:让模型学会根据多轮改写后用户问题,能够准确识别出相应意图,输出符合OpenAI Function Call格式。
训练方法:基于LLaMA-Factory进行SFT微调。
1.3 数据格式
参考OpenAI FunctionCall 模板,包含用户输入(检索出的微应用列表和多轮改写后用户问题)和工具调用结果。拟使用ShareGPT格式,每一条训练样本是一个json对象,包含一个messages数组。
{`
`"messages":` `[`
`{`
`"role":` `"system",`
`"content":` `"你是物流领域的Expert。\n通过分析历史对话和用户最新输入给出你的回答。\n...(此处粘贴完整System Prompt)"`
`},`
`{`
`"role":` `"user",`
`"content":` `"酒水行业案例"`
`},`
`{`
`"role":` `"assistant",`
`"tool_calls":` `[`
`{`
`"id":` `"call_001",`
`"type":` `"function",`
`"function":{`
`"name":` `"丰小帮",`
`"arguments":` `{}`
`}`
`}`
`]`
`},`
`[`
`{`
`"type":` `"function",`
`"function":` `{`
`"name":` `"丰晓易",`
`"description":` `"1.咨询/解决月结对账、结算信息、公款相关问题;2.咨询/解决各类付款/回款/返款/委托扣款/预付款/预付客户相关问题;3.咨询/解决发票相关问题;4. 咨询/解决账单相关问题(不包含申请账单);5.用户查询中提到"丰晓易/丰小易"",`
`"parameters":` `{`
`"type":` `"object",`
`"properties":` `{},`
`"required":` `[]`
`}`
`}`
`},`
`{`
`"type":` `"function",`
`"function":` `{`
`"name":` `"丰小帮",`
`"description":` `"1.咨询授信额度相关(提额、不足、冻结)问题;2.咨询客户档案详情页相关问题;3.非「丰晓易」类的所有其他销售类相关意图; 4.财报、股权架构相关问题",`
`"parameters":` `{`
`"type":` `"object",`
`"properties":` `{},`
`"required":` `[]`
`}`
`}`
`},`
`{`
`"type":` `"function",`
`"function":` `{`
`"name":` `"闲聊",`
`"description":` `"1.纯闲聊、无实际业务诉求的用户查询",`
`"parameters":` `{`
`"type":` `"object",`
`"properties":` `{},`
`"required":` `[]`
`}`
`}`
`}`
`]`
`}`
`
1.4 跑批测试
丰晓易/丰小帮/闲聊3个意图,测试数据438条
|----|---------------|------|--------------------------|
| 序号 | 模型 | 跑批结果 | 结果分析 |
| 1 | qwen3-max | 81% | |
| 2 | deepseek-v3.2 | 77% | |
| 3 | glm-4.7 | 73% | 1. 会出现tool_calls为None的情况 |
- 小丰智能助手
2.1 数据构造
从考勤和薪税两个场景切入,生成测试数据。输入是多轮改写后的用户问题。
{`
`"messages":` `[`
`{`
`"role":` `"user",`
`"content":` `"我今年有多少加班补休"`
`},`
`{`
`"role":` `"assistant",`
`"tool_calls":` `[`
`{`
`"id":` `"call_001",`
`"type":` `"function",`
`"function":` `{`
`"name":` `"休假配额",`
`"arguments":` `"{\"leave_type\": \"加班补休\", \"quotaStartTime\": \"2025-01-01\",\"quotaEndTime\": \"2025-12-31\"}"`
`}`
`}`
`]`
`}`
`],`
`"tools":` `[`
`{`
`"type":` `"function",`
`"function":` `{`
`"name":` `"休假配额",`
`"description":` `"获取剩余假期天数",`
`"parameters":` `{`
`"type":` `"object",`
`"properties":` `{`
`"leave_type":` `{`
`"type":` `"string",`
`"description":` `"假类名称,如加班补休、年假、婚假等"`
`},`
`"quotaStartTime":` `{`
`"type":` `"string",`
`"description":` `"查询开始日期"`
`},`
`"quotaEndTime":` `{`
`"type":` `"string",`
`"description":` `"查询结束日期"`
`}`
`}`
`}`
`}`
`}`
`]`
`}`
`
一级意图分类ToolCall跑批,共260条数据,共10个意图类别,结果如下:
|----|---------------|----------------|
| 序号 | 模型 | 跑批结果 |
| 1 | qwen3-max | 73.46% |
| 2 | deepseek-v3.2 | 74.23% |
| 3 | glm-4.7 | 73.08%(出话格式混乱) |
2.2 模型推理脚本
`
`
2.3 实验结果
|----|------|------|------|
| 序号 | pe内容 | 跑批结果 | 结果分析 |
| 1 | | | |
| 2 | | | |
- 面客智能体
3.1、整体框架
3.1.1、单轮function_call模型流程

3.1.2、多轮function_call模型流程

【智能体多轮function_call模型训练】
3.2、数据构造方法
3.2.1、单轮function_call模型数据构造
采用OpenAI Function Calling格式,只包含一轮的用户输入和工具调用结果。
{`
`"messages":` `[`
`{`
`"role":` `"user",`
`"content":` `"What is the weather in San Francisco?"`
`},`
`{`
`"role":` `"assistant",`
`"tool_calls":` `[`
`{`
`"id":` `"call_001",`
`"type":` `"function",`
`"function":` `{`
`"name":` `"get_current_weather",`
`"arguments":` `"{\"location\": \"San Francisco, USA\", \"format\": \"celsius\"}"`
`}`
`}`
`]`
`}`
`],`
`"tools":` `[`
`{`
`"type":` `"function",`
`"function":` `{`
`"name":` `"get_current_weather",`
`"description":` `"Get the current weather in a given location",`
`"parameters":` `{`
`"type":` `"object",`
`"properties":` `{`
`"location":` `{`
`"type":` `"string",`
`"description":` `"The city and state, e.g. San Francisco, CA"`
`},`
`"format":` `{`
`"type":` `"string",`
`"enum":` `[`
`"celsius",`
`"fahrenheit"`
`]`
`}`
`},`
`"required":` `[`
`"location"`
`]`
`}`
`}`
`}`
`]`
`}`
`
3.2.2、多轮function_call模型数据构造
采用OpenAI Function Calling格式,包含多轮数据,每一轮包括用户输入、工具调用、工具返回、模型回复4个部分。
{`
`"messages":` `[`
`{`
`"role":` `"system",`
`"content":` `"你是一个专业的旅行助手,可以帮助用户查询天气、预订航班和酒店"`
`},`
`{`
`"role":` `"user",`
`"content":` `"我想去北京旅游,能告诉我明天的天气怎么样吗?"`
`},`
`{`
`"role":` `"assistant",`
`"tool_calls":` `[`
`{`
`"id":` `"call_weather_001",`
`"type":` `"function",`
`"function":` `{`
`"name":` `"get_weather",`
`"arguments":` `"{\"location\": \"北京\", \"date\": \"tomorrow\"}"`
`}`
`}`
`]`
`},`
`{`
`"role":` `"tool",`
`"tool_call_id":` `"call_weather_001",`
`"content":` `"{\"temperature\": \"18-25°C\", \"condition\": \"晴\", \"humidity\": \"45%\"}"`
`},`
`{`
`"role":` `"assistant",`
`"content":` `"北京明天天气晴朗,气温18-25度,湿度45%,非常适合旅游!"`
`},`
`{`
`"role":` `"user",`
`"content":` `"那太好了!请帮我查一下从上海到北京的航班,时间明天上午"`
`},`
`{`
`"role":` `"assistant",`
`"tool_calls":` `[`
`{`
`"id":` `"call_flight_002",`
`"type":` `"function",`
`"function":` `{`
`"name":` `"search_flights",`
`"arguments":` `"{\"departure\": \"上海\", \"destination\": \"北京\", \"date\": \"tomorrow\", \"time_period\": \"morning\"}"`
`}`
`}`
`]`
`},`
`{`
`"role":` `"tool",`
`"tool_call_id":` `"call_flight_002",`
`"content":` `"[{\"flight\": \"MU5101\", \"departure\": \"08:00\", \"arrival\": \"10:30\", \"price\": 680}, {\"flight\": \"CA1501\", \"departure\": \"09:30\", \"arrival\": \"12:00\", \"price\": 720}]"`
`},`
`{`
`"role":` `"assistant",`
`"content":` `"找到两个航班选项:MU5101(08:00-10:30,680元)和CA1501(09:30-12:00,720元)。您需要预订哪个?"`
`},`
`{`
`"role":` `"user",`
`"content":` `"预订MU5101,另外请帮我找一家王府井附近的酒店"`
`},`
`{`
`"role":` `"assistant",`
`"tool_calls":` `[`
`{`
`"id":` `"call_book_003",`
`"type":` `"function",`
`"function":` `{`
`"name":` `"book_flight",`
`"arguments":` `"{\"flight_number\": \"MU5101\", \"passenger\": \"用户\"}"`
`}`
`},`
`{`
`"id":` `"call_hotel_004",`
`"type":` `"function",`
`"function":` `{`
`"name":` `"search_hotels",`
`"arguments":` `"{\"location\": \"王府井,北京\", \"check_in\": \"tomorrow\", \"nights\": 3}"`
`}`
`}`
`]`
`}`
`],`
`"tools":` `[`
`{`
`"type":` `"function",`
`"function":` `{`
`"name":` `"get_weather",`
`"description":` `"获取指定城市和日期的天气信息",`
`"parameters":` `{`
`"type":` `"object",`
`"properties":` `{`
`"location":` `{"type":` `"string",` `"description":` `"城市名称"},`
`"date":` `{"type":` `"string",` `"description":` `"日期"}`
`},`
`"required":` `["location",` `"date"]`
`}`
`}`
`},`
`{`
`"type":` `"function",`
`"function":` `{`
`"name":` `"search_flights",`
`"description":` `"搜索航班信息",`
`"parameters":` `{`
`"type":` `"object",`
`"properties":` `{`
`"departure":` `{"type":` `"string",` `"description":` `"出发城市"},`
`"destination":` `{"type":` `"string",` `"description":` `"目的地城市"},`
`"date":` `{"type":` `"string",` `"description":` `"出发日期"},`
`"time_period":` `{"type":` `"string",` `"enum":` `["morning",` `"afternoon",` `"evening"]}`
`},`
`"required":` `["departure",` `"destination",` `"date"]`
`}`
`}`
`},`
`{`
`"type":` `"function",`
`"function":` `{`
`"name":` `"book_flight",`
`"description":` `"预订指定航班",`
`"parameters":` `{`
`"type":` `"object",`
`"properties":` `{`
`"flight_number":` `{"type":` `"string",` `"description":` `"航班号"},`
`"passenger":` `{"type":` `"string",` `"description":` `"乘客姓名"}`
`},`
`"required":` `["flight_number",` `"passenger"]`
`}`
`}`
`},`
`{`
`"type":` `"function",`
`"function":` `{`
`"name":` `"search_hotels",`
`"description":` `"搜索酒店信息",`
`"parameters":` `{`
`"type":` `"object",`
`"properties":` `{`
`"location":` `{"type":` `"string",` `"description":` `"酒店位置"},`
`"check_in":` `{"type":` `"string",` `"description":` `"入住日期"},`
`"nights":` `{"type":` `"integer",` `"description":` `"住宿天数"}`
`},`
`"required":` `["location",` `"check_in"]`
`}`
`}`
`}`
`]`
`}`
`
3.3、训练方法
3.3.1、训练方案选择
采用LLaMA-Factory进行SFT训练,在LLaMA-Factory的ShareGPT格式多轮对话训练中,只有assistant角色的回复内容(gpt角色的value字段)会作为输出被模型学习 ,而user输入(human角色)和工具调用/返回(function_call/observation角色)的内容仅作为上下文输入,不会计算损失。
3.3.2、训练数据转换
因为面客智能体意图绝大部分意图无法获取真实的调用函数工具(除服务查询意图外的其他所有意图),只能输出中间的工具代用结果。因此只能模拟函数工具,将工具调用内容按照固定的模版拼接,作为工具返回结果,如「识别意图是xxx,抽取到以下实体:实体1是xxx,实体2是xxx,实体3是xxx」。
此外,处理多轮Function Calling的ShareGPT格式数据时,需要将原始的OpenAI function call格式转换为LLaMA-Factory的四种角色(human、observation、gpt、function_call)。下面是具体的转换方法和示例。

每一轮包括用户输入、工具调用、工具返回、模型回复4个部分。
用户输入:用户当前轮的输入
工具调用:符合OpenAI function call格式的工具调用结果,函数名对应意图类别,函数入参对应实体抽取结果
工具返回:识别意图是xxx,抽取到以下实体:实体1是xxx,实体2是xxx,实体3是xxx
模型回复:
3.3.3、转换后具体数据实例
3.3.3.1、单轮
{`
`"conversations":` `[`
`{"from":` `"human",` `"value":` `"收件人是陆工"},`
`{"from":` `"function_call",` `"value":` `"{\"name\": \"填单\", \"arguments\": {\"收件人姓名\": \"陆工\"}}"},`
`{"from":` `"observation",` `"value":` `"{\"return\": \"识别意图是填单,抽取到以下实体:收件人姓名是陆工\"}"},`
`{"from":` `"gpt",` `"value":` `"已联想选择收件人陆工的地址信息:-陆工 13040622233,-上海市上海市松江区九亭镇文亭路56弄23号902室请告诉我要寄递的物品,可拍照识别"}`
`]`
`}`
`
3.3.3.2、多轮
{`
`"conversations":` `[`
`{"from":` `"human",` `"value":` `"收件人是陆工"},`
`{"from":` `"function_call",` `"value":` `"{\"name\": \"填单\", \"arguments\": {\"收件人姓名\": \"陆工\"}}"},`
`{"from":` `"observation",` `"value":` `"{\"return\": \"识别意图是填单,抽取到以下实体:收件人姓名是陆工\"}"},`
`{"from":` `"gpt",` `"value":` `"已联想选择收件人陆工的地址信息:-陆工 13040622233,-上海市上海市松江区九亭镇文亭路56弄23号902室请告诉我要寄递的物品,可拍照识别"},`
`{"from":` `"human",` `"value":` `"托寄物:测量技术报告"},`
`{"from":` `"function_call",` `"value":` `"{\"name\": \"填单\", \"arguments\": {\"物品名称\": \"测量技术报告\"}}"},`
`{"from":` `"observation",` `"value":` `"{\"return\": \"识别意图是填单,抽取到以下实体:物品名称是测量技术报告\"}"},`
`{"from":` `"gpt",` `"value":` `"已记录寄递物品:测量技术报告"}`
`]`
`}`
`
3.4、模型效果
数据集为C端智能体任务意图识别测试集,数据量为2930条,包含117个意图。
3.4.1、纯PE
|------|--------------|---------|
| PE版本 | 模型 | 意图识别准确率 |
| v1 | qwen3-max | 68.91% |
| v1 | glm-4.7 | 66.76% |
| v1 | deepseek-3.2 | 36.99% |
v1版prompt
`
`你是物流领域的Expert。`
`通过分析历史对话和用户最新输入给出你的回答。`
`你只能通过函数调用(tool_call)输出结果,禁止输出任何解释文字或裸 JSON。`
`【工具驱动规则】`
`- 本轮会提供一个或多个 tools。每个 tool 对应一类用户意图的处理工具,tool的 description 中包含该类意图的定义。`
`- 你必须严格遵循 tools 的 description 与 schema,严禁自创类别/字段/取值。`
`【Schema 严格性(强制)】`
`- 每次 tool_call 的 arguments 必须严格匹配该工具的 JSON schema:字段名完全一致、类型正确、遵守 enum。`
`- 禁止输出 schema 未定义字段。`
`【执行策略】`
`- 可以根据需求调用多种工具`
`【多轮理解】`
`- 必须结合历史对话判断当前用户最新输入意图。`
`- 只允许输出 tool_call(可多次,取决于工具数量),不得输出任何额外内容。`
`
3.5数据路径
tool schema路径:
/vepfs/sf_LLM/fy_2026/toolCall/customer_agent/customer_agent_117intent.yaml
- 丰晓易
4.1 数据构造:
以账单推送为例,输入为用户单轮的要求:
{`
` "messages": [`
` {`
` "role": "user",`
` "content": "帮我推送一下0123456789 6月账单"`
` },`
` {`
` "role": "assistant",`
` "tool_calls": [`
` {`
` "id": "call_001",`
` "type": "function",`
` "function": {`
` "name": "账单推送",`
` "arguments": "{\"account_id\": \"0123456789\", \"credit_period\": \"202506\"}"`
` }`
` }`
` ]`
` }`
` ],`
` "tools": [`
` {`
` "type": "function",`
` "function": {`
` "name": "账单推送",`
` "description": "帮助用户查询"月度结算账号"对应账期的账单,再推送到用户的邮箱,其中"月度结算账号"又称"月结账号"、"月结卡号"。",`
` "parameters": {`
` "type": "object",`
` "properties": {`
` "account_id": {`
` "type": "string",`
` "description": "需要查询或者推送的账单月度结算账号id,由10位纯阿拉伯数字组成,例如:"5325108988""`
` },`
` "credit_period": {`
` "type": "string",`
` "description": "提取需要查询或者推送的账单的账期,精确到月份,形式例如"202501"、"202502"、"202511",注意用户可能要求多个账期,都提取出来,以顿号连接,例如"202501、202502、202511"。如果用户没有提到年份,默认2025年,没有默认月份。"`
` },`
` }`
` }`
` }`
` }`
` ]`
`}`
`
4.2 模型效果
数据集为小易任务意图识别测试集,数据量为67条,包含3个意图。
|------|--------------|---------|
| PE版本 | 模型 | 意图识别准确率 |
| v1 | qwen3-max | 98.51% |
| v1 | glm-4.7 | 89.56% |
| v1 | deepseek-3.2 | 50.75% |
- 服务中心
5.1 数据样本
路径:
数据中包含了System Prompt
` `{`
`"conversations":` `[`
`{`
`"from":` `"system",`
`"value":` `"你是物流小助手,名字叫"小丰",可以调用API工具为快递小哥解决"国内/外收寄标准"、"时效运费"、"计提"、"路由"、"保鲜服务"等查询问题,也可以回答一定的物流领域专业知识问题,同时还可以与快递小哥聊天解闷。\n背景信息:默认寄件地:中国广东省河源市,默认寄件时间:2024-10-04 17:55:43。"`
`},`
`{`
`"from":` `"human",`
`"value":` `"假发河源寄到台湾假发能收吗寄河源市寄到台湾南雄市假发能收吗"`
`},`
`{`
`"from":` `"function_call",`
`"value":` `"{\"name\": \"国内收寄标准查询\", \"arguments\": {\"question\": \"假发从河源市寄到台湾南雄市的国际收寄标准\"}}"`
`},`
`{`
`"from":` `"observation",`
`"value":` `"{\"return\": \"默认寄件时间:2024-10-04 17:55:43,默认寄件地址:中国广东省河源市\\n请问要寄什么?\"}"`
`},`
`{`
`"from":` `"gpt",`
`"value":` `"假发可以寄到台湾,具体收寄条件请查看字幕。"`
`}`
`],`
`"tools":` `"[{\"name\": \"FAQ查询\", \"description\": \"输入顺丰内部相关问题,返回相应的答案\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"顺丰内部相关问题\"}}, \"required\": [\"question\"]}}, {\"name\": \"国内收寄标准查询\", \"description\": \"输入用户"大陆范围内物流收寄标准"相关的问题,返回相应的收寄标准信息\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"用户"大陆范围内物流收寄标准"相关的问题,注意问题中必须同时包含"收件城市"、"托寄物"信息\"}}, \"required\": [\"question\"]}}, {\"name\": \"国际收寄标准查询\", \"description\": \"输入用户"大陆范围外物流收寄标准"相关的问题,返回相应的收寄标准信息\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"用户"大陆范围外物流收寄标准"相关的问题,注意问题中必须同时包含"收件城市"、"托寄物"信息\"}}, \"required\": [\"question\"]}}, {\"name\": \"路由查询\", \"description\": \"输入形如"SF0261396282888"的订单号,返回相应的订单的物流状态,即物品送到哪了\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"输入包含物流订单号的问题,返回物流状态信息\"}}, \"required\": [\"question\"]}}, {\"name\": \"运费查询\", \"description\": \"输入多少公斤物品送到哪个城市,返回需要多少运费\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"物流运费相关问题,必须包含"收件城市"信息,可以不包含重量信息,默认1KG\"}}, \"required\": [\"question\"]}}, {\"name\": \"包装查询\", \"description\": \"输入某个物品如何包装的相关问题,返回该物品包装方式对应的网页连接。\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"查询某个物品如何包装的相关问题,注意问题中必须同时包含"物品"信息\"}}, \"required\": [\"question\"]}}, {\"name\": \"时效查询\", \"description\": \"输入寄到哪个城市,返回预计什么时刻前送达\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"物流时效查询相关问题,必须包含"收件城市"信息。\"}}, \"required\": [\"question\"]}}, {\"name\": \"增值服务查询\", \"description\": \"输入一个物品送到具体城市物流增值服务相关问题,返回该增值服务的费用。一般该增值服务为"保价服务"。\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"一个物品送到具体城市物流增值服务相关问题,问题中必须同时包含"具体收件城市"和"物品"信息\"}}, \"required\": [\"question\"]}}, {\"name\": \"计提查询\", \"description\": \"输入多少公斤物品送到哪个城市,快递员的计提,即赚多少钱\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"必须包含"收件城市"信息,可以不包含重量信息,默认1KG\"}}, \"required\": [\"question\"]}}, {\"name\": \"保鲜服务查询\", \"description\": \"输入某个物品保鲜相关问题,返回该物品是否有保鲜服务以及保鲜服务你费用\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"必须包含"物品"信息\"}}, \"required\": [\"question\"]}}, {\"name\": \"产品推荐查询\", \"description\": \"输入物流产品推荐相关问题,返回推荐的物流产品列表。\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"物流产品推荐相关的问题。\"}}, \"required\": [\"question\"]}}, {\"name\": \"物流订单妥投图片查询\", \"description\": \"输入形如"SF0261396282888"的订单号,要求返回该订单"妥投图片","妥投图片"是指物品派送完成后,快递员发给用户的快递照片。\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"包含形如"SF026139628288"订单号的要求查询订单"妥投图片"的相关问题。\"}}, \"required\": [\"question\"]}}, {\"name\": \"物流订单验视图片查询\", \"description\": \"输入形如"SF0261396282888"的订单号,要求返回该订单"验视图片","验视图片"是指物品派送完成后,快递员发给用户的快递照片。\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"包含形如"SF026139628288"订单号的要求查询订单"验视图片"的相关问题。\"}}, \"required\": [\"question\"]}}, {\"name\": \"物流录音查询\", \"description\": \"输入请求查询物流录音的相关问题,返回该快递员与用户交流的录音。\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"输入请求查询物流录音的相关问题,只需要表达查询物流录音的意图,不需要包含其他信息。\"}}, \"required\": [\"question\"]}}, {\"name\": \"服务分查询\", \"description\": \"输入请求查询物流服务分的相关问题,返回该快递员的服务评分。\", \"parameters\": {\"type\": \"object\", \"properties\": {\"question\": {\"type\": \"string\", \"description\": \"只需要包含物流服务分查询的意图,不需要包含其他信息。\"}}, \"required\": [\"question\"]}}]"`
`}`
`
5.2 测试方案
- 将工具转化为LangGraph的Tool对象;
- 调用cerate_agent接口创建工具调用Agent;
- 输入样本中的SystemPrompt和用户消息,查看模型输入的工具调用是否正确
- 目前仅测试单轮工具调用
- 使用领慧GLM4.6 模型
5.2 测试结果
单轮对话,可能会出现调用多个工具,以第一个为准,100个样本,准确率75%。
- 热线客服意图识别
测试样本825条,目标意图共75个
|--------------|---------|
| 模型 | 意图识别准确率 |
| qwen3-max | 58.58% |
| glm-4.7 | 58.15% |
| deepseek-3.2 | 输出格式有问题 |
七、 sft 实验结果
|--------|-------------------|-----------------------------|----------|
| 模型 | 数据来源与数量 | tool数量 | 训练长度 |
| V1 | 包含三个场景数据,各场景1千条数据 | 随机加载30个热线客服意图+全量意图+全量AI寄件意图 | ≈18000 |
| V2 | 包含三个场景数据,各场景1千条数据 | 三个场景所有意图共103个tools | ≈32000 |
|----|------|---------------|-------------|
| 模型 | 测试场景 | 推理tool数量 | 准确率 |
| V1 | 服务中心 | 16 | 71.9% |
| | | 103 | 13.7% |
| | 热线客服 | 75 | 53% |
| | | 103 | 41.3% |
| V2 | 服务中心 | 16 | 48.2% |
| | | 103(xg+寄件+热线) | 70% |
| | 热线客服 | 75 103 | 69.2% 59.4% |
0130 sft实验
|------|------------------------------|---------|------------------------------------|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 实验编号 | 模型训练方法 | 工具范围 | 数据集范围 | acc | 细节 |
| 1 | 使用各场景范围内固定工具,不做采样也不做随机 | inscope | 3场景 训练数据: sampled 8k | 0.8458 | fulltool_3场景 【fulltool_3场景】 |
| 2 | 使用各场景范围内工具,随机采样70% | inscope | 3场景 训练数据: sampled 8k | 0.7656 | 70tools |
| 3 | 使用各场景范围内工具,随机采样20~60个工具 | inscope | 3场景 训练数据: sampled 8k | 0.6704 | 20-60tools |
| 4 | 使用各场景对应固定工具,不做采样也不做随机 | inscope | 6场景 训练数据: sampled 16 k | 0.7965 | fulltool_6场景 【fulltool_6场景】 |
| 5 | 使用各场景对应固定工具,不做采样也不做随机 | inscope | 6场景 训练数据: sampled 60 k | 0.8136 | https://fsdocs.sf-express.com/doc/DS2xWSG1Lam9iTGJn 【fulltool_6场景_moredata】 |
| | | | | | |
train_data(sample 8k/16k): /vepfs/sf_LLM/fy_2026/toolcall_data/train_dataset_0201
train_data(sample 60k): /vepfs/sf_LLM/fy_2026/toolcall_data/train_dataset_0202
test_data: /vepfs/sf_LLM/fy_2026/toolcall_data/test_dataset_0201
base_data: /vepfs/sf_LLM/fy_2026/toolcall_data/full
方法说明:
full tool : 每个场景使用自己场景的(inscope)全量工具;
20-60tool :每个场景随机采样20-60个inscope工具;
70%tools :随机采inscope工具的70%
结论:
- 随机采样或降采样都无法通过冷启动SFT达到较好的效果,冷启动阶段采取各场景范围内固定工具 训练策略,建立较好的baseline去做强化学习
- 准确率:工具数量少 > 工具数量多的场景,工具多的场景天然难度高(工具分的越细,可能存在一二级关系,导致边界模糊,难度上升)
- 类别融合后(意图不明、FAQ、其他等)效果有提升
优化方向:
- 工具集添加少量outscope,增加分类难度,看是否有提升
- 增加更多数据训练
- 设计RL的奖励解决错误预测outscope等问题
八、RL奖励函数
使用类别匹配、格式匹配、think长度、outscope惩罚等多维度奖励函数


权重参数设置:
|-------------------------|-----|
| intent_weight | 0.5 |
| format_weight | 0.1 |
| scope_weight | 0.2 |
| length_constrain_weight | 0.2 |
长度奖励函数图像例子,窗口和收敛点可根据需要设置:

- RL训练结果
|-------|--------|--------------------------------|---------|
| 场景 | 准确率 | baseline(Fengyu-LLM-意图&实体-8B) | 差值 |
| AI寄件 | 95.23% | 94.4% | +0.83% |
| 小哥 | 78.27% | 93.5% | -15.23% |
| 热线客服 | 70.78% | 85.5% | -14.72% |
| 面客智能体 | 49.10% | / | / |
| 智能小丰 | 87.38% | | |
| 丰晓易 | 92.21% | | |
附录:
1. 20260122训练数据cot token数量统计
数据:
/vepfs/01453164/projects/tools_intent/tools_data/train_cot_0119.jsonl

- toolcall预测问题记录
【tool_call预测类别混淆分析】
- 类别统计
【3场景类别统计】

