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

发布于:2024-05-04 ⋅ 阅读:(29) ⋅ 点赞:(0)

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


汇总合集

《大模型面试宝典》(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 os

os.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 RecursiveCharacterTextSplitter

llm = 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 融合为对话式人工智能的无限潜力作证。拥抱交互式人工智能体验的未来,在那里每一次对话都是一次旅程,每一次交互都留下了深刻的印象。

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


网站公告

今日签到

点亮在社区的每一天
去签到