使用 Flask 构建基于 Dify 的企业资金投向与客户分类评估系统

使用 Flask 构建基于 Dify 的企业资金投向与客户分类评估系统

  • 前言
  • [一、🧩 技术栈](#一、🧩 技术栈)
  • [二、📦 项目结构概览](#二、📦 项目结构概览)
  • [三、 🔧 核心功能模块说明](#三、 🔧 核心功能模块说明)
    • [1 配置参数](#1 配置参数)
    • [2 请求封装函数](#2 请求封装函数)
      • [✅ 功能说明:](#✅ 功能说明:)
    • [3 Prompt 构造函数](#3 Prompt 构造函数)
    • [4 Flask 路由定义](#4 Flask 路由定义)
        • [🏠 首页路由 `/`](#🏠 首页路由 /)
        • [📥 评估接口 `/evaluate`](#📥 评估接口 /evaluate)
        • [🧪 健康检查 `/health`](#🧪 健康检查 /health)
    • [🛠️ 运行方式](#🛠️ 运行方式)
    • [🧪 示例请求体(JSON)](#🧪 示例请求体(JSON))
    • [💡 可扩展性建议](#💡 可扩展性建议)
    • [📝 总结](#📝 总结)

前言

在金融、银行等对公业务中,准确判断企业的经营范围与其资金投向、客户分类是否匹配至关重要。本文将介绍如何使用 Python 和 Dify(一个强大的 LLM 应用开发平台)构建一个自动化的评估服务。

我们将通过 Flask 搭建一个 Web 接口,接收用户的输入信息,调用 Dify 提供的 API 来分析企业的资金投向和客户分类是否合理,并返回结构化结果。


一、🧩 技术栈

  • Python 3.10+
  • Flask:用于构建 Web 后端服务
  • Requests:用于调用 Dify API
  • JSON:处理数据解析和格式化输出
  • Dify AI 平台:提供大模型推理能力
  • 前端模板引擎 Jinja2:渲染评估表单页面

二、📦 项目结构概览

bash 复制代码
main_by_dify_v2.py          # 主程序文件
templates/
└── evaluation_form.html   # 表单页面模板

三、 🔧 核心功能模块说明

1 配置参数

python 复制代码
API_URL = "http://localhost/v1/chat-messages"
API_KEY = "app-***"  # 替换为你的API密钥

API_URL\]是 Dify 提供的接口地址。 \[API_KEY\]是你在 Dify 平台上创建应用时获取的访问令牌。 ### 2 请求封装函数 \[ask_dify\]该函数负责向 Dify 发送请求并处理响应: ```python def ask_dify(question: str, user_id: str = "user_123") -> Dict[str, Any]: headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } payload = { "inputs": {}, "query": question, "response_mode": "blocking", "user": user_id } response = requests.post(API_URL, json=payload, headers=headers, timeout=30) response.raise_for_status() data = response.json() if 'answer' not in data: raise ValueError("API response missing 'answer' field") data_dict = json.loads(data['answer']) required_fields = ["funding_direction", "customer_category"] for field in required_fields: if field not in data_dict: raise KeyError(f"API response missing required field: {field}") return { 'status': 'success', 'message': '评估完成', 'funding_evaluation': data_dict["funding_direction"], 'category_evaluation': data_dict["customer_category"] } ``` #### ✅ 功能说明: * 使用 `requests` 发起 POST 请求 * 设置超时时间防止挂起 * 对响应进行 JSON 解析 * 校验关键字段是否存在 *** ** * ** *** ### 3 Prompt 构造函数 `generate_prompt` 构造符合要求的提示词内容,确保大模型能返回结构化结果: ```python def generate_prompt(customer_info: str, funding_direction: str, customer_category: str) -> str: return f""" #角色 你是一名对公业务专家 #核心任务 基于经营范围,分析客户的资金投向与行内类别是否正确。 不用输出think过程 经营范围为: {json.dumps(customer_info)} 资金投向为: {json.dumps(funding_direction)} 行内类别为: {json.dumps(customer_category)} #输出规范 {{ "funding_direction": "分析资金投向是否正确,如果不正确,请给出分析原因", "customer_category": "分析行内类别是否正确,如果不正确,请给出分析原因" }} """ ``` *** ** * ** *** ### 4 Flask 路由定义 ##### 🏠 首页路由 `/` ```python @app.route('/') def index() -> str: return render_template('evaluation_form.html') ``` 渲染 HTML 页面,提供用户输入表单。 ##### 📥 评估接口 `/evaluate` ```python @app.route('/evaluate', methods=['POST']) def evaluate_route() -> Any: try: data = request.get_json() prompt = generate_prompt( data['customer_info'], data['funding_direction'], data['customer_category'] ) result = ask_dify(prompt) return jsonify(result) except ValueError as e: return jsonify({'status': 'error', 'message': str(e)}), 400 except Exception as e: return jsonify({'status': 'error', 'message': f"评估失败: {str(e)}"}), 500 ``` 处理用户提交的数据,生成提示词并调用 Dify 接口,返回结构化评估结果。 ##### 🧪 健康检查 `/health` ```python @app.route('/health', methods=['GET']) def health_check() -> Dict[str, str]: return {"status": "healthy"} ``` 用于监控服务运行状态。 *** ** * ** *** ### 🛠️ 运行方式 ```bash python main_by_dify_v2.py --port 5000 --host 0.0.0.0 --debug ``` 启动后访问 `http://localhost:5000` 即可打开评估表单页面。 *** ** * ** *** ### 🧪 示例请求体(JSON) ```json { "customer_info": "计算机软件开发与销售", "funding_direction": "投资人工智能研发", "customer_category": "科技型企业" } ``` *** ** * ** *** ### 💡 可扩展性建议 * 将代码拆分为多个模块(如 `routes.py`, `services.py`, `utils.py`) * 添加单元测试(推荐使用 `pytest`) * 支持异步响应模式(Dify 支持 streaming 和 async 模式) * 使用 gunicorn + nginx 部署生产环境 * 引入 Redis 缓存历史评估结果 *** ** * ** *** ### 📝 总结 通过本文我们实现了一个基于 Flask 和 Dify 的企业资金投向与客户分类评估系统。它具备以下特点: * 接口清晰、响应结构化 * 支持 JSON 输入输出 * 易于扩展和维护 * 利用大模型能力自动化评估复杂业务逻辑 未来你可以根据业务需求进一步扩展此系统,例如支持多语言、增强安全机制、引入审计日志等。 *** ** * ** *** 📌 **完整代码** main_by_dify_v2 ```python import requests from flask import Flask, render_template, request, jsonify import logging import json from typing import Dict, Any, Optional import argparse # 配置常量 API_URL = "http://0.0.0.0/v1/chat-messages" API_KEY = "app-***" # 替换为你的API密钥 # 初始化 Flask 应用 app = Flask(__name__) app.logger.setLevel(logging.INFO) def ask_dify(question: str, user_id: str = "user_123") -> Dict[str, Any]: """ 向Dify API发送查询并处理响应 Args: question: 要查询的问题 user_id: 用户标识符 Returns: 包含评估结果的字典 Raises: Exception: 当API请求失败或响应格式不正确时 """ headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } payload = { "inputs": {}, "query": question, "response_mode": "blocking", "user": user_id } try: response = requests.post(API_URL, json=payload, headers=headers, timeout=1000) response.raise_for_status() # 检查HTTP错误 data = response.json() app.logger.debug("Received API response: %s", data) if 'answer' not in data: raise ValueError("API response missing 'answer' field") data_dict = json.loads(data['answer']) required_fields = ["funding_direction", "customer_category"] for field in required_fields: if field not in data_dict: raise KeyError(f"API response missing required field: {field}") return { 'status': 'success', 'message': '评估完成', 'funding_evaluation': data_dict["funding_direction"], 'category_evaluation': data_dict["customer_category"] } except requests.exceptions.RequestException as e: app.logger.error("API request failed: %s", str(e)) raise Exception(f"API请求失败: {str(e)}") except json.JSONDecodeError as e: app.logger.error("Failed to parse API response: %s", str(e)) raise Exception("API响应解析失败") def generate_prompt(customer_info: str, funding_direction: str, customer_category: str) -> str: """ 生成用于评估的提示文本 Args: customer_info: 客户经营范围信息 funding_direction: 资金投向 customer_category: 客户分类 Returns: 格式化后的提示文本 """ return f""" #角色 你是一名对公业务专家 #核心任务 基于经营范围,分析客户的资金投向与行内类别是否正确。 不用输出think过程 经营范围为: {customer_info} 资金投向为: {funding_direction} 行内类别为: {customer_category} #输出规范 {{ "funding_direction": "分析资金投向是否正确,如果不正确,请给出分析原因", "customer_category": "分析行内类别是否正确,如果不正确,请给出分析原因" }} """ @app.route('/') def index() -> str: """显示评估表单页面""" return render_template('evaluation_form.html') @app.route('/evaluate', methods=['POST']) def evaluate_route() -> Any: """ 处理评估请求的后端接口 Returns: JSON响应: 包含评估结果或错误信息 """ try: data = request.get_json() if not data: raise ValueError("请求体为空或不是有效的JSON") required_fields = ['customer_info', 'funding_direction', 'customer_category'] for field in required_fields: if field not in data: raise ValueError(f"缺少必要字段: {field}") app.logger.info("Processing evaluation request for customer: %s", data.get('customer_info', 'unknown')) prompt = generate_prompt( data['customer_info'], data['funding_direction'], data['customer_category'] ) result = ask_dify(prompt) return jsonify(result) except ValueError as e: app.logger.warning("Invalid request: %s", str(e)) return jsonify({ 'status': 'error', 'message': str(e) }), 400 except Exception as e: app.logger.error("Evaluation failed: %s", str(e), exc_info=True) return jsonify({ 'status': 'error', 'message': f"评估失败: {str(e)}" }), 500 @app.route('/health', methods=['GET']) def health_check() -> Dict[str, str]: """健康检查接口""" return {"status": "healthy"} def parse_args() -> argparse.Namespace: """解析命令行参数""" parser = argparse.ArgumentParser(description="Run the evaluation service") parser.add_argument('--port', type=int, default=5006, help="Port to run the server on") parser.add_argument('--host', default='0.0.0.0', help="Host to bind the server to") parser.add_argument('--debug', action='store_true', help="Run in debug mode") return parser.parse_args() if __name__ == '__main__': args = parse_args() app.run(host=args.host, port=args.port, debug=args.debug) ``` evaluation_form.html ```html 用户价值评估

客户评估助手

基于大模型的智能分析与风险评估

大模型评估结果:
大模型评估结果:
```

相关推荐
IT_10241 小时前
Spring Boot项目开发实战销售管理系统——系统设计!
大数据·spring boot·后端
ai小鬼头2 小时前
AIStarter最新版怎么卸载AI项目?一键删除操作指南(附路径设置技巧)
前端·后端·github
Touper.2 小时前
SpringBoot -- 自动配置原理
java·spring boot·后端
思则变3 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
一只叫煤球的猫3 小时前
普通程序员,从开发到管理岗,为什么我越升职越痛苦?
前端·后端·全栈
一只鹿鹿鹿3 小时前
信息化项目验收,软件工程评审和检查表单
大数据·人工智能·后端·智慧城市·软件工程
漫谈网络3 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
专注VB编程开发20年3 小时前
开机自动后台运行,在Windows服务中托管ASP.NET Core
windows·后端·asp.net
程序员岳焱3 小时前
Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
后端·mysql·性能优化
一只叫煤球的猫4 小时前
手撕@Transactional!别再问事务为什么失效了!Spring-tx源码全面解析!
后端·spring·面试