39、LangChain1.0开发框架(四)--数据分析智能助手+开发上线
根据前面的内容,在对LangChain 1.0有了一定的基础了解之后,对于开发者来说,还需要进一步了解和掌握LangChain Agent必备的开发者套件。分别是LangChain Agent运行监控框架LangSmith、底层LangGraph图结构可视化与调试框架LangGraph Studio和LangGraph服务部署工具LangGraph Cli。可以说这些开发工具套件,是真正推动Lan
根据前面的内容,在对LangChain 1.0有了一定的基础了解之后,对于开发者来说,还需要进一步了解和掌握LangChain Agent必备的开发者套件。分别是LangChain Agent运行监控框架LangSmith、底层LangGraph图结构可视化与调试框架LangGraph Studio和LangGraph服务部署工具LangGraph Cli。可以说这些开发工具套件,是真正推动LangGraph的企业级应用开发效率大幅提升的关键。同时监控、调试和部署工具,也是全新一代企业级Agent开发框架的必备工具,也是开发者必须要掌握的基础工具。
一、LangChain Agent部署与上线工具讲解
1.1 LangGraph运行监控框架:LangSmith
LangSmith 是一款用于构建、调试、可视化和评估 LLM 工作流的全生命周期开发平台。它聚焦的不是模型训练,而是我们在构建 AI 应用(尤其是多工具 Agent、LangChain/Graph)时的「可视化调试」、「性能评估」与「运维监控」。

对于企业级的Agent项目,为了更好的监控智能体实时运行情况,我们可以考虑借助LangSmith进行追踪(会将智能体运行情况实时上传到LangGraph官网并进行展示)。
要开始使用 LangSmith,我们需要创建一个帐户。可以在这里注册一个免费帐户进入LangSmith登录页面: https://smith.langchain.com/ , 支持使用 Google、GitHub、Discord 和电子邮件登录。

在构建程序跟踪前,首先需要创建一个 API 密钥,该密钥将允许我们的项目开始向 Langsmith 发送跟踪数据。创建完密钥后,在后续配置环境变量环节设置开启追踪、并输入密钥即可接入LangSmith。
1.2 LangGraph图结构可视化与调试框架:LangGraph Studio
LangGraph Studio 是一个用于可视化构建、测试、分享和部署智能体流程图的图形化 IDE + 运行平台。
1.3 LangGraph服务部署工具:LangGraph Cli
LangGraph CLI 是用于本地启动、调试、测试和托管 LangGraph 智能体图的开发者命令行工具。
而一旦应用成功部署上线,LangGraph Cli还会非常贴心的提供后端接口说明文档:
而对于LangGraph构建的智能体,除了能够本地部署外,官方也提供了云托管服务,借助LangGraph Platform,开发者可以将构建的智能体 Graph部署到云端,并允许公开访问,同时支持支持长时间运行、文件上传、外部 API 调用、Studio 集成等功能。
安装langgraph-cli依赖,执行如下代码:
pip install -U "langgraph-cli[inmem]"

1.4 LangGraph Agent前端可视化工具:Agent Chat UI
Agent Chat UI 是 LangGraph/LangChain 官方提供的多智能体前端对话面板,用于与后端 Agent(Graph 或 Chain)进行实时互动,支持上传文件、多工具协同、结构化输出、多轮对话、调试标注等功能。

- 克隆项目
# git config --global http.proxy http://127.0.0.1:10080
# git config --global https.proxy http://127.0.0.1:10080
git clone https://github.com/langchain-ai/agent-chat-ui.git
cd agent-chat-ui
(lc) PS D:\workself\project\LangChain\lcquickstart\LangChain1.0\Data Agent\agent-chat-ui-main> node -v
v24.11.1
(lc) PS D:\workself\project\LangChain\lcquickstart\LangChain1.0\Data Agent\agent-chat-ui-main> npm -v
11.6.2
安装pnpm
(lc) PS D:\workself\project\LangChain\lcquickstart\LangChain1.0\Data Agent\agent-chat-ui-main> npm install -g pnpm
added 1 package in 9s
1 package is looking for funding
run `npm fund` for details
npm notice
npm notice New patch version of npm available! 11.6.2 -> 11.6.3
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.6.3
npm notice To update run: npm install -g npm@11.6.3
npm notice
(lc) PS D:\workself\project\LangChain\lcquickstart\LangChain1.0\Data Agent\agent-chat-ui-main> pnpm -v
10.5.1
安装前端项目依赖
pnpm install

