当前位置: 首页 > news >正文

【大模型从入门到精通34】开源库框架LangChain 利用LangChain构建聊天机器人1

这里写目录标题

      • 利用LangChain构建聊天机器人
        • 介绍
        • 介绍对话型聊天机器人
        • 构建环境
          • 环境变量和平台设置
        • 加载文档和创建向量存储
        • 高级检索技术
        • 对话上下文和记忆
          • 纳入聊天历史
          • 会话缓冲内存
        • 构建对话检索链
        • 环境设置与API密钥配置
        • 选择合适的语言模型版本
        • Q&A系统设置

在这里插入图片描述

利用LangChain构建聊天机器人

介绍

本章深入探讨了使用LangChain构建和优化对话型聊天机器人的方法。LangChain是一款旨在将语言模型与数据检索系统相结合以实现动态问题解答能力的工具。本章面向机器学习工程师、数据科学家、软件开发者以及相关领域的专业人士,提供了一个全面的指南,帮助开发能够处理后续问题并保持情境对话的聊天机器人。

介绍对话型聊天机器人

对话型聊天机器人已经彻底改变了我们与技术互动的方式,通过自然语言对话为我们提供了获取和处理信息的新途径。与传统聊天机器人不同的是,对话型聊天机器人能够理解和记住对话的上下文,使交互更加自然流畅。

构建环境
环境变量和平台设置

在深入聊天机器人开发之前,配置工作环境至关重要。这包括加载必要的环境变量,并确保平台已经正确设置以支持整个开发流程。从一开始就启动平台有助于开发者监控系统的内部运作,便于调试和优化。

加载文档和创建向量存储

第一步涉及到使用LangChain的文档加载器从多种来源加载文档,这些加载器支持超过80种不同的格式。加载文档后,将其分割成可管理的片段。这些片段随后转换为嵌入,并存储在一个向量存储中,以实现语义搜索功能。

高级检索技术

设置好向量存储之后,重点转向检索方法。本节探索各种高级检索算法,以增强聊天机器人准确理解并回应查询的能力。讨论的技术包括自我查询、压缩和语义搜索等,强调其模块化特性以及如何将其整合进聊天机器人框架中。

对话上下文和记忆
纳入聊天历史

对话型聊天机器人的一个重要进步是能够将聊天历史纳入响应生成过程中。这项能力让聊天机器人能够在对话过程中维持上下文,使其能够准确理解并回应后续问题。

会话缓冲内存

实施会话缓冲内存包括维护之前的聊天消息列表,并将这些消息与新问题一起传递给聊天机器人。本节提供逐步指导,包括如何设置内存键以及如何将聊天历史作为消息列表处理。

构建对话检索链

对话检索链代表了聊天机器人功能的核心部分。它集成了语言模型、检索系统和记忆,以在持续的对话上下文中处理和回应用户提问。本节详细介绍构建对话检索链的过程,包括如何引入语言模型、检索器和记忆组件。

环境设置与API密钥配置

首先,正确设置环境并安全处理API密钥对于访问如OpenAI的GPT模型等云基语言模型服务至关重要。

