将聊天记录与 LangChain 集成:为提升对话机器人体验提供了一种变革性的解决方案

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。


汇总合集

《大模型面试宝典》(2024版) 发布!
《大模型实战宝典》(2024版) 发布!


AI 助手无缝地回忆过去的互动并将它们整合到正在进行的对话中的愿景推动了将聊天记录与LangChain集成,为提升对话人工智能体验提供了一种变革性的解决方案。

在本文中,我们将探讨将聊天记录纳入 LangChain 的复杂性,赋予AI系统利用过去互动获取丰富上下文和连贯性的能力。

通过对定义、好处、代码实现见解的探索,以及前瞻性的展望,我们揭示了这种整合的潜力,以塑造对话人工智能的未来。

技术交流

前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~

我们建了算法岗面试与技术交流群, 想要进交流群、需要源码&资料、提升技术的同学,可以直接加微信号:mlc2040。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。

方式①、微信搜索公众号:机器学习社区,后台回复:技术交流
方式②、添加微信号:mlc2040,备注:技术交流+CSDN

定义

将聊天记录与 LangChain 集成,围绕着赋予AI系统记住过去对话并利用它们来影响当前交互的能力。它涉及将历史消息无缝地融入正在进行的对话中,为用户创造了丰富的交互画面。

整合的好处

将聊天记录与LangChain集成产生了多种好处,彻底改变了对话人工智能的格局:

增强上下文理解:通过利用过去的交互,AI系统能够更深入地理解用户查询,从而提供更加细致和与上下文相关的响应。

提高连贯性:无缝地整合聊天记录有助于在对话中保持连续性,消除了与独立交互经常相关的不连贯性。
个性化用户体验:通过访问历史数据,AI系统可以根据个人用户偏好和过去的交互定制响应,促进更加个性化和吸引人的体验。

高效任务执行:通过参考过去的讨论,AI系统可以简化任务执行,为用户提供及时和高效的帮助。

代码实现

将聊天记录与LangChain集成的实现需要一个结构化的方法:

步骤 I:安装库

%pip install --upgrade --quiet  langchain langchain-community langchainhub langchain-openai chromadb bs4

步骤 II:初始化 OPENAI KEY

import getpass
import osos.environ["OPENAI_API_KEY"] = getpass.getpass()

步骤 III:具有聊天记录的 Langchain

import bs4
from langchain import hub
from langchain.chains import create_history_aware_retriever, create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import Chroma
from langchain_core.chat_history import BaseChatMessageHistory
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnablePassthrough
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitterllm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)### 构建检索器 ###
loader = WebBaseLoader(web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",),bs_kwargs=dict(parse_only=bs4.SoupStrainer(class_=("post-content", "post-title", "post-header"))),
)
docs = loader.load()text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever()### 上下文化问题 ###
contextualize_q_system_prompt = """给定一个聊天记录和最新的用户问题,可能在聊天记录中引用上下文,请制定一个能够理解而不需要聊天记录的独立问题。如果需要,重新构思问题,否则返回原样。"""
contextualize_q_prompt = ChatPromptTemplate.from_messages([("system", contextualize_q_system_prompt),MessagesPlaceholder("chat_history"),("human", "{input}"),]
)
history_aware_retriever = create_history_aware_retriever(llm, retriever, contextualize_q_prompt
)### 回答问题 ###
qa_system_prompt = """您是一个用于问答任务的助手。使用检索到的上下文来回答问题。如果不知道答案,只需说不知道。最多使用三个句子,保持回答简洁。\n\n{context}"""
qa_prompt = ChatPromptTemplate.from_messages([("system", qa_system_prompt),MessagesPlaceholder("chat_history"),("human", "{input}"),]
)
question_answer_chain = create_stuff_documents_chain(llm, qa_prompt)rag_chain = create_retrieval_chain(history_aware_retriever, question_answer_chain)### 有状态地管理聊天记录 ###
store = {}def get_session_history(session_id: str) -> BaseChatMessageHistory:if session_id not in store:store[session_id] = ChatMessageHistory()return store[session_id]conversational_rag_chain = RunnableWithMessageHistory(rag_chain,get_session_history,input_messages_key="input",history_messages_key="chat_history",output_messages_key="answer",
)conversational_rag_chain.invoke({"input": "什么是任务分解?"},config={"configurable": {"session_id": "abc123"}},  # 在 `store` 中构建一个键 "abc123"。
)["answer"]

输出:

'Task decomposition is a technique used to break down complex tasks into 
smaller and simpler steps. This approach helps agents or models handle 
difficult tasks by dividing them into more manageable subtasks. It can be 
achieved through methods like Chain of Thought (CoT) or Tree of Thoughts, 
which guide the model in thinking step by step or exploring multiple reasoning 
possibilities at each step.'

结论

总的来说,将聊天记录与 LangChain 集成代表了对话式人工智能的范式转变,为用户提供了更加沉浸式和引人入胜的体验路径。通过利用过去交互的力量,AI 系统可以超越传统的界限,提供个性化、与上下文相关的回应,与用户在更深层次上产生共鸣。

随着我们继续推动人工智能创新的界限,将聊天记录与 LangChain 融合为对话式人工智能的无限潜力作证。拥抱交互式人工智能体验的未来,在那里每一次对话都是一次旅程,每一次交互都留下了深刻的印象。

