利用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交互的不同方面。

1.jpeg

  • 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的数据源。

微信图片_20240308162557.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


您将获得以下输出:

p1.jpeg

p2.jpeg 这就是您的第一个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%免费】🆓

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/893666.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零讲解线性回归(Linear Regression)

Linear Regression 线性回归 线性回归是一种简单且常用的技术&#xff0c;用来预测连续变量&#xff0c;假设预测变量&#xff08;自变量&#xff0c; x_i &#xff09;和结果变量&#xff08;因变量&#xff0c; y_i &#xff09;之间存在线性关系。线性回归公式&#xff08…

Qt自定义一个圆角对话框

如何得到一个圆角对话框&#xff1f; 步骤&#xff1a; 1、继承自QDiaglog 2、去掉系统自带的边框 3、设置背景透明,不设置4个角会有多余的部分出现颜色 4、对话框内部添加1个QWidget&#xff0c;给这个widget设置圆角&#xff0c;并添加到布局中让他充满对话框 5、后续对…

智慧校园打架斗殴检测预警系统 异常奔跑检测系统 Python 和 OpenCV 实现简单

在当今数字化时代&#xff0c;智慧校园建设已成为教育领域的重要发展方向。校园安全作为学校管理的重中之重&#xff0c;如何借助先进的技术手段实现高效、精准的安全监控&#xff0c;成为了教育工作者和技术专家共同关注的焦点。其中&#xff0c;智慧校园打架斗殴检测预警系统…

linux线程 | 线程的控制(上)

前言&#xff1a;本节内容为线程的控制。在本篇文章中&#xff0c; 博主不仅将会带友友们认识接口&#xff0c; 使用接口。 而且也会剖析底层&#xff0c;带领友友们理解线程的底层原理。 相信友友们学完本节内容&#xff0c; 一定会对线程的控制有一个很好的把握。 那么&#…

Spring AI 整体介绍_关键组件快速入门_prompt_embedding等

Spring AI&#xff1a;Java开发者的AI集成新利器 在过去&#xff0c;Java开发者在构建AI应用时面临着缺乏统一框架的问题&#xff0c;导致不同AI服务的集成过程复杂且耗时。Spring AI应运而生&#xff0c;旨在为基于Java的应用程序提供一个标准化、高效且易于使用的AI开发平台…

用PHP爬虫API数据获取商品SKU信息实战指南

在电子商务的精细化运营中&#xff0c;SKU&#xff08;Stock Keeping Unit&#xff0c;库存单位&#xff09;信息是商品管理的核心。它不仅包含了商品的规格、价格、库存等关键数据&#xff0c;还直接影响到库存管理、价格策略和市场分析等多个方面。本文将介绍如何使用PHP爬虫…

Java程序设计:spring boot(3)——spring boot核心配置

目录 1 设置 Banner 图标 1.1 Banner 图标⾃定义 1.2 Banner 图标关闭 2 Spring Boot 配置⽂件 3 Starter 坐标 & ⾃动化配置 3.1 Starter坐标配置 3.1.1 Web starter 3.1.2 Freemarker Starter & Thymeleaf starter 3.1.3 JavaMail邮件发送 Starter 3.1.4 引…

mysql--表的约束

目录 理解表的约束和操作 如何理解&#xff1f; 1、空属性null 2、默认值default 3、列描述comment 4、自动填充zorefill 5、主键primary key &#xff08;1&#xff09;创建表时指定可以 &#xff08;2&#xff09;创建表后指定key &#xff08;3&#xff09;删除主…

注册函数和回调函数使用讲解

1.概念 注册和回调函数在C语言编程中非常常见&#xff0c;也经常用到。注册和回调的机制也大量使用在Linux内核中。学会使用注册和回调函数是C语言开发者应当掌握的一项编程技能。 函数的本质在内存上体现的是地址。我们知道函数的地址后&#xff0c;就能够调用这个函数。 …

ESP32移植Openharmony外设篇(1)MQ-2烟雾传感器

