LangChain教程 – 如何构建自定义知识聊天机器人

news2024/9/29 19:19:10

您可能已经了解到过去几个月发布的大量 AI 应用程序。您甚至可能已经开始使用其中的一些。

ChatPDF和CustomGPT AI等 AI 工具已经对人们变得非常有用——这是有充分理由的。您需要滚动浏览 50 页文档才能找到简单答案的日子已经一去不复返了。相反,您可以依靠 AI 来完成繁重的工作。

但是这些开发人员究竟是如何创建和使用这些工具的呢?好吧,他们中的许多人都在使用一个名为 LangChain 的开源框架。

在本文中,我将向您介绍 LangChain,并向您展示如何将其与 OpenAI 的 API 结合使用来创建这些改变游戏规则的工具。希望我能激发你们中的一员提出自己的想法。让我们开始吧!

(人工智能教程:java567.com/search.html?sWord=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&v=2306035)

浪链是什么?

截图-2023-05-29-at-5.40.38-PM

LangChain是一个开源框架,允许 AI 开发人员将 GPT-4 等大型语言模型 (LLM) 与外部数据相结合。它以 Python 或 JavaScript (TypeScript) 包的形式提供。

如您所知,GPT 模型一直在 2021 年之前接受数据训练,这可能是一个重大限制。虽然这些模型的常识很丰富,但能够将它们连接到自定义数据和计算会打开许多大门。这正是 LangChain 所做的。

从本质上讲,它允许您的 LLM 在得出答案时参考整个数据库。因此,您现在可以让 GPT 模型以报告、文档和网站信息的形式访问最新数据。

最近,LangChain 的人气大幅飙升,尤其是在 3 月份推出 GPT-4 之后。这要归功于它的多功能性以及与强大的 LLM 搭配使用时打开的许多可能性。

LangChain 如何运作?

虽然您可能认为 LangChain 听起来很复杂,但实际上它很容易上手。

简而言之,LangChain 只是将大量数据组合在一起,LLM 可以使用尽可能少的计算能力轻松引用这些数据。它的工作原理是获取大量数据源,例如 50 页的 PDF,并将其分解为“块”,然后嵌入到 Vector Store 中。

------朗链创建向量存储的简单示意图

现在我们已经有了大型文档的矢量化表示,我们可以将其与 LLM 结合使用,以仅检索在创建提示-完成对时需要引用的信息。

当我们在新的聊天机器人中插入提示时,LangChain 将查询 Vector Store 以获取相关信息。将其视为您文档的迷你 Google。检索到相关信息后,我们会将其与提示一起提供给 LLM 以生成我们的答案。

字节大小缩略图--1200---800-px---10-LangChain 如何与 OpenAI 的 LLM 合作

LangChain 还允许您创建可以执行操作的应用程序——例如上网冲浪、发送电子邮件和完成其他与 API 相关的任务。查看AgentGPT,这是一个很好的例子。

这有很多可能的用例——这里只是我想到的几个:

  • 个人 AI 邮件助理
  • 人工智能学习伙伴
  • 人工智能数据分析
  • 定制公司客户服务聊天机器人
  • 社交媒体内容创作助理

而这样的例子不胜枚举。我将在以后的文章中介绍正确的构建教程,敬请期待。

如何开始使用朗链

LangChain 应用程序由 5 个主要组件组成:

  1. 模型(LLM 包装器)
  2. 提示
  3. 链条
  4. 嵌入和向量存储
  5. 代理商

我将为您提供每一个的概述,以便您可以更深入地了解 LangChain 的工作原理。展望未来,您应该能够应用这些概念来开始制作您自己的用例并创建您自己的应用程序。

我将使用来自 Rabbitmetrics的简短代码片段来解释所有内容。他提供了有关此主题的精彩教程。这些片段应该可以让您完成所有设置并准备好使用 LangChain。

首先,让我们设置环境。您可以 pip 安装 3 个您需要的库:

 pip install -r requirements.txt
 python-dotenv==1.0.0
 langchain==0.0.137
 pinecone-client==2.2.1

