0


部署人工智能财务分析 API:利用百度文心一言的实践指南(一)

在当今数字化的商业环境中,财务分析对于企业决策至关重要。本文章将介绍如何部署一个基于 Flask 的智能财务分析 API,它利用了百度文心一言大模型来生成智能分析报告。该文章将分为两部分,第一部分主要介绍该API使用的核心代码及其部署测试。第二部分将会在一个月后上传,将会专注于提升该API生成的报告的准确性,并尝试为其添加Wed页面以方便用户使用。

一、前期准备

  • 安装必要的库

你需要确保已经安装了以下 Python 库:

flask

pandas

statsmodels

requests

json

。可以使用

pip install

命令来安装它们。

pip install flask pandas statsmodels requests
  • 获取 API 密钥

在百度智能云千帆平台申请并获取

API_key

secret_key

,这两个密钥将用于获取访问令牌(access_token)以调用文心一言的 ModelBuilder API。关于如何注册百度账号并获取模型密钥的文章已经很多,本文不再赘述,具体操作方法可以参考另一篇blog。

二、代码结构与功能解析

  • 框架选择——Flask

在构建财务分析 API 时,选择 Flask 主要因其具备多方面优势。Flask 极为轻量,核心代码简洁易懂,像创建基本应用仅需寥寥数行代码,使开发人员可快速搭建 API 基础架构。尤其适合对Python编程熟练度较低的新手。同时其灵活性很高,能与诸如

pandas

statsmodels

requests

等多种库自由集成,在处理数据、分析及与百度千帆通信时,不会受框架限制,方便按业务逻辑操作。

最重要的是,使用 Flask 可以让我们后续为该财务分析 API 添加 Web 界面时更加便捷。其路由(Routing)机制可以将 URL 与特定的 Python 函数关联起来。它决定了当用户访问某个特定 URL 时,应用程序应该执行什么逻辑。比如我们后续可以新增

/dashboard

等路由展示分析结果,增强用户体验。

  • Flask 应用初始化

我们首先创建一个 Flask 应用实例

from flask import Flask, request, jsonify
app = Flask(__name__)

这是整个 API 的基础框架,后续所有的路由和功能都将围绕这个

app

展开。

  • 获取访问令牌

在调用大模型之前,需要使用 API Key,Secret Key 获取access_token。因此我们需要首先定义get_access_token()函数并向百度千帆平台发送请求以获取访问令牌,该令牌将用于后续的 API 调用。

def get_access_token():
    """
    使用 API Key,Secret Key 替换下列示例中的 client_id 与 client_secret
    """

    url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=cL8yxxxx9ReF&client_secret=Y3QPxxxxexUo"

    payload = json.dumps("")
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    return response.json().get("access_token")

其中不同模型的请求地址(url)均不同,可以在示例代码中心 查看你想要调用的具体模型的要求。本文使用的模型为 ERNIE-4.0-8K。

  • 财务分析函数

由于文心一言是一款人工智能大语言模型,并非专为数据处理设计,擅长的是自然语言处理,因此其缺乏数据分析和计算能力的精准性。相比于直接将完整的财务报表传输给文心一言,更明智的做法是利用数据处理工具对财务报表进行数据分析,再结合具体分析结果让人工智能生成更加精准的财务分析报告。

因此我定义了三个函数分别对财务报表中的收入,成本以及负债进行初步的数据分析。

def analyze_revenue_trend(data):
    """
    收入趋势分析:使用指数平滑模型预测未来收入。
    """
    try:
        model = ExponentialSmoothing(data['Revenue'], trend='add', seasonal=None).fit()
        forecast = model.forecast(3)  # 预测未来3期收入
        return {
            'current_revenue': int(data['Revenue'].iloc[-1]),  
            'forecast': list(map(int, forecast))  
        }
    except Exception as e:
        return {'error': f'Revenue trend analysis failed: {str(e)}'}

