KAKAO功能聊天台(OpenRouter)
通过OpenRouter API, 工具使用(函数调用)능력评估并自动生成专业Excel报告的项目。
  
______________________________________________________________________
目录
| 部分 | 主要内容 |
|---|---|
| 项目简介 | 基准目的和评估哲学 |
| 配置数据集 | 单转/多转数据集详细结构 |
| 评估过程 | LLM-as-Judge评分流程和标准 |
| 结果分析 1306项最终评分结果摘要 | |
| 特定型号的特性和关键问题 | 每个型号的优势/劣势和发现的问题 |
| 核心代码文件 | 主要脚本角色和执行方法 |
| 使用指南 | 安装、设置、运行阶段指南 |
| 已解决的问题和常见问题解答 | 故障诊断和常见问题 |
______________________________________________________________________
项目简介
评估概述
功能聊天台测量LLM在韩语对话上下文中选择和使用工具(函数)的准确性。特别是超越了单纯的呼叫。 保持对话节奏的能力重点评估。
| 区分 | 详细信息 |
|---|---|
| 源代码 | Kakao FunctionChat-Bench |
评价语言韩语 |评分方式| LLM-as-Judge(基于GPT-4.1的自动评分)| |总规模|共1306个测试案例
评估类型和定义
| 类型 | 定义 | 正确模型的行为 |
|---|---|---|
| 呼叫 | 调用工具 | 选择正确的函数并提取参数(Arguments) |
| 完成 | 传达结果 | 用自然的韩语摘要回复工具运行结果 |
| 插槽 | 信息请求 | 如果缺少必需参数,请向用户提出其他问题 |
| 相关性 | 关联性判断 | 如果无法通过工具解决,请适当拒绝并说明 |
______________________________________________________________________
配置数据集
比较数据集(单转与多转)
此基准不仅包括单发呼叫,还包括与实际服务类似的连续对话环境。
数据集对话类型评估数量特征 |:---|:---:|:---:|:---| | 单调用 | 单转身(Single-turn) | 500件|测量立即为给定问题选择适当函数的能力| | 对话 | 多转弯(Multi-turn) | 200件|衡量您在保持之前的对话上下文的同时分阶段使用工具的能力| | 呼叫决策 |混合| 606件|衡量当前是否需要调用函数的能力
多转(Dialog)结构详细信息
在一个场景中,对话将累积并进行评估。
[ 대화 흐름 예시 ]
Turn 1 (Slot 평가)
User: "새 계정을 만들고 싶어요."
Assistant: "성함과 이메일을 알려주시겠어요?" (필수 정보 요청)
Turn 2 (Call 평가)
User: "이름은 홍길동, 이메일은 hong@example.com 입니다."
Assistant: tool_calls: create_user(name="홍길동", ...) (함수 호출)
Turn 3 (Completion 평가)
Tool: {"status": "success"}
Assistant: "계정 생성이 완료되었습니다." (결과 요약 응답)配置SingleCall难度
| 难度类型 | 候选函数配置 | 评估目的 |
|---|---|---|
1_exact | 1个答案 | 是否符合默认的函数调用格式 |
4_random | 1个答案+3个无关函数 | 在有明显差异的情况下的选择能力 |
4_close | 1个答案+3个类似域函数 | 区分细微功能差异的精度 |
8_random | 1个答案+7个无关函数 | 多选项搜索效率 |
8_close | 1个答案+7个类似域函数 | 在高难度情况下选择最佳函数的能力 |
______________________________________________________________________
评估过程
系统体系结构流程图
[ 입력 데이터 ] ─────────┐
(Query + Tools) │
▼
[ 평가 대상 모델 ] ─────── (OpenRouter API 호출)
(Response 생성) │
▼
[ 1차 검증 ] ─────────── (Exact Match 확인)
(정답과 일치 여부) │
▼
[ 2차 채점 ] ─────────── (LLM-as-Judge: GPT-4.1)
(Rubric 기반 평가) │
▼
[ 결과 산출 ] ─────────── (TSV 저장 및 Excel 리포트 생성)评分标准(Pass/Fail)
| 评估项目 | Pass标准 | Fail主要原因 |
|---|---|---|
| 呼叫 | 匹配函数名和所有参数(Key/Value) | 函数错误选择,缺少参数,生成幻觉值 |
| 完成 | 自然地传递结果值,不失真;按照JSON格式输出;语义扭曲;英语回复 | |
| 插槽 | 询问所有缺少的必要信息 | 只询问部分信息,不询问任何问题,以任意值调用 |
| 相关性 | 意识到不可能并适当拒绝 | 调用无关的函数,谎称做了不可能做的事情 |
______________________________________________________________________
结果分析
最终基准测试结果(完成1306项全部评分)
| 排名 | 型号 | Dialog(200) | SingleCall(500) | CallDecision(606) | 准确度 |
|---|---|---|---|---|---|
| 1 | Qwen3-32B | 47.5% | 85.8% | 31.7% | 54.8% |
| 2 | Qwen3-Next-80B | 42.5% | 80.0% | 32.7% | 52.3% |
| 3 | Qwen3-14B | 42.0% | 80.6% | 30.7% | 51.5% |
| 4 | Llama-3.3-70B | 48.0% | 41.6% | 10.7% | 28.3% |
| 5 | 米斯特拉尔·斯莫尔-24B | 47.0% | 16.0% | 31.7% | 28.0% |
______________________________________________________________________
特定型号的特性和关键问题
特定型号的详细分析
| 型号名称 | 优势 | 劣势 | 综合评价 |
|---|---|---|---|
| Qwen3-32B 以85.8%的支持率压倒性地排在第一位,以31.7%的支持率进行了一般的Tool-use特殊调整。性价比最高 | |||
| Qwen3-Next-80B | CallDecision 32.7%,最高80B,但综合得分低于32B,呼叫判断良好,但实际呼叫准确率32B更好 | ||
| Qwen3-14B | 与小型机型相比,SingleCall符合率为80.6% | Dialog略低于42.0% | 在轻量化环境中值得推荐的性能 |
| Llama-3.3-70B | Dialog 48.0%,整体排名第一 | CallDecision 10.7%,排名垫底 | 对话能力优秀,但没有Tool-use特殊调整 |
| 米斯特拉尔·斯莫尔-24B | 符合Dialog 47.0% | SingleCall 16.0%,最低 | 函数选择能力非常差 |
评估中发现的主要问题
| 模型 | 问题类型 | 详细信息 | 影响 |
|---|---|---|---|
| Llama-3.3-70B | CallDecision脆弱性 | 在需要函数调用的情况下,倾向于只用自然语言进行响应,或者在不必要的情况下强行调用CallDecision准确率10.7%(最低) | |
| 米斯特拉尔·斯莫尔-24B | 函数选择错误 | 在类似函数中找不到正确答案而选择其他函数的比率较高 | SingleCall准确率16.0%(最低) |
| 米斯特拉尔·斯莫尔-24B | tool_call_id格式 | 生成一个与标准格式不同的ID,导致解析错误 | 在代码级使用9位字母数字进行normalize处理 |
| Qwen系列 | 型号大小逆转 | 80B型号得分低于32B | Tool-use特殊调整版本比型号大小更重要 |
按用途推荐型号
| 用途 | 推荐模式 | 原因 |
|---|---|---|
| Agent角色(以Tool调用为中心) Qwen3-32B | SingleCall 85.8%,函数选择准确率最高 | |
| 聊天机器人回答(以对话质量为中心) Llama-3.3-70B Dialog 48.0%,自然对话能力最强 | ||
| 轻量化环境 Qwen 3-14B | 在14B尺寸下选择函数的准确率超过80% | |
| 均衡的性能 | Qwen3-Next-80B | 在所有类别中均符合性能要求 |
______________________________________________________________________
核心代码文件
项目结构
KAKAO-FunctionChat-Bench/
├── run_evaluation.py # [1] 전체 평가 자동화 스크립트
├── quick_test.py # [2] 빠른 검증용 테스트 스크립트
├── generate_excel_report.py # [3] Excel 리포트 생성기
├── .env # API 키 설정 (git 제외)
│
└── FunctionChat-Bench/
├── evaluate.py # [4] 벤치마크 엔진 (CLI 엔트리)
├── config/
│ └── openai.cfg # [5] Judge 모델 설정
└── src/
├── api_executor.py # [6] API 호출 및 재시도 로직
└── evaluation_handler.py # [7] LLM-as-Judge 채점 로직核心文件详细信息
编号文件名角色执行方法 |:---:|:---|:---|:---| | 1 | run_evaluation.py |自动完成5个模型的全面评估+报告生成| python run_evaluation.py | | 2 | quick_test.py |按类别取样后快速验证| python quick_test.py --sample-size 2 | | 3 | generate_excel_report.py |将TSV结果转换为Excel报告| python generate_excel_report.py | | 4 | evaluate.py |评估单个数据集(Dialog/SingleCall/Common)|请参阅下面的详细命令 | 5 | openai.cfg | Judge模型和API端点设置|直接编辑| | 6 | api_executor.py | OpenRouter API集成+指数回退重试|内部模块(直接运行X)| | 7 | evaluation_handler.py GPT-4.1 Judge调用+实时结果存储内部模块(直接运行X)
evaluate.py单独执行命令
# Dialog (멀티턴) 평가
python evaluate.py dialog \
--input_path data/FunctionChat-Dialog.jsonl \
--system_prompt_path data/system_prompt.txt \
--model "qwen/qwen3-32b" \
--api_key $OPENROUTER_API_KEY \
--base_url "https://openrouter.ai/api/v1"
# SingleCall (싱글턴) 평가
python evaluate.py singlecall \
--input_path data/FunctionChat-Singlecall.jsonl \
--system_prompt_path data/system_prompt.txt \
--tools_type all \
--model "qwen/qwen3-32b" \
--api_key $OPENROUTER_API_KEY \
--base_url "https://openrouter.ai/api/v1"
# CallDecision (호출 판단) 평가
python evaluate.py common \
--input_path data/FunctionChat-CallDecision.jsonl \
--model "qwen/qwen3-32b" \
--api_key $OPENROUTER_API_KEY \
--base_url "https://openrouter.ai/api/v1"______________________________________________________________________
使用指南
分步执行过程
| 步骤 | 工作内容 | 执行命令/方法 |
|---|---|---|
| 1 | 构建环境 | git clone 及 pip install -r requirements.txt |
| 2 | API设置 | .env 创建文件和 OPENROUTER_API_KEY 输入 |
| 3 | 运行测试 | python quick_test.py --sample-size 2 (用于验证) |
| 4 | 全面评估 | python run_evaluation.py (全部评分) |
| 5 | 检查报告 | reports/ 检查文件夹中创建的Excel文件 |
______________________________________________________________________
已解决的问题和常见问题解答
故障诊断摘要
现象原因解决方案 |:---|:---|:---| | 429速率限制 | Judge API调用速度限制| --num-threads 1 设置并应用指数回切| | 402学分不足 | API余额不足|立即处理失败,然后继续下一个案例(避免Skip) | 解析JSON错误 |模型输出格式不匹配|判断模型能力不足以处理Fail | | API密钥暴露风险 |保存配置文件中的评语| ${ENV_VAR} 支持通过格式注入环境变量|
常见问题(FAQ)
| 问题 | 答案 |
|---|---|
| 如何评价多回合对话? | 在包含所有先前对话历史记录的情况下,对模型的下一行为进行评分。 |
| 停止评估时从头再来吗?不是。结果将实时保存并从中断点恢复。 | |
| 可以更换Judge型号吗? | config/openai.cfg的 api_version可通过修改进行更改。 |
______________________________________________________________________
参考资料和许可证
| 项目 | 内容 |
|---|---|
| 源存储库 | Kakao功能聊天台 |
| 相关论文 | arXiv:2411.14054 |
| 许可证 | Apache许可证2.0 |
Based on FunctionChat-Bench by Kakao