外设篇 实验箱介绍 旗舰版实验箱由2部分组成&#xff1a;鸿蒙外设模块&#xff08;支持同时8个工作&#xff09;、鸿蒙平板。 其中&#xff0c;鸿蒙平板默认采用RK3566方案。 OpenHarmony外设模块采用底板传感器拓展板方式&#xff0c;底板默认采用ESP32方案&#xff0c;也…

部署Qwen2.5-7b大模型详解

部署Qwen2.5-7b大模型详解 本文参考教程&#xff1a;https://qwen.readthedocs.io/en/latest/getting_started/quickstart.html 下载模型 https://modelscope.cn/organization/qwen 搜索 qwen2.5-7b 可以看到它提供了六个模型&#xff0c;以满足不同的需求&#xff0c;从下…

HBuilder X中搭建Vue-cli项目组件和路由以及UI库使用(二)

一、创建组件 &#xff08;1&#xff09;在vj1项目src|右键|vue文件 &#xff08;2&#xff09;组件常用模版 <!--该标签用于写HTML代码,必须有一个根标签,如下<div>是根标签--> <template> <div>首页</div> </template><!--该标签用…

c++算法第3天

本篇文章包含三道算法题&#xff0c;难度由浅入深&#xff0c;适合新手练习哟 目录 第一题 题目链接 题目解析 代码原理 代码编写 本题总结 第二题 题目链接 题目解析 代码原理 代码编写 第三题 题目链接 题目解析 代码原理 代码编写 第一题 题目链接 [NOIP2…

【word】页眉横线无法取消

小伙伴们日常想在页眉里加横线&#xff0c;直接双击页眉&#xff0c;然后在页眉横线里选择自己喜欢的横线样式就可以了。 但今天我遇到的这个比较奇特&#xff0c;有些页有这个横线&#xff0c;有些页没有&#xff0c;就很奇怪。 最后排查完&#xff0c;发现是只有标题2的页…

拓数派创始人冯雷出席联合国人居署《未来城市顾问展望2024》 报告结题专家会

近日&#xff0c;联合国人居署中国未来城市顾问委员会在内蒙古鄂尔多斯市国际会展中心召开《未来城市顾问展望2024&#xff1a;数字城市治理》报告结题会暨走进鄂尔多斯市活动。拓数派创始人、董事长兼首席执行官冯雷&#xff08;Ray Von&#xff09;应邀出席本次活动&#xff…

《计算机视觉》—— 疲劳检测

文章目录 一、疲劳检测实现的思想二、代码实现 一、疲劳检测实现的思想 了解以下几篇文章有助于了解疲劳检测的方法 基于dlib库的人脸检测 https://blog.csdn.net/weixin_73504499/article/details/142977202?spm1001.2014.3001.5501 基于dlib库的人脸关键点定位 https://blo…

个人博客搭建 | Hexo框架

文章目录 1.Hexo安装2.创建博客3.将博客通过GitHub来部署4.更换主题 1.Hexo安装 Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&#xff08;或其他标记语言&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。搭建Hexo首先要…

基于vue框架的的大连金州红星社区物业管理系统dg6co(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;楼栋信息,住户,社区投诉,设备报修,报修完成,车位信息,缴费信息,房屋信息,维修工,保安,来访人员,缴费申诉,公共设备,设备类型,消防设备,公共场地 开题报告内容 基于Vue框架的大连金州红星社区物业管理系统的设计与实现开题报告 一、研究…

如果使用 Iptables 配置端口转发 ?

现实生活中&#xff0c;港口转发就像在一个大型公寓大楼里告诉送货司机该去哪里。通常情况下&#xff0c;该建筑群的正门是不对外开放的。但如果里面有人想要快递&#xff0c;他们可以告诉保安让司机进来&#xff0c;并指引他们到特定的公寓。 类似地&#xff0c;在计算机网络…

Android复杂问题分析工具bugreportz详解

文章目录 bugreportz详细介绍功能与作用使用方法生成详细报告检查进度bugreportz 的优势分析报告 如何分析1. 解压 ZIP 文件2. 分析主要文件2.1 bugreport.txt2.2 logcat.txt2.3 kernel.log / last_kmsg2.4 events.log2.5 traces.txt2.6 dumpstate_board.txt 3. 工具支持4. 重点…