拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何让LLM帮你选对图表?Data-Analysis-Agent推荐引擎的Prompt工程与JSON解析揭秘

如何让LLM帮你选对图表?Data-Analysis-Agent推荐引擎的Prompt工程与JSON解析揭秘

如何让LLM帮你选对图表?Data-Analysis-Agent推荐引擎的Prompt工程与JSON解析揭秘

【免费下载链接】Data-Analysis-Agent🚀你的私人数据分析助手。通过对话式交互,自动生成可视化报表与商业洞察,让数据决策变得像聊天一样简单。 🚀 Your personal data analysis assistant. Say goodbye to complex SQL and Excel formulas. An LLM-powered data analysis agent. Chat with your data to instantly generate visualizations and business insights. Making>项目地址: https://gitcode.com/gh_mirrors/vi/Data-Analysis-Agent

Data-Analysis-Agent(VizPilot AI)是一个 LLM 驱动的智能图表推荐与生成系统:上传 Excel 或 CSV 数据后,它会自动分析字段类型与数据特征,由大语言模型推荐 3-5 个最合适的图表,并附理由、星级评分和字段映射建议,最终一键生成交互式 HTML 报表。整个过程像聊天一样简单,让数据决策告别复杂 SQL 和 Excel 公式。

上面是系统首页。左侧完成数据上传和 LLM 提供商配置,右侧是图表网格——这份列表并非手写死,而是由 charts/registry.py 注册表统一驱动,新增图表只需改一处,前后端自动同步。

一图看懂推荐链路

整个智能推荐可以拆成五步,全部封装在 LLM/llm_recommender.py:

  1. 读数据:解析 CSV/XLSX,自动识别数值列与文本列(见 core/loader.py)
  2. 拼 Prompt:把数据特征 + 图表白名单 + 输出格式约定打包成提示词
  3. 调 LLM:以temperature=0.2的低随机度请求,保证输出稳定
  4. 解析 JSON:多级容错提取推荐数组
  5. 严格校验:白名单过滤 + 字段映射补全,输出干净结果给前端

Prompt工程的三个关键设计

1. 角色锚定:让模型"只说人话图表"

Prompt 以「你是数据可视化专家」开头(见 LLM/llm_recommender.py)。这一句看似平常,其实把模型的知识空间约束到了数据可视化领域,减少无关发散,是 Prompt 工程里最基础也最有效的技巧之一。

2. 动态图表白名单:注册表即 Prompt

这是本项目最巧妙的设计。函数build_charts_definition()每次都会从charts/registry.py实时生成图表目录,注入 Prompt:

AVAILABLE CHART TYPES (ONLY use these chart_id values): [对比类 COMPARING] chart_id: Bar_Chart name: 柱状图 desc: 通过矩形高度编码数值,最常用的比较图表 required_fields: x, y ...

好处有三:

  • 永不失配:注册表加一个图表,Prompt 立刻多出对应选项,LLM 永远不会推荐系统里根本不存在的图表
  • 带字段契约:每个图表的required_fields(如source, target, value)一并告知 LLM,让它提前按字段结构推荐,而不是拍脑袋
  • 按优先级排序:priority高的图表排在前面,利用 LLM 对靠前内容权重更高的特性,自然提高热门图表被选中的概率

3. 结构化输出约定:给 LLM 一张"答题卡"

Prompt 末尾明确要求返回 JSON 数组,每个推荐包含chart_id、stars(五星~一星推荐)、reason、field_mapping、columns_to_keep、data_processing六个字段,并给出四条硬约束:

  1. field_mapping必须覆盖所有required_fields
  2. 列名必须是数据中真实存在的列
  3. 只推荐注册表中存在的图表
  4. 最多推荐 5 个图表

这套"答题卡式"约定是后续 JSON 解析能够高成功率的根基——模型连"往哪个格子里填"都知道,翻车概率自然低。

JSON解析的三级容错:LLM不是每次都听话

再好的 Prompt 也无法保证 LLM 100% 按格式返回。extract_and_parse_json()采用了经典的三级回退策略:

第一级:直接json.loads如果模型很乖,返回的就是纯 JSON 数组,一步到位。

第二级:提取围栏代码块很多模型会把 JSON 包在```json ... ```里。正则同时匹配带语言标记和裸围栏两种形式:

for p in [r"```json\s*(.*?)\s*```", r"```\s*(.*?)\s*```"]:

