摘要:大模型只会「说话」,不会发定位、发图片、打标签、建定时任务。冰石微信智能客服系统(以下简称「冰石机器人系统」)把 LLM 当作「决策大脑」,把微信/企业微信的真实操作封装成 18+ 内置工具,通过提示词 + 工具调用,即可在几乎不写业务代码的前提下,落地一套完整的招聘面试邀约与跟进机器人。本文以蓝领/服务业招聘场景为例,拆解设计与实现思路。


一、业务背景:招聘面试邀约到底要做什么?

典型招聘私域流程可以拆成两条线:

1.1 主流程(邀约漏斗)

步骤 机器人动作 业务目的
1 询问面试岗位 确认意向岗位
2 确认求职者年龄 过滤不符合要求的候选人
3 介绍工资待遇 建立预期、提高转化率
4 询问是否接受住宿 筛选异地/本地候选人
5 询问是否能两班倒 筛选排班适配度
6 收集电话和姓名 建档、后续联系
7 根据位置匹配面试中心 就近安排,降低爽约率
8 发送邀请函 定位 + 指路图 + 文字说明

1.2 跟进流程(生命周期触达)

时机 动作
面试前 2 小时 出发提醒
面试结束当天 询问面试结果,提醒次日入职
入职日早上 入职出发提醒
入职后 询问入职情况

1.3 标签体系

根据求职者每一轮回复自动打标签,例如:

  • 意向-普工 / 意向-质检
  • 年龄-不符 / 年龄-符合
  • 可住宿 / 不可住宿
  • 可两班倒 / 不可两班倒
  • 已邀约-茶园中心 / 已邀约-江北中心
  • 待面试 / 已入职 / 已流失

标签不是给人看的备注,而是 后续筛选、滴灌群发、人工接管的结构化数据


二、为什么选冰石机器人系统做基座?

很多团队的第一反应是:「接一个大模型 API,写个 Python 脚本监听微信消息不就行了?」

问题在于,招聘场景的真实复杂度不在「聊天」,而在 渠道能力运营闭环

能力 自研脚本 冰石机器人系统
个人微信 / 企业微信 / 闲鱼 各写一套 统一后台,多端复用
大模型多厂商接入 自己封装 后台配置 DeepSeek / 通义 / OpenAI 等
发文字 简单
发图片/文件/定位 各端 API 差异大 ✅ 内置 send_media / send_location
打标签 要自己对接 set_friend_remark_tag / wecom_contact_personal_label
定时提醒 自己写 cron ✅ 定时群发 + 滴灌群发
无回复自动跟进 自己写 timer ✅ 内置无回复续聊
人工接管切换 难做 switch_session_mode
管理后台 没有 Vue 管理端 + RBAC 权限

冰石机器人系统的定位:不是「又一个 ChatGPT 套壳」,而是 可配置的私域客服操作系统——LLM 负责理解与决策,系统负责执行。

系统回复优先级为:关键词 → FAQ → 大模型(含工具调用),适合把刚性规则(如年龄下限)交给关键词/FAQ,把灵活对话交给 LLM。


三、系统架构:LLM 是大脑,工具是手脚

实际动作

大模型

冰石机器人核心

消息渠道

个人微信 wxauto

企业微信第三方

消息接入 / 回调

IntelligentReplyService
智能回复服务

llm_tool_parse
解析工具调用 JSON

ToolExecutionService
工具执行服务

ToolRegistry
18+ 内置工具

DeepSeek / 通义 / OpenAI ...

发消息 / 图片 / 定位

打标签 / 改备注

创建定时群发

执行 Python 代码


四、核心问题:大模型只会输出文字,怎么发定位和图片?

这是本文的技术重点。

4.1 本质:Function Calling 的工程化落地

