AI智能体“内卷“升级!Skills架构让大模型从“万金油“变“专业选手“,企业级NL2SQL实战教程(附完整代码)

项目背景

自从10月份Claude提出Skills概念后,给智能体开发带来一个全新的视角;今天我们就基于企业一个非常实用的NL2SQL场景出发,结合langchain1.X+Skills实现一个企业级稳定高效的问数智能体;下面我们正式开始。

一、 引言:数据交互的“最后一公里”

在数字化转型的今天,企业并不缺数据,缺的是获取数据的效率

  • 现状:业务人员想看一个维度,需要提需求给 IT,IT 写 SQL,反复确认后再出报表。这个周期通常以“天”为单位。
  • 愿景:**NL2SQL ** 的核心价值在于:打破技术壁垒,让数据“说人话”,实现数据查询的即问即答。

二、 为什么传统的 NL2SQL 方案在企业中会“失灵”?

很多企业初试 AI 时,倾向于把所有数据库表结构塞给大模型(LLM),结果往往不尽如人意:

  1. 上下文过载(Context Overflow):企业数据库动辄几百张表,超出模型处理极限,导致回复变慢、成本飙升。
  2. 意图稀释(Intent Dilution):表越多,模型越容易“张冠李戴”,把“销售额”算成“利润额”。
  3. 幻觉风险:模型在不确定的情况下会“盲目自信”,编造不存在的字段或计算逻辑。

三、 基于 Skill(技能)架构的深度意义

这就是为什么我们要在 LangChain 1.x 中引入 Skill-based(基于技能) 的模式。这不仅仅是技术实现,更是一种管理哲学

1. 知识的“分封制”:解决认知负担

通过 Skill 模式,我们将庞大的数据库拆解为一个个“垂直领域专家”(如:销售专家、库存专家)。

  • 意义:Agent 在思考时,只需加载与当前问题相关的 1% 的知识。这像极了前端的**按需加载 (Lazy Loading)**,既快又准。

2. 确定性的执行:从“猜测”到“指令”

Skill 模式要求 Agent 先通过 get_skill_details 确认“说明书”。

  • 意义:它强制模型先看“规则”再写“代码”,极大地降低了模型凭记忆编造数据(幻觉)的概率。

四、 这种架构为企业解决了什么核心问题?

1. 复杂业务逻辑的沉淀

企业级查询不只是 SELECT *,它包含复杂的计算逻辑(如:毛利如何计算、逾期如何定义)。

  • 价值:我们将这些逻辑固化在 Skill 的 Prompt 中。Skill 成了企业业务知识的数字资产包,不再随人员离职而流失。

2. 安全与权限的微隔离

在企业中,不是所有人都能查薪资。

  • 价值:基于 Skill 的架构天然支持权限挂钩。我们可以根据用户的身份,动态决定哪些“技能”对该用户可见。

3. 系统自我修复的闭环

基于 LangGraph 的状态机架构,如果 SQL 执行失败,Agent 能根据报错信息自动重试。

  • 价值:这减少了人工介入的频率,让系统具备了真正的“自愈”能力。

五、 企业价值:从“提数工具”到“决策引擎”

构建基于 LangChain 1.x 的数据智能体,最终为企业带来的是:

  • 敏捷响应:决策层获取数据的时间从“天”降至“秒”,应对市场变化更快。
  • 人力解放:将 DBA 和数据分析师从重复性的手工写代码中解放出来,去处理更具战略意义的数据治理工作。
  • 数据普惠:让不懂技术的一线业务员也能具备数据驱动的能力,真正实现“人人都是分析师”。

理论知识讲完了,接下来我们通过代码完成从数库创建到智能体构建整个过程;实实在在感觉通过skills这种模型带来的变化;

代码实践

1. 数据库初始化

为演示方便,我们的使用的数据库为sqlite

# --- 1. 数据库初始化 (增加库存相关的表) ---def setup_db():    conn = sqlite3.connect(":memory:", check_same_thread=False)    cursor = conn.cursor()    # 销售相关表    cursor.execute("CREATE TABLE products (product_id INT, product_name TEXT)")    cursor.execute("CREATE TABLE sales (sale_id INT, product_id INT, amount REAL)")    cursor.execute("INSERT INTO products VALUES (1, '超级智能手表Pro'), (2, 'AI音箱')")    cursor.execute("INSERT INTO sales VALUES (1, 1, 2857340.5), (2, 2, 500.0)")        # --- 新增:库存相关表 ---    cursor.execute("CREATE TABLE inventory (product_id INT, warehouse_name TEXT, stock_quantity INT)")    cursor.execute("INSERT INTO inventory VALUES (1, '北京一号仓', 150), (1, '上海二号仓', 300), (2, '深圳分发中心', 1000)")        conn.commit()    return conndb_conn = setup_db()

2. 外挂Skills并动态加载