def analyze_cost(data):
    """
    成本优化建议:计算过去12个月的平均成本比例,提出优化建议。
    """
    try:
        data['Cost_Percentage'] = data['Cost'] / data['Revenue']
        avg_cost_percentage = data['Cost_Percentage'].mean()
        suggestion = "Reduce operational costs by 5%" if avg_cost_percentage > 0.5 else "Cost structure is optimal"
        return {
            'average_cost_percentage': float(avg_cost_percentage),  
            'suggestion': suggestion
        }
    except Exception as e:
        return {'error': f'Cost analysis failed: {str(e)}'}

def predict_debt_risk(data):
    """
    债务风险预测:根据债务与收入比例,评估风险等级。
    """
    try:
        debt_to_revenue_ratio = data['Debt'] / data['Revenue']
        avg_ratio = debt_to_revenue_ratio.mean()
        risk_level = (
            "High Risk" if avg_ratio > 0.8 else
            "Moderate Risk" if avg_ratio > 0.5 else
            "Low Risk"
        )
        return {
            'average_debt_to_revenue_ratio': float(avg_ratio),  t
            'risk_level': risk_level
        }
    except Exception as e:
        return {'error': f'Debt risk prediction failed: {str(e)}'}

注:这三个函数只是对财务报表做了最为简单的收入预测以及风险分析,后续具体使用时可根据不同公司的具体要求对其进行修正。

  • 调用文心一言生成财务报告

在对数据进行分析之后,就可以将分析结果传输给文心一言,由他生成一篇完整的财务报告。

def generate_report(revenue_analysis, cost_analysis, debt_analysis):
    url = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token={get_access_token()}"
    prompt = f"""
    收入分析:当前收入 {revenue_analysis['current_revenue']},预测 {revenue_analysis['forecast']}。
    成本分析:平均成本比例 {cost_analysis['average_cost_percentage']:.2f}。
    债务分析:风险等级 {debt_analysis['risk_level']}。

    请生成一份简洁的财务分析报告,包含总结和可执行建议。
    """
    payload = json.dumps({"messages": [{"role": "user", "content": prompt}]})
    headers = {'Content-Type': 'application/json'}
    response = requests.post(url, headers=headers, data=payload)
    return response.json().get('result', 'Error generating report')

对于不同的模型其对于payload, headers可能有不同的要求,仍然需要在示例代码中心查看不同模型的具体需求。对于本文使用的模型而言,要注意:message必须是奇数条,不然会报错。

  • /upload路由:接收和处理财务数据文件

通过

/upload

接口接收 CSV 数据文件,调用分析函数并返回结果:

@app.route('/upload', methods=['POST'])
def upload_file():

    if 'file' not in request.files:
        return jsonify({'error': 'No file uploaded'}), 400

    file = request.files['file']

    if not file.filename.endswith('.csv'):
        return jsonify({'error': 'Only CSV files are supported'}), 400

    try:
        # 读取 CSV 数据
        data = pd.read_csv(file)
        if not {'Date', 'Revenue', 'Cost', 'Debt'}.issubset(data.columns):
            return jsonify({'error': 'File must contain Date, Revenue, Cost, Debt columns'}), 400

        # 数据预处理
        data['Date'] = pd.to_datetime(data['Date'])
        data = data.sort_values('Date')

        # 调用分析函数
        revenue_analysis = analyze_revenue_trend(data)
        cost_analysis = analyze_cost(data)
        debt_analysis = predict_debt_risk(data)

        # 结合文心一言生成分析报告
        report = generate_report(revenue_analysis, cost_analysis, debt_analysis)

        return jsonify({
            '收入分析': revenue_analysis,
            '成本分析': cost_analysis,
            '债务分析': debt_analysis,
            '财务分析报告(文心一言)': report
        })

    except Exception as e:
        return jsonify({'error': str(e)}), 500

这个路由函数用于接收用户上传的 CSV 格式的财务数据文件。它首先检查是否有文件上传,如果没有则返回错误信息。然后检查文件扩展名是否为

.csv

,如果不是也返回错误。
在读取 CSV 文件后,它会进一步检查数据中是否包含

Date

Revenue

Cost

Debt

这几个必要的列。如果数据格式正确,就会对数据进行预处理,包括将日期列转换为

datetime