开启Chat Agent UI
pnpm dev
二、借助LangChain Agent打造智能数据分析助手
在完整了解了LangChain Agent各项开发工具的使用方法之后,接下来我们尝试使用LangGraph的开发生态,来创建一个同时具备数据库查询和Python代码解释器功能的智能数据分析助手Data Agent。
需要注意的是,LangChain内置工具中包含NL2SQL工具和Python工具,但为了获得更加稳定的数据查询和Python编程效果,这里我们考虑手动编写相关外部函数。
2.1 源码解析
2.1.1 数据库查询工具编写
首先是数据查询函数,这里我们创建两个外部工具,分别用于执行MySQL数据查询(sql_inter)和MySQL数据库的数据提取(extract_data)。很多场景下更加细分的外部函数功能,往往会带来更加稳定的查询结果。
- MySQL数据查询工具sql_inter编写
-
功能:执行SQL查询并返回JSON格式结果
-
特点:使用pymysql连接MySQL,自动管理连接关闭
-
适用场景:快速查询数据,不需要在Python中进一步处理
description = """
当用户需要进行数据库查询工作时,请调用该函数。
该函数用于在指定MySQL服务器上运行一段SQL代码,完成数据查询相关工作,
并且当前函数是使用pymsql连接MySQL数据库。
本函数只负责运行SQL代码并进行数据查询,若要进行数据提取,则使用另一个extract_data函数。
"""
# ✅ 定义结构化参数模型
class SQLQuerySchema(BaseModel):
sql_query: str = Field(description=description)
# ✅ 封装为 LangGraph 工具
@tool(args_schema=SQLQuerySchema)
def sql_inter(sql_query: str) -> str:
"""
当用户需要进行数据库查询工作时,请调用该函数。
该函数用于在指定MySQL服务器上运行一段SQL代码,完成数据查询相关工作,
并且当前函数是使用pymsql连接MySQL数据库。
本函数只负责运行SQL代码并进行数据查询,若要进行数据提取,则使用另一个extract_data函数。
:param sql_query: 字符串形式的SQL查询语句,用于执行对MySQL中telco_db数据库中各张表进行查询,并获得各表中的各类相关信息
:return:sql_query在MySQL中的运行结果。
"""
# print("正在调用 sql_inter 工具运行 SQL 查询...")
# 加载环境变量
load_dotenv(override=True)
host = os.getenv('HOST')
user = os.getenv('USER')
mysql_pw = os.getenv('MYSQL_PW')
db = os.getenv('DB_NAME')
port = os.getenv('PORT')
# 创建连接
connection = pymysql.connect(
host=host,
user=user,
passwd=mysql_pw,
db=db,
port=int(port),
charset='utf8'
)
try:
with connection.cursor() as cursor:
cursor.execute(sql_query)
results = cursor.fetchall()
# print("SQL 查询已成功执行,正在整理结果...")
finally:
connection.close()
# 将结果以 JSON 字符串形式返回
return json.dumps(results, ensure_ascii=False)
同时在.env文件中写入数据库相关的参数
2. MySQL数据提取工具extract_data编写
-
功能:将数据库表提取为pandas DataFrame并保存为全局变量
-
特点:使用globals()[df_name] = df动态创建变量
-
适用场景:需要后续Python分析的数据
# ✅ 定义结构化参数
class ExtractQuerySchema(BaseModel):
sql_query: str = Field(description="用于从 MySQL 提取数据的 SQL 查询语句。")
df_name: str = Field(description="指定用于保存结果的 pandas 变量名称(字符串形式)。")
# ✅ 注册为 Agent 工具
@tool(args_schema=ExtractQuerySchema)
def extract_data(sql_query: str, df_name: str) -> str:
"""
用于在MySQL数据库中提取一张表到当前Python环境中,注意,本函数只负责数据表的提取,
并不负责数据查询,若需要在MySQL中进行数据查询,请使用sql_inter函数。
同时需要注意,编写外部函数的参数消息时,必须是满足json格式的字符串,
:param sql_query: 字符串形式的SQL查询语句,用于提取MySQL中的某张表。
:param df_name: 将MySQL数据库中提取的表格进行本地保存时的变量名,以字符串形式表示。
:return:表格读取和保存结果
"""
print("正在调用 extract_data 工具运行 SQL 查询...")
load_dotenv(override=True)
host = os.getenv('HOST')
user = os.getenv('USER')
mysql_pw = os.getenv('MYSQL_PW')
db = os.getenv('DB_NAME')
port = os.getenv('PORT')
# 创建数据库连接
connection = pymysql.connect(
host=host,
user=user,
passwd=mysql_pw,
db=db,
port=int(port),
charset='utf8'
)
try:
# 执行 SQL 并保存为全局变量
df = pd.read_sql(sql_query, connection)
globals()[df_name] = df
# print("数据成功提取并保存为全局变量:", df_name)
return f"✅ 成功创建 pandas 对象 `{df_name}`,包含从 MySQL 提取的数据。"
except Exception as e:
return f"❌ 执行失败:{e}"
finally:
connection.close()
2.1.2 Python代码解释器函数编写
接下来继续定义Python代码解释器外部工具组。考虑到实际应用情况,这里同样是编写两个外部函数,分别用于执行普通的Python代码(python_inter)以及绘图类的代码(fig_inter)。
- python_inter函数编写
-
功能:执行非绘图类的Python代码
-
智能处理:
-
先尝试eval()执行表达式
-
失败后用exec()执行代码块
-
自动检测新创建的变量
-
# Python代码执行工具
class PythonCodeInput(BaseModel):
py_code: str = Field(description="一段合法的 Python 代码字符串,例如 '2 + 2' 或 'x = 3\\ny = x * 2'")
@tool(args_schema=PythonCodeInput)
def python_inter(py_code):
"""
当用户需要编写Python程序并执行时,请调用该函数。
该函数可以执行一段Python代码并返回最终结果,需要注意,本函数只能执行非绘图类的代码,若是绘图相关代码,则需要调用fig_inter函数运行。
"""
g = globals()
try:
# 尝试如果是表达式,则返回表达式运行结果
return str(eval(py_code, g))
# 若报错,则先测试是否是对相同变量重复赋值
except Exception as e:
global_vars_before = set(g.keys())
try:
exec(py_code, g)
except Exception as e:
return f"代码执行时报错{e}"
global_vars_after = set(g.keys())
new_vars = global_vars_after - global_vars_before
# 若存在新变量
if new_vars:
result = {var: g[var] for var in new_vars}
# print("代码已顺利执行,正在进行结果梳理...")
return str(result)
else:
# print("代码已顺利执行,正在进行结果梳理...")
return "已经顺利执行代码"
- fig_inter函数编写
-
功能:专门处理matplotlib/seaborn绘图
-
关键要求:
-
必须创建图像对象 (fig = plt.figure())
-
禁止使用plt.show()
-
自动保存图片到指定目录
-
必须使用英文标签
-
class FigCodeInput(BaseModel):
py_code: str = Field(description="要执行的 Python 绘图代码,必须使用 matplotlib/seaborn 创建图像并赋值给变量")
fname: str = Field(description="图像对象的变量名,例如 'fig',用于从代码中提取并保存为图片")
@tool(args_schema=FigCodeInput)
def fig_inter(py_code: str, fname: str) -> str:
"""
当用户需要使用 Python 进行可视化绘图任务时,请调用该函数。
该函数会执行用户提供的 Python 绘图代码,并自动将生成的图像对象保存为图片文件并展示。
"""
print("正在调用fig_inter工具运行Python代码...")
current_backend = matplotlib.get_backend()
matplotlib.use('Agg')
local_vars = {"plt": plt, "pd": pd, "sns": sns}
# ✅ 设置图像保存路径(你自己的绝对路径)
base_dir = r"根据实际情况写路径\data_agent\agent-chat-ui\public"
images_dir = os.path.join(base_dir, "images")
os.makedirs(images_dir, exist_ok=True) # ✅ 自动创建 images 文件夹(如不存在)
try:
g = globals()
exec(py_code, g, local_vars)
g.update(local_vars)
fig = local_vars.get(fname, None)
if fig:
image_filename = f"{fname}.png"
abs_path = os.path.join(images_dir, image_filename) # ✅ 绝对路径
rel_path = os.path.join("images", image_filename) # ✅ 返回相对路径(给前端用)
fig.savefig(abs_path, bbox_inches='tight')
return f"✅ 图片已保存,路径为: {rel_path}"
else:
return "⚠️ 图像对象未找到,请确认变量名正确并为 matplotlib 图对象。"
except Exception as e:
return f"❌ 执行失败:{e}"
finally:
plt.close('all')
matplotlib.use(current_backend)
2.2 工程实现
-
创建项目文件夹:“data_agent”
-
.创建requirements.txt,并进行安装
pip install -r requirements.txt -
编写.env,将相关的key和隐私信息写入
-
创建langgraph.json文件:
{ "dependencies": ["./"], "graphs": { "data_agent": "./agent.py:agent" }, "env": ".env" }
-
开启后端服务:
进入到项目主文件夹目录data_agent,langgraph dev
然后即可在LanguageGraph Studio中进行功能测试:
-
开启前端服务
cd agent-chat-ui
pnpm install
pnpm dev

然后即可登录并进行测试,这里需要写清楚Agent名称,并可选输入LangSmith的API Key:
然后即可开始进行对话:
2.3 测试
首先查看下数据库的情况
问一下当前数据库有几张表
绘图测试


全部代码:公众号【不懂乱问】,回复LangChain即可获得
更多推荐




所有评论(0)