夜雨聆风学习资料网

ARTICLE · 1175430

AI获客软件,普通人也能自己写——原理、代码、成本、红线,一篇讲透

AI获客软件,普通人也能自己写——原理、代码、成本、红线,一篇讲透

销售每天抱着手机加人、发话术、被拒、被拉黑;老板交了几万块买「全自动获客系统」,两周后发现就是群发器,账号还被封;你自己会打字、会用AI,看着市面上动辄几万一年的获客系统,心里犯嘀咕:这东西我也能写吗?

能。但要先接受一个残酷前提:AI获客软件里,真正值钱的从来不是代码,而是「合规的线索来源 + 你真的懂客户」。代码只是把这两样东西自动化的工具。本文分七块讲透:四种形态、六层架构、技术选型、三个核心原理、180行可跑代码、商用化五件事、三条合规红线与成本账。

别急着交那笔几万块的「智能获客系统」年费,先花20分钟搞清楚——它到底是怎么运转的。

01 先分词:所谓「AI获客软件」,其实只有四种形态

市面上所有叫「AI获客」的东西,全部可以归到下面四类。搞清楚这一点,比看一百篇测评都有用。

形态

说白了干什么

典型形态

技术难度

合规风险

AI外呼

机器人打电话初筛客户

电话机器人、智能客服坐席

中

高

线索挖掘

从公开信息里找潜在客户并打分

企业名录库、意向评分系统

中

中

私域承接

加进来之后的自动应答、分层、跟进

企微 SCRM 、 AI 销售助手

中

低

内容获客

AI 批量生产内容,多平台分发引流

短视频矩阵、图文分发

低

低

图1 四种「AI获客」形态:只有三种适合自己写

怎么选,一句话:

·个人和小团队:老老实实做「线索挖掘 + 私域承接 + 内容获客」,这三块可以完全合规地自己写。

·AI外呼:能不做就不做。它是唯一一个「技术在你这、风险也在你这」的形态,后面第7节会讲清楚为什么。

所以本文的代码,聚焦在前三类。这也是普通人唯一走得通的路。

02 拆开看:一个获客系统就是六个模块

不管你是自研还是买SaaS,架构都一样,就是这六层:

① 线索入口层→② 清洗画像层→③ AI评分层          ↓          ⑥ 数据回流层←⑤ 会话承接层←④ 触达执行层

① 线索入口层——钱都花在这儿。线索从哪来?合规的来源只有这几种:官网/落地页表单留资;公众号、视频号、朋友圈互动留资;直播/线下活动的报名表;客服咨询转介;公开的企业工商信息、招投标公告、行业展会名录(注意:是「企业公开信息」,不是「个人手机号」)。技术实现就是「接收 + 入库」:一个HTTP接口 + 一张表。

② 清洗画像层——脏数据不配进CRM。重复、缺字段、乱码、广告灌水,都会让后面AI的判断变蠢。这一步做三件事:去重(按手机号/公司名)、补全(从公司名反查行业规模)、打标(来源渠道、地域、行业)。

③ AI评分层——整个系统的大脑。让大模型读线索原文,输出一个0-100的意向分和一个建议动作。这一步决定了销售第二天先给谁打电话。

④ 触达执行层——最需要克制的一层。只有两种合规做法:官方API(企业微信客户联系、公众号客服消息、平台开放平台)和人工执行。任何「模拟真人操作绕过平台风控」的方案,都在给自己埋雷。

⑤ 会话承接层——把知识库接给AI。客户问「你们和XX家比有什么优势」,AI得答得出来。做法是RAG:把你的产品资料、案例、报价规则切片入库,让模型基于你的资料回答,而不是自己编。

⑥ 数据回流层——让系统越用越准。哪条话术回复率高?哪个渠道的线索转化好?这些数据回流到评分提示词里,系统才会进化。没有这一层,你的系统永远停在第一版。

图2 AI获客系统六层架构:⑥的结果回流到③,闭环才算跑通

