<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>LangGragh on acye&#39;s blog</title>
        <link>https://ye-guan-xing.github.io/categories/langgragh/</link>
        <description>Recent content in LangGragh on acye&#39;s blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <copyright>acye</copyright>
        <lastBuildDate>Wed, 20 May 2026 16:36:00 +0000</lastBuildDate><atom:link href="https://ye-guan-xing.github.io/categories/langgragh/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>小白易懂！LangGraph 接入数据库可视化项目 完整实战教程</title>
        <link>https://ye-guan-xing.github.io/p/langgraph-database-tutorial/</link>
        <pubDate>Wed, 20 May 2026 16:36:00 +0000</pubDate>
        
        <guid>https://ye-guan-xing.github.io/p/langgraph-database-tutorial/</guid>
        <description>&lt;p&gt;很多小伙伴做数据库可视化工具时，都会遇到一个痛点：&lt;strong&gt;工具能看表、写SQL、查数据，但没人帮忙解读、改bug、写语句&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;今天手把手带大家用 &lt;strong&gt;LangGraph&lt;/strong&gt; 给数据库工具接入AI智能助手，不用懂高深算法，纯工程实战，从零搭建「AI解释表、AI写SQL、AI排错SQL」功能。&lt;/p&gt;
&lt;p&gt;全程拆解：架构逻辑、代码作用、部署调试、接口调用，新手也能一次看懂！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ye-guan-xing/GUI-database-tool&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;项目代码&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;我们要解决什么问题通俗版&#34;&gt;我们要解决什么问题？（通俗版）
&lt;/h2&gt;&lt;p&gt;先说说我们原本的数据库GUI工具能干啥：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;✅ 连接MySQL数据库&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✅ 查看数据表结构&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✅ 手动执行SQL语句查询数据&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但缺了最实用的&lt;strong&gt;AI辅助能力&lt;/strong&gt;，接入LangGraph之后，我们的工具直接升级3个核心功能：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;功能场景&lt;/th&gt;
					&lt;th&gt;对应模式&lt;/th&gt;
					&lt;th&gt;日常使用场景&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;AI解读表结构&lt;/td&gt;
					&lt;td&gt;explain_schema&lt;/td&gt;
					&lt;td&gt;看不懂数据表字段？AI帮你逐字解释每个字段用途&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;AI代写SQL&lt;/td&gt;
					&lt;td&gt;draft_sql&lt;/td&gt;
					&lt;td&gt;不会写查询语句？输入需求，AI直接生成可运行SQL&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;AI排查SQL错误&lt;/td&gt;
					&lt;td&gt;debug_query&lt;/td&gt;
					&lt;td&gt;SQL报错运行失败？AI帮你找bug、给出修改方案&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;重要设计边界避坑关键&#34;&gt;重要设计边界（避坑关键）
