大语言模型使用LangChain与数据库对话

大语言模型使用LangChain与数据库对话

大型语言模型(LLMs)的兴起在技术上带来了重大转变,使开发者能够创建曾经难以想象的应用程序。LangChain 是一个提示编排工具,利用LLMs的能力改变你与数据库的通信方式。通过LangChain,你可以轻松地与数据库对话,并实时获得精确的响应,就像与亲密朋友交谈一样。

在本教程中,我们将连接到PostgreSQL数据库,并使用LangChain与之对话,而无需通过SQL查询数据库。

入门指南

目录

  • LangChain简介
  • 为什么要使用LangChain
  • LangChain结构
  • LangChain的应用
  • 使用LangChain创建问答应用
  • 使用LangChain创建简单的LLM调用
  • 创建提示模板
  • 使用LangChain与数据库交互

LangChain简介

LangChain 是一个开源库,为开发者提供了一系列资源,以开发在大型语言模型(LLMs)上运行的应用程序。通过建立LLMs与外部数据源(如个人文档或互联网)的链接机制。开发者可以利用LangChain串联一系列命令来创建复杂的应用程序。简而言之,LangChain作为一个框架,使得执行一系列提示以获得特定结果成为可能。

为什么要使用LangChain

LangChain 对开发者来说是一个重要的工具,因为它使得使用LLMs构建复杂应用程序变得更加容易。它允许用户将LLMs连接到其他数据源。通过将LLMs连接到其他数据源,应用程序可以处理更广泛的信息,使应用程序更加强大和多功能。

LangChain 还提供了以下特性:

  • 灵活性:LangChain 是一个高度灵活和可扩展的框架,允许轻松更换组件和定制链以满足独特需求。
  • 速度:LangChain 开发团队不断增强库的速度,确保用户能够访问到最新的LLM功能。
  • 社区:LangChain 拥有一个强大、活跃的社区,用户在需要时总是可以寻求帮助。

LangChain结构

该框架分为七个模块。每个模块允许你管理与LLM交互的不同方面。

  • LLM:LLM是LangChain的基本组件。它是LLM周围的封装器,使得可以利用模型的功能和能力。
  • Chains:很多时候,为了解决任务,对LLM的单个API调用是不够的。该模块允许集成其他工具。例如,您可能需要从特定URL获取数据,总结返回的文本,并使用生成的摘要回答问题。该模块允许将多个工具串联在一起以解决复杂的任务。
  • Prompts:提示是任何NLP应用程序的核心。这是用户与模型进行交互以尝试获取输出的方式。编写有效提示是很重要的。LangChain提供了提示模板,使用户能够格式化输入和其他实用工具。
  • Document Loaders and Utils:LangChain的文档加载器和Utils模块有助于连接到数据源和执行计算。Utils模块提供Bash和Python解释器会话等功能。这些适用于用户需要直接与底层系统进行交互的应用程序,或者在需要计算特定数学量或解决问题的代码片段而不是一次性计算答案时。
  • Agents:Agent是一个LLM,它做出决定,执行动作,并观察已完成的工作,并继续这个周期,直到任务完成LangChain库提供了代理,可以根据途中的输入采取行动,而不是硬编码的确定性序列。
  • Indexes:最好的模型通常是与一些文本数据结合在一起的模型,以添加上下文或解释模型中的某些内容。这个模块帮助我们做到这一点。
  • Memory:该模块使用户可以在模型调用之间创建持久状态。能够使用记住过去说过的话的模型将改善我们的应用程序。

LangChain的应用

以下是LangChain的一些应用。

  • 使用自然语言查询数据集:LLMs可以使用自然语言编写SQL查询。LangChain的文档加载器、索引相关链和输出解析器帮助加载和解析数据以生成结果。或者,将数据结构输入到LLM中是一种更常见的方法。
  • 与API交互:LangChain的链和代理特性使用户能够将LLMs包含在与其他API调用的更长工作流中。这对于用例(如检索股票数据或与云平台交互)非常有用。
  • 构建聊天机器人:生成式AI为行为逼真的聊天机器人提供了希望。LangChain的提示模板提供了对聊天机器人个性和响应的控制。消息历史工具允许在对话中或跨多个对话中保持更大的一致性,通过给聊天机器人比LLMs默认提供的更长的记忆。