用通俗易懂的方式讲解系列

  • 重磅来袭!《大模型面试宝典》(2024版) 发布!

  • 重磅来袭!《大模型实战宝典》(2024版) 发布!

  • 用通俗易懂的方式讲解:不用再找了,这是大模型最全的面试题库

  • 用通俗易懂的方式讲解:这是我见过的最适合大模型小白的 PyTorch 中文课程

  • 用通俗易懂的方式讲解:一文讲透最热的大模型开发框架 LangChain

  • 用通俗易懂的方式讲解:基于 LangChain + ChatGLM搭建知识本地库

  • 用通俗易懂的方式讲解:基于大模型的知识问答系统全面总结

  • 用通俗易懂的方式讲解:ChatGLM3 基础模型多轮对话微调

  • 用通俗易懂的方式讲解:最火的大模型训练框架 DeepSpeed 详解来了

  • 用通俗易懂的方式讲解:这应该是最全的大模型训练与微调关键技术梳理

  • 用通俗易懂的方式讲解:Stable Diffusion 微调及推理优化实践指南

  • 用通俗易懂的方式讲解:大模型训练过程概述

  • 用通俗易懂的方式讲解:专补大模型短板的RAG

  • 用通俗易懂的方式讲解:大模型LLM Agent在 Text2SQL 应用上的实践

  • 用通俗易懂的方式讲解:大模型 LLM RAG在 Text2SQL 上的应用实践

  • 用通俗易懂的方式讲解:大模型微调方法总结

  • 用通俗易懂的方式讲解:涨知识了,这篇大模型 LangChain 框架与使用示例太棒了

  • 用通俗易懂的方式讲解:掌握大模型这些优化技术,优雅地进行大模型的训练和推理!

  • 用通俗易懂的方式讲解:九大最热门的开源大模型 Agent 框架来了

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PLC通过Modbus转Profinet网关连接变频器与电机通讯

Modbus转Profinet网关(XD-MDPN100)是一种能够实现Modbus协议和Profinet协议之间转换的设备。Modbus转Profinet网关可提供单个或多个RS485接口,PLC作为控制中枢,变频器作为控制电机转速,通过Modbus转Profinet网关&#…

Leetcode—1041. 困于环中的机器人【中等】

2024每日刷题&#xff08;121&#xff09; Leetcode—1041. 困于环中的机器人 实现代码 class Solution { public:bool isRobotBounded(string instructions) {int x 0;int y 0;int d 0;vector<vector<int>> direction{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};for…

nginx--

命令 选项说明 帮助: -? -h 使用指定的配置文件: -c 指定配置指令:-g 指定运行目录:-p 测试配置文件是否有语法错误:-t -T 打印nginx的版本信息、编译信息等:-v -V 发送信号: -s 示例: nginx -s reload 信号说明 立刻停止服务:stop,相当于信号SIGTERM,SIGINT 优雅的停止服务:…

图像预处理工具_CogImageFileTool

CogImageFileTool工具可以用来将单张图片或idb格式的图片数据库读入内存。也可使用CoglmageFileTool工具将图片插入到.idb数据库里。 添加工具 参数介绍 文件名 写入模式 读取模式 删除

Linux基础——Linux开发工具(上)_vim

前言&#xff1a;在了解完Linux基本指令和Linux权限后&#xff0c;我们有了足够了能力来学习后面的内容&#xff0c;但是在真正进入Linux之前&#xff0c;我们还得要学会使用Linux中的几个开发工具。而我们主要介绍的是以下几个&#xff1a; yum, vim, gcc / g, gdb, make / ma…

从曝光到安装:App传参安装的关键步骤与数据指标

随着移动互联网的普及&#xff0c;手游市场日益繁荣&#xff0c;手游推广方式也日新月异。在这个竞争激烈的市场中&#xff0c;如何有效地推广手游&#xff0c;吸引更多的用户&#xff0c;成为了开发者和广告主关注的焦点。而Xinstall作为国内专业的App全渠道统计服务商&#x…

Fast Bilateral Filteringfor the Display of High-Dynamic-Range Images

1 Title Fast Bilateral Filtering for the Display of High-Dynamic-Range Images(Fredo Durand and Julie Dorsey)【SIGGRAPH 02】 2 Conclusion This paper presents a new technique for the display of high-dynamic-range images, which reduces the contrast while pre…

C语言指针和数组的一些笔试题

文章目录 前言一、一维数组二、字符数组-1三、字符数组-2总结 前言 C语言指针和数组的一些笔试题 一、一维数组 #include <stdio.h> int main() {int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf("%d\n", sizeof(a 0));printf("%d\n…

Qt 6 开源版(免费) -- 安装图解

Qt6起&#xff0c;两项重大改变&#xff08;并非指技术&#xff09;&#xff1a; 必须在线安装&#xff0c;不再提供单独的安装包主推收费的商业版 当然的&#xff0c;为了培养市场&#xff0c;Qt6还提供了一个免费的&#xff1a;开源版。 开源版相对于收费的商业版&#xf…

鸿蒙原生应用元服务开发-Web加载本地页面

将本地页面文件放在应用的rawfile目录下&#xff0c;开发者可以在Web组件创建的时候指定默认加载的本地页面 &#xff0c;并且加载完成后可通过调用loadUrl()接口变更当前Web组件的页面。 在下面的示例中展示加载本地页面文件的方法&#xff1a; 将资源文件放置在应用的resou…

邦注科技 模具清洗机 干冰清洗机 干冰清洗设备原理介绍

干冰清洗机&#xff0c;这款神奇的清洁设备&#xff0c;以干冰颗粒——固态的二氧化碳&#xff0c;作为其独特的清洁介质。它的工作原理可谓独具匠心&#xff0c;利用高压空气将干冰颗粒推送至超音速的速度&#xff0c;犹如一颗颗银色的流星&#xff0c;疾速喷射至待清洗的物体…

导入js中的变量

问题描述 config.js 定义变量 const baseUrl "http://localhost:8081"; export default baseUrl;american-data.js 使用变量 import baseUrl from "./config.js"; console.log("baseUrl", baseUrl);American.html 使用模块 // 使用这个模块…