前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【LangChain系列】【使用LangChain连接MySQL实践&运行】

【LangChain系列】【使用LangChain连接MySQL实践&运行】

原创
作者头像
知冷煖
发布2024-09-20 22:08:21
720
发布2024-09-20 22:08:21
举报
文章被收录于专栏:Langchain

一、LangChain

1-1、介绍

LangChain是一个框架,用于开发由大型语言模型(LLM)驱动的应用程序。

LangChain 简化了 LLM 应用程序生命周期的每个阶段:

  • 开发:使用LangChain的开源构建块和组件构建应用程序。使用第三方集成和模板开始运行。
  • 生产化:使用 LangSmith 检查、监控和评估您的链条,以便您可以自信地持续优化和部署。
  • 部署:使用 LangServe 将任何链转换为 API。

1-2、特点

LangChain的特点如下:

  • 大语言模型(llm): LangChain为自然语言处理提供了不同类型的模型,这些模型可用于处理非结构化文本数据,并且可以基于用户的查询检索信息
  • PromptTemplates: 这个特征使开发人员能够使用多个组件为他们的模型构造输入提示。在查询时,开发人员可以使用PromptTemplates为用户查询构造提示模板,之后模板会传递到大模型进行进一步的处理。
  • :在LangChain中,链是一系列模型,它们被连接在一起以完成一个特定的目标。聊天机器人应用程序的链实例可能涉及使用LLM来理解用户输入,使用内存组件来存储过去的交互,以及使用决策组件来创建相关响应。
  • agent: LangChain中的agent与用户输入进行交互,并使用不同的模型进行处理。Agent决定采取何种行动以及以何种顺序来执行行动。例如,CSV Agent可用于从CSV文件加载数据并执行查询,而Pandas Agent可用于从Pandas数据帧加载数据并处理用户查询。可以将代理链接在一起以构建更复杂的应用程序。

二、LangChain连接MySQL&run

2-1、安装

代码语言:python
代码运行次数:0
复制
pip install --upgrade --quiet  langchain langchain-community langchain-experimental langchain-openai
pip install langchain_experimental

2-2、导入相关包

代码语言:python
代码运行次数:0
复制
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_community.utilities import SQLDatabase
import os
import dashscope
import ast

2-3、通义千问&DataBase参数设置

代码语言:python
代码运行次数:0
复制
# 模型相关参数设置,这里使用通义千问
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = ""
os.environ["DASHSCOPE_API_KEY"] = ''
model = ChatTongyi(
    streaming=True,
)
dashscope.api_key=""

# 数据库相关参数设置,包含用户名、密码等
db_user = ""
db_password = ""
db_host = ""
db_name = ""

2-4、连接数据库&执行

数据库连接:

代码语言:python
代码运行次数:0
复制
# 数据库连接
db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}")

注意: 可以指定return_direct=True 来直接返回 SQL 查询的输出,而不需要任何额外的格式。防止LLM看到数据库中的任何内容。

连接数据库测试:

代码语言:python
代码运行次数:0
复制
# 连接数据库测试
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', ……*

展示数据表信息:

代码语言:python
代码运行次数:0
复制
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、结合大模型,构建提示词工程来进一步优化

功能:

  • 写出参考格式
  • 构建提示词工程,将提取到的Schema转化为标准格式
  • 调用通义千问接口并返回结果
代码语言:python
代码运行次数:0
复制
reference_Format = """
### 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信息, 
"""
prompt = f"""
        任务:将提取到的Database Schema转化为标准格式输出。
        需要转化的Database Schema数据: ({result})
        参考格式为:({reference_Format})
        只输出最终结果,不输出其他任何文字。
        """
messages = [{'role': 'user', 'content': f'{prompt}'}]
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并执行:

代码语言:python
代码运行次数:0
复制
from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool
from langchain.chains import create_sql_query_chain

execute_query = QuerySQLDataBaseTool(db=db)
write_query = create_sql_query_chain(model, db)
chain = write_query | execute_query
result = chain.invoke({"question": "How many employees are there"})
print(result)

输出:

(0,)

2-7、得到最终结果(更标准化的输出)

概述: 生成SQL——执行SQL——Prompt模板——输入到大模型——提取输出内容

代码语言:python
代码运行次数:0
复制
from operator import itemgetter

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthrough

answer_prompt = PromptTemplate.from_template(
    """Given the following user question, corresponding SQL query, and SQL result, answer the user question.

Question: {question}
SQL Query: {query}
SQL Result: {result}
Answer: """
)

chain = (
    RunnablePassthrough.assign(query=write_query).assign(
        result=itemgetter("query") | execute_query
    )
    | answer_prompt
    | model
    | StrOutputParser()
)

result = chain.invoke({"question": "How many employees are there"})
print(result)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、LangChain
    • 1-1、介绍
      • 1-2、特点
      • 二、LangChain连接MySQL&run
        • 2-1、安装
          • 2-2、导入相关包
            • 2-3、通义千问&DataBase参数设置
              • 2-4、连接数据库&执行
                • 2-5、结合大模型,构建提示词工程来进一步优化
                  • 2-6、查询&执行
                    • 2-7、得到最终结果(更标准化的输出)
                    相关产品与服务
                    云数据库 MySQL
                    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档