根据前面的内容,在对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)进行实时互动,支持上传文件、多工具协同、结构化输出、多轮对话、调试标注等功能。

在这里插入图片描述

  1. 克隆项目

# 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
  1. 安装npm
    在这里插入图片描述
(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)。很多场景下更加细分的外部函数功能,往往会带来更加稳定的查询结果。

  1. 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)。

  1. 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 "已经顺利执行代码"
  1. 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 工程实现

  1. 创建项目文件夹:“data_agent”

  2. .创建requirements.txt,并进行安装pip install -r requirements.txt

  3. 编写.env,将相关的key和隐私信息写入

  4. 创建langgraph.json文件:
    { "dependencies": ["./"], "graphs": { "data_agent": "./agent.py:agent" }, "env": ".env" }
    在这里插入图片描述

  5. 开启后端服务:
    进入到项目主文件夹目录data_agentlanggraph dev
    在这里插入图片描述
    然后即可在LanguageGraph Studio中进行功能测试:
    在这里插入图片描述

  6. 开启前端服务

cd agent-chat-ui
pnpm install
pnpm dev

在这里插入图片描述
然后即可登录并进行测试,这里需要写清楚Agent名称,并可选输入LangSmith的API Key:
在这里插入图片描述
然后即可开始进行对话:

2.3 测试

首先查看下数据库的情况
在这里插入图片描述
问一下当前数据库有几张表
在这里插入图片描述
绘图测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
全部代码:公众号【不懂乱问】,回复LangChain即可获得
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