一句话总结:获客软件 = 接收线索 → 打分排序 → 生成话术 → 合规触达 → 智能应答 → 数据回流。

03 技术选型:别造轮子,全部用现成的

很多人一想到「写软件」就头大。其实2026年做这类工具,栈非常固定,而且都有现成方案:

层次

推荐方案

为什么

语言

Python

大模型生态最全, AI 写的代码质量最高

后端框架

FastAPI

一个文件就能起 HTTP 服务,自带接口文档

数据库

自用 SQLite ,多人 PostgreSQL

SQLite 零配置,一个文件就是数据库

任务队列

Redis + Celery (简单场景直接while + sleep )

批量任务要限速、要重试

大模型

DeepSeek / 通义千问 / Claude / GPT

都兼容OpenAI接口协议,换模型只改两行

前端后台

先用FastAPI自带的简单 HTML ,后期再上低代码

别在 UI 上浪费第一周

部署

本地电脑跑自用,云服务器跑多人在线

自用阶段零成本

关键认知:这些技术栈你不需要会写,你需要会「说清需求」。用 WorkBuddy / Claude Code / Codex 这类工具,你把第二步画的那张六层架构图丢进去,让它一层一层实现,它就是你的程序员。

换模型的成本是零。所有主流厂商都兼容 OpenAI 的接口协议,意味着你写 base_url 和 api_key 两行,就能从 DeepSeek 切到通义,或者反过来。这是2026年做AI应用最大的红利——不要把系统绑死在某一家模型上。

04 三个核心原理:不懂这些,代码就是废的

评分、话术、触达,各讲一个原理。这三个原理想明白了,代码才不是废的。

原理一:AI线索评分 = 把销售的老经验,变成一段提示词

老销售看一眼线索就知道「这人靠不靠谱」。AI做的事,就是把这段经验翻译成规则:

维度

问什么

权重参考

需求明确度

他有没有说清要解决什么问题?

30%

预算信号

有没有提到价格、预算、比价?

25%

决策权重

是他拍板,还是「我问问领导」?

25%

时间紧迫度

有没有提到「这个月」「尽快」「项目节点」?

20%

评分提示词的三条铁律:

·规则要量化。写「判断意向高低」没用,要写「90-100分:需求明确+有预算+是决策人+30天内落地」;

·强制结构化输出。必须让它只吐JSON,否则你没法写程序去接;

·必须给出理由。没有理由的分数,销售不会信,也就不会用。

原理二:AI写话术 = 用客户的「原话」当饵

群发消息为什么被拉黑?因为它对每个人说的话一模一样。

AI话术的杀手锏是引用客户自己说过的具体问题。第一句就命中他自己提过的痛点,他会觉得「这个人在认真看我的问题」——这是群发永远做不到的。

要写进提示词的约束(很重要):

·字数80-120字,微信一屏读完;

·第一句必须复述客户的原话或原场景,禁止「您好,我们是XX公司」;

·中间给一个具体的价值点(一个数据、一个案例、一个方法),不许空承诺;

·结尾一个轻问句,把决策权交回客户;

·禁用词清单:亲、保证、最低价、包过、百分百。

原理三:自动化触达——三种实现方式,只有一种能用

方式

原理

合规性

结论

官方API

走企业微信、公众号、平台开放平台的授权接口

合规

唯一推荐

半自动

程序生成内容 + 任务列表,人工点击发送

合规

冷启动最优

RPA/模拟点击

模拟人在手机上操作,绕过平台限流

违规

别碰

第三种是市面上「全自动加粉软件」的通用做法。短期看着爽,一旦被平台识别,轻则封号清零,重则——第7节细说。

一句话总结:评分靠量化提示词,话术靠复述客户原话,触达只走官方API或人工。

05 手把手:180行跑通「AI线索打分 + 个性化话术」

下面这套代码是完整可跑的。它做三件事:读线索 → AI打分分级 → 生成个性化触达话术,并把结果存库。

先明确边界:这套代码只做「分析与生成」,不自动发消息。发送动作由你自己在官方渠道完成。这不只是保守,这是唯一能长期跑下去的做法。