Pinecone是我们将与 LangChain 结合使用的 Vector Store。有了这些,确保将 OpenAI、Pinecone Environment 和 Pinecone API 的 API 密钥存储到环境文件中。您将能够在他们各自的网站上找到此信息。然后我们只需使用以下内容加载该环境文件:

 # Load environment variables
 ​
 from dotenv import load_dotenv,find_dotenv
 load_dotenv(find_dotenv())

现在,我们准备开始了!

模型(LLM 包装器)

为了与我们的 LLM 交互,我们将为 OpenAI 的 GPT 模型实例化一个包装器。在这种情况下,我们将使用 OpenAI 的 GPT-3.5-turbo,因为它最具成本效益。但是,如果您可以访问,请随意使用更强大的 GPT4。

要导入这些,我们可以使用以下代码:

 # import schema for chat messages and ChatOpenAI in order to query chatmodels GPT-3.5-turbo or GPT-4
 ​
 from langchain.schema import (
     AIMessage,
     HumanMessage,
     SystemMessage
 )
 from langchain.chat_models import ChatOpenAI
      
 ​
 chat = ChatOpenAI(model_name="gpt-3.5-turbo",temperature=0.3)
 messages = [
     SystemMessage(content="You are an expert data scientist"),
     HumanMessage(content="Write a Python script that trains a neural network on simulated data ")
 ]
 response=chat(messages)
 ​
 print(response.content,end='\n')
      

本质上,SystemMessage 为 GPT-3.5-turbo 模块提供上下文,它将为每个提示完成对引用该模块。HumanMessage 指的是您将在 ChatGPT 界面中键入的内容——您的提示。

但是使用自定义知识聊天机器人,我们通常会抽象出提示中重复的部分。例如,如果我正在创建一个推文生成器应用程序,我不想一直输入“给我写一条关于…的推文”。其实AI写作工具就是这么简单开发出来的!

因此,让我们看看如何使用提示模板将其抽象出来。

提示

LangChain 提供 PromptTemplates,允许您根据用户输入动态更改提示,类似于正则表达式的使用方式。

 # Import prompt and define PromptTemplate
 ​
 from langchain import PromptTemplate
 ​
 template = """
 You are an expert data scientist with an expertise in building deep learning models. 
 Explain the concept of {concept} in a couple of lines
 """
 ​
 prompt = PromptTemplate(
     input_variables=["concept"],
     template=template,
 )
      
 ​
 # Run LLM with PromptTemplate
 ​
 llm(prompt.format(concept="autoencoder"))
 llm(prompt.format(concept="regularization"))

您可以以不同的方式改变这些以适应您的用例。如果您熟悉使用 ChatGPT,这对您来说应该很舒服。

链条

Chains 允许您使用简单的 PromptTemplates 并在它们之上构建功能。本质上,链就像复合函数,允许您将 PromptTemplates 和 LLM 集成在一起。

使用前面的包装器和 PromptTemplates,我们可以使用采用 PromptTemplate 并将其与 LLM 组合的单个链运行相同的提示:

 # Import LLMChain and define chain with language model and prompt as arguments.
 ​
 from langchain.chains import LLMChain
 chain = LLMChain(llm=llm, prompt=prompt)
 ​
 # Run the chain only specifying the input variable.
 print(chain.run("autoencoder"))
      

最重要的是,顾名思义,我们可以将它们链接在一起以创建更大的组合。

例如,我可以从一个链中获取结果并将其传递到另一个链中。在这个片段中,Rabbitmetrics 从第一个链中获取完成并将其传递到第二个链中以向 5 岁的孩子解释它。

然后,您可以将这些链组合成一个更大的链并运行它。

 # Define a second prompt 
 ​
 second_prompt = PromptTemplate(
     input_variables=["ml_concept"],
     template="Turn the concept description of {ml_concept} and explain it to me like I'm five in 500 words",
 )
 chain_two = LLMChain(llm=llm, prompt=second_prompt)
 ​
 # Define a sequential chain using the two chains above: the second chain takes the output of the first chain as input
 ​
 from langchain.chains import SimpleSequentialChain
 overall_chain = SimpleSequentialChain(chains=[chain, chain_two], verbose=True)
 ​
 # Run the chain specifying only the input variable for the first chain.
 explanation = overall_chain.run("autoencoder")
 print(explanation)

