赞
踩
使用 FastAPI 框架和 LangChain 库构建的简单 Web 服务,其目的是将自然语言处理(NLP)应用于 SQL 查询生成。以下是代码中使用的技术架构和业务流程的详细说明:
FastAPI:一个现代、快速(高性能)的 Web 框架,用于构建 API。
Uvicorn:一个 ASGI 服务器,用于在异步环境中运行 FastAPI 应用。
LangChain:一个用于构建自然语言处理管道和链的库,这里用于将自然语言查询转换为 SQL 语句。
MySQL Connector:一个数据库连接器,用于连接和操作 MySQL 数据库。
Python Asyncio:一个库,用于编写单线程并发代码,FastAPI 在底层使用它来支持异步请求处理。
初始化 LangChain 和 OpenAI:
init_chain
函数创建一个 OpenAI
实例,用于与 OpenAI API 进行通信。SQLDatabase.from_uri
创建一个数据库连接对象,该对象包含了数据库连接所需的信息。SQLDatabaseChain.from_llm
创建一个 SQL 查询链对象,它结合了 OpenAI 和 SQLDatabase,用于生成 SQL 查询。定义 API 路由:
@app.post("/text2sql")
定义了一个 POST 路由,用于接收 JSON 格式的自然语言查询。请求处理:
run_sql_query
函数异步处理传入的请求,从请求体中解析出自然语言查询。验证和异常处理:
query
字段,并且是否为字符串类型。如果不是,抛出一个 400 错误的 HTTP 异常。执行 SQL 查询:
db_chain.run
方法执行由自然语言转换而来的 SQL 查询。返回结果:
启动服务器:
if __name__ == "__main__":
块中,使用 uvicorn.run
启动服务器,监听所有网络接口上的 8000 端口。HTTPException
用于处理客户端错误(如无效请求体)和服务器错误(如查询执行失败)。timeout
)确保了长时间运行的请求会被适当地终止,以避免资源浪费。host="0.0.0.0"
,服务器可以接收来自任何 IP 地址的连接,这在部署时需要考虑网络安全。通过这个架构,您可以构建一个健壮的 Web 服务,它能够理解和处理自然语言查询,并将它们转换为对数据库的 SQL 查询操作。
- from fastapi import FastAPI, HTTPException, Request
- from typing import Dict, Any
- from langchain.chains import create_sql_query_chain
- from langchain import OpenAI, SQLDatabase
- from langchain_experimental.sql import SQLDatabaseChain
- import mysql.connector
-
- app = FastAPI()
-
- def init_chain() -> SQLDatabaseChain:
- llm = OpenAI(
- temperature=0,
- base_url="https://jiekou.***", # 修正引号错误
- api_key='sk-XXX', # 使用您的 OpenAI API Key
- timeout=50000 # 设置一个合理的超时时间
- )
-
- db = SQLDatabase.from_uri("mysql+pymysql://user:password@127.0.0.1/testDB")
- db_chain = SQLDatabaseChain.from_llm(llm=llm, db=db, verbose=True)
-
- return db_chain
-
- @app.post("/text2sql")
- async def run_sql_query(request: Request):
- db_chain = init_chain()
- query = await request.json()
- if "query" not in query or not isinstance(query["query"], str):
- raise HTTPException(status_code=400, detail="Invalid request body")
- try:
- result = db_chain.run(query["query"])
- return {"result": result}
- except Exception as e:
- raise HTTPException(status_code=500, detail=str(e))
-
- if __name__ == "__main__":
- import uvicorn
- uvicorn.run(app, host="0.0.0.0", port=8000) # 监听所有地址
备注:
企业数据通常存储在SQL数据库中。
LLM使得可以使用自然语言与SQL数据库进行交互。
LangChain提供SQL链和代理,以基于自然语言提示构建和运行SQL查询。
实现步骤:自然语言——>交给大模型——>大模型生成sql语句——>通过sql语句生成结果
消耗OpenAI API KEY的token,token需要付费。
openAI API Key收费方式:按照token数量计费,每1000个token收费0.002美元。【按照回复的字节收费】
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。