&lt;/h3&gt;&lt;p&gt;这个AI助手&lt;strong&gt;非常安全，不会乱操作数据库&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;❌ 不直接连接数据库&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;❌ 不执行任何SQL语句&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;❌ 不修改、删除、新增数据库数据&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✅ 只根据前端传来的页面信息，返回文字建议和SQL代码&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;整体架构讲解大白话版&#34;&gt;整体架构讲解（大白话版）
&lt;/h2&gt;&lt;p&gt;整个项目分为 &lt;strong&gt;前端Vue + 后端NestJS + Python AI服务&lt;/strong&gt; 三层，很多新手疑惑：&lt;strong&gt;为什么要拆成两个后端？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里通俗解释：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NestJS&lt;/strong&gt;：负责项目主业务（连数据库、存数据、接口转发），主打稳定&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Python&lt;/strong&gt;：AI、LangGraph生态全部基于Python开发，做AI功能最方便、兼容性最好&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;完整请求流程一眼看懂&#34;&gt;完整请求流程（一眼看懂）
&lt;/h3&gt;&lt;p&gt;用户操作页面 → 前端发请求 → NestJS接收转发 → Python LangGraph处理AI逻辑 → 返回结果展示到页面&lt;/p&gt;
&lt;p&gt;简单说：&lt;strong&gt;Nest只做“搬运工”，Python才是真正的AI打工人&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;三层分工：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;前端Vue&lt;/strong&gt;：展示页面、收集用户问题、传递当前数据库/表信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NestJS后端&lt;/strong&gt;：统一接口入口、转发请求、统一处理报错&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Python服务&lt;/strong&gt;：运行LangGraph、调用大模型、生成AI回答&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;项目目录结构新手必看&#34;&gt;项目目录结构（新手必看）
&lt;/h2&gt;&lt;p&gt;不用乱建文件，直接对照这个结构搭建即可：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GUI-database-tool/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── agent-service/          # Python AI核心服务（LangGraph在这里）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── app.py              # 主程序（所有AI逻辑都在这里）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── requirements.txt    # Python依赖包清单
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── .env                # 配置文件（密钥、模型地址）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── backend/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── src/agent/          # NestJS转发模块
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│       ├── agent.module.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│       ├── agent.controller.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│       └── agent.service.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── frontend/               # 原有前端页面，无需大改
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;python-ai服务搭建核心功能&#34;&gt;Python AI服务搭建（核心功能）
&lt;/h2&gt;&lt;h3 id=&#34;安装依赖包&#34;&gt;安装依赖包
&lt;/h3&gt;&lt;p&gt;在 &lt;code&gt;agent\-service/requirements\.txt&lt;/code&gt; 写入需要的依赖：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;langgraph
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;langchain
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;langchain-openai
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fastapi
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvicorn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python-dotenv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;终端执行命令，创建虚拟环境并安装依赖（Windows）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cd agent-service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv venv
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.\.venv\Scripts\Activate.ps1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv pip install -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;配置环境变量&#34;&gt;配置环境变量
&lt;/h3&gt;&lt;p&gt;新建 &lt;code&gt;\.env&lt;/code&gt; 文件，填入自己的大模型密钥：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OPENAI_API_KEY=你的密钥
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OPENAI_MODEL=gpt-4o-mini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OPENAI_BASE_URL=  # 可选，第三方模型地址可填空
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;启动python服务&#34;&gt;启动Python服务
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run uvicorn app:app --host 0.0.0.0 --port 8000 --reload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;启动成功后，Python服务会跑在 &lt;strong&gt;8000端口&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;python核心代码逐句通俗讲解&#34;&gt;Python核心代码逐句通俗讲解
&lt;/h2&gt;&lt;h3 id=&#34;状态定义ai的记事本&#34;&gt;状态定义：AI的“记事本”
&lt;/h3&gt;&lt;p&gt;LangGraph的核心就是&lt;strong&gt;全局状态&lt;/strong&gt;，相当于一个共享记事本，所有AI功能都能读写这里的数据：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;class AgentState(TypedDict, total=False):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mode: str        # 当前功能模式（解释表/写SQL/排错）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    question: str    # 用户输入的问题
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    context: Dict[str, Any]  # 页面上下文（数据库名、表结构）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    answer: str      # AI最终返回的回答
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;简单理解：存用户问题、页面信息、AI结果的公共容器。&lt;/p&gt;
&lt;h3 id=&#34;请求参数校验防止乱传数据&#34;&gt;请求参数校验：防止乱传数据
&lt;/h3&gt;&lt;p&gt;限制用户只能用我们预设的3个功能，避免报错：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;class RunRequest(BaseModel):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mode: Literal[&amp;#34;explain_schema&amp;#34;, &amp;#34;draft_sql&amp;#34;, &amp;#34;debug_query&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    question: str
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    context: Optional[Dict[str, Any]] = None
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;连接大模型&#34;&gt;连接大模型
&lt;/h3&gt;&lt;p&gt;读取配置文件，自动连接OpenAI（或兼容的第三方模型），参数做了容错，不会轻易崩溃：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;没配置密钥直接报错提示，不静默失败&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;默认使用 gpt-4o-mini，性价比高&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;温度值0.2，&lt;strong&gt;回答更稳定、少胡说&lt;/strong&gt;，适合SQL场景&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;智能提示词切换一个模型干三件事&#34;&gt;智能提示词切换：一个模型干三件事
&lt;/h3&gt;&lt;p&gt;我们不用写三个AI接口，&lt;strong&gt;同一个大模型，切换不同身份&lt;/strong&gt;，实现三种功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;explain_schema → 数据库讲解老师&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;draft_sql → SQL代写助手&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;debug_query → SQL排错工程师&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;再把用户问题、当前数据表信息传给AI，就能精准输出对应答案。&lt;/p&gt;
&lt;h3 id=&#34;langgraph核心流程图极简版&#34;&gt;LangGraph核心流程图（极简版）
&lt;/h3&gt;&lt;p&gt;目前的逻辑非常简单，新手无压力：&lt;/p&gt;
&lt;p&gt;程序启动 → 读取状态 → 调用大模型 → 生成答案 → 结束&lt;/p&gt;
&lt;p&gt;后续想加功能（比如SQL风险检测、上下文优化），直接新增节点即可，不用重构代码。&lt;/p&gt;
&lt;h3 id=&#34;两个核心接口&#34;&gt;两个核心接口
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GET /health&lt;/strong&gt;：健康检查，判断AI服务是否正常启动&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;POST /run&lt;/strong&gt;：核心接口，接收用户请求，执行AI逻辑并返回结果&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;调用示例（代写SQL）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;mode&amp;#34;: &amp;#34;draft_sql&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;question&amp;#34;: &amp;#34;查最近 7 天注册的用户&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;context&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;database&amp;#34;: &amp;#34;demo_db&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;selectedTable&amp;#34;: &amp;#34;users&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;nestjs后端适配转发层超简单&#34;&gt;NestJS后端适配（转发层，超简单）
&lt;/h2&gt;&lt;p&gt;NestJS这一层&lt;strong&gt;不写任何AI逻辑&lt;/strong&gt;，只做两件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;接收前端请求，校验参数是否合法&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;转发给Python AI服务，接收结果后统一返回给前端&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;模块注册&#34;&gt;模块注册
&lt;/h3&gt;&lt;p&gt;新建agent模块、控制器、服务文件，在全局模块中注册即可，属于Nest基础操作。&lt;/p&gt;
&lt;h3 id=&#34;配置服务地址&#34;&gt;配置服务地址
&lt;/h3&gt;&lt;p&gt;在backend的.env文件中配置Python服务地址：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LANGGRAPH_SERVICE_URL=http://127.0.0.1:8000
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;接口统一规范&#34;&gt;接口统一规范
&lt;/h3&gt;&lt;p&gt;对外统一暴露两个接口，前端不用关心后端分层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;GET /api/agent/health&lt;/code&gt;：检查AI服务状态&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;POST /api/agent/run&lt;/code&gt;：调用AI智能功能&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;错误统一处理&#34;&gt;错误统一处理
&lt;/h3&gt;&lt;p&gt;如果Python服务挂了、请求超时、参数错误，Nest都会返回统一格式的报错，&lt;strong&gt;前端不用单独处理各种异常&lt;/strong&gt;，体验更友好。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;完整请求流程从头到尾&#34;&gt;完整请求流程（从头到尾）
&lt;/h2&gt;&lt;p&gt;1. 用户在前端选择功能、输入问题
2. 前端自动组装当前数据库、数据表信息
3. 前端请求NestJS接口
4. Nest校验参数，转发给Python LangGraph服务
5. Python拼接提示词，调用大模型
6. 大模型返回结果，Python整理数据
7. Nest统一封装结果，返回给前端
8. 前端展示AI回答&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;本地调试命令直接复制即用&#34;&gt;本地调试命令（直接复制即用）
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;启动Python AI服务&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cd agent-service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run uvicorn app:app --host 0.0.0.0 --port 8000 --reload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;启动Nest后端&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cd backend
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run start:dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;测试服务是否通&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 测试Python服务
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl http://127.0.0.1:8000/health
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 测试Nest转发
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl http://127.0.0.1:3000/agent/health
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;新手总结核心重点&#34;&gt;新手总结（核心重点）
&lt;/h2&gt;&lt;p&gt;1. &lt;strong&gt;分层思想&lt;/strong&gt;：Nest负责业务转发，Python负责AI计算，各司其职，好维护、好扩展
2. &lt;strong&gt;LangGraph作用&lt;/strong&gt;：提供统一的状态管理，让AI逻辑结构化，后续新增功能不用重构
3. &lt;strong&gt;安全设计&lt;/strong&gt;：AI只做文字分析和代码生成，不操作真实数据库，零风险
4. &lt;strong&gt;极简扩展&lt;/strong&gt;：后续想加SQL优化、数据问答、批量生成语句等功能，只需要新增LangGraph节点即可&lt;/p&gt;
&lt;p&gt;这套架构非常适合新手学习AI工程化，既能跑通业务，又能掌握LangGraph基础用法，可直接用于毕业设计、项目实战、二次开发！&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