(这套代码我已经在本地跑通了一遍,含一个不消耗API额度的离线自测脚本,跟着下面的步骤走,半小时内你就能看到结果。)

5.1 环境准备

mkdir ai-lead && cd ai-lead          # 建虚拟环境(Windows)          python -m venv venv          venv\Scripts\activate          # 装依赖          pip install fastapi uvicorn openai          # 配置你的模型密钥(以 DeepSeek 为例,便宜且国内直连)          # Windows PowerShell:          $env:DEEPSEEK_API_KEY="sk-你的密钥"

目录结构:

ai-lead/          ├── core.py# 内核:建表、打分、生成话术          ├── pipeline.py# 批量流水线          ├── app.py# 网页后台(看线索、看话术)          └── leads.db# 数据库(自动生成)

5.2 内核 core.py

# -*- coding: utf-8 -*-          """AI 获客内核:线索评分 + 个性化话术生成(只分析,不群发)"""          import os          import json          import sqlite3          import logging          from openai import OpenAI          logging.basicConfig(level=logging.INFO,          format="%(asctime)s %(levelname)s %(message)s")          log = logging.getLogger("ai-lead")          DB_PATH = os.getenv("DB_PATH", "leads.db")          # ---- 1. 模型客户端:兼容 OpenAI 协议,换模型只改这两行 ----          client = OpenAI(          api_key=os.getenv("DEEPSEEK_API_KEY", ""),          base_url=os.getenv("LLM_BASE_URL", "https://api.deepseek.com/v1"),          )          MODEL = os.getenv("LLM_MODEL", "deepseek-chat")          # ---- 2. 建表 ----          SCHEMA = """          CREATE TABLE IF NOT EXISTS leads (          idINTEGER PRIMARY KEY AUTOINCREMENT,          nameTEXT,          companyTEXT,          sourceTEXT,-- 官网表单/公众号/活动/客服转介          rawTEXT,-- 客户原始信息(表单内容、聊天记录)          scoreINTEGER,-- AI 意向分 0-100          levelTEXT,-- A/B/C/D          reasonTEXT,-- 评分理由          next_action TEXT,-- 建议下一步动作          pitchTEXT,-- AI 生成的个性化话术          statusTEXT DEFAULT 'new',-- new/scored/pitched/done          created_atTEXT DEFAULT (datetime('now','localtime'))          );          """          def init_db():          with sqlite3.connect(DB_PATH) as conn:          conn.executescript(SCHEMA)          # ---- 3. 意向评分 ----          SCORE_SYSTEM = """你是资深 B2B 销售运营分析专家。请根据客户线索判断成交意向强度。          评分标准:          - 90-100(A级):需求明确 + 有预算 + 是决策人 + 30天内要落地          - 70-89(B级):痛点明确,但预算或时间未定          - 50-69(C级):只是在了解,暂无明确需求          - 0-49(D级):非目标客户或疑似骚扰          只输出 JSON,不要任何多余文字,结构如下:          {"score": 0, "level": "A", "reason": "40字以内", "next_action": "20字以内"}"""          def score_lead(name: str, company: str, raw: str) -> dict:          """调大模型给线索打分,返回结构化结果"""          user_msg = f"客户姓名:{name}\n公司:{company}\n线索原文:{raw}"          resp = client.chat.completions.create(          model=MODEL,          messages=[          {"role": "system", "content": SCORE_SYSTEM},          {"role": "user", "content": user_msg},          ],          temperature=0.2,          response_format={"type": "json_object"},# 强制输出 JSON          )          data = json.loads(resp.choices[0].message.content)          data["score"] = max(0, min(100, int(data.get("score", 0))))          if data.get("level") not in ("A", "B", "C", "D"):          data["level"] = "C"          return data          # ---- 4. 个性化话术生成 ----          PITCH_SYSTEM = """你是一名从业10年的金牌销售,风格:真诚、专业、不油腻。          请根据客户线索,写一条 80-120 字的首次触达消息(微信场景)。          要求:          1. 第一句必须呼应客户自己提过的具体问题,禁止群发口吻;          2. 中间给一个具体的价值点(数据、案例或方法),不要空承诺;          3. 结尾用一个轻问句,把决策权交回客户;          4. 禁用词:亲、保证、最低价、包过、百分百、全网最;          5. 只输出消息正文,不要任何解释。"""          def make_pitch(name: str, company: str, raw: str, info: dict) -> str:          user_msg = (          f"客户:{name}({company})\n"          f"线索:{raw}\n"          f"AI 判断:{info['level']}级,理由:{info['reason']}\n"          f"建议动作:{info['next_action']}"          )          resp = client.chat.completions.create(          model=MODEL,          messages=[          {"role": "system", "content": PITCH_SYSTEM},          {"role": "user", "content": user_msg},          ],          temperature=0.7,# 话术要有点变化,别每次都一样          )          return resp.choices[0].message.content.strip()          # ---- 5. 数据库读写 ----          def add_lead(name, company, source, raw) -> int:          with sqlite3.connect(DB_PATH) as conn:          cur = conn.execute(          "INSERT INTO leads(name,company,source,raw) VALUES(?,?,?,?)",          (name, company, source, raw),          )          return cur.lastrowid          def pending_leads(limit: int = 20):          with sqlite3.connect(DB_PATH) as conn:          conn.row_factory = sqlite3.Row          return conn.execute(          "SELECT * FROM leads WHERE status='new' ORDER BY id LIMIT ?", (limit,)          ).fetchall()          def save_result(lead_id: int, info: dict, pitch: str):          with sqlite3.connect(DB_PATH) as conn:          conn.execute(          """UPDATE leads SET score=?,level=?,reason=?,next_action=?,          pitch=?,status='pitched' WHERE id=?""",          (info["score"], info["level"], info["reason"],          info["next_action"], pitch, lead_id),          )          def list_leads():          with sqlite3.connect(DB_PATH) as conn:          conn.row_factory = sqlite3.Row          return conn.execute(          "SELECT * FROM leads ORDER BY score DESC, id DESC"          ).fetchall()

