一、项目背景

在教育服务行业,企业经常面临以下痛点:

  • 市场人员收集大量用户资料(简历、Excel、文本),需要快速判断是否符合目标客户画像;
  • 售前客服需要24小时在线解答产品咨询,且要求回复风格亲切;
  • 内部员工频繁查询客户、写日报、问公司流程,效率低下;
  • 领导需要每日日报总结和每周行业动态报告。

本文基于 FastAPI + Dify + MySQL,用最低代码量实现了一套完整的AI智能体系统,支持客户自动研判、对外客服、内部员工助理、日报周报自动生成与邮件推送。系统已在虚拟机CentOS 7上通过Docker部署Dify,后端运行于Windows,整体架构清晰,适合中小型企业快速落地。


二、系统架构

外部

Windows FastAPI

CentOS 7虚拟机

用户层

终端客户

客服聊天界面

内部员工

内部聊天界面

领导

邮件客户端

Dify SalesAgent

Dify InternalAgent

条件分支研判

HTTP请求节点

知识库 CompanyKB

联网搜索

CRUD API

客户表

日报表

触发接口

日报总结API

周报API

邮件服务

搜索引擎

技术栈:

  • 后端:FastAPI + SQLAlchemy + MySQL(复用现有学生管理系统)
  • AI编排:Dify(开源,部署于CentOS 7 Docker)
  • 邮件:SMTP(QQ邮箱)
  • 文件解析:Dify文档提取器(无代码)
  • 研判规则:Dify条件分支节点(纯界面配置,客户可自行修改)

三、数据库设计

只需两张核心表(基于已有学生管理系统扩展):

3.1 客户表 customer

CREATE TABLE `customer` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `education` varchar(50) DEFAULT NULL,
  `occupation` varchar(100) DEFAULT NULL,
  `interest_tags` varchar(500) DEFAULT NULL,
  `source_text` text,
  `judge_result` tinyint DEFAULT NULL,
  `judge_score` decimal(5,2) DEFAULT NULL,
  `judge_reason` varchar(500) DEFAULT NULL,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);

3.2 日报表 daily_report

CREATE TABLE `daily_report` (
  `id` int NOT NULL AUTO_INCREMENT,
  `employee_id` varchar(50) NOT NULL,
  `employee_name` varchar(50) NOT NULL,
  `report_date` date NOT NULL,
  `work_summary` text,
  `achievements` text,
  `next_plan` text,
  `issues` text,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);

四、后端API实现(FastAPI)

后端只负责数据持久化与邮件发送,不包含任何AI逻辑(全部交给Dify)。核心接口如下:

4.1 保存客户(供Dify调用)

@app.post("/api/v1/customer/save")
async def save_customer(cust: CustomerSave):
    # 直接入库
    db = SessionLocal()
    customer = Customer(**cust.dict())
    db.add(customer)
    db.commit()
    db.refresh(customer)
    return {"id": customer.id}

4.2 查询客户列表

@app.get("/api/v1/customer/list")
async def list_customers(judge_result: int = None, name: str = None, page: int = 1, page_size: int = 10):
    query = db.query(Customer)
    if judge_result is not None:
        query = query.filter(Customer.judge_result == judge_result)
    if name:
        query = query.filter(Customer.name.like(f"%{name}%"))
    paginated = query.offset((page-1)*page_size).limit(page_size).all()
    return {"total": query.count(), "items": paginated}

4.3 提交日报

@app.post("/api/v1/report")
async def submit_report(report: ReportIn):
    db = SessionLocal()
    daily = DailyReport(**report.dict())
    db.add(daily)
    db.commit()
    return {"id": daily.id}

4.4 日报总结(手动触发,发送邮件)

@app.post("/api/v1/daily_summary")
async def daily_summary(date: str = None):
    if not date:
        date = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
    reports = db.query(DailyReport).filter(DailyReport.report_date == date).all()
    if not reports:
        return {"msg": "无日报数据"}
    # 简单拼接总结(实际可调用LLM)
    summary = f"日报总结 {date}\n共{len(reports)}人提交\n"
    for r in reports:
        summary += f"- {r.employee_name}: {r.work_summary[:50]}...\n"
    send_email("leader@example.com", "日报总结", summary)
    return {"msg": "发送成功"}

4.5 员工鉴权(简化版)

在请求头中加入 X-Employee-ID,后端读取作为操作人。生产环境可扩展JWT。

from fastapi import Header

def get_current_employee(x_employee_id: str = Header(...)):
    return x_employee_id

五、Dify工作流配置(零代码)

Dify是核心AI编排平台,我们创建了三个智能体。

5.1 客服智能体 SalesAgent