类型并按照日期排序。
之后,它分别调用

analyze_revenue_trend

analyze_cost

predict_debt_risk

这三个函数对收入趋势、成本和债务风险进行分析,并将结果传递给

generate_report

函数来生成最终的分析报告。最后,将所有分析结果以 JSON 格式返回给用户。

三、部署与测试

  • 运行Flask应用

if __name__ == '__main__': app.run(debug=True, port=5000)

在本地运行该代码,该API服务即被启动。你的应用将运行在

http://127.0.0.1:5000

(这是 Flask 应用默认的本地运行地址)。

  • 测试

可以使用cURL命令行工具测试该API。在命令行(Windows)或终端(MacOS)中运行如下代码:

curl -X POST -F "[email protected]" http://127.0.0.1:5000/upload

其中,data.csv为你想要上传的财务数据文件。

当我们执行上述

curl

命令后,会在命令行(或终端)得到 API 的响应。如果一切正常,响应将是一个 JSON 格式的数据,包含收入分析、成本分析、债务风险分析和文心一言生成的财务报告等内容。

四、示例

上传的 CSV 文件如下:
DateRevenueCostDebt2024/1/110000050000200002024/2/111000055000220002024/3/112000060000250002024/4/113000065000270002024/5/11400007000030000
最终生成的报告如下:

{
  "财务报告(文心一言)": "**财务分析报告**\n\n**一、概述**\n\n本报告基于最新的财务数据,对收入、成本及债务状况进行了全面分析,旨在为管理层提供决策支持,确保公司的财务健康与持续增长。\n\n**二、收入分析**\n\n- **当前收入状况**:公司当前收入达到140,000元,显示出稳健的经营能力。\n- **未来收入预测**:根据预测数据,未来三期收入将分别增长至[149,390元, 159,016元, 168,642元],呈现逐步上升的趋势,预示着积极的市场前景和业务拓展成果。\n\n**三、成本分析**\n\n- **成本结构**:公司平均成本比例为0.50,表明成本控制得当,资源配置效率较高。\n- **建议**:成本结构已经处于最优状态,建议继续保持并监控成本变动,以确保持续的成本优势。\n\n**四、债务分析**\n\n- **债务收入比**:平均债务收入比为0.21,显示出较低的债务负担。\n- **风险等级**:经评估,公司的债务风险等级为“低风险”,表明公司具有稳健的偿债能力,财务风险可控。\n\n**五、总结**\n\n综合以上分析,公司财务状况健康,收入稳步增长,成本结构合理,债务风险低。这些积极因素为公司未来的发展奠定了坚实基础,提供了有力的财务保障。\n\n**六、可执行建议**\n\n1. **收入提升策略**:继续加强市场开拓,优化产品和服务,以维持并加速收入增长势头。\n2. **成本控制措施**:持续监控成本动态,通过技术创新和管理优化进一步降低成本,提升盈利能力。\n3. **债务管理规划**:在保持低债务风险的同时,合理利用财务杠杆,优化债务结构,以支持公司的扩张和发展战略。",
  "成本分析": {
    "平均成本比例": 0.5,
    "建议": "成本结构最优"
  },
  "债务分析": {
    "平均收入比例": 0.206062271062271,
    "风险等级": "低风险"
  },
  "收入分析": {
    "当前收入": 140000,
    "预测": [149390, 159016, 168642]
  }
}

五、下一步工作

经过上述步骤,我们的API现在有了基本的财务数据分析和财务报告生成功能。然而,我们意识到财务数据分析步骤过于简单,仅仅使用了指数平滑模型来预测收入。此外,生成的报告信息有些简陋,并且格式不太适合阅读。因此,我们需要改变输出格式,使用户更容易使用报告信息。在接下来的工作中,我们将专注于提高报告的准确性,并为API添加一个Web页面,以便用户可以更方便地使用它。


本文转载自: https://blog.csdn.net/qq_42641627/article/details/143905100
版权归原作者 qq_42641627 所有, 如有侵权,请联系我们删除。

“部署人工智能财务分析 API:利用百度文心一言的实践指南(一)”的评论:

还没有评论