5.3 批量流水线 pipeline.py

# -*- coding: utf-8 -*-          """批量跑线索:打分 + 生成话术。带限流,保护接口也保护对方。"""          import time          import core          def run(limit: int = 20, interval: float = 1.5):          core.init_db()          rows = core.pending_leads(limit)          if not rows:          print("没有待处理线索。")          return          print(f"本次处理 {len(rows)} 条线索\n" + "-" * 60)          for r in rows:          try:          info = core.score_lead(r["name"], r["company"], r["raw"])          pitch = core.make_pitch(r["name"], r["company"], r["raw"], info)          core.save_result(r["id"], info, pitch)          print(f"[{info['level']} {info['score']:>3}] {r['name']}({r['company']})")          print(f"理由:{info['reason']}")          print(f"话术:{pitch}\n")          except Exception as e:          print(f"[跳过] {r['name']} 处理失败:{e}")          time.sleep(interval)# 限流,防止把接口打爆          if __name__ == "__main__":          # 造三条测试线索(真实场景来自你的表单/公众号后台)          core.init_db()          core.add_lead("张工", "某市政建设集团",          "官网表单",          "问你们做不做桥梁钢结构深化设计,我们有个项目下个月要开工,"          "工期比较紧,想先了解下你们做过哪些类似的桥,预算大概200万左右。")          core.add_lead("李经理", "某贸易公司",          "公众号留言",          "随便看看,先了解下。")          core.add_lead("王总", "某建筑设计院",          "活动报名",          "我们院想找长期合作的深化设计团队,院长让我先摸底,"          "年底前希望能定下来一家。")          run()

跑一次你会看到类似这样的输出:

