langChain实战篇——简单的理解与使用

3,223 阅读5分钟

前言-- langchain的介绍(from langchain官方文档)

LangChain是一个用于开发由语言模型支持的应用程序的框架。它使应用程序能够:

  • 具有上下文感知能力:将语言模型连接到上下文源(提示说明、一些镜头示例、响应的内容等)
  • Reason:依靠语言模型进行推理(关于如何根据提供的上下文进行回答、采取什么操作等)

该框架由几个部分组成。

  • LangChain 库:Python 和 JavaScript 库。包含无数组件的接口和集成、将这些组件组合成链和代理的基本运行时,以及链和代理的现成实现。
  • LangChain 模板:一系列易于部署的参考架构,适用于各种任务。
  • LangServe:用于将 LangChain 链部署为 REST API 的库。
  • LangSmith:一个开发者平台,可让您调试、测试、评估和监控基于任何 LLM 框架构建的链,并与 LangChain 无缝集成。

LangChain包的主要价值道具有:

  1. 组件:用于处理语言模型的可组合工具和集成。无论您是否使用 LangChain 框架的其余部分,组件都是模块化且易于使用的
  2. 现成的链:用于完成更高级别任务的内置组件组合

现成的连锁店让您可以轻松上手。组件使定制现有链和构建新链变得容易。

LangChain 库本身由几个不同的包组成。

  • langchain-core:基础抽象和LangChain表达式语言。
  • langchain-community:第三方集成。
  • langchain:构成应用程序认知架构的链、代理和检索策略。

项目实战--童年零食大全(不大全版)

安排.jpeg

我使用的是colab.google平台。

首先引入 sqlite3

import sqlite3
  • 什么是 sqlite3?

SQLite3 是一种轻量级的关系型数据库管理系统 (RDBMS)。

以下是一些关于 SQLite3 的特点和信息:

  1. 无服务器: SQLite3 是一种无服务器数据库引擎,这意味着它不需要单独的服务器进程来运行,而是直接访问存储在文件中的数据库。
  2. 零配置: 在使用 SQLite3 时,不需要进行复杂的配置或管理,因为它是一个自包含的库,可以直接嵌入到应用程序中。
  3. 单一数据库文件: 整个数据库存储在一个单一的文件中,这使得备份、复制和移动数据库非常方便。
  4. 跨平台: SQLite3 是跨平台的,可以在多种操作系统上运行,包括 Windows、Linux 和 macOS。
  5. 轻量级: SQLite3 的设计目标之一是保持足够的轻量级,以便在资源受限的环境中使用,例如嵌入式系统或移动设备。
  6. 支持 SQL 标准: SQLite3 遵循 SQL 标准,并提供了许多标准的 SQL 功能,包括事务、触发器、视图等。
  7. 自动类型转换: SQLite3 具有自动类型转换功能,可以在不显式转换的情况下处理不同数据类型之间的操作。
  8. 开源: SQLite3 是开源的,使用它不需要支付任何费用,且具有广泛的用户社区支持。

由于其轻量级和易于使用的特性,SQLite3 在许多应用程序中得到广泛使用,特别是在嵌入式系统、移动应用和小型桌面应用中。

# 连接数据库,拿到句柄 SnackShop.db
# 创建一个新的数据库文件
conn = sqlite3.connect('SnackShop.db')
# 创建游标对象
# `sqlite3` 模块的 `connect` 函数创建一个与名为 'SnackShop.db' 的 SQLite3 数据库文件的连接。
# 如果该文件不存在,它将被创建。如果文件已存在,它将连接到现有文件。
cursor = conn.cursor() 
# 在使用 SQLite3(或其他数据库库)时,`cursor` 是一个用于执行 SQL 查询和操作的对象。
cursor.execute('''
  CREATE TABLE Snacks(
      ID INTEGER PRIMARY KEY,
      Name TEXT NOT NULL,
      Type TEXT NOT NULL,
      Source TEXT NOT NULL,
      PurchasePrice REAL,
      SalePrice REAL,
      StockQuantity INTEGER,
      SoldQuantity INTEGER,
      ExpiryDate DATE,
      Description TEXT,
      EntryDate DATE DEFAULT CURRENT_DATE
  );
''')
snacks = [ ('西瓜泡泡糖', 'Snack', 'Jiangxi', 0.05, 0.1, 100, 10, '2023-12-31', '西瓜泡泡糖口感软糯,甜蜜可口,吃起来就像吃西瓜一样。'), 
('咪咪', 'Snack2', 'Hunan', 0.3, 0.5, 150, 25, '2023-12-31', '虾味的咪咪,鲜香酥脆,电视机前我能吃一天'), 
('无花果', 'Snack3', 'Hebei', 0.4, 0.5, 80, 5, '2023-12-31', '将萝卜切成丝后,用糖和面粉调成糊状,裹上薄薄的皮,最后炸成金黄酥脆的零食'), 
('唐僧肉', 'Snack4', 'Beijing', 0.7, 1, 120, 15, '2023-12-31', '它不仅只是普通的面食,而是一种长生不老的象征'),
 ('小浣熊', 'Snack5', 'Sichuan', 2.0, 4.0, 50, 2, '2023-12-31', '我不信有人没吃过小浣熊')]
for snack in snacks:
  cursor.execute('''
    INSERT INTO Snacks(Name, Type, Source, PurchasePrice, SalePrice, StockQuantity, SoldQuantity, ExpiryDate, Description )
    VALUES (?,?,?,?,?,?,?,?,?);
  ''', snack)
  # 提交事务 确认
  conn.commit()

  conn.close
!pip install openai==0.28.1
# 工具库里有数据库这个工具,整合各种数据库
from langchain.utilities import SQLDatabase
from langchain.llms import OpenAI
# langchain chain 链式组合各种AI组件
from langchain_experimental.sql import SQLDatabaseChain
# 读取文件, sqlite 协议
db = SQLDatabase.from_uri("sqlite:///SnackShop.db")
# 大模型
llm = OpenAI(temperature=0, verbose=True, api_key='请输入你的openai  key')
# 链起来
db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)
response = db_chain.run("有多少种不同的零食?")
print(response)

输出如下:

image.png

让我们一起来多试几次吧!

response = db_chain.run("都有哪些零食?")
print(response);

image.png

image.png

image.png

快一起去试试吧!!!

吃.webp