摆设人工智能财务分析 API:使用百度文心一言的实践指南(二) ...

打印 上一主题 下一主题

主题 1002|帖子 1002|积分 3006

在第一篇博客中,我们介绍了如何基于 Flask 摆设一个使用百度文心一言模子生成财务分析报告的 API,包罗开端预备、代码布局与功能分析、摆设和测试以及一个简单的示例。然而,正如我们在第一篇博客结尾提到的,该 API 存在一些不敷之处,比方财务数据分析过于简单,报告格式不够抱负。在这篇博客中,我们将重点介绍如何改进这些方面,使 API 更加实用和强大。
一、调教百度文心一言大模子参数

在使用百度文心一言模子生成财务分析报告的过程中,合理的模子调教参数设置对于进步报告质量至关紧张。以下是针对本项目中模子调教的具体计谋和示例:
1.确认模子参数种类

首先要确认所使用的模子有哪些参数,如本项目所使用的模子为 ERNIE-4.0-8K ,对应参数可在示例代码中央查看,其参数如下:

2.参数调教及设置

2.1 参数调教

在百度智能云的千帆大模子平台上,提供了在线调试工具,可用于对模子举行测试和参数调整。 首先在示例代码中央选择自己使用的大模子,调试工具就在页面中央,如下图:

可以选择适当的输入内容及参数设置,点击调试按钮后,模子反馈会及时表现在屏幕右侧。通过在线调试,可以根据实际应用场景和需求,找到更得当的参数组合,以获得更符合期望的模子输出结果。
2.2 参数调整


  • 温度(temperature)参数
    为了在保证报告正确性的同时,使模子输出具有一定的机动性和多样性,我们将温度参数设置为0.5。这个值相对较低,使得模子的答复更倾向于基于已有的知识和数据举行合理推测,镌汰随机生成不合理内容的可能性。
  • top_p 参数
    将top_p参数设置为0.75,以平衡输出文本的多样性和相关性。在生成财务分析报告时,模子能够在考虑多种相关因素的基础上,提供丰富但不过于分散的分析内容。
  • penalty_score 参数
    为了镌汰报告中的重复语句,进步内容的精炼度,我们将penalty_score参数进步到1.5。这样,模子在生成文本时会对重复的词汇或短语举行一定水平的处罚,促使其生成更简洁、正确的表述。比方,在描述收入趋势时,不会反复使用雷同的句式来表明预测结果。
  • system 字段:在system字段中明确设定模子人设为 “你是一位专业的财务分析师,精通各类财务分析方法和指标,能够根据提供的财务数据生成详细、正确、具有实用价值的财务分析报告。你善于用简洁明确的语言阐述复杂的财务概念和分析结果,留意数据的正确性和逻辑的严密性。” 这有助于引导模子按照专业财务分析的规范和风格生成报告。
  • disable_search 参数:设置disable_search = True,关闭及时搜刮功能。由于我们重要依赖于上传的财务数据举行分析,外部搜刮信息可能会干扰分析的正确性和一致性,确保模子专注于内部数据处理。
  • enable_citation 参数:开启enable_citation = True,使模子有概率返回搜刮溯源信息。在财务分析报告中,这可以为数据泉源或分析依据提供一定的参考依据,增加报告的可信度和透明度。
  • max_output_tokens 参数:根据预期报告的长度和详细水平,将max_output_tokens设置为1800。这样既能保证报告包含足够丰富的财务分析内容,又不会使报告过于冗长,便于用户阅读和明确。
上述参数更改只需将更改 generate_report() 函数中的 payload字段即可,如下:
  1. payload = json.dumps({
  2.             "messages": [
  3.                 {
  4.                     "role": "user",
  5.                     "content": prompt
  6.                 }
  7.             ],
  8.             "system": "你是一位专业的财务分析师,精通各类财务分析方法和指标,能够根据提供的财务数据生成详细、准确、具有实用价值的财务分析报告。你善于用简洁明了的语言阐述复杂的财务概念和分析结果,注重数据的准确性和逻辑的严密性。",
  9.             "temperature": 0.5,
  10.             "top_p": 0.75,
  11.             "penalty_score": 1.5,
  12.             "disable_search": True,
  13.             "enable_citation": True,
  14.             "max_output_tokens": 1800
  15.         })
