随着自然语言处理技术的飞速发展,尤其是大型语言模型(LLM)的应用日益广泛,人们对于如何更高效地与这些模型交互产生了浓厚的兴趣。LangChain 是一个旨在简化与语言模型集成的开源框架,它使得开发者能够轻松地构建出强大的应用程序。本文将介绍如何使用LangChain结合MySQL数据库创建一个简单的问答代理。
LangChain 是一个开源项目,它的目标是让开发者更容易地创建与语言模型交互的应用程序。LangChain 提供了一系列工具和组件,这些工具和组件可以协同工作,以简化常见的任务,比如文本生成、文档检索和对话系统等。
在开始之前,确保你已经安装了以下Python库:
bash
pip install langchain_community pymysql sqlalchemy
首先,我们需要创建一个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无疑将成为构建语言模型应用的强大工具之一。