在第一篇博客中,我们介绍了如何基于 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字段即可,如下:
- payload = json.dumps({
- "messages": [
- {
- "role": "user",
- "content": prompt
- }
- ],
- "system": "你是一位专业的财务分析师,精通各类财务分析方法和指标,能够根据提供的财务数据生成详细、准确、具有实用价值的财务分析报告。你善于用简洁明了的语言阐述复杂的财务概念和分析结果,注重数据的准确性和逻辑的严密性。",
- "temperature": 0.5,
- "top_p": 0.75,
- "penalty_score": 1.5,
- "disable_search": True,
- "enable_citation": True,
- "max_output_tokens": 1800
- })
复制代码
二、构建Web交互页面
为了与上述 API 举行交互,我们可以构建一个简单的 Web 页面,让用户能够上传 CSV 格式的财务数据文件,并展示生成的财务分析报告。以下是构建 Web 页面的详细步骤。
1. 修改 Flask 应用代码
在我们的 .py 文件中增加如下代码,为Flask应用增加 index 路由
- @app.route('/', methods=['GET'])
- def index():
- return render_template('index.html', report='')
复制代码 index路由用于返回初始的 Web 页面模板,此时报告内容为空字符串。
2. 前端代码
前段代码界说了一个简单、直观的 财务分析报告生成器 的前端页面。在这个页面中,用户可以上传包含财务数据的 CSV 文件,并查看由后端 Flask 应用生成的财务分析报告。前端代码如下:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>财务分析报告生成器</title>
- <style>
- body {
- font-family: Arial, sans-serif;
- margin: 0;
- padding: 0;
- background-color: #f9f9f9;
- }
- .container {
- max-width: 600px;
- margin: 50px auto;
- padding: 20px;
- background: #ffffff;
- border-radius: 8px;
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
- }
- h1 {
- text-align: center;
- color: #333;
- }
- form {
- margin-top: 20px;
- }
- input[type="file"] {
- display: block;
- margin: 10px 0 20px 0;
- font-size: 16px;
- }
- button {
- display: block;
- width: 100%;
- padding: 10px;
- font-size: 16px;
- background-color: #007BFF;
- color: white;
- border: none;
- border-radius: 4px;
- cursor: pointer;
- }
- button:hover {
- background-color: #0056b3;
- }
- .report {
- margin-top: 20px;
- padding: 15px;
- background-color: #f4f4f4;
- border: 1px solid #ddd;
- border-radius: 4px;
- white-space: pre-wrap;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <h1>财务分析报告生成器</h1>
- <form action="/upload" method="POST" enctype="multipart/form-data">
- <label for="file">选择CSV文件:</label>
- <input type="file" id="file" name="file" accept=".csv" required>
- <button type="submit">生成报告</button>
- </form>
- {% if report %}
- <div class="report">
- <h2>生成的报告:</h2>
- <p>{{ report }}</p>
- </div>
- {% endif %}
- </div>
- </body>
- </html>
复制代码 前段代码部分不是本博客介绍重点,假如有兴趣可以查看另一篇博客,里面详细讲解了如何从0开始制作一个简洁又雅观的Web界面。
三、测试
颠末以上调整,我们的财务分析报告API已经开端构建完成。我们接下来对其举行测试。
首先,在命令行(Windows体系)或终端(MacOS)运行我们的 .py 文件,代码如下:
其中 app.py 为 .py 文件的名称。
接着,在浏览器访问http://127.0.0.1:5000 我们会进入Web初始界面,如下:
选择文件上传 .csv文件(一定为csv格式,不然会报错),并点击生成报告。
这里我们选择使用第一篇博客中的数据对其举行测试。生成报告如下:
四、总结及完备代码
在本次实践中,我们对基于百度文心一言模子的 AI 财务分析 API 举行了全面优化。通过精心调教模子参数,使其输出更精准、多样且精炼,符合专业财务分析需求。同时成功构建 Web 交互页面,实现用户与 API 的便捷交互。经测试,API 性能精良,能依据上传的财务数据生成详尽实用的分析报告,有助于推动企业财务分析的智能化进程,并为企业决策提供了更高效可靠的支持。完备代码如下:
- 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({
- "messages": [
- {
- "role": "user",
- "content": prompt
- }
- ],
- "system": "你是一位专业的财务分析师,精通各类财务分析方法和指标,能够根据提供的财务数据生成详细、准确、具有实用价值的财务分析报告。你善于用简洁明了的语言阐述复杂的财务概念和分析结果,注重数据的准确性和逻辑的严密性。",
- "temperature": 0.5,
- "top_p": 0.75,
- "penalty_score": 1.5,
- "disable_search": True,
- "enable_citation": True,
- "max_output_tokens": 1800
- }) 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'])
- def index():
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |