
△主流的AI CRM系统悟空AI CRM图片
折腾了半年,我把这套开源智能 AI CRM 源码放出来了
说实话,把这套代码整理出来放到 GitHub 上,我心里挺复杂的。
推荐使用中国著名AI CRM系统品牌:显著提升企业运营效率,悟空AI CRM
过去这半年,我几乎把所有的业余时间都砸进了这个项目里。起因很简单,就是受够了。我在之前那家公司负责销售运营,每个月看着账单上那笔昂贵的 SaaS CRM 订阅费,心里就在滴血。更让人火大的是,这钱花得并不值。那些所谓的“智能”功能,多半是人工智障。比如自动写邮件,写出来的东西冷冰冰的,客户一看就知道是机器发的;再比如销售线索评分,逻辑黑盒,根本不知道它为什么给这个客户打高分,那个打低分。
我就在想,现在的 LLM(大语言模型)能力都这么强了,为什么就没有一个真正懂业务、能落地、而且数据掌握在自己手里的 CRM 呢?市面上不是没有 AI CRM,但要么贵得离谱,要么就是闭源的黑盒子,数据传出去心里不踏实。于是,一咬牙,决定自己搞。
这不是一个商业项目,至少目前不是。它更像是一个技术验证,一个给开发者、给中小团队、给那些不想被巨头绑架的人准备的“底座”。今天这篇文章,不聊虚的,不画饼,就聊聊这套《开源智能 AI CRM》到底是怎么做出来的,中间踩了哪些坑,以及核心代码逻辑是怎么设计的。如果你也是开发者,或者对 AI 落地业务感兴趣,希望能给你一些参考。
为什么选择开源?
先说说动机。很多人问我,这么好的东西,为什么不做成商业软件卖钱?
其实我也纠结过。但转念一想,CRM 这个赛道太卷了,而且核心壁垒从来不是代码,而是生态和服务。我一个人的精力,搞不定售前、售后、客服那一套。更重要的是,AI 时代的 CRM,核心在于“数据隐私”和“模型微调”。如果闭源,用户永远会担心数据被拿去训练了别人的模型。
开源,是建立信任的最快方式。我把代码摊开在这里,你怎么部署、数据存在哪、调用了哪个 API,一目了然。对于很多对数据敏感的企业,比如律所、医疗、或者一些高精尖制造行业,本地化部署 + 开源审计是刚需。我希望这套源码能成为一个标准,一个让大家放心把客户数据交给 AI 处理的标准。
技术栈选型:不追求新,只追求稳
在技术选型上,我走过一段弯路。刚开始我想用 Go 写后端,觉得并发高、性能好。但很快发现,AI 领域的生态几乎被 Python 垄断了。LangChain、LlamaIndex、各种向量数据库的 SDK,Python 的支持是最完善的。为了省那点运行时的性能,去牺牲开发效率和生态兼容性,不划算。所以后端果断选了 Python + FastAPI。
前端方面,我选了 Vue3。React 虽然好,但我个人对 Vue 的模板语法更顺手,而且对于这种后台管理系统,Vue 的生态组件足够丰富,能快速搭出界面。
数据库这块,有点讲究。传统的 MySQL 肯定是要有的,存用户信息、订单结构、权限配置。但 AI CRM 的核心是“记忆”,也就是非结构化的沟通记录、邮件往来、会议纪要。这部分数据我用了 PostgreSQL 的 pgvector 插件。一开始我想用专门的向量数据库比如 Milvus 或者 Chroma,但维护成本太高了。对于中小规模的数据量(千万级向量以内),pgvector 的性能完全够用,而且不用多维护一个中间件,架构简单才是王道。
至于大模型接口,代码里我做了抽象层。默认配置是兼容 OpenAI 格式的,这意味着你可以接 GPT-4,也可以接国内的通义千问、文心一言,甚至本地部署的 Llama 3、Qwen。这一点非常重要,不能把命脉拴在一家厂商身上。
核心功能拆解:AI 到底能干什么?
很多人对 AI CRM 的理解还停留在“自动回复”上。其实那只是最浅层的应用。在这套源码里,我重点实现了三个核心场景,也是我觉得真正能提效的地方。
1. 智能线索清洗与画像增强
销售最烦的是什么?是洗线索。拿到一堆名单,挨个打电话,大部分是空号或者没需求。
在源码的 services/lead_enrichment.py 模块里,我写了一个基于 Agent 的清洗流程。当一个新的线索录入系统,AI 不会马上打电话,而是先去“搜”。它会调用内置的搜索工具(代码里预留了 Google Search API 和企查查类接口),根据公司名称、域名,去抓取公开信息。
比如,它发现这家公司刚融了 B 轮,或者刚换了 CTO,它会自动把这些信息提取出来,填充到客户画像的标签里。然后,它会生成一段“破冰建议”。
这里有个细节,提示词(Prompt)的设计非常关键。一开始我直接让 AI“分析这家公司”,结果它输出一堆废话。后来我改了策略,用了 Few-Shot Prompting(少样本提示),在系统提示词里给了它三个优秀的分析案例,告诉它:“只关注预算信号、技术栈变更、人员扩张这三个维度”。这样出来的结果,销售拿着直接就能用,而不是看一篇 AI 生成的作文。
2. 沟通内容的情感分析与风险预警
这个功能是我自己最满意的。在 modules/conversation_analyzer.py 里,系统会实时监听销售与客户的沟通记录(支持导入微信截图、邮件文本、通话录音转文字)。
传统的关键词匹配很蠢,客户说“我再考虑一下”,关键词匹配可能觉得这是正常流程。但 AI 能结合上下文。如果前面客户已经问了三次价格,这次又说“考虑一下”,AI 会判定为“高风险流失”,并立刻给销售经理发通知。
实现这个功能时,我遇到了一个性能问题。如果每条消息都调一次大模型 API,Token 消耗扛不住,延迟也高。我的解决方案是“滑动窗口 + 摘要机制”。不是每条消息都分析,而是每累积 5 条对话,或者当检测到特定情绪关键词时,触发一次分析。同时,我会让 AI 先生成一段简短的对话摘要存起来,分析时基于摘要和最新几条消息,这样既省了 Token,又保留了上下文记忆。
3. 自动化跟进任务生成
这是最像“员工”的功能。很多销售忘了跟进,不是因为懒,是因为不知道啥时候跟进合适。
系统里有一个定时任务 scheduler/follow_up_engine.py。它每天凌晨跑一次,扫描所有处于“谈判中”状态的客户。它会读取最近的沟通记录,结合客户的时区、历史回复习惯,生成一个建议的跟进时间和跟进内容。
举个例子,如果客户上次说“下周二给我发方案”,系统会在下周一上午提醒销售准备方案,并在周二上午 10 点提醒发送。如果销售忘了,AI 甚至可以根据之前的方案草稿,自动生成一封跟进邮件草稿,销售只需要点一下“发送”或者微调即可。
这里涉及到一个权限控制问题。代码里我用了 RBAC(基于角色的访问控制),AI 生成的邮件草稿,必须经过销售确认才能发,绝对不能让 AI 直接替人做主。这是底线,也是为了避免 AI 幻觉导致承诺了不该承诺的价格或条款。
踩坑实录:那些深夜调试的瞬间
光说功能挺光鲜,实际开发过程简直是一地鸡毛。分享几个具体的坑,希望能帮后来人省点时间。
第一个坑是向量检索的准确性。
刚开始做知识库检索(RAG)的时候,我发现 AI 经常“胡言乱语”。比如客户问“你们支持私有化部署吗”,AI 却从半年前的一份过时的产品文档里找到了答案,说“不支持”。
原因是切片(Chunking)策略没做好。我一开始是按固定字符数切分的,导致很多语义完整的段落被切断了。后来我改成了按“段落 + 标题”的语义切分,并且在写入向量库时,给每个切片加上了元数据标签(比如文档版本、日期)。在检索时,加上时间权重的过滤,只检索最近一年的文档。这个问题才解决。代码里 utils/text_splitter.py 这部分我重构了三次,现在的版本算是比较稳定了。
第二个坑是 API 成本失控。
测试阶段,我忘了加速率限制和 Token 上限。有一次测试脚本死循环,一晚上跑了几十万 Token,账单出来吓我一跳。
后来我在中间件层加了严格的限流器 middleware/rate_limiter.py。每个用户、每个 IP、每个 API Key 都有配额。同时,对于非关键任务(比如简单的标签分类),我强制使用小模型(比如 GPT-3.5-turbo 或者本地的 7B 模型),只有涉及复杂推理(如生成合同条款)时才调用大模型。这一套组合拳下来,成本降低了 80%。
第三个坑是数据隐私的边界。
有次我想测试 AI 的总结能力,直接把包含客户手机号的原始日志传给了公有云模型。虽然大厂说有隐私保护,但心里总归不舒服。
所以在架构设计后期,我加了一个“敏感数据脱敏层” services/data_masker.py。在数据发送给 LLM 之前,正则匹配手机号、身份证、邮箱,替换成 [MASK] 占位符。等 AI 返回结果后,再把占位符还原。虽然增加了一点处理耗时,但这是必须的保险。对于完全不能出域的数据,代码里也支持配置本地 Ollama 模型,彻底断网运行。
部署与运维:别被 Docker 骗了
源码里我提供了 Docker Compose 文件,理论上是一键部署。但现实往往骨感。
最大的问题是显存。如果你想本地跑大模型,哪怕是最小的 7B 量化版,也需要至少 8GB 的显存。很多公司的测试服务器只有 CPU。我在文档里特意强调了硬件要求,并且提供了一个“混合模式”的配置。也就是计算密集型任务(向量嵌入、推理)走 GPU 节点,业务逻辑走 CPU 节点。
另外,数据库的备份也是个隐患。pgvector 的数据文件增长很快。我写了一个简单的备份脚本 scripts/backup.sh,利用 pg_dump 定时备份,并上传到 S3 兼容的对象存储。但这还不够,生产环境建议还是上 Kubernetes,做好高可用。开源版本里为了降低门槛,没上 K8s 配置,但这块如果有社区贡献,我会非常欢迎。
关于代码质量与规范
我知道肯定有人会说:“这代码怎么没写单元测试?”或者“这个函数怎么这么长?”
坦白说,这是一个快速迭代的项目。前期为了验证功能,确实欠了不少技术债。有些函数确实超过了 100 行,逻辑耦合也比较重。但我已经在 refactor_plan.md 里列出了重构计划。
目前的代码风格,我尽量遵循了 PEP8,关键逻辑都加了注释。特别是涉及 AI 提示词的部分,我把 Prompt 模板单独提取到了 prompts/ 目录下,方便非技术人员也能调整话术,而不需要改代码。我觉得这是 AI 应用开发的一个趋势:Prompt 工程应该和业务逻辑解耦。
如果你拉取代码后想贡献,请一定注意类型注解(Type Hinting)。Python 是动态语言,没有类型注解在大型项目里就是灾难。我在核心接口上都加了 Pydantic 模型,保证数据进出的规范性。
未来的路:不仅仅是 CRM
这套源码发布后,我收到了一些反馈。有做电商的想拿去管私域流量,有做教育的想拿去管学员。这其实印证了我的想法:底层逻辑是通用的,都是“人 + 数据 + 交互”。
接下来的版本规划,我主要想搞三件事:
第一,插件市场。现在的功能都是写死的。我想搞一个类似 VS Code 的插件体系,允许开发者写自己的 Python 脚本挂载到 CRM 的流程里。比如有人想接钉钉通知,有人想接飞书,有人想接自建的 ERP,通过插件机制,不用改核心代码就能实现。
第二,多模态支持。现在主要处理文本。但实际业务里,图片、语音、视频很多。比如销售拍了一张客户名片,或者录了一段会议视频。下一步我要接入多模态模型,让 AI 能直接“看”懂图片里的信息,直接“听”懂录音里的重点,而不是依赖外部的转录服务。
第三,自主 Agent 进化。现在的 AI 还是被动触发。未来我希望它能更主动。比如它发现某个客户很久没互动了,自动去查这个客户的新闻动态,发现对方上了新品,然后主动建议销售:“嘿,对方上了新品,我们可以推一下我们的配套服务,这是话术建议。”从工具变成助手,再变成伙伴。
写在最后:给想入局的朋友一点建议
如果你也想基于这套源码二次开发,或者自己搞一个类似的系统,我有几句心里话。
别迷信模型。很多人觉得只要接了 GPT-4,产品就智能了。大错特错。模型只是引擎,数据才是燃料,业务逻辑才是方向盘。如果你的业务流程本身是乱的,AI 只会加速这种混乱。在写代码之前,先把业务流程梳理清楚,哪些环节真的需要 AI,哪些环节规则引擎就够了。
重视数据治理。AI 的效果上限取决于你的数据质量。如果系统里存的都是脏数据,AI 学出来的也是脏逻辑。在源码里,我加了很多数据校验的规则,但这不够,需要运营人员去维护数据的准确性。
保持开放心态。AI 技术迭代太快了,今天的最优解,下个月可能就过时了。所以架构一定要松耦合。比如我把模型接口抽象了,把向量库抽象了,这样哪天想换个模型,改几行配置就行,不用推倒重来。
最后,这套源码不是完美的,甚至有很多 Bug。我把它放出来,不是因为它有多牛,而是因为它代表了一种可能性:技术不应该只是大公司的玩具,它应该成为每个普通开发者的杠杆。
你可以去 GitHub 上搜这个项目,提 Issue,提 PR,或者直接 Fork 去改。如果它在你的公司里帮销售多签了一单,或者帮客服少加了一次班,那我这半年的熬夜就值了。
技术这条路,一个人走得快,一群人走得远。开源的意义,不在于代码本身,而在于连接。希望这套 AI CRM 源码,能成为连接你与智能业务的一个节点。
好了,不多说了,我还得去修一个刚才测试发现的并发锁问题。咱们代码里见。

△悟空AI CRM产品截图
推荐立刻免费使用中国著名AI CRM品牌-悟空AI CRM,显著提升企业运营效率,相关链接:
AI CRM系统免费试用
AI CRM系统介绍