从零搭建教育服务AI智能体系统:FastAPI + Dify + MySQL 实战
本文介绍了一个基于FastAPI+Dify+MySQL的AI智能体系统,针对教育服务行业的痛点需求提供自动化解决方案。系统包含客服智能体、内部员工智能体和周报生成工作流,支持客户自动研判、24小时客服应答、内部知识查询及日报周报生成。技术架构采用Dify进行AI流程编排,FastAPI处理后端数据持久化,MySQL存储客户与日报数据。系统通过可视化配置实现无代码开发,已在CentOS 7虚拟机部署
一、项目背景
在教育服务行业,企业经常面临以下痛点:
- 市场人员收集大量用户资料(简历、Excel、文本),需要快速判断是否符合目标客户画像;
- 售前客服需要24小时在线解答产品咨询,且要求回复风格亲切;
- 内部员工频繁查询客户、写日报、问公司流程,效率低下;
- 领导需要每日日报总结和每周行业动态报告。
本文基于 FastAPI + Dify + MySQL,用最低代码量实现了一套完整的AI智能体系统,支持客户自动研判、对外客服、内部员工助理、日报周报自动生成与邮件推送。系统已在虚拟机CentOS 7上通过Docker部署Dify,后端运行于Windows,整体架构清晰,适合中小型企业快速落地。
二、系统架构
技术栈:
- 后端: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
核心功能:研判客户(上传文件自动提取字段并打分)、查询客户、创建客户、写日报、公司知识问答。
研判客户分支节点序列:
- 文档提取器(支持txt/docx/xlsx)→ 输出纯文本
- LLM提取字段(输出JSON:姓名、年龄、学历、职业、兴趣标签,以及
occupation_match、interest_match布尔值) - 代码节点(解析JSON并初始化得分变量)
- 条件分支 – 年龄(22-35岁 +25分)
- 条件分支 – 学历(本科/硕士/博士 +25分)
- 条件分支 – 职业匹配(
occupation_match==true+25分) - 条件分支 – 兴趣匹配(
interest_match==true+25分) - 条件分支 – 总分判断(>=60 → 符合)
- HTTP请求节点 → 调用后端
/customer/save - 回复节点:返回研判结果
条件分支节点均为可视化配置,客户可自行修改年龄范围、学历列表、加分阈值等,完全无需代码。
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链接即可使用。
七、测试场景演示
- 客户研判:上传文本
张三,25岁,本科,程序员,对AI感兴趣→ Dify提取字段 → 条件分支打分100 → 入库成功 → 回复“符合画像”。 - 客服咨询:问“德国双元制有什么优势?” → 返回“免学费、享补贴、保就业”等。
- 员工查询客户:问“查询符合画像的客户” → 返回列表。
- 写日报:问“写日报:今日沟通5个客户,成果新增2个意向” → 保存成功。
- 日报总结:调用
/daily_summary→ 领导收到邮件。 - 行业周报:调用
/weekly_report→ 领导收到Markdown周报。
八、总结与扩展
优点
- 极简后端:只做CRUD和邮件,代码不足300行。
- AI逻辑全在Dify:客户可自行修改研判规则、知识库、对话风格,无需懂代码。
- 快速部署:Docker Compose + Python虚拟环境,半小时可跑通。
- 可扩展:新增研判维度只需在Dify工作流加条件分支;新增业务知识只需上传文档。
后续改进方向
- 添加JWT鉴权,实现员工/领导角色权限控制。
- 日报总结改用LLM生成更自然的摘要。
- 周报接入真实联网搜索API(Bing/Serper)。
- 将后端也容器化,实现全Docker部署。
项目源码与文档
所有文档(架构设计、API规范、Dify配置、测试用例)已按国际规范命名,可私信获取。
结语:本文展示了如何用最少代码搭建一个生产级的AI智能体系统,让业务人员也能自由修改AI规则。希望对你有所帮助,欢迎在评论区交流!
更多推荐



所有评论(0)