利用LangChain构建MySQL数据库问答代理

引言

随着自然语言处理技术的飞速发展,尤其是大型语言模型(LLM)的应用日益广泛,人们对于如何更高效地与这些模型交互产生了浓厚的兴趣。LangChain 是一个旨在简化与语言模型集成的开源框架,它使得开发者能够轻松地构建出强大的应用程序。本文将介绍如何使用LangChain结合MySQL数据库创建一个简单的问答代理。

LangChain简介

LangChain 是一个开源项目,它的目标是让开发者更容易地创建与语言模型交互的应用程序。LangChain 提供了一系列工具和组件,这些工具和组件可以协同工作,以简化常见的任务,比如文本生成、文档检索和对话系统等。

准备工作

在开始之前,确保你已经安装了以下Python库:

bash

pip install langchain_community pymysql sqlalchemy

创建MySQL数据库和表

首先,我们需要创建一个MySQL数据库,并在其中定义两张表:一张用于存储用户信息,另一张用于存储部门信息。

python

1import pymysql
2from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
3from sqlalchemy.ext.declarative import declarative_base
4from sqlalchemy.orm import sessionmaker
5
6# 数据库连接配置
7DATABASE_URI = "mysql+pymysql://username:password@localhost:3306/your_database_name"
8
9# 创建数据库引擎
10engine = create_engine(DATABASE_URI)
11
12# 创建会话
13Session = sessionmaker(bind=engine)
14session = Session()
15
16# 定义基类
17Base = declarative_base()
18
19# 定义用户表
20class User(Base):
21    __tablename__ = 'users'
22    id = Column(Integer, primary_key=True)
23    name = Column(String(50))
24    gender = Column(String(10))
25    age = Column(Integer)
26    department_id = Column(Integer, ForeignKey('departments.id'))
27
28# 定义部门表
29class Department(Base):
30    __tablename__ = 'departments'
31    id = Column(Integer, primary_key=True)
32    fid = Column(Integer)
33    name = Column(String(50))
34
35# 创建表
36Base.metadata.create_all(engine)

构建问答代理

接下来,我们将使用LangChain创建一个代理,用于执行SQL查询。

python

1from langchain_community.llms.tongyi import Tongyi
2from langchain_community.agent_toolkits.sql.base import create_sql_agent
3from langchain_community.agent_toolkits.sql.toolkit import SQLDatabaseToolkit
4from langchain_community.utilities import SQLDatabase
5from langchain.agents.agent_types import AgentType
6
7# 创建数据库对象
8db = SQLDatabase.from_uri(DATABASE_URI)
9
10# 创建SQL工具套件
11toolkit = SQLDatabaseToolkit(db=db, llm=Tongyi())
12
13# 创建SQL代理执行器
14agent_executor = create_sql_agent(
15    llm=Tongyi(),
16    toolkit=toolkit,
17    verbose=True,
18    agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
19)

执行问答

现在,我们可以使用代理来执行查询并获取结果。这里我们插入一些测试数据,并尝试执行查询。

python

1# 插入一些测试数据
2session.add_all([
3    Department(id=1, fid=None, name="HR"),
4    Department(id=2, fid=1, name="Recruitment"),
5    User(id=1, name="Alice", gender="Female", age=28, department_id=1),
6    User(id=2, name="Bob", gender="Male", age=32, department_id=2),
7])
8session.commit()
9
10# 执行查询
11query = "SELECT * FROM users WHERE age > 30"
12ret = agent_executor.run(query)
13print(ret)
14
15# 更复杂的问答
16question = "列出所有年龄大于30岁的员工及其所在部门名称"
17ret = agent_executor.run(question)
18print(ret)

结论

通过以上步骤,我们成功地使用LangChain和MySQL数据库构建了一个简单的问答代理。LangChain简化了与语言模型的交互过程,使得开发者能够专注于应用程序的逻辑而非底层的技术细节。未来,随着更多功能的添加和支持的增强,LangChain无疑将成为构建语言模型应用的强大工具之一。

你可能感兴趣的:(langchain,数据库,mysql,python)