复制代码

二、构建Web交互页面

为了与上述 API 举行交互,我们可以构建一个简单的 Web 页面,让用户能够上传 CSV 格式的财务数据文件,并展示生成的财务分析报告。以下是构建 Web 页面的详细步骤。
1. 修改 Flask 应用代码

在我们的 .py 文件中增加如下代码,为Flask应用增加 index 路由
  1. @app.route('/', methods=['GET'])
  2. def index():
  3.     return render_template('index.html', report='')
复制代码
 index路由用于返回初始的 Web 页面模板,此时报告内容为空字符串。
2. 前端代码

前段代码界说了一个简单、直观的 财务分析报告生成器 的前端页面。在这个页面中,用户可以上传包含财务数据的 CSV 文件,并查看由后端 Flask 应用生成的财务分析报告。前端代码如下:
 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>财务分析报告生成器</title>
  7.     <style>
  8.         body {
  9.             font-family: Arial, sans-serif;
  10.             margin: 0;
  11.             padding: 0;
  12.             background-color: #f9f9f9;
  13.         }
  14.         .container {
  15.             max-width: 600px;
  16.             margin: 50px auto;
  17.             padding: 20px;
  18.             background: #ffffff;
  19.             border-radius: 8px;
  20.             box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
  21.         }
  22.         h1 {
  23.             text-align: center;
  24.             color: #333;
  25.         }
  26.         form {
  27.             margin-top: 20px;
  28.         }
  29.         input[type="file"] {
  30.             display: block;
  31.             margin: 10px 0 20px 0;
  32.             font-size: 16px;
  33.         }
  34.         button {
  35.             display: block;
  36.             width: 100%;
  37.             padding: 10px;
  38.             font-size: 16px;
  39.             background-color: #007BFF;
  40.             color: white;
  41.             border: none;
  42.             border-radius: 4px;
  43.             cursor: pointer;
  44.         }
  45.         button:hover {
  46.             background-color: #0056b3;
  47.         }
  48.         .report {
  49.             margin-top: 20px;
  50.             padding: 15px;
  51.             background-color: #f4f4f4;
  52.             border: 1px solid #ddd;
  53.             border-radius: 4px;
  54.             white-space: pre-wrap;
  55.         }
  56.     </style>
  57. </head>
  58. <body>
  59.     <div class="container">
  60.         <h1>财务分析报告生成器</h1>
  61.         <form action="/upload" method="POST" enctype="multipart/form-data">
  62.             <label for="file">选择CSV文件:</label>
  63.             <input type="file" id="file" name="file" accept=".csv" required>
  64.             <button type="submit">生成报告</button>
  65.         </form>
  66.         {% if report %}
  67.         <div class="report">
  68.             <h2>生成的报告:</h2>
  69.             <p>{{ report }}</p>
  70.         </div>
  71.         {% endif %}
  72.     </div>
  73. </body>
  74. </html>
复制代码
前段代码部分不是本博客介绍重点,假如有兴趣可以查看另一篇博客,里面详细讲解了如何从0开始制作一个简洁又雅观的Web界面。
三、测试

颠末以上调整,我们的财务分析报告API已经开端构建完成。我们接下来对其举行测试。
首先,在命令行(Windows体系)或终端(MacOS)运行我们的 .py 文件,代码如下:
  1. python app.py
复制代码
其中 app.py 为 .py 文件的名称。
接着,在浏览器访问http://127.0.0.1:5000 我们会进入Web初始界面,如下:

选择文件上传 .csv文件(一定为csv格式,不然会报错),并点击生成报告。
这里我们选择使用第一篇博客中的数据对其举行测试。生成报告如下:

四、总结及完备代码