[A95] 张工(某市政建设集团)          理由:需求明确、提到开工时间与预算、直接对接人          话术:张工您好,看到您提到下月开工、工期紧,这类情况我们在XX桥项目上……          [C55] 李经理(某贸易公司)          话术:李经理您好,您说先了解一下,我把我们做过的三个同类项目整理成……          [B82] 王总(某建筑设计院)          话术:王总您好,您提到院里要找长期合作团队、年底前定下来……

A级线索第二天第一个打,D级直接归档。销售的一天就省下来了。

5.4 网页后台 app.py

# -*- coding: utf-8 -*-          """最简单的获客工作台:浏览器打开 127.0.0.1:8000 就能看"""          from fastapi import FastAPI          from fastapi.responses import HTMLResponse          import core          app = FastAPI(title="AI 获客工作台")          core.init_db()          COLOR = {"A": "#c0392b", "B": "#c4693a", "C": "#7f8c8d", "D": "#95a5a6"}          @app.get("/", response_class=HTMLResponse)          def home():          rows = core.list_leads()          items = ""          for r in rows:          c = COLOR.get(r["level"] or "C", "#7f8c8d")          items += f"""             .......你就有了一套自己的获客看板。

5.5 已经跑通了,接下来怎么进化

跑通上面这套大约需要一个下午。然后按这个顺序加功能:

·接入真实线索源:把官网表单提交、公众号关注事件,用webhook打到你自己的接口上;

·加RAG知识库:把你的产品资料、案例库切片向量化,让AI能答具体问题;

·加回流统计:记录每条话术的回复率,把高回复率的话术样本喂回提示词;

·再考虑触达:接企业微信官方接口或平台开放平台,做合规的自动化触达。

注意顺序:先把「判断准不准」做对,再谈「发得快不快」。判断不准,发得越快死得越快。

06 从Demo到商用,还差五件事

上面是Demo。真拿去跑业务,下面五件事一件都躲不掉:

第一件:限流与稳定性。批量任务必须排队、限速、失败重试。用 while + sleep 只能在几十条级别凑合,上百条就得上 Redis + Celery。同时给你的模型调用加超时和降级——大模型接口偶尔抽风是常态,不能让它拖垮整个流程。

第二件:数据安全。客户信息是敏感数据。最起码做到:传输加密(HTTPS)、敏感字段脱敏存储(手机号中间四位)、数据库不对外网开放、密钥走环境变量而不是写死在代码里(上面代码已按这个写)。如果客户量大或涉及强监管行业,必须私有化部署——这也是为什么很多企业选开源模型:数据不出自己的服务器。

第三件:多租户与权限。一旦你不是自己用,而是给公司多个销售用,就要加账号体系、数据隔离、操作日志。这块很枯燥,但它是「工具」和「产品」的分水岭。

第四件:知识库的持续维护。AI客服答得准不准,取决于你的知识库有没有人维护。这不是技术问题,是管理问题。定一个规矩:产品资料更新后48小时内必须同步知识库,否则AI就会拿着过期报价去应答客户。

第五件:效果归因。到底哪个渠道的线索最值钱?哪句话术回复率最高?没有数据回流,你永远在凭感觉优化。至少记录四个字段:线索来源、评分、话术版本、最终结果。

一句话总结:Demo拼的是AI能力,商用拼的是工程能力和管理能力。

07 三条红线:比技术重要一百倍

这一段不是免责声明,是决定你能不能长期做下去的生死线。先把法律依据摆出来,都是有据可查的:

红线一:未经同意,不得打商业电话、发商业短信。《中华人民共和国消费者权益保护法实施条例》明确:经营者未经消费者明确同意,不得向消费者拨打商业性电话、发送商业性信息。消费者取消后,必须立即停止。这条直接判了「买名单盲打」的死刑。所谓「AI外呼每天打几万个」的玩法,无论技术多先进,名单本身就不合法。

红线二:非法获取、买卖个人信息,可能构成犯罪。《中华人民共和国个人信息保护法》要求处理个人信息遵循合法、正当、必要、诚信原则,不得过度收集、违规使用。未经允许收集、倒卖手机号等信息,情节严重的涉嫌侵犯公民个人信息罪;为诈骗提供AI外呼技术支持,可能构成帮助信息网络犯罪活动罪。