SKILLS_STORE = {    "sales_skill": {        "name": "sales_skill",        "description": "销售数据查询技能,用于执行销售相关的SQL查询",        "tables": [            {"name": "products", "columns": [{"name": "product_id", "type": "INTEGER"}, {"name": "product_name", "type": "TEXT"}]},            {"name": "sales", "columns": [{"name": "sale_id", "type": "INTEGER"}, {"name": "amount", "type": "REAL"}]}        ]    },    # --- 新增加的技能 ---    "inventory_skill": {        "name": "inventory_skill",        "description": "库存管理技能,用于查询各仓库的产品库存余量",        "tables": [            {                "name": "inventory",                 "columns": [                    {"name": "product_id", "type": "INTEGER", "description": "产品ID"},                    {"name": "warehouse_name", "type": "TEXT", "description": "仓库名称"},                    {"name": "stock_quantity", "type": "INTEGER", "description": "库存数量"}                ]            }        ],        "sample_queries": [            "SELECT SUM(stock_quantity) FROM inventory WHERE product_id = 1;"        ]    }}

3.定义工具

@tooldef get_skill_details(skill_name: str):    """根据技能名称获取详细的技能配置(包含表结构和描述)。"""    print(f"\n[工具调用] 正在加载技能详情: {skill_name}")    skill = SKILLS_STORE.get(skill_name)    return json.dumps(skill, ensure_ascii=False) if skill else "未找到该技能"@tooldef execute_sql(sql: str):    """执行 SQL 查询并返回 JSON 格式的结果。"""    print(f"\n[工具调用] 正在执行 SQL: {sql}")    try:        cursor = db_conn.cursor()        cursor.execute(sql)        columns = [column[0] for column in cursor.description]        results = [dict(zip(columns, row)) for row in cursor.fetchall()]        return json.dumps({"result": results, "rows": len(results), "columns": columns}, ensure_ascii=False)    except Exception as e:        return json.dumps({"error": str(e)})

4.通过中间件实现提示词注入

这是核心逻辑,也是langchain1.0更新的最大亮点,通过中间件可以智能体执行过程中的黑盒变的可扩控;

class SkillMiddleware(AgentMiddleware):    def __init__(self):        # 修正点:初始化时直接调用函数获取数据,不再引用已删除的 SKILLS 变量        skills = load_skills_from_json()        print(f"✅ 获取技能列表成功: {skills}")        self.skills_prompt = "\n".join([f"- {s['name']}: {s['description']}" for s in skills])    def _get_addendum(self) -> str:        # 实时获取最新描述,支持热更新        skills = load_skills_from_json()        prompt = "\n".join([f"- {s['name']}: {s['description']}" for s in skills])        return (            f"\n\n## 当前可用专业知识模块\n\n{prompt}\n\n"            "注意:如果你需要编写具体的 SQL 或了解业务细节,请务必先使用 `load_skill` 工具获取详细信息。"        )    def wrap_model_call(self, request, handler):        addendum = f"\n\n可用技能模块:\n{self.skills_prompt}\n\n请先 load_skill 再 execute_sql。"        new_content = list(request.system_message.content_blocks) + [{"type": "text", "text": addendum}]        modified_request = request.override(system_message=SystemMessage(content=new_content))        return handler(modified_request)    async def awrap_model_call(            self,            request: ModelRequest,            handler: Callable[[ModelRequest], Awaitable[ModelResponse]],    ) -> ModelResponse:        """异步实现:解决 LangGraph API/Server 的报错"""        new_content = list(request.system_message.content_blocks) + [            {"type": "text", "text": self._get_addendum()}        ]        new_system_message = SystemMessage(content=new_content)        modified_request = request.override(system_message=new_system_message)        # 注意这里需要 await 执行 handler        return await handler(modified_request)

5.智能体创建

model = get_llm()agent = create_agent(    model,    system_prompt="你是一个能够直接操作数据库的业务专家。请根据用户问题,先加载知识,再执行 SQL,并最后总结答案。",    tools=[load_skill, execute_sql],  # 赋予两种能力    middleware=[SkillMiddleware()],    # checkpointer=InMemorySaver(),    debug=True)def get_skills_agent():    return agent

6.注册智能体

在agents/registry.py将我们刚刚开发的智能体注册进来:

# agents/registry.pyfrom typing import Dict, Callablefrom langchain_core.runnables import Runnablefrom examples.multiAgent.skills_mysql import get_skills_agent# 具备联网搜索的deep agentAGENT_REGISTRY: Dict[str, Callable[[], Runnable]] = {    "skills_agent":get_skills_agent}

7.效果展示

我这边中通过cherry studio客户端进行显示的,配置如下:

配置模型

下面是回复效果:

回复还是非常快的;下面我们来个复杂的问题:

总结

在本项目中,Skills 是智能体的专业工具箱。它让 Agent 告别了万金油 式的模糊回答,成为了一个懂业务规矩、看说明书办事、且边界清晰的专业数据官;不仅降低了成本还提升了效率; 本次分享就到这;完成的demo源码已更新到仓库中,地址如下:

https://github.com/wanrengang/langchain-agent-framework/tree/main/src/examples/multiAgent

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2025 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》下方扫码获取~
在这里插入图片描述

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
在这里插入图片描述

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
在这里插入图片描述

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
在这里插入图片描述

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
在这里插入图片描述

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
在这里插入图片描述

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

图片

以上资料如何领取?

在这里插入图片描述

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

图片

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
在这里插入图片描述
在这里插入图片描述

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
在这里插入图片描述
在这里插入图片描述

以上全套大模型资料如何领取?

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值