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

news2025/1/13 10:26:13

这里写目录标题

      • 利用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"])

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

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

相关文章

无人机之喊话器的用途

无人机喊话器,俗称无人机扬声器,其用途广泛且多样化,主要体现在以下几个方面: 一、应急救援与指挥 紧急响应与指挥:在自然灾害(如山洪、火灾、地震等)或突发事件发生时,无人机搭载喊…

iOS App上架审核被拒——2.3.3 - Performance - Accurate Metadata

iOS上架审核被拒——Guideline 2.3.3 - Performance - Accurate Metadata 噢,又被拒了… 文章目录 iOS上架审核被拒——Guideline 2.3.3 - Performance - Accurate Metadata被拒原因解决 被拒原因 大概翻译了下:预览图问题,只因某张预览图加了…

前端开发攻略---在Vue3项目中修改Element-Plus主题色

1、演示 2、安装依赖 npm i use-element-plus-theme -d 3、使用 import { useElementPlusTheme } from use-element-plus-theme const { changeTheme } useElementPlusTheme()const changePrimaryColor () > {// 传入颜色changeTheme(red) } 4、演示代码 <templa…

[godot] 采用状态机时,如何处理攻击时移动?如“冲撞”

这里以‘史莱姆撞击’为例子&#xff0c;将‘空中跃进’定义为伤害帧。&#xff08;见下图&#xff09; 先梳理流程&#xff1a;a.史莱姆原地蓄力(起跳准备)--->b.跳起并移动一段距离(空中跃进)--->c.落地调整 一 当状态机进入‘攻击状态’时&#xff0c;在enter()中…

day40——数据库 sqlite3

1 安装sqlite3数据库以及sqlite3函数库 1&#xff1a;sudo apt install sqlite3 //安装数据库 2&#xff1a;sudo apt install libsqlite3-dev // 安装数据库的函数库 2 什么是数据库 一种存放数据的文件&#xff0c;但是该文件拥有特殊的结构 第一层结构&#xff1a;数据…

存储数据(常量)

常量&#xff1a;用来存储数据&#xff08;不可变&#xff09; 常量不能修改 //常量 const PI:number 3.14 const Name: string "啦啦啦" console.log(名字,Name) console.log(π等于,PI)前面带 后面不带&#xff0c;不然就是打印字符串了

PHPShort轻量级网址缩短程序源码开心版,内含汉化包

需要网址缩短并且想获得更多有关链接点击率和流量的数据分析&#xff0c;那么 PHPShort 可能是一个非常好的选择。PHPShort 是一款高级的 URL 缩短器平台&#xff0c;可以帮助你轻松地缩短链接&#xff0c;并根据受众群体的位置或平台来定位受众。 该程序基于 Laravel 框架编写…

算法——不得不磕!

OK,首先一个小问题——你知道国际大厂通用的筛人方法是什么吗&#xff1f;...... 只有两个&#xff1a; ①算法 Algorithm ②系统设计 SystemDesign 如果你在美国、加拿大&#xff0c;是应届生想找份工作&#xff0c;那么你其它什么都不用考&#xff0c;单单只考算法就够了。至…

科研绘图系列:Python语言时间趋势图

介绍 不同指标在时间上的变化,可以用时间序列线图表示趋势。 加载Python包 import sys import pandas as pd import numpy as np import scipy as sp from scipy import stats import randomimport seaborn as sns import matplotlib.pyplot as plt from matplotl

JavaScript(30)——解构

数组解构 数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法 基本语法&#xff1a; 赋值运算符左侧的[]用于批量声明变量&#xff0c;右侧数组的单元值将被赋值给左侧变量变量的顺序对应数组单元值的位置依次进行赋值操作 const arr [1, 2, 3, 4, 5]const [a, b…

教育部-华为产学合作协同育人项目 | 仓颉编程语言专项

为响应《教育部高等教育司关于调整产学合作协同育人项目运行模式及征集2024年产学合作协同育人项目的通知》号召&#xff0c;华为公司2024年第二批70个项目已发布&#xff0c;其中仓颉编程语言领域共计10个项目&#xff0c;如下所示&#xff0c;通过新工科建设项目&#xff0c;…

Apache CloudStack Official Document 翻译节选(六)

关于 Apache CloudStack 的 概念和专用术语 &#xff08;六&#xff09; Multi-Site Deployment Apache CloudStack可以通过使用多个专职地带&#xff08;即多数据中心&#xff09;扩展为多局点模式。下面的示意图就是一个多局点部署Apache CloudStack的示例。 下图中的数据中…

Linux 软件编程多路复用tcp

1.select的缺点&#xff1a; 1.select监听的文件描述符集合是一个数组&#xff0c;有上限&#xff08;1024个&#xff09; 2.select监听的文件描述符集合在应用层&#xff0c;内核层监听事件后需要传递给用户层带来资源开销 3.select需要用户手动查找产生事件的文件…

Vim youcompleteme Windows 安装保姆级教程

不说废话。 准备 检查 Vim 的 Python 配置 安装好 vim 和 python 后&#xff08;python 必须 ≥ \ge ≥ 3.6&#xff09;&#xff0c;在 cmd 下运行 vim --version会弹出以下窗口。 如果发现 python/dyn 和 python3/dyn 都是 - &#xff08;我不知道只有前者是 能不能运行…

解决nvm切换node版本不成功的问题(包含全网最正确最齐全的nvm安装配置,全网最细最有用的一篇)

废话前言&#xff1a; 因为现在已经接近实习尾声&#xff0c;我已经没有什么事可干了&#xff0c;于是我就从java后端和python转回前端&#xff0c;开始准备写写前端项目 但是当我重新打开那尘封已久的后端项目的时候&#xff0c;有些是之前GitHub拉去下来的vue项目&#xff0…

【I/O多路复用】

基于I/O多路复用的并发编程 I/O实现I/O多路复用select优缺点 pollepoll优点 I/O I/O复用是基于一个单进程或单线程的一个执行流当中监控多个输入输出流的技术&#xff08;网络套接字或者文件描述符进行监控&#xff09;。单进程或单线程&#xff0c;允许多个用户对单进程发起连…

virtualbox从u盘启动

1.添加到vboxusers用户组 sudo usermod -G vboxusers -a whoami 2.为u盘设备添加访问权限&#xff0c;注意替换对应的设备文件&#xff0c;我这里是/dev/sdf sudo chmod orw /dev/sdf 3.为u盘创建一个虚拟的硬盘镜像 sudo VBoxManage internalcommands createrawvmdk -fi…

Unity Protobuf3 GC 问题(反序列化)

背景&#xff1a;Unity接入的是 Google Protobuf 3.21.12 版本&#xff0c;排查下来反序列化过程中的一些GC点&#xff0c;处理了几个严重的&#xff0c;网上也有一些分析&#xff0c;这里就不一一展开&#xff0c;默认读者已经略知一二了。 如果下面有任何问题请评论区留言提…

Java开发笔记-mysql语句查询指定索引

今天同事遇到一个奇怪的sql查询的问题&#xff1a;一条sql有时候执行素的很快(0.xxs)&#xff0c;有时候执行很慢(20s)&#xff0c;不知道是什么问题. 猜测&#xff1a;1、是不是第一次执行&#xff0c;被mysql缓存了&#xff1f;后面几次直接拿缓存的结果。 2、是不是网络的原…

入门redis

一、安装redis-py库 打开pycharm 在终端中输入 pip install redis 二、连接到redis服务器 import redis r redis.Redis(hostlocalhost, port6379, db0, decode_responsesTrue)host是 Redis 服务器的主机名或 IP 地址&#xff0c;port是端口号&#xff0c;db是要使用的数据库编…