llm-universe学习小记录4--构建RAG应用

构建RAG应用

一、将LLM 接入 LangChain

1、基于 LangChain 调用 ChatGPT
2、使用 LangChain 调用百度文心一言
3、使用 LangChain 调用讯飞星火
4、使用 LangChain 调用智谱 GLM
具体内容与代码详见将LLM 接入 LangChain。

二、构建检索问答链

1、加载向量数据库

2、创建一个 LLM

3、构建检索问答链

4、检索问答链效果测试

5、添加历史对话的记忆功能

(1)记忆(Memory)
介绍 LangChain 中的储存模块,即如何将先前的对话嵌入到语言模型中,使其具有连续对话的能力。它保存聊天消息历史记录的列表,这些历史记录将在回答问题时与问题一起传递给聊天机器人,从而将它们添加到上下文中。
(2)对话检索链(ConversationalRetrievalChain)
对话检索链(ConversationalRetrievalChain)在检索 QA 链的基础上,增加了处理对话历史的能力。

工作流程:
1.将之前的对话与新问题合并生成一个完整的查询语句。
2.在向量数据库中搜索该查询的相关文档。
3.获取结果后,存储所有答案到对话记忆区。
4.用户可在 UI 中查看完整的对话流程。

这种链式方式将新问题放在之前对话的语境中进行检索,可以处理依赖历史信息的查询。并保留所有信息在对话记忆中,方便追踪。

三、部署知识库助手

Streamlit 是一种快速便捷的方法,可以直接在 Python 中通过友好的 Web 界面演示机器学习模型。在本章节,将学习如何使用它为生成式人工智能应用程序构建用户界面

1、Streamlit 简介

Streamlit 是一个用于快速创建数据应用程序的开源 Python 库。它的设计目标是让数据科学家能够轻松地将数据分析和机器学习模型转化为具有交互性的 Web 应用程序,而无需深入了解 Web 开发。

和常规 Web 框架,如 Flask/Django 的不同之处在于,它不需要你去编写任何客户端代码(HTML/CSS/JS),只需要编写普通的 Python 模块,就可以在很短的时间内创建美观并具备高度交互性的界面,从而快速生成数据分析或者机器学习的结果;另一方面,和那些只能通过拖拽生成的工具也不同的是,你仍然具有对代码的完整控制权。

Streamlit 提供了一组简单而强大的基础模块,用于构建数据应用程序:
1.st.write():这是最基本的模块之一,用于在应用程序中呈现文本、图像、表格等内容。
2.st.title()、st.header()、st.subheader():这些模块用于添加标题、子标题和分组标题,以组织应用程序的布局。
3.st.text()、st.markdown():用于添加文本内容,支持 Markdown 语法。
4.st.image():用于添加图像到应用程序中。
5.st.dataframe():用于呈现 Pandas 数据框。
6.st.table():用于呈现简单的数据表格。
7.st.pyplot()、st.altair_chart()、st.plotly_chart():用于呈现 Matplotlib、Altair 或 Plotly 绘制的图表。
8.st.selectbox()、st.multiselect()、st.slider()、st.text_input():用于添加交互式小部件,允许用户在应用程序中进行选择、输入或滑动操作。
9.st.button()、st.checkbox()、st.radio():用于添加按钮、复选框和单选按钮,以触发特定的操作。

这些基础模块使得通过 Streamlit 能够轻松地构建交互式数据应用程序,并且在使用时可以根据需要进行组合和定制,更多内容请查看官方文档。

2、构建应用程序

步骤如下:
1.导入必要的 Python 库;
2.创建应用程序的标题;
3.添加一个文本输入框,供用户输入其 OpenAI API 密钥;
4.定义一个函数,使用用户密钥对 OpenAI API 进行身份验证、发送提示并获取 AI 生成的响应。该函数接受用户的提示作为参数,并使用st.info来在蓝色框中显示 AI 生成的响应;
5.最后,使用st.form()创建一个文本框(st.text_area())供用户输入。当用户单击Submit时,generate-response()将使用用户的输入作为参数来调用该函数;
6.保存当前的文件;
7.返回计算机的终端以运行该应用程序。

3、添加检索问答

先将 “二、构建检索问答链” 部分的代码进行封装:

get_vectordb函数返回C3部分持久化后的向量知识库
get_chat_qa_chain函数返回调用带有历史记录的检索问答链后的结果
get_qa_chain函数返回调用不带有历史记录的检索问答链后的结果

然后,添加一个单选按钮部件(st.radio),选择进行问答的模式:

None:不使用检索问答的普通模式
qa_chain:不带历史记录的检索问答模式
chat_qa_chain:带历史记录的检索问答模式

4、部署应用程序

要将应用程序部署到 Streamlit Cloud,请执行以下步骤:
(1)为应用程序创建 GitHub 存储库。存储库应包含两个文件:

your-repository/
├── streamlit_app.py
└── requirements.txt

(2)转到 Streamlit Community Cloud,单击工作区中的New app按钮,然后指定存储库、分支和主文件路径。或者,您可以通过选择自定义子域来自定义应用程序的 URL。
(3)点击(Deploy!)按钮。


本文内容来源于Datawhale的llm-universe项目。

你可能感兴趣的:(学习,语言模型)