大语言模型使用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构建一个问答应用。请按照以下步骤构建一个基本的问答应用。
安装依赖
通过执行以下命令创建并激活虚拟环境。
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的数据源。
安装依赖
通过执行以下命令创建并激活虚拟环境。
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
您将获得以下输出:
这就是您的第一个LangChain应用程序!感谢阅读本文。
大模型&AI产品经理如何学习
求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。
1.学习路线图
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方图片前往获取
3.技术文档和电子书
这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
4.LLM面试题和面经合集
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