在第一篇博客中,我们介绍了如何基于 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。这样既能保证报告包含足够丰富的财务分析内容,又不会使报告过于冗长,便于用户阅读和理解。
文章来源于互联网:部署人工智能财务分析 API:利用百度文心一言的实践指南(二)
相关推荐: IntelliJ IDEA(2024版) 的安装、配置与使用教程:常用配置、创建工程等操作(很详细,你想要的都在这里)
Ⅰ、IDEA 的安装: 1、IDEA 的下载地址(官网): 点击可到官网下载地址 2、IDEA 分为两个版本:旗舰版 (Ultimate) 和 社区版 (Community) 旗舰版收费(限 30 天免费试用),社区版免费,这和 Eclipse 有很大区别。 …
在当今数字化的商业环境中,财务分析对于企业决策至关重要。本文章将介绍如何部署一个基于 Flask 的智能财务分析 API,它利用了百度文心一言大模型来生成智能分析报告。该文章将分为两部分,第一部分主要介绍该API使用的核心代码及其部署测试。第二部分将会在一个月后上传,将会专注于提升该API生成的报告的准确性,并尝试为其添加Wed页面以方便用户使用。
一、前期准备
你需要确保已经安装了以下 Python 库:flask、pandas、statsmodels、requests、json。可以使用pip install命令来安装它们。
pip install flask pandas statsmodels requests
在百度智能云千帆平台申请并获取API_key和secret_key,这两个密钥将用于获取访问令牌(access_token)以调用文心一言的 ModelBuilder API。关于如何注册百度账号并获取模型密钥的文章已经很多,本文不再赘述,具体操作方法可以参考另一篇blog。
二、代码结构与功能解析
在构建财务分析 API 时,选择 Flask 主要因其具备多方面优势。Flask 极为轻量,核心代码简洁易懂,像创建基本应用仅需寥寥数行代码,使开发人员可快速搭建 API 基础架构。尤其适合对Python编程熟练度较低的新手。同时其灵活性很高,能与诸如 pandas、statsmodels、requests 等多种库自由集成,在处理数据、分析及与百度千帆通信时,不会受框架限制,方便按业务逻辑操作。
最重要的是,使用 Flask 可以让我们后续为该财务分析 API 添加 Web 界面时更加便捷。其路由(Routing)机制可以将 URL 与特定的 Python 函数关联起来。它决定了当用户访问某个特定 URL 时,应用程序应该执行什么逻辑。比如我们后续可以新增/dashboard等路由展示分析结果,增强用户体验。
我们首先创建一个 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 接口接收 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 格式返回给用户。
三、部署与测试
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 "file=@data.csv" http://127.0.0.1:5000/upload
其中,data.csv为你想要上传的财务数据文件。
当我们执行上述curl命令后,会在命令行(或终端)得到 API 的响应。如果一切正常,响应将是一个 JSON 格式的数据,包含收入分析、成本分析、债务风险分析和文心一言生成的财务报告等内容。
四、示例
上传的 CSV 文件如下:
| Date |
Revenue |
Cost |
Debt |
| 2024/1/1 |
100000 |
50000 |
20000 |
| 2024/2/1 |
110000 |
55000 |
22000 |
| 2024/3/1 |
120000 |
60000 |
25000 |
| 2024/4/1 |
130000 |
65000 |
27000 |
| 2024/5/1 |
140000 |
70000 |
30000 |
最终生成的报告如下:
{
"财务报告(文心一言)": "**财务分析报告**nn**一、概述**nn本报告基于最新的财务数据,对收入、成本及债务状况进行了全面分析,旨在为管理层提供决策支持,确保公司的财务健康与持续增长。nn**二、收入分析**nn- **当前收入状况**:公司当前收入达到140,000元,显示出稳健的经营能力。n- **未来收入预测**:根据预测数据,未来三期收入将分别增长至[149,390元, 159,016元, 168,642元],呈现逐步上升的趋势,预示着积极的市场前景和业务拓展成果。nn**三、成本分析**nn- **成本结构**:公司平均成本比例为0.50,表明成本控制得当,资源配置效率较高。n- **建议**:成本结构已经处于最优状态,建议继续保持并监控成本变动,以确保持续的成本优势。nn**四、债务分析**nn- **债务收入比**:平均债务收入比为0.21,显示出较低的债务负担。n- **风险等级**:经评估,公司的债务风险等级为“低风险”,表明公司具有稳健的偿债能力,财务风险可控。nn**五、总结**nn综合以上分析,公司财务状况健康,收入稳步增长,成本结构合理,债务风险低。这些积极因素为公司未来的发展奠定了坚实基础,提供了有力的财务保障。nn**六、可执行建议**nn1. **收入提升策略**:继续加强市场开拓,优化产品和服务,以维持并加速收入增长势头。n2. **成本控制措施**:持续监控成本动态,通过技术创新和管理优化进一步降低成本,提升盈利能力。n3. **债务管理规划**:在保持低债务风险的同时,合理利用财务杠杆,优化债务结构,以支持公司的扩张和发展战略。",
"成本分析": {
"平均成本比例": 0.5,
"建议": "成本结构最优"
},
"债务分析": {
"平均收入比例": 0.206062271062271,
"风险等级": "低风险"
},
"收入分析": {
"当前收入": 140000,
"预测": [149390, 159016, 168642]
}
}
五、下一步工作
经过上述步骤,我们的API现在有了基本的财务数据分析和财务报告生成功能。然而,我们意识到财务数据分析步骤过于简单,仅仅使用了指数平滑模型来预测收入。此外,生成的报告信息有些简陋,并且格式不太适合阅读。因此,我们需要改变输出格式,使用户更容易使用报告信息。在接下来的工作中,我们将专注于提高报告的准确性,并为API添加一个Web页面,以便用户可以更方便地使用它。
文章来源于互联网:部署人工智能财务分析 API:利用百度文心一言的实践指南(一)
相关推荐: IDEA 编译报错 “java: 常量字符串过长” 的解决办法
在线文本换行工具: https://lzltool.cn/Toolkit/WrapWordsInText 一、问题描述 今天在开发过程中,由于尝试将一个文件的 Base64 字符串设置为常量,结果导致 IDEA 编译的时候出现了如下报错: java: 常量字符…