当前位置: 首页 > 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等工具则大大简化了这个过程。

http://www.xdnf.cn/news/1014571.html

相关文章:

  • Windows安装Oracle19
  • Linux服务器如何诊断和解决网络问题
  • 应用探析|千眼狼高速摄像机、sCMOS相机、DIC测量、PIV测量在光学领域的应用
  • 04 - CoordAttention模块
  • 职业技能大赛视角下:高职院校课堂教学破局与提质之路
  • 位运算详解之与或非的巧妙运用
  • 【6-7-6.14学习周报】
  • 让 Deepseek 写电器电费计算器小程序
  • 朴朴超市小程序 sign-v2 分析
  • Docker Windows 配置国内镜像源方法
  • 堆排序详解:从理论到实践
  • Hadoop 002 — HDFS常用命令及SpringBoot整合操作
  • 微服务--消息队列mq
  • 准确--CentOS 7.9在线安装docker
  • 微服务--nacos+feign
  • 开发指南121-微服务的弹性伸缩
  • 20.excel制作图表,图表跟随数据行数的变化而自动更新
  • 【prometheus+Grafana篇】基于Prometheus+Grafana实现postgreSQL数据库的监控与可视化
  • 产品推荐|一款具有单光子级探测能力的科学相机千眼狼Gloria 1605
  • RabbitMQ的使用--项目创建、五种工作模式、高级特性
  • VR 虚拟云展:科技浪潮下的新趋势​
  • 《第四章-筋骨淬炼》 C++修炼生涯笔记(基础篇)数组与函数
  • 砂石骨料数字孪生工厂应用案例:远眺科技三维可视化落地成效
  • 【解决方案】Kali 2022.3修复仓库密钥无交互一键安装docker,docker compose
  • 卷积神经网络(一)基础入门
  • VIC-3D应用指南系列之:DIC数字图像相关技术与热成像(VIC-3D IR System助力热载荷测试)
  • ue5的blender4.1groom毛发插件v012安装和使用方法(排除了冲突错误)
  • 小型化边缘计算设备 特点
  • ubuntu 系统 多条命令通过 bash 脚本执行
  • 深入解析 MySQL 架构:从基础到高级