Text2SQL、Text2API基础

你有一个能力超强但“不太懂行”的助手(大语言模型LLM)。它能说会道,知识渊博,但它:

  1. 不懂你的数据库: 不知道你的数据库里有哪些表,表里有哪些字段,这些字段代表什么意思。
  2. 不懂你的API: 不知道你的系统里有哪些可以调用的功能(API),这些功能需要什么参数(比如邮箱地址、城市名、日期)。

提示工程(Prompt Engineering) 就是教你如何给这个“超强助手”写一份清晰、详细的指令说明书(Prompt),让它能理解你的自然语言问题,并帮你完成特定的专业任务(写SQL查数据库、调用API)。

核心目标:把“人话”变成“机器能听懂的专业指令”

  • Text2SQL: 把“今年卖得最好的产品是啥?” 变成 SELECT ... FROM ... WHERE ... 这样的数据库查询语句。
  • Text2API: 把“给老王发个邮件,告诉他明天下午3点开会” 变成调用 send_email 这个接口,并填好 to=老王@公司.com, subject=会议提醒, content=明天下午3点开会... 这些参数。

---

from langchain.utilities import SQLDatabase
from langchain.chains import SQLDatabaseChain
from langchain_community.llms import OpenAI
db = SQLDatabase.from_uri("sqlite:///sales.db")
llm = OpenAI(temperature=0)chain = SQLDatabase
Chain.from_llm(llm, db, verbose=True)
response = chain.run("2024年销售额超过100万的产品是什么?")
SELECT p.name, SUM(o.sales) AS total_sales  
FROM orders o  
JOIN products p ON o.product_id = p.id  
WHERE YEAR(o.date) = 2023  
GROUP BY p.id  
HAVING total_sales > 1000000;  

关键秘诀:给助手“补课” (显式化领域知识)

LLM本身不懂你的业务细节。提示工程的核心就是通过Prompt把这些背景知识(领域知识) 明确地告诉它:

  1. 角色扮演: “嘿助手,你现在是一个数据库专家/API调用专家!”
  2. 知识注入:
    • 对SQL: 把数据库的结构(Schema) 告诉它。比如:
      • 我们有个 orders 表,里面有 id, product_id, sales (销售额), date (日期)
      • 还有个 products 表,里面有 id, name (产品名), category (类别)
      • orders.product_id 对应着 products.id
    • 对API:API文档告诉它。比如:
      • 有个API叫 /send_email,需要用 POST 方法调用,需要提供 to (收件人邮箱), subject (邮件主题), content (邮件内容) 这三个参数。
      • 还有个API叫 /weather,需要用 GET 方法调用,需要提供 city (城市名), date (日期)

在这里插入图片描述

一、 Text2SQL 深入浅出解析 (怎么让助手帮你查数据库?)

  • 助手需要什么?
    • 你的问题: “2024年销售额超过100万的产品是什么?”
    • 数据库结构: 哪些表?哪些字段?它们啥关系?(Schema)
  • 助手怎么做? (提示工程的步骤)
    1. 理解问题: 助手先看你的问题,找出关键信息(这叫实体识别、关系抽取、意图理解)。
      • 你要查什么? -> 产品 (product)
      • 查哪个时间? -> 2024年 (year=2024)
      • 查什么条件? -> 销售额 (sales) 超过 (>) 100万 (1000000)
      • 怎么衡量? -> 很可能是按产品汇总 (SUM(o.sales) 然后 GROUP BY p.id)
    2. 对照数据库结构 (Schema绑定): 助手拿着这些关键词,去对比你提供的Schema。
      • “销售额” -> 哦,在 orders 表里叫 sales
      • “产品名” -> 在 products 表里叫 name
      • ordersproducts 怎么关联? -> 哦,通过 orders.product_id = products.id
      • “2024年” -> orders 表里有个 date 字段,需要提取年份 YEAR(o.date) = 2024
    3. 组装SQL语句: 助手根据理解的信息和数据库结构,拼装出正确的SQL语句。
      SELECT p.name, SUM(o.sales) AS total_sales  -- 选出产品名,计算总销售额
      FROM orders o                              -- 从订单表(起别名o)
      JOIN products p ON o.product_id = p.id     -- 关联产品表(起别名p)
      WHERE YEAR(o.date) = 2024                  -- 条件是2024年的订单
      GROUP BY p.id                              -- 按产品分组
      HAVING total_sales > 1000000;              -- 筛选总销售额大于100万的产品
      
    4. 执行与反馈: 数据库运行这个SQL,把结果(产品列表)返回给你。如果SQL写错了(比如字段名不对),助手可能会尝试修正或者告诉你哪里出了问题(需要更好的Prompt或你提供更明确的信息)。
  • LangChain 帮了大忙:
    • 它有个 SQLDatabaseChain 能自动连接到你的数据库 (db = SQLDatabase.from_uri("sqlite:///sales.db"))。
    • 它能自动读取数据库结构(Schema)并塞进给LLM的Prompt里。
    • 你只需要告诉LLM你的问题 (chain.run("2024年销售额超过100万的产品是什么?")),它就能帮你完成上述所有步骤(理解->绑定->生成->执行->返回结果)。

