LangChain是一个框架,用于开发由大型语言模型(LLM)驱动的应用程序。
LangChain 简化了 LLM 应用程序生命周期的每个阶段:
LangChain的特点如下:
pip install --upgrade --quiet langchain langchain-community langchain-experimental langchain-openai
pip install langchain_experimental
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_community.utilities import SQLDatabase
import os
import dashscope
import ast
# 模型相关参数设置,这里使用通义千问
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 = ""
数据库连接:
# 数据库连接
db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}")
注意: 可以指定return_direct=True 来直接返回 SQL 查询的输出,而不需要任何额外的格式。防止LLM看到数据库中的任何内容。
连接数据库测试:
# 连接数据库测试
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', ……*
展示数据表信息:
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='用户表'")
功能:
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信息,*
使用langchain自带的库来写出查询SQL并执行:
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,)
概述: 生成SQL——执行SQL——Prompt模板——输入到大模型——提取输出内容
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 删除。