当前位置: 首页 > news >正文

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等工具则大大简化了这个过程。

相关文章:

  • Java实现Pdf转Word
  • Excel大厂自动化报表实战(互联网金融-数据分析周报制作中)
  • 逆向入门(3)程序逆向篇-Acid Bytes.2
  • <teleport> 是 Vue 3 引入的一个内置组件,用于在 DOM 中移动组件的渲染位置,但保持组件的逻辑作用域不变
  • 【62 Pandas+Pyecharts | 智联招聘大数据岗位数据分析可视化】
  • 【舞蹈】FineDance
  • 黄仁勋在2025年巴黎VivaTech大会上的GTC演讲:AI工厂驱动的工业革命(下)
  • 新书速览|大模型核心技术与开发实践:基于Transformer、PyTorch及Hugging Face
  • Metasploit Framework(MSF)核心知识解析
  • 手机IP地址更换的影响与方法
  • Android 手机如何实现本地视频音频提取?实战教程来了
  • 弹性梁:绘图、分析与可视化-AI云计算数值分析和代码验证
  • 理解与建模弹性膜-AI云计算数值分析和代码验证
  • 【Pandas】pandas DataFrame droplevel
  • MoneyPrinterTurbo根据关键词自动生成视频
  • WebSocket 前端断连原因与检测方法
  • 家政维修平台实战25:工人接单
  • idea中导入maven项目的方法
  • NineData 社区版 V4.2.0 发布!新增MySQL与PostgreSQL互相迁移,SQL管理Milvus,安装更高效
  • 锂电池充电芯片XSP30,2-3节串联锂电池升降压充电管理芯片
  • 汽车做网站/最全bt磁力搜索引擎索引
  • 我是做网站的 哪里有单接/网站制作免费
  • 注册域名后网站建设/北京seo推广系统
  • 网站没服务器行吗/免费b站推广网站2022
  • 编辑网站在线注册系统/在哪个平台做推广比较好
  • wordpress 维护/太原seo外包公司