LangChain+SQL 就像是会魔法的会计师,可以把枯燥的财务数据变成生动的图表和分析报告。
基本功能
1. 连接数据库
# 导入必要的库
from langchain.llms import OpenAI
from langchain.utilities import SQLDatabase
from langchain_experimental.sql import SQLDatabaseChain
# 连接到数据库
db = SQLDatabase.from_uri(
"sqlite:///财务数据.db",
sample_rows_in_table_info=2 # 提供表格样例帮助理解
)
# 初始化语言模型
llm = OpenAI(temperature=0, openai_api_key="你的API密钥")
# 创建数据库链
db_chain = SQLDatabaseChain.from_llm(
llm=llm,
database=db,
verbose=True # 打印中间步骤,方便调试
)
2. 自然语言查询
# 定义一个查询函数
def 财务查询(问题):
try:
# 通过LangChain转换为SQL并执行
结果 = db_chain.run(问题)
return 结果
except Exception as e:
return f"查询出错:{str(e)}"
# 使用示例
回答 = 财务查询("2023年第一季度的总收入是多少?")
print(回答)
实用功能
1. 生成财务图表
# 导入可视化库
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
def 生成图表(查询问题, 图表类型="bar"):
# 获取SQL执行结果
sql查询 = db_chain.generate_response(查询问题)["intermediate_steps"][0]
数据表 = pd.read_sql_query(sql查询, db.engine)
# 根据数据特点自动选择合适的图表类型
if 图表类型 == "auto":
列数 = len(数据表.columns)
行数 = len(数据表)
if 列数 == 2:
if 行数 <= 10:
图表类型 = "bar" # 柱状图适合少量分类数据
else:
图表类型 = "line" # 折线图适合时间序列
elif "日期" in str(数据表.columns):
图表类型 = "line" # 有日期列就用折线图
elif 列数 >= 3:
图表类型 = "heatmap" # 热力图适合多维数据
# 绘制图表
plt.figure(figsize=(10, 6))
if 图表类型 == "bar":
sns.barplot(data=数据表)
elif 图表类型 == "line":
sns.lineplot(data=数据表)
elif 图表类型 == "pie":
数据表.plot.pie(subplots=True)
elif 图表类型 == "heatmap":
sns.heatmap(数据表.corr(), annot=True)
plt.title(f"查询:{查询问题}")
plt.tight_layout()
plt.savefig("财务图表.png")
return "财务图表.png"
2. 自动分析报告
# 生成完整分析报告的函数
def 生成财务报告(时间范围="最近一个季度"):
# 定义分析问题列表
分析问题 = [
f"{时间范围}的总收入和总支出是多少?",
f"{时间范围}利润最高的三个部门是哪些?",
f"{时间范围}各月收入趋势如何?",
f"{时间范围}支出占比最高的三个类别是什么?"
]
# 生成报告内容
报告内容 = f"## {时间范围}财务分析报告\n\n"
# 逐个问题分析并生成图表
for i, 问题 in enumerate(分析问题):
报告内容 += f"### {i+1}. {问题}\n"
分析结果 = 财务查询(问题)
报告内容 += f"\n{分析结果}\n\n"
# 添加对应图表
图表路径 = 生成图表(问题, "auto")
报告内容 += f"\n\n"
# 保存为markdown文件
with open("财务分析报告.md", "w", encoding="utf-8") as f:
f.write(报告内容)
return "财务分析报告.md已生成"
3. 智能问答系统
# 构建更智能的问答系统
from langchain.prompts.prompt import PromptTemplate
from langchain.chains import LLMChain
# 定义提示模板
template = """
你是一位财务分析专家,请根据以下SQL数据库分析问题并提供专业见解:
数据库信息:
{db_info}
用户问题:
{question}
请首先考虑需要查询哪些数据,然后给出分析结果和专业建议。
"""
prompt = PromptTemplate(
input_variables=["db_info", "question"],
template=template
)
# 创建更智能的问答链
def 智能财务问答():
# 获取数据库信息
db_info = db.get_table_info()
# 创建问答链
问答链 = LLMChain(
llm=OpenAI(temperature=0.2), # 稍微提高创造性
prompt=prompt
)
# 交互式问答循环
print("财务智能助手已启动,输入'退出'结束对话")
while True:
问题 = input("\n请输入您的财务问题: ")
if 问题 == "退出":
break
# 处理问题
回答 = 问答链.run(db_info=db_info, question=问题)
print("\n分析结果:")
print(回答)
# 询问是否需要生成图表
if "图表" in 问题 or input("\n是否需要相关图表?(是/否) ").lower() == "是":
图表路径 = 生成图表(问题)
print(f"图表已生成: {图表路径}")
常见任务示例
1. 自动生成月报
# 按月生成财务报表
def 生成月度报表(年份=2023, 月份=None):
from datetime import datetime
# 默认使用当前月份
if 月份 is None:
当前日期 = datetime.now()
年份 = 当前日期.year
月份 = 当前日期.month - 1 # 上个月
if 月份 == 0:
月份 = 12
年份 -= 1
# 月份名称映射
月份名称 = {
1: "一月", 2: "二月", 3: "三月", 4: "四月",
5: "五月", 6: "六月", 7: "七月", 8: "八月",
9: "九月", 10: "十月", 11: "十一月", 12: "十二月"
}
月份标题 = f"{年份}年{月份名称[月份]}"
# 定义月报分析问题
月报问题 = [
f"{月份标题}的总收入和成本是多少?",
f"{月份标题}各部门的收入占比情况?",
f"{月份标题}与上月相比,收入增长了多少?",
f"{月份标题}支出最高的五个项目是什么?",
f"{月份标题}的毛利率和净利率是多少?"
]
# 开始生成报告
报告内容 = f"## {月份标题}财务月度报告\n\n"
报告内容 += f"生成日期: {datetime.now().strftime('%Y年%m月%d日')}\n\n"
报告内容 += "## 摘要\n\n"
# 获取月度财务摘要
摘要问题 = f"{月份标题}的财务表现如何?请简要总结收入、支出和利润情况。"
摘要内容 = 财务查询(摘要问题)
报告内容 += f"{摘要内容}\n\n"
# 逐个分析问题
for i, 问题 in enumerate(月报问题):
报告内容 += f"## {i+1}. {问题}\n\n"
分析结果 = 财务查询(问题)
报告内容 += f"{分析结果}\n\n"
# 添加图表
if i < 3: # 前三个问题生成图表
图表类型 = "pie" if "占比" in 问题 else "bar"
图表路径 = 生成图表(问题, 图表类型)
报告内容 += f"\n\n"
# 添加结论和建议
结论问题 = f"基于{月份标题}的财务数据,提出三点具体的改进建议。"
结论内容 = 财务查询(结论问题)
报告内容 += "## 结论与建议\n\n"
报告内容 += f"{结论内容}\n\n"
# 保存报告
报告文件名 = f"财务月报_{年份}_{月份}.md"
with open(报告文件名, "w", encoding="utf-8") as f:
f.write(报告内容)
return f"月度报告已生成: {报告文件名}"
2. 异常监测与报警
# 自动检测财务异常并发出警报
def 财务异常监测(阈值=0.2, 检查间隔=24): # 默认检测20%变化,每24小时检查一次
import time
from datetime import datetime, timedelta
print(f"财务异常监测已启动,阈值: {阈值*100}%,检查间隔: {检查间隔}小时")
# 获取上次检查数据作为基准
def 获取基准数据():
昨天 = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
收入查询 = f"截至{昨天}的各部门收入是多少?"
支出查询 = f"截至{昨天}的各类别支出是多少?"
收入数据 = 财务查询(收入查询)
支出数据 = 财务查询(支出查询)
return {
"收入": 收入数据,
"支出": 支出数据,
"日期": 昨天
}
# 检测异常
def 检测异常(基准数据, 最新数据):
异常列表 = []
# 这里需要解析查询结果并比较,实际实现中需要更复杂的逻辑
# 简化示例:
if "收入大幅下降" in 最新数据["收入"]:
异常列表.append("收入异常:检测到收入大幅下降")
if "支出异常增长" in 最新数据["支出"]:
异常列表.append("支出异常:检测到支出异常增长")
# 发送异常报警
if 异常列表:
发送报警(异常列表)
return 异常列表
# 模拟发送报警
def 发送报警(异常列表):
print("\n===== 财务异常报警 =====")
print(f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
for 异常 in 异常列表:
print(f"- {异常}")
print("========================\n")
# 监测循环
基准数据 = 获取基准数据()
try:
while True:
当前时间 = datetime.now()
print(f"进行检查: {当前时间.strftime('%Y-%m-%d %H:%M:%S')}")
今天 = 当前时间.strftime("%Y-%m-%d")
收入查询 = f"截至{今天}的各部门收入是多少?"
支出查询 = f"截至{今天}的各类别支出是多少?"
最新数据 = {
"收入": 财务查询(收入查询),
"支出": 财务查询(支出查询),
"日期": 今天
}
异常列表 = 检测异常(基准数据, 最新数据)
if not 异常列表:
print("未检测到异常")
# 更新基准数据
基准数据 = 最新数据
# 等待下次检查
print(f"下次检查时间: {(当前时间 + timedelta(hours=检查间隔)).strftime('%Y-%m-%d %H:%M:%S')}")
time.sleep(检查间隔 * 3600) # 转换为秒
except KeyboardInterrupt:
print("\n财务异常监测已停止")
注意事项
- 小心SQL注入,使用LangChain的安全机制,别直接拼SQL
- 敏感数据要加密存储,别裸奔。数据库连接信息藏好点
- 使用OpenAI API要限制token消耗,不然账单会吓死人
- 异常监测建议结合人工复核,别全信AI的判断
- 定期检查自动化流程是否正常,防止"自动故障"变"手动救火"
总结
LangChain+SQL库是连接自然语言和数据库的桥梁,可以帮你:
- 自然语言查询数据
- 智能生成财务图表
- 自动创建分析报告
- 构建交互式问答系统
掌握这个技能,老板再也不用担心看不懂SQL,财务报表也能变得生动有趣!看完这篇,快去试试让你的财务数据自己"说话"吧。
如何零基础入门 / 学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?
”“谁的饭碗又将不保了?
”等问题热议不断。
不如成为「掌握AI工具的技术人」
,毕竟AI时代,谁先尝试,谁就能占得先机!
想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
👉 福利来袭
优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
全套AGI大模型学习大纲+路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉 福利来袭
优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。