使用LangChain创建问答应用

在上一节中,我们介绍了LangChain的基本知识。在接下来的部分中,我们将使用LangChain构建一个问答应用。请按照以下步骤构建一个基本的问答应用。

安装依赖

通过执行以下命令创建并激活虚拟环境。

bash 复制代码
python -m venv venv
source venv/bin/activate
venv/Scripts/activate

使用pip安装langchain、openai和python-environ库。

bash 复制代码
pip install langchain openai python-environ

设置环境变量

你可以使用任何开源模型与langchain一起使用。然而,openai模型比开源模型提供更好的结果。如果你使用的是任何openai模型,需要openai密钥来访问langchain。本教程是针对openai模型设计的。按照以下步骤创建一个新的openai密钥。

  • 打开 platform.openai.com
  • 点击页面右上角的名字或图标选项,选择"API密钥"或点击链接 --- 账户API密钥 --- OpenAI API。
  • 点击创建新密钥按钮以创建一个新的openai密钥。
  • 创建一个名为.env的文件,并添加以下内容:
bash 复制代码
OPENAI_API_KEY=<your_openai_key>

使用LangChain创建简单的LLM调用

创建一个新的python文件langchain_demo.py,并添加以下代码。

python 复制代码
from langchain.llms import OpenAI
import environ
env = environ.Env()
environ.Env.read_env()
API_KEY = env('OPENAI_API_KEY')
llm = OpenAI(model_name="text-davinci-003", openai_api_key=API_KEY)
question = "Which language is used to create chatgpt?"
print(question, llm(question))

运行脚本。

bash 复制代码
python langchain_demo.py

你将得到以下输出。

vbnet 复制代码
python langchain_demo.py
Which language is used to create chatgpt ?
ChatGPT is written in Python,using the PyTorch deep learning framework

创建提示模板

创建一个新的python文件langchain_demo.py,并添加以下代码。

python 复制代码
from langchain.llms import OpenAI
import environ
env = environ.Env()
environ.Env.read_env()
API_KEY = env('OPENAI_API_KEY')
llm = OpenAI(model_name="text-davinci-003", openai_api_key=API_KEY)
template = "What are the top {n} resources to learn {language} programming?"
prompt = PromptTemplate(template=template, input_variables=['n', 'language'])
chain = LLMChain(llm=llm, prompt=prompt)
input = {'n': 3, 'language': 'Python'}
print(chain.run(input))

运行脚本。

bash 复制代码
python langchain_demo.py

你将得到以下输出。