处罚有多重?同一部法律第六十六条规定:违规处理个人信息、拒不改正的,处一百万元以下罚款;情节严重的,处五千万元以下或上一年度营业额百分之五以下罚款,并可责令暂停业务、吊销营业执照。不是「罚酒三杯」,是可能直接关停。

红线三:AI必须亮明身份,且要提供拒绝方式。《人工智能拟人化互动服务管理暂行办法》要求AI服务提供者落实信息披露义务,保障用户知情权,禁止用AI实施误导、欺诈、骚扰。《个人信息保护法》第二十四条也规定:通过自动化决策向个人推送商业营销,应同时提供不针对个人特征的选项,或提供便捷的拒绝方式。客户说「不要」,就必须停——这不是礼貌,是法定义务。

三条铁律,贴在墙上:

事项

能做

不能做

线索来源

客户主动留资、公开企业工商信息、公开招标公告

购买 / 爬取个人手机号、通讯录

触达方式

官方 API 、人工发送、已授权客户

无授权群发、模拟点击绕过风控

身份披露

主动说明是 AI 或机器人

冒充真人、伪造身份

拒绝权

一键退订、立即停止

反复骚扰、换号继续打

图3 三条红线:每一条背后都有明确的法条与处罚依据

补充一个信号:2026年8月起,三大运营商已同步开展线上售卡渠道专项整治,严禁外部平台售卖手机卡,从源头压缩「黑卡」流通。行业监管只会越来越紧。

合规的AI获客只有一条路:让客户主动来找你(内容获客),然后把他服务好(私域承接)。所有「绕过这一步」的捷径,都是在赌自己不会被查到。

08 成本账:花多少钱,花多少时间

最后算笔实在账。以「自用 + 小团队」为标准:

项目

自用版

小团队版( 5-20 人销售)

对外卖 SaaS

服务器

本地电脑 /0 元

云服务器约 ¥100-300/ 月

独立集群, ¥ 几千 / 月起

数据库

SQLite免费

PostgreSQL含在服务器内

需要高可用架构

模型 API

免费额度够玩,正式用几十元 / 月

¥300-2000/ 月(视调用量)

按量计费,需成本模型

开发时间

一个下午出 Demo ,两周可用

1-2 个月

6 个月以上,需团队

资质成本

无

无

增值电信业务许可等,合规成本高

合计

近零成本

¥500-2500/月

六位数启动

对比一下:市面上「全自动AI获客系统」的年费普遍在几万到几十万。

但请记住开头那句话——你省下的是代码钱,省不下的是「懂客户」这件事。AI能帮你把100条线索里的20条挑出来,但那20条要谈成,还是得靠你。

09 给三种人的三条路

如果你只是想让业务好做一点:别自己写。直接选一个合规的私域SCRM工具(重点看它有没有官方接口、有没有合规资质),把「自动应答 + 客户分层」用起来,一个月就能见效。自己写只在你需求非常特殊时才划算。

如果你会用AI、想自己搭:按第5节的代码跑通Demo,用WorkBuddy或Claude Code把你自己的业务规则喂进去,让它帮你补全触达层和数据层。一个下午起步,两周能跑通自己业务的完整闭环。这是2026年最值得投入的一项技能。

如果你想把它做成产品卖给别人:先解决合规,再谈技术。资质、数据来源、用户授权、审计能力——这四样任何一样缺了,商业模式都不成立。技术反而是最容易的那部分。

最后

AI获客这件事,本质上是把一个人从「体力活」里解放出来:不再需要一个个看线索、一条条想话术。

但工具再好,也只有两个东西决定结果:你的线索从哪来,你对客户有多懂。

代码只负责让这两件事跑得更快。别把它想得太玄,也别指望它替你搞定客户。

如果这篇文章帮你省下了一笔冤枉钱,点个赞,转给那个还在被「全自动获客系统」收智商税的老板。

相关学习资料