【图解】只用 LangChain+SQL,我让老板的财务报表“自己”长出图表!

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"![财务图表-{i+1}]({图表路径})\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财务异常监测已停止")

注意事项

  1. 小心SQL注入,使用LangChain的安全机制,别直接拼SQL
  2. 敏感数据要加密存储,别裸奔。数据库连接信息藏好点
  3. 使用OpenAI API要限制token消耗,不然账单会吓死人
  4. 异常监测建议结合人工复核,别全信AI的判断
  5. 定期检查自动化流程是否正常,防止"自动故障"变"手动救火"

总结

LangChain+SQL库是连接自然语言和数据库的桥梁,可以帮你:

  • 自然语言查询数据
  • 智能生成财务图表
  • 自动创建分析报告
  • 构建交互式问答系统

掌握这个技能,老板再也不用担心看不懂SQL,财务报表也能变得生动有趣!看完这篇,快去试试让你的财务数据自己"说话"吧。

如何零基础入门 / 学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

read-normal-img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值