# 导入必要的库以管理和访问环境变量及API
import os
from dotenv import load_dotenv, find_dotenv# 确保Panel GUI库正确导入和初始化,以便于交互式应用
import panel as pn
pn.extension()# 加载.env文件以安全地访问环境变量,包括OpenAI API密钥
_ = load_dotenv(find_dotenv())# 从环境变量中分配OpenAI API密钥以认证API请求
openai.api_key = os.environ['OPENAI_API_KEY']
选择合适的语言模型版本
# 导入datetime库以管理基于日期的逻辑用于模型选择
import datetime# 确定当前日期以决定语言模型版本
current_date = datetime.datetime.now().date()# 选择语言模型版本
language_model_version = "gpt-3.5-turbo"# 显示选定的语言模型版本
print(language_model_version)
Q&A系统设置
# 导入必要的库以处理嵌入和向量存储
from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddings# 设置环境变量以访问LangChain API
# 注意:将'your_directory_path'替换为你打算存储文档嵌入的实际目录路径,
# 并将'your_api_key'替换为你的实际LangChain API密钥以进行身份验证
persist_directory = 'your_directory_path/'
embedding_function = OpenAIEmbeddings()
vector_database = Chroma(persist_directory=persist_directory, embedding_function=embedding_function)# 定义一个问题以查找相关的文档
search_question = "本课程涵盖的关键主题有哪些?"
# 进行相似性搜索以找到与问题最相关的前三份文档
top_documents = vector_database.similarity_search(search_question, k=3)# 确定找到的文档数量
number_of_documents = len(top_documents)
print(f"找到的相关文档数量: {number_of_documents}")# 导入LangChain的Chat模型以生成响应
from langchain.chat_models import ChatOpenAI# 初始化语言模型以进行聊天,设置模型温度为0以获得确定性的响应
language_model = ChatOpenAI(model_name='gpt-3.5-turbo', temperature=0)  # 确保替换为你的模型# 生成简单问候响应的例子
greeting_response = language_model.predict("宇宙你好!")
print(greeting_response)# 构建用于结构化问题解答的提示模板
from langchain.prompts import PromptTemplate# 定义一个模板,指示如何使用给定的上下文提供简洁且有帮助的回答
prompt_template = """
使用下列上下文来回答最后的问题。如果你不确定答案,请明确表示而不是猜测。
尝试让你的回答控制在三句话以内以保持清晰和简洁。
结束你的回答时说“谢谢你的提问!”以保持礼貌的语气。上下文: {context}
问题: {question}
有帮助的回答:
"""# 初始化PromptTemplate对象,指定输入变量和定义的模板
qa_prompt_template = PromptTemplate(input_variables=["context", "question"], template=prompt_template)# 运行对话检索和问题解答链
from langchain.chains import RetrievalQA# 定义一个具体的问题以在对话上下文中得到解答
specific_question = "本课程是否需要理解概率?"# 初始化QA链,包括语言模型、向量数据库作为检索器和自定义提示模板
qa_chain = RetrievalQA.from_chain_type(language_model,retriever=vector_database.as_retriever(),return_source_documents=True,chain_type_kwargs={"prompt": qa_prompt_template})# 执行QA链以获取结构化且有帮助的回答
qa_result = qa_chain({"query": specific_question})# 输出QA链的结果回答
print("结果回答:", qa_result["result"])

相关文章:

【大模型从入门到精通34】开源库框架LangChain 利用LangChain构建聊天机器人1

这里写目录标题 利用LangChain构建聊天机器人介绍介绍对话型聊天机器人构建环境环境变量和平台设置 加载文档和创建向量存储高级检索技术对话上下文和记忆纳入聊天历史会话缓冲内存 构建对话检索链环境设置与API密钥配置选择合适的语言模型版本Q&A系统设置 利用LangChain构…...

魔法糖果工厂

LYA 是一家魔法糖果工厂的新任管理员。工厂生产的魔法糖果有七种颜色,分别用字母 a、b、c、d、e、f、g 表示。这些糖果被排列在一条传送带上,准备进行包装。为了提高效率,工厂引进了一台智能包装机器人。这个机器人可以按照预设的指令序列来包…...

NVM安装管理node.js版本(简单易懂)

一、前言 1.1 简介 NVM(Node Version Manager)是 node.js 的版本管理器,用 shell 脚本切换机器中不同版本的 nodejs。 Nodejs为什么需要多个版本? 有经验的开发者可能遇到过,某个依赖包明确nodejs是某个版本&#…...

第1章-04-Chrome及Chrome Driver安装及测试

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师&am…...

【Linux】SSH 隧道转发场景搭建

ssh建立隧道转发 A设备:没有公网IP地址的本地设备,如本地内网服务器(需要能通公网) B设备:有公网IP地址的服务器,可以是云服务器 C设备:终端设备,想通过公网服务器B访问到设备A 要…...

前后端部署-服务器linux中安装数据库Mysql8

一、登录Xshell7 && 开放Mysql 3306端口, Redis 6379 端口 二、手动部署MySQL数据库 1.运行以下命令,更新YUM源。 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm 2.运行以下命令,安装My…...

如何使用jd-gui对springboot源码进行分析

背景: 最近在学习springboot的过滤器和拦截器,想了解一下过滤器和拦截器是怎么匹配URL的,在网上搜了半天都搜不到针对源码的,网上大部分内容都是说怎么配置过滤器和拦截器,怎么使用,并没有对源码进行分析的…...

原来ChatGPT是这么评价《黑神话:悟空》的啊?

《黑神话:悟空》一经上线便迅速吸引了全球的目光,成为了今日微博热搜榜上的焦点话题。作为中国首款现象级的中国3A大作,它的发布无疑引发了广泛的关注与讨论。 《黑神话:悟空》,这款3A国产游戏大作,由国内游…...

