当前位置:   article > 正文

如何使用LangChain自定义agent的制作(1) - 自定义一个可以执行 SQL 查询的 Agent_langchain sql agent

langchain sql agent


前言

之前我们一块学习了
如何使用LangChain库使用大模型与SQL数据库进行交互
文章末尾说了要写一个自定义的 agent 把我们的代码包进去,今天我们一块来尝试写一个自定义agent

一、准备工作梳理

要使用 LangChain 自定义一个可以执行 SQL 查询的 Agent,需要完成以下几个步骤:

1) 安装依赖包:确保你已经安装了 langchainSQLAlchemy 和其他必要的包。

2) 设置数据库连接:使用 SQLAlchemy 连接到你的数据库。

3) 自定义 Agent:创建一个 Agent,它可以解析用户输入的 SQL 查询并执行。

4) 运行示例:通过运行一个示例,验证你的 Agent 是否工作正常。

下面是一个完整的示例代码,演示如何实现这一点。

一、 安装依赖包

首先安装必要的 Python 包:

pip install langchain sqlalchemy
  • 1

二、 设置数据库连接

创建一个 Python 文件(如 sql_agent.py),并设置数据库连接。这里以 SQLite 为例:

from sqlalchemy import create_engine

# 设置数据库连接
engine = create_engine('sqlite:///example.db')

# 创建一个示例表并插入一些数据
with engine.connect() as connection:
    connection.execute("""
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT,
        age INTEGER
    )
    """)
    connection.execute("""
    INSERT INTO users (name, age) VALUES
    ('Alice', 30),
    ('Bob', 25),
    ('Charlie', 35)
    """)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

三、 自定义 Agent

定义一个 LangChain 的 Agent,它可以执行 SQL 查询并返回结果:

from langchain.agents import initialize_agent, Tool
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
from sqlalchemy.orm import sessionmaker

# 创建数据库会话
Session = sessionmaker(bind=engine)
session = Session()

# 定义执行SQL查询的工具函数
def execute_sql_query(query):
    try:
        result = session.execute(query)
        return result.fetchall()
    except Exception as e:
        return str(e)

# 定义LangChain的工具
sql_tool = Tool(
    name="SQL Executor",
    func=execute_sql_query,
    description="Executes SQL queries and returns the result"
)

# 初始化LangChain的LLM
llm = OpenAI(api_key="YOUR_OPENAI_API_KEY")

# 创建自定义Agent
agent = initialize_agent(
    tools=[sql_tool],
    llm=llm,
    agent_type="zero_shot",
    prompt_template=PromptTemplate(
        template="You are an SQL agent. Execute the following SQL query: {query}",
        input_variables=["query"]
    )
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

四、 运行示例

使用自定义的 Agent 执行 SQL 查询:

def main():
    query = "SELECT * FROM users WHERE age > 30"
    result = agent({"query": query})
    print(result)

if __name__ == "__main__":
    main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

五、 完整代码

将以上所有代码合并到一个文件中:

# sql_agent.py

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from langchain.agents import initialize_agent, Tool
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI

# 设置数据库连接
engine = create_engine('sqlite:///example.db')

# 创建数据库会话
Session = sessionmaker(bind=engine)
session = Session()

# 创建一个示例表并插入一些数据
with engine.connect() as connection:
    connection.execute("""
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT,
        age INTEGER
    )
    """)
    connection.execute("""
    INSERT INTO users (name, age) VALUES
    ('Alice', 30),
    ('Bob', 25),
    ('Charlie', 35)
    """)

# 定义执行SQL查询的工具函数
def execute_sql_query(query):
    try:
        result = session.execute(query)
        return result.fetchall()
    except Exception as e:
        return str(e)

# 定义LangChain的工具
sql_tool = Tool(
    name="SQL Executor",
    func=execute_sql_query,
    description="Executes SQL queries and returns the result"
)

# 初始化LangChain的LLM
llm = OpenAI(api_key="YOUR_OPENAI_API_KEY")

# 创建自定义Agent
agent = initialize_agent(
    tools=[sql_tool],
    llm=llm,
    agent_type="zero_shot",
    prompt_template=PromptTemplate(
        template="You are an SQL agent. Execute the following SQL query: {query}",
        input_variables=["query"]
    )
)

def main():
    query = "SELECT * FROM users WHERE age > 30"
    result = agent({"query": query})
    print(result)

if __name__ == "__main__":
    main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

运行 sql_agent.py 文件,Agent 将执行指定的 SQL 查询并返回结果。确保你替换 "YOUR_OPENAI_API_KEY" 为你的实际 OpenAI API 密钥。

六、使用agent的好处

将功能封装成一个 Agent 有许多好处,特别是在使用 LangChain 框架和执行 SQL 查询的情况下:

1. 模块化和可重用性

  • 封装和抽象:将功能封装成 Agent 可以将复杂的逻辑抽象出来,使得代码更加模块化。这样可以更容易地理解、维护和扩展。
  • 代码复用:封装好的 Agent 可以在不同的项目或不同的部分中重复使用,而无需重新实现相同的逻辑。

2. 扩展性

  • 添加新功能:当需要添加新的功能时,只需在现有的 Agent 上进行扩展,而不需要大规模修改原有代码。
  • 插拔式设计:你可以轻松地添加或替换工具,或修改 Agent 的行为,而不影响整体系统。

3. 简化复杂性

  • 简化主逻辑:主逻辑只需要调用 Agent,而不需要处理具体的实现细节,使得主逻辑更加简洁和清晰。
  • 责任分离:将不同的功能分离到不同的 Agent 或工具中,可以让每个部分专注于自己的功能,从而减少代码的复杂性和耦合度。

4. 增强可维护性

  • 易于调试和测试:由于 Agent 封装了特定的功能,测试和调试可以集中在 Agent 的输入和输出上,简化了调试过程。
  • 清晰的接口:Agent 提供了清晰的接口,其他部分只需与接口交互,而无需了解具体的实现细节。

5. 集成大语言模型的能力

  • 自然语言处理:通过封装,Agent 可以轻松集成大语言模型(如 OpenAI),实现自然语言理解和生成能力,使得系统能够处理更加复杂和自然的用户请求。
  • 动态生成查询:利用大语言模型,Agent 可以根据用户的自然语言请求动态生成 SQL 查询,从而使系统更加智能和灵活。

6. 易于扩展到其他任务

  • 多任务处理:一个 Agent 可以包含多个工具,处理不同的任务(如 SQL 查询、数据处理、API 调用等),从而实现多任务处理能力。
  • 跨领域应用:Agent 的设计可以适用于不同的领域和应用场景,通过配置和扩展,可以快速适应新的需求。

继续思考

上面的sql是我们直接给出来的,可不可以使用我们之前一起学习的方法,将sql自动生成呢?后续继续讨论

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号