功能:区分业务咨询和通用问答,业务咨询走知识库RAG,通用问答走甜美风格LLM。

关键节点配置:

  • 意图分类器(LLM提示词):

    判断用户问题是“业务咨询”还是“通用问答”。
    业务咨询:公司产品、留学项目、价格、流程等。
    通用问答:闲聊、问候、天气。
    只输出类别。
    
  • 知识库检索:使用 CompanyKB(已上传常见问答、企业介绍、中德项目文档)。

  • 业务回答LLM:专业语气,基于检索结果回复。

  • 通用问答LLM:系统提示词“你是一个甜美可爱的客服小姐姐,多用颜文字,语气活泼”。

5.2 内部员工智能体 InternalAgent

核心功能:研判客户(上传文件自动提取字段并打分)、查询客户、创建客户、写日报、公司知识问答。

研判客户分支节点序列:

  1. 文档提取器(支持txt/docx/xlsx)→ 输出纯文本
  2. LLM提取字段(输出JSON:姓名、年龄、学历、职业、兴趣标签,以及 occupation_matchinterest_match 布尔值)
  3. 代码节点(解析JSON并初始化得分变量)
  4. 条件分支 – 年龄(22-35岁 +25分)
  5. 条件分支 – 学历(本科/硕士/博士 +25分)
  6. 条件分支 – 职业匹配(occupation_match==true +25分)
  7. 条件分支 – 兴趣匹配(interest_match==true +25分)
  8. 条件分支 – 总分判断(>=60 → 符合)
  9. HTTP请求节点 → 调用后端 /customer/save
  10. 回复节点:返回研判结果

条件分支节点均为可视化配置,客户可自行修改年龄范围、学历列表、加分阈值等,完全无需代码。

5.3 周报生成工作流 WeeklyReportWorkflow

  • 联网搜索节点(搜索教育政策、投融资、重大事件)
  • LLM整理成Markdown报告(包含政策、资本、事件、风险、机遇)
  • 后端调用此工作流并发送邮件

六、部署与运行

6.1 Windows端(后端)

git clone <your-repo>
cd backend
python -m venv venv
venv\Scripts\activate
pip install fastapi uvicorn sqlalchemy pymysql python-dotenv
uvicorn main:app --host 0.0.0.0 --port 8000 --reload

开放防火墙8000端口,记录本机IP(如 192.168.1.100)。

6.2 CentOS 7 虚拟机(Dify)

# 安装Docker
curl -fsSL https://get.docker.com | bash
systemctl enable docker

# 克隆Dify并启动
git clone https://github.com/langgenius/dify.git
cd dify/docker
docker-compose up -d

访问 http://<虚拟机IP>:3000 配置管理员账号,然后:

  • 创建知识库 CompanyKB,上传业务文档。
  • 创建上述三个工作流,在HTTP请求节点中填写Windows后端的实际IP。
  • 发布,获取WebApp链接。

6.3 一键启动所有服务

在后端目录下运行:

waitress-serve --host=0.0.0.0 --port=8000 main:app

员工打开 Dify InternalAgent 的WebApp链接即可使用。


七、测试场景演示

  1. 客户研判:上传文本 张三,25岁,本科,程序员,对AI感兴趣 → Dify提取字段 → 条件分支打分100 → 入库成功 → 回复“符合画像”。
  2. 客服咨询:问“德国双元制有什么优势?” → 返回“免学费、享补贴、保就业”等。
  3. 员工查询客户:问“查询符合画像的客户” → 返回列表。
  4. 写日报:问“写日报:今日沟通5个客户,成果新增2个意向” → 保存成功。
  5. 日报总结:调用 /daily_summary → 领导收到邮件。
  6. 行业周报:调用 /weekly_report → 领导收到Markdown周报。

八、总结与扩展

优点

  • 极简后端:只做CRUD和邮件,代码不足300行。
  • AI逻辑全在Dify:客户可自行修改研判规则、知识库、对话风格,无需懂代码。
  • 快速部署:Docker Compose + Python虚拟环境,半小时可跑通。
  • 可扩展:新增研判维度只需在Dify工作流加条件分支;新增业务知识只需上传文档。

后续改进方向

  • 添加JWT鉴权,实现员工/领导角色权限控制。
  • 日报总结改用LLM生成更自然的摘要。
  • 周报接入真实联网搜索API(Bing/Serper)。
  • 将后端也容器化,实现全Docker部署。

项目源码与文档

所有文档(架构设计、API规范、Dify配置、测试用例)已按国际规范命名,可私信获取。

结语:本文展示了如何用最少代码搭建一个生产级的AI智能体系统,让业务人员也能自由修改AI规则。希望对你有所帮助,欢迎在评论区交流!


Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