AI创想

标题: 【LangChain系列】【使用LangChain连接MySQL实践&运行】 [打印本页]

作者: 林克link02    时间: 昨天 07:21
标题: 【LangChain系列】【使用LangChain连接MySQL实践&运行】
作者:ㄣ知冷煖★
目录



前言

探索如何使用Langchain连接MySQL
【LangChain系列——操作SQL&CSV&连接数据库系列文章】:
一、使用LangChain连接MySQL实践&运行:如何使用langchain连接MySQL数据库&使用大模型优化&构建chain
二、基于Langchain的Pandas&csv Agent:调用Langchain自带的Pandas&CSV 智能体来对数据进行操作
三、与SQL交互时如何得到更好的结果&输出的查询结果验证方案:使用SQLLite简易数据库来实践,与SQL交互如何得到更好的结果&小技巧
一、LangChain

1-1、介绍

LangChain是一个框架,用于开发由大型语言模型(LLM)驱动的应用程序。
LangChain 简化了 LLM 应用程序生命周期的每个阶段:
(, 下载次数: 0)


1-2、特点

LangChain的特点如下:
二、LangChain连接MySQL&run

2-1、安装
  1. pip install --upgrade --quiet  langchain langchain-community langchain-experimental langchain-openai
  2. pip install langchain_experimental
复制代码
2-2、导入相关包
  1. from langchain_community.chat_models.tongyi import ChatTongyi
  2. from langchain_community.utilities import SQLDatabase
  3. import os
  4. import dashscope
  5. import ast
复制代码
2-3、通义千问&DataBase参数设置
  1. # 模型相关参数设置,这里使用通义千问
  2. os.environ["LANGCHAIN_TRACING_V2"]="true"
  3. os.environ["LANGCHAIN_API_KEY"]=""
  4. os.environ["DASHSCOPE_API_KEY"]=''
  5. model =ChatTongyi(
  6.     streaming=True,)
  7. dashscope.api_key=""
  8. # 数据库相关参数设置,包含用户名、密码等
  9. db_user =""
  10. db_password =""
  11. db_host =""
  12. db_name =""
复制代码
2-4、连接数据库&执行

数据库连接:
  1. # 数据库连接
  2. db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}")
复制代码
注意: 可以指定return_direct=True 来直接返回 SQL 查询的输出,而不需要任何额外的格式。防止LLM看到数据库中的任何内容。
连接数据库测试:
  1. # 连接数据库测试
  2. print(db.dialect)print(db.get_usable_table_names())
复制代码
输出:
mysql
[‘20231128_oceanengine_advertising_model’, ‘ads_app_behavioral_data_iu_d’, ‘ads_app_behavioral_data_iu_d_copy’, ‘ads_app_behavioral_error_data_iu_d’, ‘ads_app_behavioral_meta_mamualtag_iu_d’, ……]

展示数据表信息:
  1. result = db.run("show create table dwd_sdm_usr_model_user_action_fl_d")
复制代码
输出:
[(‘dwd_sdm_usr_model_user_action_fl_d’, “CREATE TABLE dwd_sdm_usr_model_user_action_fl_d (\n jv_user_id varchar(500) DEFAULT NULL COMMENT ‘用户id’,\n action_time date NOT NULL COMMENT ‘时间’,\n action varchar(64) DEFAULT NULL COMMENT ‘事件’\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘用户表’”)]
2-5、结合大模型,构建提示词工程来进一步优化

功能:
  1. reference_Format ="""
  2. ### Database Schema ['CREATE TABLE "dwd_sdm_usr_model_user_action_fl_d"("jv_user_id"varchar(500) DEFAULT NULL COMMENT "用户id","action_time" date NOT NULL COMMENT "时间","action"varchar(64) DEFAULT NULL COMMENT "事件") ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT="用户表";']
  3. ### Task 基于提供的database schema信息,"""
  4. prompt = f"""
  5.         任务:将提取到的Database Schema转化为标准格式输出。
  6.         需要转化的Database Schema数据:({result})
  7.         参考格式为:({reference_Format})
  8.         只输出最终结果,不输出其他任何文字。
  9.         """
  10. messages =[{'role':'user','content': f'{prompt}'}]
  11. response = dashscope.Generation.call(dashscope.Generation.Models.qwen_turbo, messages=messages, result_format='message')
复制代码
解析输出结果为:
### Database Schema
CREATE TABLE “dwd_sdm_usr_model_user_action_fl_d” ( “jv_user_id” varchar(500) DEFAULT NULL COMMENT “用户id”, “action_time” date NOT NULL COMMENT “时间”, “action” varchar(64) DEFAULT NULL COMMENT “事件” ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=“用户表”;### Task 基于提供的database schema信息,

2-6、查询&执行

使用langchain自带的库来写出查询SQL并执行:
  1. from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool
  2. from langchain.chains import create_sql_query_chain
  3. execute_query =QuerySQLDataBaseTool(db=db)
  4. write_query =create_sql_query_chain(model, db)
  5. chain = write_query | execute_query
  6. result = chain.invoke({"question":"How many employees are there"})print(result)
复制代码
输出:
[(0,)]
2-7、得到最终结果(更标准化的输出)

概述: 生成SQL——执行SQL——Prompt模板——输入到大模型——提取输出内容
  1. from operator import itemgetter
  2. from langchain_core.output_parsers import StrOutputParser
  3. from langchain_core.prompts import PromptTemplate
  4. from langchain_core.runnables import RunnablePassthrough
  5. answer_prompt = PromptTemplate.from_template("""Given the following user question, corresponding SQL query, and SQL result, answer the user question.
  6. Question:{question}
  7. SQL Query:{query}
  8. SQL Result:{result}
  9. Answer:"""
  10. )
  11. chain =(
  12.     RunnablePassthrough.assign(query=write_query).assign(
  13.         result=itemgetter("query")| execute_query
  14.     )| answer_prompt
  15.     | model
  16.     |StrOutputParser())
  17. result = chain.invoke({"question":"How many employees are there"})print(result)
复制代码
输出:
There are 0 employees.
参考文章:
langchain_community.utilities.sql_database.SQLDatabase
LangChain




欢迎光临 AI创想 (https://llms-ai.com/) Powered by Discuz! X3.4