大模型 API 返回的是 文本 token。要让机器人发定位,不能指望模型「凭空生成一个微信定位气泡」——必须走 工具调用(Tool Calling)

  1. 在系统配置中 启用工具调用,并勾选所需工具;
  2. 在提示词中写清 何时调用哪个工具、参数格式
  3. LLM 输出结构化 JSON;
  4. 系统解析 JSON,调用真实工具;
  5. 工具执行结果可选地反馈给 LLM,生成最终话术。

冰石系统的解析逻辑在 parse_llm_response_with_tools() 中:从 LLM 回复里提取 tool_calls 数组,校验工具名是否在 当前聊天配置允许列表 内,再交给 ToolExecutionService 执行。

安全设计:即使模型「幻想」出一个工具名,未在后台勾选的工具也会被跳过,不会越权执行。

4.2 发送定位:send_location

企业微信场景可直接发地图定位气泡:

{
  "tool_calls": [
    {
      "tool_name": "send_location",
      "tool_type": "notification",
      "parameters": {
        "title": "南岸区茶园面试中心",
        "address": "重庆市南岸区某某路88号",
        "latitude": 29.510868,
        "longitude": 106.656882
      }
    }
  ]
}

对应工具实现见 backend/tools/send_location_tool.py,底层调用企业微信第三方 API 的 send_location_message

个人微信侧可用 send_favorite 发送收藏里的定位条目,或 send_media 发送指路图。

4.3 发送图片:send_media

邀请函里的「指路图」「门店外观图」:

{
  "tool_calls": [
    {
      "tool_name": "send_media",
      "tool_type": "file_operation",
      "parameters": {
        "media_type": "image",
        "file_path": "uploads/茶园中心指路图.jpg"
      }
    }
  ]
}

文件需预先上传到机器人 uploads 目录,或通过管理后台「文件上传管理」入库。

4.4 发送文字通知:send_notification

纯文字提醒(出发提醒、入职确认等):

{
  "tool_calls": [
    {
      "tool_name": "send_notification",
      "tool_type": "notification",
      "parameters": {
        "message": "您好,您的面试将在两小时后开始,请提前出发~",
        "recipient_type": "wechat"
      }
    }
  ]
}

未指定 recipient_id 时,默认发往 当前会话,适合 1v1 私聊跟进。

4.5 典型一轮「发邀请函」的工具编排

提示词中可要求模型 一次回复里顺序调用多个工具

1. send_location   → 发面试中心定位
2. send_media      → 发指路图
3. send_notification → 发文字邀请函(含时间、联系人、注意事项)
4. set_friend_remark_tag → 打标签「已邀约-茶园中心」「待面试」
5. update_customer_note → 写入面试时间、岗位等到客户备注

这正是「LLM 只说话,但机器人能干活」的关键:说话和执行解耦,执行走工具链


五、面试中心匹配:LLM + Python 工具

「根据求职者位置匹配最近面试中心」是 确定性逻辑,不建议完全交给 LLM 心算。

冰石系统提供 python_code_executor 工具,可在服务端执行 Python 计算:

# 提示词中嵌入的匹配逻辑示例(简化)
centers = [
    {"name": "茶园中心", "lat": 29.51, "lon": 106.65, "addr": "南岸区..."},
    {"name": "江北中心", "lat": 29.58, "lon": 106.53, "addr": "江北区..."},
]
# 根据用户说的区县/地标做字符串匹配或距离计算
user_location = "我在南岸"
matched = next(c for c in centers if c["name"][:2] in user_location or "南岸" in user_location)
result = matched  # 工具返回给 LLM,LLM 再组织话术并调用 send_location

更稳妥的做法是:把中心列表维护在后台 FAQ/商品库/配置文件,LLM 只负责 抽取用户位置意图,匹配逻辑走 Python 或关键词规则。


六、标签系统:让对话产生可运营的数据

6.1 个人微信:set_friend_remark_tag