使用链,您可以创建大量功能,这就是 LangChain 如此多才多艺的原因。但它真正出色的地方在于将它与前面讨论的 Vector Store 结合使用。让我们介绍一下那个组件。

嵌入和向量存储

这是我们合并 LangChain 的自定义数据方面的地方。如前所述,嵌入和向量存储背后的想法是将大数据分成块并存储那些在相关时要查询的数据。

LangChain 有一个文本拆分器功能可以做到这一点:

 # Import utility for splitting up texts and split up the explanation given above into document chunks
 ​
 from langchain.text_splitter import RecursiveCharacterTextSplitter
 ​
 text_splitter = RecursiveCharacterTextSplitter(
     chunk_size = 100,
     chunk_overlap  = 0,
 )
 ​
 texts = text_splitter.create_documents([explanation])

拆分文本需要两个参数:一个块有多大(chunk_size)和每个块重叠多少(chunk_overlap)。每个块之间有重叠对于帮助识别相关的相邻块很重要。

这些块中的每一个都可以这样检索:

 texts[0].page_content

在我们有了这些块之后,我们需要将它们变成嵌入。这允许 Vector Store 在查询时查找并返回每个块。我们将使用 OpenAI 的嵌入模型来执行此操作。

 # Import and instantiate OpenAI embeddings
 ​
 from langchain.embeddings import OpenAIEmbeddings
 ​
 embeddings = OpenAIEmbeddings(model_name="ada")
      
 ​
 # Turn the first text chunk into a vector with the embedding
 ​
 query_result = embeddings.embed_query(texts[0].page_content)
 print(query_result)

最后,我们需要有一个地方来存储这些矢量化嵌入。如前所述,我们将为此使用 Pinecone。使用前面环境文件中的 API 密钥,我们可以初始化 Pinecone 来存储我们的嵌入。

 # Import and initialize Pinecone client
 ​
 import os
 import pinecone
 from langchain.vectorstores import Pinecone
 ​
 ​
 pinecone.init(
     api_key=os.getenv('PINECONE_API_KEY'),  
     environment=os.getenv('PINECONE_ENV')  
 )
      
 ​
 # Upload vectors to Pinecone
 ​
 index_name = "langchain-quickstart"
 search = Pinecone.from_documents(texts, embeddings, index_name=index_name)
      
 ​
 # Do a simple vector similarity search
 ​
 query = "What is magical about an autoencoder?"
 result = search.similarity_search(query)
 ​
 print(result)

现在我们可以在我们的松果矢量商店查询相关信息了!剩下要做的就是结合我们学到的知识来创建我们的特定用例——为我们提供专门的 AI“代理”。

代理商

代理本质上是一个自主的人工智能,它接受输入并按顺序完成这些输入,直到达到最终目标。这涉及到我们的 AI 使用其他 API 来完成发送电子邮件或做数学题等任务。与我们的 LLM + 提示链结合使用,我们可以将合适的 AI 应用串在一起。

现在,这部分的解释会很广泛,所以这里有一个简单的例子,说明如何在 LangChain 中使用 Python 代理来解决一个简单的数学问题。在这种情况下,该代理通过连接我们的 LLM 来运行 Python 代码并使用 NumPy 找到根源来解决问题:

 # Import Python REPL tool and instantiate Python agent
 ​
 from langchain.agents.agent_toolkits import create_python_agent
 from langchain.tools.python.tool import PythonREPLTool
 from langchain.python import PythonREPL
 from langchain.llms.openai import OpenAI
 ​
 agent_executor = create_python_agent(
     llm=OpenAI(temperature=0, max_tokens=1000),
     tool=PythonREPLTool(),
     verbose=True
 )
      
 ​
 # Execute the Python agent
 ​
 agent_executor.run("Find the roots (zeros) if the quadratic function 3 * x**2 + 2*x -1")

自定义知识聊天机器人本质上是一个代理,它将查询向量化存储的提示和操作链接在一起,获取结果,并将其与原始问题链接起来!

如果您想有关 AI 代理的信息,这是一个很好的资源。

其他变化

即使您对 LangChain 的功能有了新的基本了解,我相信此时您的想法还在冒泡。