在本次实践中,我们对基于百度文心一言模子的 AI 财务分析 API 举行了全面优化。通过精心调教模子参数,使其输出更精准、多样且精炼,符合专业财务分析需求。同时成功构建 Web 交互页面,实现用户与 API 的便捷交互。经测试,API 性能精良,能依据上传的财务数据生成详尽实用的分析报告,有助于推动企业财务分析的智能化进程,并为企业决策提供了更高效可靠的支持。完备代码如下:
  1. import jsonfrom flask import Flask, request, jsonify, render_templateimport pandas as pdimport requestsapp = Flask(__name__)API_URL = "https://aip.baidubce.com/oauth/2.0/token?client_id=cL8yyc5SALxrJJENhASs9ReF&client_secret=Y3QPkGO8r8wSi3IdnFOPzyNNThgKexUo&grant_type=client_credentials"  # 替换为你的模子调用地址def get_access_token():    """    使用 API Key,Secret Key 获取access_token,替换下列示例中的应用API Key、应用Secret Key    """    url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=cL8yyc5SALxrJJENhASs9ReF&client_secret=Y3QPkGO8r8wSi3IdnFOPzyNNThgKexUo"    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")from statsmodels.tsa.arima.model import ARIMAdef analyze_revenue_trend(data):    try:        # 提取收入数据        revenue_series = data['Revenue']        # 拟合ARIMA模子        model = ARIMA(revenue_series, order=(1, 1, 1))        model_fit = model.fit()        # 预测未来3期收入        forecast = model_fit.forecast(steps=3)        return {            "current_revenue": int(revenue_series.iloc[-1]),            "forecast": [int(f) for f in 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),  # 假如这里可能出现int64也转换为float            '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),  # 假如这里可能出现int64也转换为float            '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):    """    使用百度千帆 ModelBuilder 生成智能分析报告。    """    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + get_access_token()    try:        # 构造哀求数据        prompt = f"""        基于以下财务分析结果:        1. 收入分析:当前收入为 {revenue_analysis['current_revenue']},未来三期收入预测为 {revenue_analysis['forecast']}。        2. 成本分析:均匀成本比例为 {cost_analysis['average_cost_percentage']:.2f},发起为:{cost_analysis['suggestion']}。        3. 债务分析:均匀债务收入比为 {debt_analysis['average_debt_to_revenue_ratio']:.2f},风险品级为:{debt_analysis['risk_level']}。        请生成一份简洁的财务分析报告,包含总结和可实行发起。        """        payload = json.dumps({
  2.             "messages": [
  3.                 {
  4.                     "role": "user",
  5.                     "content": prompt
  6.                 }
  7.             ],
  8.             "system": "你是一位专业的财务分析师,精通各类财务分析方法和指标,能够根据提供的财务数据生成详细、准确、具有实用价值的财务分析报告。你善于用简洁明了的语言阐述复杂的财务概念和分析结果,注重数据的准确性和逻辑的严密性。",
  9.             "temperature": 0.5,
  10.             "top_p": 0.75,
  11.             "penalty_score": 1.5,
  12.             "disable_search": True,
  13.             "enable_citation": True,
  14.             "max_output_tokens": 1800
  15.         })        headers = {            'Content-Type': 'application/json'        }        # 调用千帆 ModelBuilder API        response = requests.request("POST", url, headers=headers, data=payload)        if response.status_code == 200:            data = json.loads(response.text)            report_text = data.get('result', '')            return report_text        else:            return f"Failed to generate report. Status code: {response.status_code}, Message: {response.text}"    except Exception as e:        return f"AI report generation failed: {str(e)}"@app.route('/', methods=['GET'])
  16. def index():
  17.     return render_template('index.html', report='')@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)        # 结合千帆生成分析报告        AIreport = generate_report(revenue_analysis, cost_analysis, debt_analysis)        return render_template('index.html', report=AIreport)    except Exception as e:        return jsonify({'error': str(e)}), 500if __name__ == '__main__':    app.run(debug=True, port=5000)
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表