{
  "tool_calls": [
    {
      "tool_name": "set_friend_remark_tag",
      "parameters": {
        "tags": "可住宿",
        "remark": "张三-普工-待面试"
      }
    }
  ]
}
  • 个人微信通过客户端 UI 自动化打标签;
  • 支持 remove_tags 先删后加,便于标签状态迁移(如 待面试已入职)。

6.2 企业微信:wecom_contact_personal_label

{
  "tool_calls": [
    {
      "tool_name": "wecom_contact_personal_label",
      "parameters": {
        "action": "add",
        "tag_name": "意向-普工"
      }
    }
  ]
}

无同名标签时会 自动创建 个人标签再打上。

6.3 本地会话目录标签

系统还在 chat_session_catalog 中维护好友会话的 tagstag_registry,与「从微信导入」「按标签筛选滴灌群发」联动——这是做 批量跟进 的基础。

6.4 提示词中的标签规范(重要)

参考系统内置的汽服私域模板(prompt_presets.py),标签闭环的最佳实践是:

  • 标签名白名单:在提示词里枚举允许的标签,禁止模型自造;
  • 状态机式迁移:每个对话阶段明确「打什么标签、删什么标签」;
  • 先工具后话术:确定关键信息后,先调用打标签工具,再回复用户

招聘场景标签示例:

用户回复 标签动作
「可以接受住宿」 +可住宿
「不能接受两班倒」 +不可两班倒 -可两班倒
确认参加茶园中心面试 +已邀约-茶园中心 +待面试
明确拒绝 +已流失

七、跟进流程:三种定时能力怎么选?

面试邀约的跟进涉及 绝对时间点(面试前 2 小时)和 相对时间点(用户沉默 30 分钟再追问),冰石系统提供三层能力:

7.1 无回复续聊(对话内跟进)

内置 llm_no_reply_followup:用户长时间未回复时,系统再次调用 LLM 生成 简短跟进话术,推动对话继续。

  • 适合:问完「能否接受住宿」后对方半晌没回;
  • 结束跟进:调用 cancel_no_reply_followup_wait 工具,避免已流失用户被反复打扰。

7.2 定时群发 / 大模型创建群发任务

create_broadcast_config 工具支持创建 daily / weekly / monthly / once 定时任务:

{
  "tool_calls": [
    {
      "tool_name": "create_broadcast_config",
      "parameters": {
        "name": "张三-面试前提醒",
        "schedule_type": "once",
        "schedule_time": "13:00",
        "start_date": "2026-06-21",
        "group_names": ["张三"],
        "message_type": "text",
        "message_content": "您好,两小时后面试开始,请带好身份证..."
      }
    }
  ]
}

底层走 UnifiedBroadcastService + SchedulerService,支持队列、重试、执行日志。

实践建议:确认面试时间的当下,让 LLM 调用 create_broadcast_config 创建 一次性 提醒任务;入职日早上同理。

7.3 滴灌群发(批量生命周期触达)

管理后台「顺序定时群发(滴灌式)」适合:

  • 待面试 标签好友批量发提醒;
  • 发送成功后自动打标签并写回本地目录;
  • 支持随机间隔、断点续传,避免封号风险。

滴灌是 运营侧独立功能,不是 LLM 工具——大批量触达建议人工在后台配置,LLM 负责 1v1 建档和打标。


八、完整提示词结构示例(招聘面试邀约)

下面是一段可放入「聊天配置 → AI 大模型提示词」的骨架(需按实际业务填充):

# 角色
你是XX人力资源公司的招聘顾问小冰,负责微信私聊中的面试邀约与跟进。

# 对话流程(严格按顺序,不可跳步)
1. 询问意向岗位(普工/质检/仓管...)
2. 确认年龄(要求18-45岁;不符则礼貌结束并打标签「年龄-不符」)
3. 介绍对应岗位工资待遇(见下方知识库)
4. 询问是否接受公司住宿
5. 询问能否接受两班倒
6. 收集姓名和手机号
7. 询问所在区域,匹配最近面试中心
8. 确认面试时间后,发送邀请函