但到目前为止,我们只看过一个 OpenAI 模型,那就是基于文本的 GPT-3.5-turbo。OpenAI 有一系列模型,您可以将它们与 LangChain 一起使用——包括使用 Dall-E 生成图像。应用我们讨论过的相同概念,我们可以创建AI Art Generator代理、Website Builder 代理等等。

花点时间探索 AI 领域,我相信您会开始获得越来越多的想法。

结论

我希望您对所有这些新 AI 工具的幕后工作有了更多的了解。了解 LangChain 的工作原理是当今作为程序员的一项宝贵技能,可以为您的 AI 开发开辟可能性。

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql 9 新特性

mysql9新特性 新特性Audit Log NotesC API NotesCharacter Set SupportCompilation NotesComponent NotesConfiguration NotesData Dictionary NotesData Type NotesDeprecation and Removal NotesEvent Scheduler NotesJavaScript ProgramsOptimizer NotesPerformance Schema …

Linux初始化新的git仓库

1.在git服务器上找到项目常部署的git地址可以根据其他项目的git地址确认 例如ssh://git192.168.10.100/opt/git/repository.git 用户名:git(前面的是用户) 服务器地址:192.168.10.100 git仓库路径:/opt/git/ 2.在服务器…

js 图片放大镜

写购物项目的时候&#xff0c;需要放大图片&#xff0c;这里用js写了一个方法&#xff0c;鼠标悬浮的时候放大当前图片 这个是class写法 <!--* Descripttion: * Author: 苍狼一啸八荒惊* LastEditTime: 2024-07-10 09:41:34* LastEditors: 夜空苍狼啸 --><!DOCTYPE …

IP 地址与 CDN 性能优化

内容分发网络&#xff08;CDN&#xff09;就是通过内容分配到离用户最优的服务器来提高访问速度。而IP地址如何分配与管理就是CND技术的基础。本文将来探讨介绍CDN中的IP地址分配与管理&#xff0c;以及如何通过CDN优化网络性能。 首先我们来了解CDN的基本原理 CDN是一种分布式…

数据库之DML

1&#xff0c;创建表 mysql> create table student(-> id int primary key,-> name varchar(20) not null,-> grade float-> );插入记录 mysql> insert into student values(1,monkey,98.5); Query OK, 1 row affected (0.01 sec)一次性插入多条记录 mysql…

百问网全志D1h开发板MIPI屏适配

MIPI屏适配 100ASK-D1-H_DualDisplay-DevKit V11 1. 显示适配 1.1 修改设备树 1.1.1 修改内核设备树 进入目录&#xff1a; cd /home/ubuntu/tina-d1-h/device/config/chips/d1-h/configs/nezha/linux-5.4修改board.dts: &lcd0 {lcd_used <1>;lcd…

MP | 基于kmer的泛基因组分析方法及应用

2024年5月24日&#xff0c;中国农业大学分子设计育种前沿科学中心作物杂种优势与利用教育部重点实验室郭伟龙与姚颖垠团队在《Molecular Plant》发表了题为《A k-mer-based pangenome approach for cataloging seed-storage-protein genes in wheat to facilitate genotype-to-…

成都云飞浩容文化传媒有限公司怎么样?

在电商行业风起云涌的今天&#xff0c;成都云飞浩容文化传媒有限公司以其独特的视角和专业的服务&#xff0c;成为了这一领域的佼佼者。今天&#xff0c;就让我们一起走进云飞浩容&#xff0c;探索其背后的故事和成功的秘诀。 一、专注电商&#xff0c;用心服务 成都云飞浩容文…

HarmonyOS Next应用开发之系统概述

一、鸿蒙系统概述 鸿蒙系统可以分为华为鸿蒙系统&#xff08;HUAWEI HarmonyOS&#xff09;和开源鸿蒙系统&#xff08;OpenHarmony&#xff09;&#xff0c;华为鸿蒙系统是基于OpenHarmony基础之上开发的商业版操作系统。他们二者的关系可以用下图来表示&#xff1a; 1.1、…

翰德恩咨询赋能材料行业上市公司,共筑IPD管理体系新篇章

赋能背景概览 坐落于江苏的某材料行业领军企业&#xff0c;作为国内无机陶瓷膜元件及成套设备领域的佼佼者&#xff0c;以其庞大的生产规模、丰富的产品系列及卓越的研发实力&#xff0c;屹立行业之巅二十余年。公司不仅在新材料研发、技术创新、工艺设计、设备制造及整体解决…

