东湖之滨 发表于 2025-1-11 04:04:04

利用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交互的差别方面。
https://img-blog.csdnimg.cn/img_convert/231c652411077c640a3b0698496df4d8.webp?x-oss-process=image/format,png


[*]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构建一个问答应用。请按照以下步骤构建一个根本的问答应用。
安装依赖

通过执行以下命令创建并激活虚拟环境。
python -m venv venv
source venv/bin/activate
venv/Scripts/activate

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

设置环境变量

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


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

利用LangChain创建简单的LLM调用

创建一个新的python文件langchain_demo.py,并添加以下代码。
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))

运行脚本。
python langchain_demo.py



你将得到以下输出。
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,并添加以下代码。
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))

运行脚本。
python langchain_demo.py



你将得到以下输出。
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的数据源。
https://img-blog.csdnimg.cn/img_convert/f67db41da778f54349f0477342fd5fd2.webp?x-oss-process=image/format,png
安装依赖

通过执行以下命令创建并激活虚拟环境。
python -m venv venv
source venv/bin/activate
venv/Scripts/activate

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

psycopg2 创建表和插入数据

注意替换数据库毗连信息。
创建一个新的python文件db.py,并添加以下代码。
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脚本。
python db.py


设置SQL数据库链

创建一个新的python文件app.py,并添加以下代码。
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


您将获得以下输出:
https://img-blog.csdnimg.cn/img_convert/aa3ef7c35329e053a2e38e169a54d0eb.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/021ca6d8e1c778f5aea64eebb2afdd5c.webp?x-oss-process=image/format,png 这就是您的第一个LangChain应用步伐!感谢阅读本文。
https://i-blog.csdnimg.cn/direct/7bedc5a810c942328bbc4913d33d4d05.jpeg#pic_center
大模型&AI产品经理怎样学习

求各人的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。
1.学习路线图

https://i-blog.csdnimg.cn/direct/40506a6affcc414a964c680d81314e17.png#pic_center
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商范畴虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体范畴构建适合当前范畴大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小步伐案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
2.视频教程

网上固然也有许多的学习资源,但根本上都残破不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
https://i-blog.csdnimg.cn/direct/e14e7fcb35494ec288e3166d15504242.png
https://i-blog.csdnimg.cn/direct/3b5cef73a975451aa628552513bdd18c.png#pic_center
(都打包成一块的了,不能一一睁开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方图片前往获取
3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是现在行业最新的。
https://i-blog.csdnimg.cn/direct/5724c952d23b45b19096800919b0b5d0.png#pic_center
4.LLM口试题和面经合集

这里主要整理了行业现在最新的大模型口试题和各种大厂offer面经合集。
https://i-blog.csdnimg.cn/direct/7520c542c2c84c7cb4e8f13cc1da1255.png
页: [1]
查看完整版本: 利用LangChain实现大语言模型与数据库的交互对话