# 知识库
## 岗位待遇
- 普工:综合 5000-7000,包吃住...
## 面试中心
| 中心 | 地址 | 经纬度 | 指路图文件 |
|------|------|--------|-----------|
| 茶园中心 | 南岸区... | 29.51, 106.65 | 茶园指路图.jpg |
| 江北中心 | 江北区... | 29.58, 106.53 | 江北指路图.jpg |

# 工具调用规范(必须遵守)
- 需要发定位、图片、打标签、建定时提醒时,**只输出 JSON**,不要编造已发送。
- 标签只能使用白名单:意向-*、年龄-*、可住宿、不可住宿、可两班倒、不可两班倒、
  已邀约-*、待面试、已入职、已流失
- 发邀请函时必须依次调用:send_location → send_media → set_friend_remark_tag
- 确认面试时间后,调用 create_broadcast_config 创建面试前2小时 once 提醒
- 用户明确拒绝时:打标签「已流失」,并调用 cancel_no_reply_followup_wait

# 输出格式
调用工具时,回复必须是合法 JSON:
{
  "tool_calls": [
    {
      "tool_name": "send_location",
      "tool_type": "notification",
      "parameters": { ... }
    }
  ]
}

系统已有行业预设模板(汽服私域等)采用了相同的 「阶段 + 工具 + 标签闭环」 写法,招聘场景可直接复用该模式。


九、部署与配置 Checklist

  1. 安装启动:运行 冰石微信智能客服系统.exe,浏览器打开 http://localhost:8000
  2. 大模型配置:「大模型设置 → 大模型配置管理」填写 API Key
  3. 聊天配置:为招聘号私聊会话绑定大模型 + 粘贴提示词
  4. 启用工具:「系统配置管理 → 启用工具调用 → 选择工具」勾选:
    • send_notification / send_media / send_location
    • set_friend_remark_tag / wecom_contact_personal_label
    • create_broadcast_config / update_customer_note
    • cancel_no_reply_followup_wait / switch_session_mode
    • (可选)python_code_executor
  5. 素材准备:指路图上传到 uploads/,企业微信定位经纬度预先录入知识库
  6. 验证工具清单GET /api/tool-calling/tools 核对当前实例可用工具

十、效果与扩展

10.1 这套方案的实际价值

  • 开发成本低:核心逻辑在提示词 + 工具编排,无需从零对接微信协议;
  • 可运营:标签 + 滴灌 + 定时群发,形成「邀约 → 到面 → 入职」漏斗;
  • 可降级:复杂客诉 switch_session_mode 一切人工;刚性规则走关键词/FAQ;
  • 可扩展python_code_executor、自定义插件工具可注册进 ToolRegistry

10.2 常见坑

问题 原因 解决
模型说「已发送定位」但实际没发 未输出工具 JSON 提示词强调「必须调用工具」
工具不执行 后台未勾选工具 系统配置里启用并保存
定位发不出 用了个人微信 企微用 send_location,个微用 send_favorite
标签乱了 模型自造标签名 提示词白名单 + 示例
提醒没触发 once 任务日期/时间错误 检查 start_date + schedule_time

十一、总结

招聘面试邀约机器人,表面是「聊天」,实质是 私域 CRM + 多渠道消息执行 + 定时触达 的组合问题。

冰石机器人系统的思路很清晰:

LLM 负责理解人话、走流程、做决策;内置工具负责发定位、发图、打标签、建定时任务——把「会说」变成「会做」。

对于技术团队而言,它提供了一套 可配置的客服基座:换一套提示词和工具组合,同一套系统可以服务招聘、汽服私域、闲鱼电商、企业微信 B2B 等不同场景——这正是「基座型客服系统」的核心价值。

本文基于冰石微信智能客服系统实际代码与文档整理,工具名称与接口以部署版本为准。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