智能眼镜火热发展 AI+AR或将成为主流趋势?

日前&#xff0c;The Verge 发布消息称&#xff0c;AI 智能音频眼镜 Ray-Ban Meta 的销量可能已突破 100 万。Meta 在博客中也指出&#xff0c;Ray-Ban Meta 取得了超预期的市场表现&#xff0c;眼镜的销售速度比生产速度还要快&#xff0c;目前团队正着手于推出更多新款式。Ra…

【ChatGPT 消费者偏好】第二弹:ChatGPT在日常生活中的使用—推文分享—2024-07-10

今天的推文主题还是【ChatGPT & 消费者偏好】 第一篇&#xff1a;哪些动机因素和技术特征的组合能够导致ChatGPT用户中高和低的持续使用意图。第二篇&#xff1a;用户对ChatGPT的互动性、性能期望、努力期望以及社会影响如何影响他们继续使用这些大型语言模型的意向&#x…

羊大师:暑期不“胖”秘籍:羊奶滋养,细嚼慢咽是关键!

夏日炎炎&#xff0c;假期悠长&#xff0c;如何在享受悠闲时光的同时&#xff0c;保持轻盈体态&#xff0c;成了许多人心中的小秘密。今天&#xff0c;就让我们一起揭秘暑期不“胖”的秘籍&#xff0c;让羊奶的滋养与细嚼慢咽的智慧&#xff0c;成为你美丽夏日的守护神。 羊奶轻…

python学习-类

Python是一门面向对象的编程语言&#xff0c;面向对象编程&#xff08;Object OrientedProgramming&#xff0c;OOP&#xff09;是一种编程思想&#xff0c;它把对象作为程序的基本单元&#xff0c;一个对象可以包裹相应的数据以及操作这些数据的函数。一切皆对象&#xff0c;所…

vscode-server安装和部分配置

文章目录 前言code-server安装rpm包安装tar.gz安装 vscode部分配置vscode配置函数跳转安装插件 vscode的structurevscode的hierarchy更改颜色主题 前言 vscode确实彳亍&#xff0c;虽然我觉得Clion(c/c语言版的IDEA)更方便&#xff0c;但是毕竟我没钱买license 这里记录一下网…

【Numpy】np.loadtxt 读取单行数据时报错。(零维数组)

np.loadtxt 读取单行数据时遇到了报错 代码&#xff1a; import numpy as nplabelPath"./name.names" names np.loadtxt(labelPath, dtypestr)print(names[0])names中的数据&#xff1a; 报错&#xff1a; IndexError: too many indices for array: array is 0-…

标准立项 | 深度脱氨生物填料选型指南

编制单位&#xff1a;北京科净源科技股份有限公司、中国地质大学(北京)、中华环保联合会水环境治理专业委员会、清华大学、北京师范大学、中国环境科学研究院、清华大学、天津高端装备研究院、中车环境科技有限公司、云南滇池水务股份有限公司等。

arm环境安装达梦数据库

作者&#xff1a;振鹭 一、安装前准备 1、创建用户和用户组 groupadd dinstall useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba2、修改文件打开最大数 vi /etc/security/limits.conf #文件末尾添加以下四行 dmdba hard nofile 65536 dmdba soft nofile 65536 d…

图片批量重命名bat,一个脚本快速搞定图片批量重命名

BAT 批处理 是一种在 Microsoft Windows 操作系统中使用的脚本语言&#xff0c;用于自动执行一系列预定义的命令或任务。这些命令集合通常存储在一个文本文件中&#xff0c;文件扩展名为 .bat 或 .cmd。批处理脚本可以包含简单的命令&#xff0c;如文件复制、移动、删除&#x…

OpenShift3.11 社区版搭建

一、资源规划 HostnameIPOSCPUMemDiskmaster192.168.78.131CentOS7.92vCPU4G60Gnode1192.168.78.132CentOS7.92vCPU4G60Gnode2192.168.78.133CentOS7.92vCPU4G60G 二、安装过程&#xff1a; 2.1 前期配置 开启所有节点的 SELinux &#xff08;所有主机执行&#xff09; gr…