less 复制代码
python langchain_demo.py
1. Codecademy(https://www.codecademy.com/learn/learn-python)
2. LearnPython.org (https://www.learnpython.org/)
3. Automate the Boring Stuff with Python (https://automatetheboringstuff.com/)

使用LangChain与数据库交互

在本节中,我们将创建一个应用程序,以自然的方式(不直接查询)与postgres数据库交互。

安装postgres

打开企业版下载页面(enterprisedb.com),并根据你的操作系统下载相应的包。

嫌麻烦,可以直接注册一个免费的云数据库。 MemFireDB

创建数据库

创建一个名为tasks的数据库表来保存任务详情。这个数据库可以作为langchain的数据源。

安装依赖

通过执行以下命令创建并激活虚拟环境。

bash 复制代码
python -m venv venv
source venv/bin/activate
venv/Scripts/activate

使用pip安装langchain、openai、python-environ和psycopg2库。

bash 复制代码
pip install langchain openai python-environ psycopg2

创建表和插入数据

注意替换数据库连接信息。

创建一个新的python文件db.py,并添加以下代码。

python 复制代码
import psycopg2
import environ
env = environ.Env()
environ.Env.read_env()
conn = psycopg2.connect(
    host='localhost',
    port=5432,
    user='postgres',
    password=env('DBPASS'),
    database=env('DATABASE')
)
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS tasks
(id SERIAL PRIMARY KEY,
 task TEXT NOT NULL,
 completed BOOLEAN,
 due_date DATE,
 completion_date DATE,
 priority INTEGER)
''')
# 插入数据的代码...
conn.commit()
conn.close()

运行脚本

要创建任务表并插入值,请使用以下命令运行db.py脚本。

bash 复制代码
python db.py

设置SQL数据库链

创建一个新的python文件app.py,并添加以下代码。

python 复制代码
from langchain import OpenAI, SQLDatabase, SQLDatabaseChain
import environ
env = environ.Env()
environ.Env.read_env()
API_KEY = env('OPENAI_API_KEY')
db = SQLDatabase.from_uri(
    f"postgresql+psycopg2://postgres:{env('DBPASS')}@localhost:5432/{env('DATABASE')}"
)
llm = OpenAI(temperature=0, openai_api_key=API_KEY)
QUERY = """
Given an input question, first create a syntactically correct postgresql query to run, then look at the results of the query and return the answer.
Use the following format:
Question: Question here
SQLQuery: SQL Query to run
SQLResult: Result of the SQLQuery
Answer: Final answer here
{question}
"""

db_chain = SQLDatabaseChain(llm=llm, database=db, verbose=True)

def get_prompt():
    print("Type 'exit' to quit")
    while True:
        prompt = input("Enter a prompt: ")
        if prompt.lower() == 'exit':
            print('Exiting...')
            break
        else:
            try:
                question = QUERY.format(question=prompt)
                print(db_chain.run(question))
            except Exception as e:
                print(e)
get_prompt()

代码分析:

  • 导入langchain模块 OpenAI, SQLDatabase, 和 SQLDatabaseChain
  • 从环境变量文件中获取 OPENAI_API_KEY
  • 使用 SQLDatabase.from_uri() 方法设置数据库连接,指定连接URL
  • 使用 OpenAI() 创建llm对象,指定温度和openai_api_key
  • 使用 SQLDatabaseChain() 创建数据库链对象 db_chain,指定llm和数据库对象
  • get_prompt() 从控制台获取用户输入,并以指定格式创建查询。它使用 db_chain.run() 方法运行SQL数据库链

运行应用程序

使用以下命令运行SQL数据库链。

python app.py

您将获得以下输出:

这就是您的第一个LangChain应用程序!感谢阅读本文。

原文链接:coinsbench.com/chat-with-y...

相关推荐
我爱学Python!4 小时前
大语言模型与图结构的融合: 推荐系统中的新兴范式
人工智能·语言模型·自然语言处理·langchain·llm·大语言模型·推荐系统
LZXCyrus6 小时前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
数字化营销工兵17 小时前
大语言模型(LLM)安全:十大风险、影响和防御措施
llm·大语言模型·数据安全·隐私保护
gz7seven1 天前
BLIP-2模型的详解与思考
大模型·llm·多模态·blip·多模态大模型·blip-2·q-former
不爱说话郭德纲1 天前
探索LLM前沿,共话科技未来
人工智能·算法·llm
我爱学Python!2 天前
解决复杂查询难题:如何通过 Self-querying Prompting 提高 RAG 系统效率?
人工智能·程序人生·自然语言处理·大模型·llm·大语言模型·rag
任某某01162 天前
第四期书生大模型实战营 - 基础岛闯关作业3 - 浦语提示词工程实践
llm
GoAI2 天前
《深入浅出多模态》之多模态模型总结(中)
人工智能·算法·llm
知来者逆3 天前
DrugLLM——利用大规模语言模型通过 Few-Shot 生成生物制药小分子
人工智能·语言模型·自然语言处理·llm·大语言模型·生物制药
waiting不是违停4 天前
MetaGPT实现多动作Agent
langchain·llm