C语言第17篇

1.在C语言中,全局变量的存储类别是_________. A) static B) extern C) void D) register 提示:extern adj.外来的 register n.登记表,v.登记 提示与本题无关 2.在一个C源程序文件中,要定义一个只允许本源文件中所有函数使用的全局变…...

Springboot+vue实现webScoket

需求 因为在做的项目中,有多个网站登录同一个用户,故想在某一个页面登录或者退出的时候,对其他页面进行相同的操作 跨域,跨页面,跨项目,跨标签页,https 因为一开始不像麻烦后端,所以…...

CSS知识点详解:display+float

display:浮动 1.block:使元素呈现为块级元素,可设置宽高 display: block; 特点:使元素呈现为块级元素,即该元素会以新行开始,占据整行的宽度,即使其宽度未满。 例子: 2.inline&a…...

ant design pro v6 如何做好角色管理

先上图: 整个角色管理是如何做的吗? 首先你要处理后端,要先把角色存到用户那。 这是用户管理部分的内容: 可以看到一个用户是有多个角色的。 看到没有,存的是数组 数组的是一个 role 对象 role 对象是这样&#xf…...

C++ 设计模式(3. 抽象工厂模式)

抽象工厂模式也是一种创建型设计模式,提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类【引用自大话设计模式第15章】基本结构 抽象工厂模式包含多个抽象产品接口,多个具体产品类,一个抽象工厂接口和多个具体…...

【PHP入门教程】PHPStudy环境搭建+HelloWorld运行

文章目录 PHP 的历史PHP 的用途PHP 的特点和优势PHP 环境搭建环境准备安装window 安装CentOS / Ubuntu / Debian 安装 第一个Hello World使用Apache服务运行命令行运行代码 PHP 的历史 PHP(Hypertext Preprocessor)超文本预处理器是一种开源的通用脚本语…...

补 0 输出。

题目描述 输入一个整数,请在整数前面补 00 补足 88 位后输出。 输入描述 输入一行包含一个整数 nn。 输出描述 输出补00后的整数。 输入输出样例 示例1 输入 2021输出 00002021示例2 输入 202110输出 00202110 import os import sys# 请在此输入您的代码 si…...

因为嫌吵,在自己家也用上了远程控制电脑

加班嘛,赶稿嘛,参加工作的人都懂那种无形的压力和烦躁。 因为家里空间有限,我平常都是直接在客厅用台式电脑加急改写方案,但今天晚上家里来了几位叔,他们边吃饭边聊着秦始皇的话题,都70多分钟了&#xff0c…...

vue---echarts环形图

1、完整代码直接可以cv <template><div id"main1"></div> </template><script> import * as echarts from echarts; // import { mapState } from vuex; // import { Alarm_Device } from ../utils/api.js; export default {name: P…...

克服编程挫折:从Bug的迷宫中寻找出口与面对算法保持冷静的策略

在编程学习的道路上&#xff0c;挫折感无疑是每个学习者都必须面对的挑战之一。它们仿佛是一座座高墙&#xff0c;阻挡我们前进的步伐。然而&#xff0c;正如许多有经验的编程高手所证明的那样&#xff0c;挫折并不是终点&#xff0c;而是成长和进步的催化剂。本文将分享一些有…...

Flink之SQL client使用案例

Flink的执行模式有以下三种: 前提是我们已经开启了yarnsession的进程&#xff0c;在下图中可以看到启动的id也就是后续任务需要通过此id进行认证&#xff0c;以及任务分配的master主机。 这里启动时候会报错一个ERROR&#xff1a;org.apache.flink.shaded.curator.org.apache…...

实际开发中的模块化开发 - 应用到直播间

实际开发中的模块化开发 - 模块管理&#xff08;以直播间为例&#xff09;-CSDN博客 引言 在前面的两篇博客中&#xff0c;我们已经介绍了直播模块的简单结构&#xff0c;创建了模块管理器和模块抽象基类&#xff0c;并且通过模块化实现了两个小业务功能模块。接下来&#xf…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

验证redis数据结构

一、功能验证 1.验证redis的数据结构&#xff08;如字符串、列表、哈希、集合、有序集合等&#xff09;是否按照预期工作。 2、常见的数据结构验证方法&#xff1a; ①字符串&#xff08;string&#xff09; 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...