Appearance
企业智能报销与财务合规审计系统
一、项目简介
企业智能报销与财务合规审计系统是一个面向企业内部报销场景的 AI 审核平台,覆盖员工提交票据、系统自动识别票据信息、财务制度检索、合规风险判断、员工反馈生成、管理员人工复核等完整流程。
项目的核心目标是将传统依赖人工经验的财务审核流程智能化:员工上传发票、行程单、酒店水单等票据后,系统通过 OCR 和大模型抽取结构化报销字段,再结合企业财务制度进行 RAG 检索和多 Agent 协同审计,最终给出“可审批 / 需补充 / 拒绝”的审核结论,并保留完整 Trace,方便管理员追溯 AI 判断依据。
该项目不是简单的报销表单系统,而是将 OCR、LLM、RAG、Function Calling、人工审批流、权限控制、后台管理 结合在一起的企业级智能财务应用。
二、项目技术栈
前端技术栈
| 技术 | 用途 |
|---|---|
| Vue | 构建单页面应用和业务组件 |
| Element UI | 快速实现表单、表格、弹窗、抽屉、标签页等后台管理 UI |
| Axios | 封装前后端接口请求 |
| Vue CLI | 前端工程化、开发服务和打包构建 |
| LocalStorage | 保存登录 Token 和当前用户信息 |
| FormData | 支持发票 PDF / 图片文件上传 |
后端技术栈
| 技术 | 用途 |
|---|---|
| Python | 后端主要开发语言 |
| FastAPI | 构建高性能 RESTful API,支持文件上传、依赖注入、接口参数校验 |
| Uvicorn | ASGI 服务运行 |
| Pydantic | 请求参数、响应结构和业务模型校验 |
| SQLAlchemy 2.0 | ORM 数据访问层 |
| MySQL + PyMySQL | 存储用户、部门、报销申请、审批结果、Agent Trace 等数据 |
| CORS Middleware | 支持前后端分离跨域访问 |
| PBKDF2-SHA256 | 用户密码加盐哈希存储 |
| Bearer Token + Session 表 | 实现登录态校验和接口权限控制 |
AI 与智能审核相关技术
| 技术 | 用途 |
|---|---|
| LangChain | 统一封装大模型调用、Tool Calling 和消息结构 |
| ChatOpenAI 兼容接口 | 对接 qwen-max 等 OpenAI-compatible 大模型 |
| OpenAIEmbeddings 兼容接口 | 生成财务制度文本向量 |
| Qdrant | 向量数据库,用于企业财务制度 RAG 检索 |
| RAG | 根据报销单内容检索相关财务制度,降低大模型幻觉 |
| Function Calling / Tools | 查询天气、城市等级等外部事实,辅助合规判断 |
| 百度 OCR 增值税发票识别 | 识别发票图片 / PDF 中的金额、日期、销售方、服务类型等字段 |
| PyMuPDF | 将 PDF 首页渲染为图片后进行 OCR 识别 |
三、核心功能模块
1. 员工端报销提交
员工登录后可以提交报销申请,系统自动读取当前登录用户的姓名和部门,避免员工手动填写造成数据不一致。员工可以选择报销类目、填写金额和备注,也可以上传 PDF、PNG、JPG 格式的发票或直接粘贴票据文本。
主要功能包括:
- 用户登录、注册、退出;
- 注册时从后端动态读取启用部门;
- 报销类目从后端动态读取,支持管理员维护;
- 支持上传发票 PDF / 图片;
- 支持粘贴票据文本进行测试;
- 支持金额、人数、备注等字段人工补充;
- 提交后展示 AI 审计结论、结构化字段、违规项、制度依据和员工通知文案;
- 员工可查看自己的历史报销记录和最终审批状态。
2. OCR 票据识别
系统集成百度 OCR 增值税发票识别能力,用于从发票图片或 PDF 中识别票据信息。对于 PDF 文件,系统先通过 PyMuPDF 将第一页渲染为图片,再调用 OCR 接口。
OCR 识别结果会被转换为统一的业务字段,例如:
- 报销金额;
- 开票日期;
- 销售方 / 商户名称;
- 发票类型;
- 服务类型;
- 城市;
- 行程起止地;
- 乘车人 / 人数;
- 商品或服务明细。
这样可以减少员工手工录入,提高报销申请的数据完整性。
3. 多 Agent 智能审计流程
系统后端将 AI 审核拆分为三个 Agent,各 Agent 负责不同职责,降低单个大模型提示词过长、职责混乱的问题。
Agent A:票据信息抽取 Agent
负责将 OCR 文本或用户输入文本转换为结构化报销数据。
输出字段包括:
- 员工;
- 部门;
- 员工选择类目;
- 系统识别类目;
- 金额;
- 币种;
- 日期;
- 时间;
- 商户;
- 城市;
- 发票类型;
- 人数;
- 行程开始 / 结束日期;
- 业务说明;
- 置信度。
系统在抽取时结合了确定性 OCR 字段映射和 LLM 结构化抽取:OCR 能识别的稳定字段优先作为兜底,大模型负责补充业务语义字段,最后通过 Pydantic 模型统一校验。
Agent B:财务合规审计 Agent
负责根据结构化报销数据和财务制度进行合规判断。系统会先根据报销类目、说明、OCR 文本等信息构建检索 Query,然后从 Qdrant 中检索相关财务制度片段,再交给大模型进行审计。
支持识别的风险包括:
- 金额超标;
- 发票日期缺失或异常;
- 报销类目与票据内容不一致;
- 餐饮人均金额超过制度标准;
- 住宿标准与城市等级不匹配;
- 市内交通是否符合加班或因公紧急出行条件;
- 雨天交通补贴是否需要查询天气;
- 差旅票据与行程说明是否匹配。
Agent C:结果生成 Agent
负责将审计事实转换为面向不同角色的可读文案:
- 给管理员看的审核摘要;
- 给员工看的修改建议或通过通知;
- 如果通过,生成审批摘要;
- 如果有问题,明确说明需要补充或修改的材料。
这样可以避免只返回一段生硬的 JSON,让系统更接近真实企业审批场景。
四、系统业务流程
mermaid
flowchart TD
A[员工登录系统] --> B[填写报销信息 / 上传票据]
B --> C[OCR 识别 PDF 或图片]
C --> D[Agent A 抽取结构化报销字段]
D --> E[构建制度检索 Query]
E --> F[Qdrant 检索相关财务制度]
F --> G[Agent B 进行合规审计]
G --> H{是否需要外部事实}
H -- 是 --> I[调用 Tool 查询天气 / 城市等级]
I --> G
H -- 否 --> J[Agent C 生成审核结论和员工通知]
G --> J
J --> K[保存申请记录和 Trace]
K --> L[员工查看结果]
K --> M[管理员后台人工复核]
M --> N[人工同意 / 退回补充 / 拒绝]五、后台管理功能
系统提供管理员后台,入口为 /manage,只有管理员角色用户可以访问。后台主要面向财务人员或企业管理员,用于统一管理报销申请和基础配置。
报销申请管理
- 查看所有员工提交的报销申请;
- 支持按最终状态、决策来源、关键字筛选;
- 查看申请详情,包括结构化字段、风险项、制度依据、员工通知;
- 支持人工审批操作:人工同意、退回补充、人工拒绝;
- 记录审批人、审批意见、审批时间;
- 区分 AI 审核结果和人工最终结果。
Agent Trace 追踪
管理员可以查看一次报销审计的完整 Trace,包括:
- API 接收的原始输入;
- OCR 识别结果;
- Agent A 抽取结果;
- RAG 检索到的制度片段;
- LLM 请求和响应;
- Function Calling 调用参数和返回结果;
- 最终生成的审计结论。
Trace 功能是项目的重要亮点,它让 AI 审核过程可解释、可追溯,适合财务合规这种对审计依据要求较高的业务场景。
部门与类目管理
管理员可以维护企业部门和报销类目:
- 新增、编辑、启用、停用部门;
- 新增、编辑、启用、删除报销类目;
- 员工注册时只能选择启用部门;
- 员工提交报销时只能选择启用类目;
- 历史申请中的部门和类目文本不会因为后续配置变化而被覆盖。
六、数据库设计概览
系统使用 MySQL 存储核心业务数据,主要表包括:
| 表名 | 说明 |
|---|---|
| users | 用户信息,包含用户名、密码哈希、姓名、部门、角色 |
| user_sessions | 登录 Session,保存 Bearer Token 与用户关联关系 |
| departments | 部门配置 |
| expense_categories | 报销类目配置 |
| invoice_applications | 报销申请主表,保存 AI 结果、人工审批结果、结构化数据、违规项等 |
| trace_records | Agent 审计链路 Trace,保存每次审计的输入、输出和中间过程 |
其中 invoice_applications 表不仅保存基础字段,还保存 normalized_data、retrieved_policies、violations 等 JSON 数据,既方便列表查询,也方便详情页完整展示 AI 审计过程。
七、项目亮点与优势
1. 真实业务场景完整闭环
项目覆盖了员工提交、OCR 识别、AI 审核、制度检索、结果生成、历史记录、管理员人工复核、基础配置管理等完整流程,不是单一 Demo。面试时可以体现对企业级业务流程的理解。
2. 多 Agent 架构,职责清晰
系统没有把所有逻辑都塞进一个 Prompt,而是拆分为信息抽取、合规审计、结果生成三个 Agent。这样设计的好处是:
- 每个 Agent 的职责更清晰;
- Prompt 更容易维护;
- 中间结果可单独追踪;
- 出错时更容易定位问题;
- 后续可以独立升级某个 Agent。
3. RAG 财务制度检索,减少大模型幻觉
系统将企业报销制度切分后写入向量库,审核时根据报销内容检索相关制度片段,再让大模型基于制度进行判断。相比直接让大模型凭常识判断,RAG 能让审计结论更贴近企业内部规则,也方便企业后续替换或扩展制度文档。
4. Function Calling 查询外部事实
部分报销规则依赖外部事实,例如:
- 雨天交通补贴需要查询当天是否下雨;
- 住宿报销标准需要判断城市等级。
系统通过 Tool Registry 注册天气查询和城市等级查询工具,要求审计 Agent 在遇到相关规则时调用工具,而不是凭经验猜测。这体现了 Agent 不只是聊天,而是能够调用业务函数完成决策。
5. AI 审计过程可解释、可追踪
系统保存完整 Trace,包括 OCR、Agent 输入输出、LLM 返回、工具调用、制度检索结果等。管理员可以在后台查看 AI 判断链路,解决了 AI 系统常见的“黑盒决策”问题,非常适合财务、审计、法务等高合规场景。
6. 支持人工复核,人机协同
系统不会完全替代财务人员,而是通过 AI 完成预审和风险提示,再由管理员进行最终决策。人工审批结果会覆盖 AI 初始结论,并保存审批意见,符合企业实际审批流程。
7. 具备降级和容错设计
当大模型、Embedding 或 Qdrant 不可用时,系统仍然提供兜底逻辑:
- LLM 不可用时进入保守规则检查或人工复核提示;
- Embedding 不可用时可以使用关键词方式返回制度片段;
- Qdrant 不可用时可以退化为内存向量检索;
- OCR 结果会保留原始 JSON,方便后续 Agent 继续解析。
这种设计提升了系统在本地演示和生产环境中的可用性。
8. 权限和数据隔离清晰
系统区分员工和管理员角色:
- 员工只能查看自己的申请记录;
- 管理员可以查看全部申请并进行人工审批;
- 管理后台接口通过角色校验保护;
- 用户密码使用 PBKDF2-SHA256 加盐哈希存储;
- 登录态通过 Bearer Token + 数据库 Session 表维护。
9. 配置化程度较高,便于扩展
部门、报销类目、财务制度、天气服务、向量库、模型地址等都可以配置或扩展。后续可以继续接入公司内部 SSO、OA 审批流、对象存储、消息通知、更多报销规则和更多外部工具。
八、主要接口设计
| 接口 | 说明 |
|---|---|
POST /api/auth/register | 用户注册 |
POST /api/auth/login | 用户登录 |
GET /api/me | 获取当前登录用户 |
GET /api/departments | 获取启用部门 |
GET /api/expense-categories | 获取启用报销类目 |
POST /api/audit | 提交报销审计,支持文本和文件上传 |
GET /api/my/applications | 员工查看自己的申请历史 |
GET /api/admin/applications | 管理员查看全部申请 |
POST /api/admin/applications/{id}/decision | 管理员提交人工审批结果 |
GET /api/admin/traces | 管理员查看 Trace 列表 |
GET /api/admin/traces/{trace_id} | 查看指定 Trace 详情 |
GET /api/policies/search | 检索财务制度 |
POST /api/policies/seed | 重置并写入制度文档 |
GET /api/admin/departments | 管理员查看部门 |
POST /api/admin/departments | 管理员新增部门 |
PATCH /api/admin/departments/{id} | 管理员编辑部门 |
GET /api/admin/expense-categories | 管理员查看报销类目 |
POST /api/admin/expense-categories | 管理员新增报销类目 |
PATCH /api/admin/expense-categories/{id} | 管理员编辑报销类目 |
九、项目总结
该项目完整实现了一个企业内部智能报销审核系统,从前端交互、后端接口、数据库设计,到 OCR、RAG、多 Agent、Function Calling、人工审批和 Trace 可解释性都有落地。项目既能体现前后端工程能力,也能体现对 AI 应用工程化、企业合规场景和真实业务流程的理解。
在面试中,这个项目可以重点突出三个关键词:
- 业务完整:覆盖员工提交、AI 预审、财务复核、配置管理全流程;
- AI 工程化:不是简单调用大模型,而是结合 OCR、RAG、多 Agent、工具调用和可追踪链路;
- 企业可落地:有权限控制、数据持久化、人工审批、制度依据和扩展能力,符合真实企业系统设计思路。