LangChain 在 VS Code 中无法显示 count plot
结论
这通常不是 LangChain 或 VS Code 执行失败,而是绘图库在不同运行环境中的显示方式不同。
Jupyter Notebook 通常会自动渲染当前图形,普通的 VS Code Python 脚本则不会。生成图表的代码需要显式调用:
plt.show()
最直接的解决办法是在提示词中明确要求 Agent 使用 Matplotlib 或 Seaborn,并在绘图后执行 plt.show()。为了避免图形窗口无法显示,还可以同时调用 plt.savefig(...),把图表保存为文件。
原因
create_csv_agent 会让模型生成并执行 Python 代码。收到 生成 count plot 之类的请求时,它可能只生成:
sns.countplot(data=df, x="Payment")
Jupyter Notebook 通常会自动渲染图形对象,所以即使没有 plt.show(),也可能看到图表。
在 VS Code 中直接运行 .py 文件时,这段代码只会创建图形。如果模型生成的代码没有调用 plt.show(),脚本可能正常结束,既不报错,也不弹出图形窗口。这就会出现文本答案正常返回、图表却没有显示的情况。
解决方法
1. 在提示词中明确要求调用 plt.show()
result = agent.run(
"""
Generate a count plot of the Payment column using seaborn.
After creating the plot, call matplotlib.pyplot.tight_layout()
and matplotlib.pyplot.show() explicitly.
"""
)
print(result)
Agent 执行的绘图代码由模型生成,因此提示词要写清楚。只说 Generate a count plot,不能保证模型会调用 plt.show()。
2. 同时保存图表文件
如果运行环境没有可用的图形界面,或者图形窗口一闪而过,保存图片会更可靠:
result = agent.run(
"""
Generate a count plot of the Payment column using seaborn.
Save the figure as payment_count_plot.png with dpi=150 and
bbox_inches="tight", then call matplotlib.pyplot.show().
"""
)
print(result)
运行结束后,到当前工作目录检查:
payment_count_plot.png
也可以在提示词中指定绝对路径,免得找不到图片实际保存的位置。
3. 先验证 VS Code 能否显示 Matplotlib 图表
在同一个 Python 环境中单独运行以下脚本:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
df = pd.read_csv("supermarket_sales - Sheet1.csv")
sns.countplot(data=df, x="Payment")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
如果这段代码能显示图表,说明 VS Code、Python 解释器和绘图库基本正常,问题多半是 Agent 生成的代码没有显式显示图形。
如果仍然无法显示,可以改为保存文件:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
df = pd.read_csv("supermarket_sales - Sheet1.csv")
sns.countplot(data=df, x="Payment")
plt.tight_layout()
plt.savefig("payment_count_plot.png", dpi=150, bbox_inches="tight")
如果能生成 PNG,却无法弹出窗口,通常是当前 Matplotlib backend 或运行环境不支持交互式窗口。
检查 Matplotlib backend
先查看当前使用的 backend:
import matplotlib
print(matplotlib.get_backend())
如果结果是 Agg,说明当前使用的是非交互式 backend。它可以生成图片文件,但不会弹出图形窗口,此时应优先使用 savefig()。
如果电脑具备桌面图形环境,并且已经安装相应的 GUI 依赖,也可以在导入 matplotlib.pyplot 之前指定交互式 backend:
import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot as plt
不要随意切换 backend。远程 SSH、容器、WSL 或没有桌面环境的服务器通常无法使用 GUI,直接保存图片会更合适。
VS Code 中的运行方式
VS Code 支持多种 Python 运行方式,图表的显示行为也有所不同:
- 在
.ipynb或 Interactive Window 中运行时,图表通常会内嵌显示。 - 使用
Run Python File在终端中运行.py文件时,通常需要调用plt.show()。 - 在远程、容器或无图形界面的环境中,通常需要使用
plt.savefig()。
还要确认 VS Code 当前选择的 Python 解释器,就是安装了 langchain、matplotlib、seaborn 和 pandas 的那个环境。
推荐写法
让 Agent 生成图表时,可以同时要求它保存并显示图表:
from langchain.agents import create_csv_agent
from langchain.llms import OpenAI
import os
os.environ["OPENAI_API_KEY"] = "Your-API-Key"
agent = create_csv_agent(
OpenAI(temperature=0.2),
"supermarket_sales - Sheet1.csv",
verbose=True,
)
response = agent.run(
"""
Create a seaborn count plot for the Payment column.
Add a descriptive title and axis labels.
Call matplotlib.pyplot.tight_layout().
Save the chart to payment_count_plot.png using dpi=150 and
bbox_inches="tight".
Finally, call matplotlib.pyplot.show() explicitly.
"""
)
print(response)
注意事项
verbose=True可以帮助你检查 Agent 实际生成并执行了哪些代码,尤其要看其中是否包含plt.show()或plt.savefig()。- Agent 返回自然语言答案,并不代表图表已经显示。图形窗口属于 Python 执行环境产生的副作用。
- 如果模型只返回绘图代码或文字说明,没有实际执行绘图工具,也不会生成图表。具体行为取决于所用的 LangChain 版本和 Agent 配置。
- 不要把真实 API Key 直接写入代码仓库。建议通过环境变量或
.env文件加载。 - LangChain 的导入路径和 Agent API 可能因版本而异。如果现有代码已经能返回文本结果,应先排查图形显示和 backend,而不是立刻更换 LangChain 版本。
备注:内容仅供参考。
