简介:这是一份面向AI电销机器人部署场景的轻量级源码包,主要服务于具备基础Linux操作经验的开发者、运维人员及希望快速上手AI语音销售系统的初学者。资源以部署教程与配置说明为核心,明确了4核8G Centos7.9.64系统、宝塔面板、Nginx、MySQL、PHP等前置环境要求,完整覆盖从环境准备、组件安装到站点配置、数据库初始化、定时任务添加及安装脚本执行的全流程。包体结构精简,共3个文件,以inscode配置文件为主,辅以html格式的说明页面和gitignore版本管理规则文件,便于用户对照操作与项目维护;整体压缩包仅6KB,属于轻量级快速入门型资源。目前已有106人学习,教程注重降低部署门槛,配有安装包地址和通俗步骤,适合按照指引一步步完成AI电销机器人的搭建,避免在环境配置与常见报错上走弯路。
1. 先拆清楚:这套AI电销项目源码到底解决了什么问题
先说一个不少团队踩过的坑。拿到一套带源码的AI电销机器人项目,第一反应往往是照README跑一遍,能跑通就以为万事大吉。但实际上,如果你不清楚这套系统在通话链路里承担了哪几个角色,后面调试起来会非常痛苦。
AI电销机器人本质上是一条完整的人机通话环。从电话呼出到通话结束,核心链条是:呼叫平台发起外呼 → 接通后把对方语音送给ASR识别成文本 → 对话系统(大模型或话术引擎)根据文本生成回复 → TTS把回复合成语音播放给对方 → 整个过程同步录音并转写存档。这套源码要解决的核心问题,就是把这五个环节串起来,并且保证延迟在人类听感可接受的范围内——通常从用户说完到机器人开口回应,不应超过1.5秒。
一个常见的认知误区是:把AI电销机器人等同于"接入了大模型就完事"。实际上,大模型只负责"生成回复文本"这一小段,真正的技术难点在于外呼通道的建立、ASR与TTS的选型、音频流的控制,以及整条链路的并发稳定性。所以你在部署前,必须建立这样一个心智模型:这是一套以通信为基础、以AI为大脑的集成系统,而不是一个单纯的大模型Demo。
如果你是第一次接触这类项目,我的建议是不要把源码当成黑盒直接跑,而是先按模块读一遍核心代码,明确每一条消息从"对方说话"到"播报回复"经过了哪些类、哪些队列。后面无论遇到静音、重复播放、延迟过高还是并发崩溃,你都能快速定位问题。
2. 部署前必须做对的技术选型,否则源码再漂亮也白搭
源码项目通常会给出推荐依赖,但它不会是万能解药。实际部署时你必须围绕三个关键口子做决策:大模型放哪跑、语音引擎用哪家、外呼网关怎么接。
2.1 大模型:本地部署还是调用云端API
这是第一个岔路口。如果目标客户群体对数据敏感、外呼量又大,强烈建议走本地部署路线。目前比较成熟的方案是用Ollama部署开源模型,比如Qwen系列或DeepSeek的蒸馏版本,显存占用控制在20GB以内完全可行。若服务器只有单张消费级显卡,7B到14B的量化模型也能跑出可用效果。
需要提前说清楚:本地部署大模型的优势是成本低、隐私好、无接口频率限制,但劣势也很明显,并发高了之后推理延迟会显著上升。电销场景下,同一时间可能有十几路通话都在请求推理,如果你的模型只能串行处理,那后延时会直接爆表。所以选型时要关注模型支持的并发策略,或者考虑在模型前面加一层队列,配合缓存机制来削峰。
如果外呼量不大、预算充足,直接用云端API更省心,但要注意网络的稳定性。实测中,云端API往往不是瓶颈所在,反而是ASR和TTS的接口耗时更容易拉高整体延迟。如果你的源码里把大模型请求和语音引擎请求都做成串行同步调用,那延迟会非常难看。
2.2 ASR与TTS引擎的选择逻辑
电销场景的ASR有特殊性:背景噪声多、说话人情绪不稳定、专业术语(产品名、价格、地名)频繁出现。所以不能只看通用识别准确率,还要看是否支持热词表。很多源码项目默认接的是通用ASR服务,实际跑起来会发现把"优惠套餐"听成"优惠炒菜"这类低级错误,如果不加热词,对话就会开始胡言乱语。
TTS方面,要优先选择支持流式返回的引擎。因为电销是实时交互,必须边说边合成,不能等整句合成完再播。源码里如果使用的是非流式TTS,建议直接换掉。实测下来,流式TTS能把首包延迟压到200毫秒以内,体感明显更自然。
还有一个容易忽略的点:ASR和TTS引擎要区分企业内部测试环境与生产环境的账号域名,很多团队在测试时用免费额度,上线时忘记切正式配置,结果随着通话量上来,接口开始报错或限流。这种问题往往在凌晨被报警吵醒时才被发现,极其掉头发。
2.3 外呼通道:SIP中继、云呼叫还是软电话
通信侧是源码项目差异最大的部分。有的项目直接集成SIP协议栈,能对接FreeSWITCH或Asterisk,走自己的SIP中继;有的项目则封装了阿里云、腾讯云的语音服务SDK,通过API发起呼叫;还有更轻量的方案,直接用软电话模拟人工操作,但这种方式稳定性差,不建议在生产环境用。
我的建议是:如果源码默认支持SIP话务网关,优先用它,因为可控性最高,录音、转写、呼叫状态都能自己拿。如果项目只接了云厂商API,就得评估一下厂商对“外呼”是否有频次管控、是否要求号码资质报备。很多团队在测试环境用虚拟号码随便打,一上生产就被运营商拦截,这类坑事先要排掉。
3. 环境准备:从裸机到依赖齐全,一步一步排干净
这段我按自己实际踩过的顺序来讲,而不是照搬官方文档。整个部署过程我建议用Docker Compose编排,这样依赖管理干净,后续迁移也方便。
3.1 服务器配置参考
先给一个最低配置,别被吓到:
- CPU:8核起步。ASR、TTS的编解码和信令处理挺吃CPU的,别只看大模型。
- 内存:32GB。其中Redis、数据库、语音引擎各占不少,别卡着16GB买。
- 硬盘:200GB SSD。录音文件和模型文件累积非常快。
- GPU:如果本地部署大模型,至少需要一张12GB显存以上的显卡;不部署大模型可以不要GPU。
当然这只是开发测试机标准。生产环境建议按在线并发数估算:1路并发通话大约需要2核CPU和4GB内存(不含大模型推理),你按10路并发倒推就行。
3.2 核心依赖清单
一套典型的AI电销源码项目,依赖项通常包括:
- Python 3.10+,用于业务服务、对话管理和Web管理后台
- Redis,用于缓存对话状态和队列
- PostgreSQL或MySQL,用于存储通话记录、话术配置、线索数据
- FFmpeg,用于音频格式转换
- Nginx,用于反向代理和管理后台
- Docker与Docker Compose,用于服务编排
- 语音引擎SDK(ASR/TTS)的Python包或gRPC客户端
如果你的源码里还带了WebRTC通话演示页,那还得装coturn之类的TURN服务,这个后面再说。
3.3 分步安装过程
第一步,先把系统基础依赖补上。以Ubuntu 22.04为例:
sudo apt update sudo apt install -y docker.io docker-compose-v2 ffmpeg git sudo systemctl enable --now docker第二步,克隆源码并确认目录结构:
git clone https://your-git-host/ai-tele-sales.git cd ai-tele-sales tree -L 2正常项目的结构应该是几个Docker容器服务:api(业务逻辑)、worker(异步任务)、media(媒体处理)、db、redis、web(管理后台)。如果目录结构里这些服务混在一个文件里,建议先花半小时拆清楚再继续。
第三步,修改根目录下的.env配置。这里最需要注意三组变量:
- 数据库连接串与Redis地址
- ASR/TTS的API密钥或内部服务地址
- 大模型的模型名称、API地址和并发数
第四步,构建并启动所有服务。看到所有容器都进入healthy状态,再用健康检查接口验证一遍:
docker compose --env-file .env up -d --build docker compose ps curl http://localhost:8080/health如果返回ok,说明基础环境已经通了一半。接下来要单独验证语音引擎和大模型的连通性。你可以直接用源码自带的小工具脚本测试,也可以用curl手动发一次请求,确认密钥和网络没问题再继续。
4. 源码导读:核心模块和调用链到底怎么走
很多人部署完项目就急着打第一通电话,结果一通话就卡死。因为源码项目通常默认不带演示数据,你需要先理解它的核心代码路径,才能知道该去哪里填配置、插话术。
4.1 模块划分
一套典型源码的代码目录大概是这样的:
call_control/:外呼控制模块,负责创建呼叫、监听状态、挂断asr/:语音识别适配层,封装不同的ASR引擎llm/:对话引擎,支持接入不同大模型tts/:语音合成适配层dialog/:话术状态机和多轮对话管理record/:录音文件管理和转写归档admin/:Web管理后台,用于线索导入和话术配置
拿到源码后,我建议先从call_control开始读,因为整个系统的入口就是从呼叫开始。你需要知道:外呼任务是由Web后台写入数据库,还是直接API触发?任务进Redis队列还是即时调用?这些决定了你后续怎么对接CRM线索。
4.2 一通电话的完整调用链
简化来看,一通电话的代码流程是:
- 后台创建外呼任务,把号码写入
call_tasks表 - 任务调度器将任务推送给外呼网关,发起SIP呼叫
- 对方接通后,媒体服务开始接收音频流
- 当检测到用户说话停顿,ASR模块把这段音频转成文本
- 文本传给对话管理模块,结合话术上下文调用大模型得到回复文本
- 回复文本传给TTS模块,合成音频并下发播放
- 整通结束,生成录音文件和转写记录,入库
其中你最容易出问题的地方在第4步和第6步。很多源码会把"用户停顿检测"做得非常粗糙,直接按固定时长截断。比如用户只说了"嗯"就被当成一句完整话送进ASR,大模型回复自然就对不上。这块如果源码没有做VAD(语音活动检测)或静音检测,建议后续自己补上,否则通话体验会非常断裂。
4.3 对话状态机:别让大模型彻底放飞
真正能落地的电销机器人,对话绝不能让大模型自由发挥。源码里通常会带一套话术状态机,比如:开场白状态 → 确认意图状态 → 产品介绍状态 → 解答异议状态 → 结束状态。每个状态下,给大模型的Prompt都是不同的,同时用约束条件去限制回复方向。
我在实际部署中发现,最有效的做法是给大模型按状态配置"不允许回答的内容清单"。比如在开场阶段,绝不主动谈价格;在客户问竞品时,只回答自家产品优势。如果源码里只有一段固定Prompt,那你要么改造它,要么在话术配置里把每个状态下的System Prompt写得极其详细。否则真实场景里客户随便绕一句,AI就容易脱离剧本。
5. 核心配置与冷启动:把话术、知识库、号码资质都填好
部署跑通不等于能用,还需要把业务数据准备齐全。这一章讲的是冷启动阶段要做的事。
5.1 话术配置的颗粒度
源码后台的"话术管理"字段通常会包含:场景名称、开场白、每轮追问、兜底回复、结束语。在配置时,不要只填一句开场白就完事。我建议最小可用话术也要覆盖五个分支:
- 客户直接挂断或无响应:三次重试后主动结束
- 客户有兴趣并询问细节:进入产品介绍分支
- 客户明确拒绝:礼貌结束并标记下次不打扰
- 客户说是本人但不需要:简单确认原因
- 客户要求人工回电:记录转人工工单
这套分支不是靠大模型自动产生的,而是你自己写进话术状态机的。源码项目通常提供一个图形化流程编辑器,如果没有,直接在JSON话术文件里配置也行。关键在于把每个分支的触发条件和后续动作定义清楚,而不是依赖大模型的临场发挥。
5.2 知识库的注入方式
AI电销不是纯闲聊,产品信息必须以知识库形式注入。比较常见的做法是给大模型配置RAG,把产品手册、常见问题、竞品对比做成向量库。源码里如果直接让大模型回答产品问题,那你要么接一个Dify这样的应用编排工具,把知识库和模型调用串起来,要么自己建一套向量检索服务。
我实测下来,对电销场景,RAG不一定非要很重。把产品常见问答整理成结构化文档,每次调用大模型前按关键词检索最相关的几条,拼进Prompt,效果就足够好。如果一上来就上完整RAG链路,维护成本反而高。
特别提醒:知识库里不要放任何违法违规的承诺。比如"保证最低价""无效退款"这类话术,容易让业务团队后续惹上纠纷。部署时可以顺手把知识库内容过一遍,过滤掉夸大宣传词汇。
5.3 号码与线路资质
很多部署教程都把这一步跳过了,但它恰恰是上线前最容易被卡住的环节。如果你用的是云厂商的语音服务,通常要求完成企业实名认证,并申请外呼号码。外呼到手机号码时,运营商对陌生号码的外呼频次有限制,一天呼出超过一定量就可能被标记骚扰。
所以源码里如果带了"高频外呼控制"模块,一定要启用,设置好每日每号的最大外呼量和频率间隔。如果没有,建议在任务调度器里加一个限流阀。别为了冲刺业绩把线路打死,得不偿失。
6. 跑通第一通电话后,立刻要处理的四个细节
第一通电话成功,代表链路通了,但这只是开始。这一步最容易暴露问题,我按出现频率排序,给你排雷。
6.1 录音转写不同步
很多项目的源码里,录音与ASR转写是两条独立链路。通话结束后,录音文件先落盘,再异步转写。结果你查看通话记录时,发现自己明明打了电话,转写内容要等一两分钟才出现。如果管理后台的"通话详情"页面读的是转写表,就会出现"查不到对话"的错觉。
解决思路是:把录音文件和转写片段的关联ID做成同一通电话的call_id,同时在转写完成前,先显示录音文件的播放入口。这样至少业务人员还能听录音,不用干等转写。
6.2 打断和双讲处理
正常通话中,客户经常会打断机器人的播报。如果源码没有做"边播边听"(即TTS播放过程中同时持续做ASR),客户一说"等一下"机器人还在自顾自说,体验非常差。不少项目只做了简单的按键打断,电话场景下根本没人按键盘,这个功能等于没有。
如果源码没有基于音量检测的打断机制,建议规划一个迭代:当ASR识别到客户输入且置信度足够时,立即停止TTS播放并进入听音状态。处理完这个细节,整个通话的"真人感"会有质的提升。
6.3 已接通但静音的情况
外呼接通后,可能对面没有声音。源码里的默认逻辑往往是把静音当作一次超时重试,重试两次后自动挂断。但更合理的方式是让AI主动问候一次:"您好,请问能听到吗?"用语音交互判断线路质量。这个优化点虽小,但在实际电话营销中能挽回不少本来有效的线索。
6.4 转人工的语义判定
如果源码只在话术状态机里提供"转人工"按钮,没有自动识别客户主动要求人工的意图,那业务侧会非常辛苦。建议在对话管理里加一条规则:当大模型的回复文本命中"人工""真人""客服"等关键词,或者ASR识别到客户情绪消极且连续两次表达拒绝时,自动生成工单并转给人工坐席回拨。这个规则可以在对话服务里直接实现,不需要改通话底层的代码。
7. 稳定性与性能调优:并发压测后你会遇到的真问题
部署完能跑只是及格线。真正考验项目的,是10路、30路并发同时外呼时,系统还能不能稳。
7.1 并发瓶颈定位
实测经验表明,绝大多数项目的瓶颈不在大模型,而在媒体服务的并发能力。因为每路通话要持续消耗内存和CPU做音频编解码,如果媒体服务是单实例单进程,承受不了太多并发。源码里如果媒体服务是Python写的GIL限制,那并发能力会更有限,建议将媒体服务拆成多实例,用Redis或消息队列做负载均衡。
我遇到过一次非常离谱的线上事故:30路并发外呼,结果系统崩溃,排查发现是TTS服务的连接池没有复用,每句话都新建连接,把服务端连接数打爆了。改成长连接复用后,稳定性和QPS瞬间就上来了。所以压测时除了关注响应时间,还要盯住连接数、文件句柄数和内存增长曲线。
7.2 音频文件的磁盘清理
录音文件是硬盘杀手。按每小时50通电话、每通录音5MB计算,跑一天就产生6GB左右的文件。如果源码默认没有清理机制,一个月下来磁盘必然爆满。部署时建议直接加一个定时任务:保留最近30天的录音,更早的转存到对象存储或直接删除。
压缩这一步也别省。大部分录音是单声道8kHz的WAV格式,转成MP3或AAC后体积能缩小七八成。FFmpeg一行命令就能搞定。
7.3 大模型调用的超时与降级
对话引擎调用大模型时,不能把超时设得太大。电销通话是实时场景,模型如果超过3秒没返回,客户早就挂电话了。我给一个稳妥的降级策略:大模型调用设2.5秒超时,超时后回退到话术状态机里的兜底回复。如果连续三次都超时,直接切换成固定话术模板模式,保证通话不中断。
本地部署大模型时,还可以考虑用max_tokens限制回复长度。电销回复一般控制在50字以内就够了,字段设太大反而浪费算力、拉长延迟。这个细节很多人没意识到。
7.4 监控与告警
项目跑起来之后,至少要监控三个指标:接通率、平均通话时长、对话错误率。源码后台如果自带数据看板最好,没有的话用Zabbix或Prometheus+Grafana做基础告警。重点不是看数据曲线漂不漂亮,而是当ASR/TTS接口返回5xx错误、Redis内存暴涨、录音文件堆积过快时能第一时间收到通知。
另外每天跑一个"自动外呼拨测"任务:用固定号码给系统打一通测试电话,确认ASR、LLM、TTS全链路正常。这个拨测任务可以用Crontab调用管理后台的测试接口实现,别等客户投诉了才发现服务挂了。
8. 我给新团队的两条部署建议
最后说两条经验,不写总结,就当是送你的实战提醒。
第一,源码项目拿到手不要急着改代码。先原封不动跑通、打一通测试电话、录一段音、看一遍转写。把默认链路里的所有环节都摸一遍,再决定改哪里。很多团队一上来就嫌界面丑、嫌话术模板不对,改了一堆前端代码,结果核心通话链路里藏着的基础bug还没发现。等真上线时才发现问题,改动成本成倍增加。
第二,话术和模型的调优要分开做。话术问题是业务问题,由运营人员反复调整;模型问题是技术问题,由开发人员通过提示词、知识库和参数调优来解决。如果混在一起,你会发现每次改话术都要研发发版,测试一次两三天,迭代速度慢到崩溃。最好在后台把话术配置做成可热更新的,改完立即生效,模型侧保持相对稳定,只做周期性优化。这样整个系统跑起来才能又快又稳,而不是一直在"修修补补"。
本文还有配套的精品资源,点击获取