当前位置: 首页 > 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…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...