二、 Text2API 深入浅出解析 (怎么让助手帮你调用接口?)

Text2API(文本转API调用) 是一种将自然语言描述的用户需求自动转换为对应用程序接口(API)的调用请求的技术。

在这里插入图片描述

LangChain提供APIChain,支持将API文档(如OpenAPI/Swagger)嵌入提示词,引导大模型生成请求参数,可以支持多步骤调用(如先查询用户ID,再调用订单API)。

from langchain.chains import APIChain
from langchain_community.llms import OpenAIllm = OpenAI(temperature=0)api_docs = """
API文档:
- 发送邮件:POST /send_email参数:to(收件人), subject(主题), content(内容)
- 查询天气:GET /weather参数:city(城市), date(日期)
"""chain = APIChain.from_llm_and_api_docs(llm, api_docs, verbose=True)
response = chain.run("给Allen发邮件,主题是会议提醒,内容为明天下午2点开会。")

如何实现Text2API?

通过自然语言处理技术进行语义解析(含意图识别、实体抽取、上下文理解),结合预加载的API文档信息,利用大语言模型(LLM)生成符合语法规范的API调用请求。

  1. API目录管理:维护API文档(端点、参数、权限)。

    例如:邮件API文档:POST /send_email 参数: to (str), subject (str), content (str) 权限: 需用户OAuth令牌

  2. 意图识别:模型解析用户指令,匹配目标API。

    例如:“给Allen发邮件,主题是项目开发进度,内容为’本周完成80%’” → 调用 /send_email。

  3. 参数填充:提取并验证参数(如邮箱、内容)。

    {"endpoint": "/send_email","params": {"to": "zhangsan@company.com", "subject": "项目进度", "content": "本周完成80%"
    }
    
  4. 执行与反馈:调用API并返回结果(成功/失败原因)。

在这里插入图片描述

  • 助手需要什么?
    • 你的指令: “给Allen发邮件,主题是会议提醒,内容为明天下午2点开会。”
    • API菜单: 系统里有哪些接口?每个接口怎么用?需要啥参数?(API文档)
  • 助手怎么做? (提示工程的步骤)
    1. 管理API目录: 你需要事先准备好一份清晰的“服务菜单”(API文档),告诉助手:
      • /send_email 服务(POST方法),需要 to, subject, content 三个菜(参数)。
      • /weather 服务(GET方法),需要 city, date 两个菜(参数)。
      • 可能还需要权限(比如登录令牌),但这篇文章例子没提。
    2. 理解你想点哪道菜 (意图识别): 助手看你的指令,找出你想做什么。
      • “发邮件” -> 这对应 /send_email 这个API。
    3. 准备好配菜 (参数填充): 助手从你的指令里找出做这道菜需要的材料(参数)。
      • to (收件人) 是谁? -> “Allen” -> 需要转成邮箱地址(allen@company.com)。(实际应用中,可能需要查通讯录API,这里简化了)
      • subject (主题) 是什么? -> “会议提醒”。
      • content (内容) 是什么? -> “明天下午2点开会”。
    4. 下单并上菜 (执行与反馈): 助手按照API文档的要求(方法、参数格式),调用 /send_email 接口,把参数传过去。接口执行后,告诉助手结果:“邮件发送成功!” 或者 “失败,原因:收件人邮箱无效”。助手把这个结果告诉你。
  • LangChain 帮了大忙:
    • 它有个 APIChain (chain = APIChain.from_llm_and_api_docs(llm, api_docs, verbose=True))。
    • 你只需要把API文档 (api_docs) 提供给它,然后告诉它你的自然语言指令 (chain.run("给Allen发邮件..."))。
    • 它能自动帮你完成:理解指令对应哪个API -> 提取需要的参数 -> 组装API调用请求 -> 调用API -> 返回结果。它甚至能处理需要多个API按顺序调用的复杂任务(比如先查用户ID,再用ID查订单)。

总结:

  • LLM (大模型): 一个超级聪明但没学过你公司业务的新员工。
  • 自然语言问题/指令: 你口头交代给新员工的任务(“查下今年最赚钱的产品”、“给老王发个会议通知”)。
  • Schema/API文档: 你给新员工看的公司业务手册/操作指南(数据库结构图、API使用说明书)。
  • Prompt (提示工程): 你交代任务时说的完整、清晰、包含背景信息的话:“小张(角色扮演),这是我们的销售数据库结构(知识注入),你帮我查一下(任务类型)…(具体任务描述)”。
  • SQL/API调用: 新员工看完手册,理解了你的话之后,亲手写好的查询语句/填好的系统操作单
  • 结果: 新员工把查询结果/操作结果汇报给你。

提示工程的核心价值就在于: 通过精心设计的Prompt(包含角色定义和领域知识),让原本“不懂行”的大模型助手,瞬间变成你业务领域的专家,准确地将你的“人话”需求转化为可执行的“机器指令”(SQL或API调用)。LangChain等工具则大大简化了这个过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK 8u231安装教程 - Windows 64位下载安装及环境变量配置指南

下载安装包 把jdk-8u231-windows-x64.exe这个文件下载下来,下载链接:https://pan.quark.cn/s/a610ca7e5e9d,随便放哪儿,比如桌面或者下载文件夹。 双击运行安装 找到下载好的那个exe文件,直接双击打开。可能会弹个窗口…

LatentSync V8版 - 音频驱动视频生成数字人说话视频 更新V1.6版模型 支持50系显卡 支持批量 一键整合包下载

LatentSync 是字节跳动开源的一款"AI口型同步神器",简单来说就是能让视频里的人物嘴巴动得和声音完美匹配的工具。比如你给一段配音,它能自动调整视频人物的嘴型,按照配音里的声音说出来,就像真人说话一样自然。简单说就…

从一组线段中得出四边形的算法

原始的需求是使用OpenCV的直线检测算法(例如LSD)之后,得到一组线段。然后需要从这些线段得到类似矩形的四边形,用于检测经过透视变换的矩形物体。这些线段不一定首尾相接,彼此之间可能相交或有一定距离。 以下是需求图…

提示词Prompts(2)

摘要: 本文介绍了langchain.prompts中基础的提示词模板的高级用法,包括利用PipelinePrompt组合Prompt使用,多模态场景、动态占位符的使用等进行了介绍。 文章目录 1. 背景2. PipelinePrompt2.1 组合两个Prompt模板2.2 多模态模板 3. 聊天提示…

服务器代码知识点补充

目录 UdpServer: 观察者模式: remove_if算法 管道补充: 文件的标准输出 ,标准输入,标准错误 UdpServer: 数据接收模块关心Adduser 和Deleuser 两个模块 线程池关心Route模块 将这三个方法注册进服务器 ,但是有临界区问题(线程池与数据接受模块可能同时访问用户管理模块,所…

R语言缓释制剂QBD解决方案之二

药物层优化研究 在药物层工艺中水溶剂蒸发起到重要的作用。湿的环境会使丸子聚集,而干的环境影响药物与MCC的粘合。输入变量如气流量,喷雾速率,雾化压力,和产品温度对MCC沉着和包衣溶剂蒸发的平衡有影响。进行了带3个中心点的24-…

Html实现图片上传/裁剪/马赛克/压缩/旋转/缩放

cropper下载 https://download.csdn.net/download/dongyan3595/90970115 前端代码 <!doctype html> <html lang"en"> <head><base href"/aishop/"><meta name"viewport" content"widthdevice-width, initial…

springboot项目中整合高德地图

一&#xff1a;高德开放平台的使用 高德开放平台 | 高德地图API 注册高德地图账号 认证填写个人信息&#xff1a; 认证方式选择“个人认证开发者”即可&#xff0c;然后完善信息 认证成功之后&#xff0c;再次进入控制台&#xff0c;创建关于地图的应用 创建Key&#xff08;y…

鸿蒙开发-视频学习及实用中的一些小结

1.extend 和 styles extend是在styles基础上进行了升级 使用的时候extend是全局的。 styles不加function 局部 加了就是全局。 2.builder 中要引用comp组件 需要在外层嵌套布局 3.ability之间的跳转 want需要加&#xff1b; 4. as 类型断言 &#xff01;跟在xxx! 表示…

网盘直链解析网页版

不支持百度网盘、阿里网盘。 123&#xff0c;蓝奏云&#xff0c;可道云什么的都可以 源码下载地址&#xff1a;https://www.123865.com/s/X91lVv-3l90v

AXI4-Stream Clock Converter IP

一、参考说明 1.没有专门对AXI4-Stream Clock Converter IP说明的文档&#xff1b; 2.可以参考PG085文档&#xff1b; 3.可以参考PG035文档&#xff1b; 二、IP的作用 1.用于stream数据流再不同的时钟域之间的可靠性传输&#xff1b; 2.支持跨时钟域的场景&#xff1b; 3.内部…

NineData 社区版 V4.2.0 发布!新增MySQL与PostgreSQL互相迁移,SQL管理Milvus,安装更高效

NineData 社区版 V4.2.0 正式发布&#xff01;本次更新通过镜像轻量化部署、新增 3 条迁移链路、新增支持 Milvus 向量数据库等核心升级&#xff0c;轻松实现数据库迁移容灾、实时数据集成分析、AI 向量数据管理等场景需求。社区版支持本地离线部署&#xff0c;严格保障数据隐私…

如何安装使用qmt脚本跟单聚宽策略

登录知识星球&#xff0c;下载获取 解压后&#xff0c;登录大qmt&#xff0c;将策略导入其中&#xff0c; 然后修改参数&#xff1a; 点击免密改参 totalcash&#xff1a;该策略使用资金总量 per&#xff1a;每只股票占比资金额 举例&#xff0c;当前出信号&#xff0c;每只…

什么是MongoDB

目录 主要特点 MongoDB概念解析 完整术语列表 MongoDB安装 MongoDB Shell 安装MongoDB Shell 数据库管理 查看数据库列表 创建数据库 删除数据库 默认数据库 系统内置数据库 集合管理 查看集合 创建集合 更新集合名 删除集合 文档操作 插入文档 查询文档 …

【Docker基础】Docker核心概念:容器(Container)与镜像(Image)的区别与联系

目录 引言 1 Docker镜像&#xff08;Image&#xff09; 1.1 镜像的定义 1.2 镜像的特点 1.3 镜像的创建 1.4 镜像的结构 1.5 镜像结构描述 2 Docker容器&#xff08;Container&#xff09; 2.1 容器的定义 2.2 容器的特点 2.3 容器的创建与运行 2.4 容器的生命周期…

从零到一:构建企业级 Vue.js 3 组件库

前言&#xff1a;为何要构建组件库&#xff1f; 在现代前端工程化体系中&#xff0c;组件库已不再是大型团队的专属。它是一个团队设计规范、开发模式和技术沉淀的核心载体。构建一个组件库&#xff0c;能够带来诸多优势&#xff1a; 提升效率&#xff1a;提供可复用的高质量…

【2025 CVPR-Backbone】Building Vision Models upon Heat Conduction

摘要 利用注意力机制的视觉表示模型在追求大感受野时面临着巨大的计算开销。在本研究中&#xff0c;我们通过引入基于物理热传导原理的热传导算子&#xff08;Heat Conduction Operator, HCO&#xff09;来缓解这一挑战这么高级咩(⊙o⊙)&#xff01;。HCO将图像块视为热源&am…

Rust编写Shop管理系统

Rust编写Shop管理系统 Actix Web 是一个功能强大、实用且速度极快的 Rust Web 框架。编写Shop管理系统 HelloKeny 首先是先编写最简单的例子,类似hello World可以检查环境 Actix Web 是一个功能强大、实用且速度极快的 Rust Web 框架。 命令 cargo new hellokenycd hell…

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…

快速幂算法详解:从暴力到优雅的数学优化

文章目录 一、朴素幂运算的问题二、快速幂的数学原理三、快速幂的递归实现四、快速幂的迭代实现五、模运算下的快速幂六、快速幂的应用场景七、总结 快速幂是一种高效计算幂运算的算法&#xff0c;能够将时间复杂度从朴素的 O (n) 降低到 O (log n)。本文将深入探讨快速幂的原理…