第三级:暴力截取最外层方括号最兜底的一招:找到第一个[和最后一个]之间的内容,再用正则re.sub(r",(\s*[\]}])", r"\1", ...)顺手清掉 JS 风格的尾逗号(这是 LLM 输出 JSON 最常见的翻车点),然后再次尝试解析。

三级全部失败才返回None,前端会提示重试。这种"能救则救"的容错设计,是 LLM 工程里对抗输出不稳定的通用思路。

严格校验层:白名单 + 字段映射双重兜底

拿到 JSON 后还不能直接相信,sanitize_and_validate_recommendations()会做一轮"警察"工作:

  • 白名单过滤:chart_id不在charts/registry.py里的直接丢弃,防止模型幻觉出waterfall_chart_v2之类的野名
  • 星级纠偏:星级字段只接受"五星/四星/…/一星推荐"六个合法值,否则统一回填为三星
  • 字段映射瘦身:只保留该图表required_roles和optional_roles中允许的角色名,且值必须是真实列名
  • 必填检查:required_fields缺一个就整条丢弃——宁缺毋滥,避免生成时报错
  • 兼容回填:对 XY 图,老字段x_label/y_label会自动回填进field_mapping,平滑过渡
  • 列名吸附:自动把field_mapping中指向真实列的值并入columns_to_keep,保证下游绘图模块拿到的列一定存在

经过这一层,返回给前端的推荐列表已经是"可安全执行"的干净数据。

多 LLM 提供商:一个配置面板切换 DeepSeek / OpenAI / 自定义

推荐引擎与具体模型解耦。LLM/llm_config_manager.py 统一管理内置提供商(DeepSeek、OpenAI、Claude)和用户自定义的 OpenAI 兼容接口,配置持久化在 LLM/llm_config.json。

在页面 Settings 面板填入 API Key 并保存后,调用analyze_data_with_llm()时会通过get_llm_client(provider)动态构造客户端,无需改一行代码即可切换模型。这也是"Prompt 工程"落地的重要一环:Prompt 写得好,模型换得快。

如上图,当上传的数据包含source/target/value三列时,LLM 给出"五星推荐 桑基图",理由和字段标签一目了然,右侧图表网格中桑基图卡片同步高亮——这是推荐结果直接驱动前端 UI 的体现。

图表详情页:把推荐"讲明白"

双击任一图表卡片可打开详情页,左侧展示来自 charts/ 目录下各图表 README 的元数据(分类、所需列、约束),右侧是 Plotly 交互式示例,帮助新手在点击"生成"前心里有数。

规则引擎与 LLM 的双保险

除 LLM 推荐外,项目还提供了基于规则的 core/recommender_rules.py 推荐引擎:根据列类型组合(时间列+数值列→折线图、双数值列→散点图、地理列→地图…)做确定性匹配,规则阈值集中定义在 LLM/chart_rules.yaml。LLM 负责"聪明的解释",规则负责"兜底的确定性",两者互为备份,推荐结果既稳又准。

上手只需三步

  1. 安装依赖:pip install -r requirements.txt(详见 requirements.txt)
  2. 启动服务:python app.py,或 Windows 下双击 start.bat
  3. 浏览器访问http://localhost:5017,上传文件 → 配置 API Key → 点"发送" → 选图生成

写在最后

Data-Analysis-Agent 的推荐引擎给所有做 LLM 应用的人上了三节课:

  • Prompt 不是模板,是接口——把动态数据源(注册表)注入 Prompt,让模型永远与系统状态同步
  • JSON 解析要有"三级火箭"——直接解析 → 抽围栏 → 截方括号清尾逗号,容错到位成功率翻倍
  • 校验层不能省——LLM 输出必须过一次白名单 + 契约校验,才能安全进入生产链路

掌握这套组合拳,你也能把任何"让 LLM 帮我选/写/生成 X"的场景做得又稳又省心。

【免费下载链接】Data-Analysis-Agent🚀你的私人数据分析助手。通过对话式交互,自动生成可视化报表与商业洞察,让数据决策变得像聊天一样简单。 🚀 Your personal data analysis assistant. Say goodbye to complex SQL and Excel formulas. An LLM-powered data analysis agent. Chat with your data to instantly generate visualizations and business insights. Making>项目地址: https://gitcode.com/gh_mirrors/vi/Data-Analysis-Agent

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表