Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

finish BEARA 1 and 2, and 3 is WIP #163

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,38 @@
本课程深入探讨如何利用检索增强生成(Retrieval-Augmented Generation, RAG)技术,使大型语言模型(Large Language Models, LLMs)能够在用户自有数据上回答问题。本课程的目标是介绍构建和实现高质量RAG系统所需的关键技术和评估框架。

## 一、背景
在本课程中,我们首先探讨了RAG技术的重要性,它通过有效的检索技术为LLM提供高度相关的上下文信息,从而生成准确的答案。此外,我们还将介绍如何通过有效的评估框架,在初始开发和部署后维护期间,高效地迭代和改进RAG系统。

在本课程中,我们首先探讨了RAG技术的重要性。RAG通过有效的检索技术为LLM提供高度相关的上下文信息,从而生成准确的答案。此外,我们还将介绍如何通过有效的评估框架,在初始开发和部署后维护期间,高效地迭代和改进RAG系统。

## 二、课程内容概览

- **高级检索方法**:介绍了两种先进的检索方法——句子窗口检索和自动合并检索,这些方法比传统方法能够为LLM提供更好的上下文信息。
- **句子窗口检索**:不仅检索最相关的句子,还检索文档中该句子前后的句子窗口。
- **自动合并检索**:将文档组织成树状结构,当子节点被识别为相关时,提供父节点的完整文本作为上下文。

- **评估指标**:解释了如何使用三个评估指标(上下文相关性、根据性和答案相关性)来评估LLM问答系统的性能。
- **上下文相关性**:衡量检索到的文本块与用户问题的相关程度。
- **根据性**:评估生成的答案是否基于可靠的信息源。
- **答案相关性**:判断生成的答案是否与用户问题直接相关。

- **实践应用**:本课程后半部分将提供实践操作,教授如何使用这些检索方法和评估方法迭代优化RAG系统,并展示如何使用系统化的实验跟踪来建立基线并快速改进。

## 三、专家指导

- **Jerry Liu**:作为LlamaIndex的联合创始人兼CEO,Jerry将分享他在社交媒体上关于RAG实践进化的见解。
- **Anupam Datta**:作为TruEra的联合创始人兼首席科学家,Anupam将利用他在可信AI领域以及如何监控、评估和优化AI应用效果的十多年研究经验,为课程提供深入洞察。

## 四、课程亮点

- **句子窗口检索和自动合并检索**:这两种方法通过提供更连贯的文本块,优化了LLM的上下文理解能力。
- **RAG三元组评估体系**:介绍了一套有效的度量标准来评估RAG系统在检索、理解和生成答案方面的性能。
- **实践操作**:课程将通过代码演示和实际案例,让学员亲自实践这些高级检索和评估方法。

## 五、致谢
感谢所有参与本课程创建的人员,包括LlamaIndex团队的Logan Markehwich,TruEra团队的Shayak Sen、Joshua Reini、Barbara Lewis,以及DeepLearning.ai团队的Eddie Shyu和Dialla Ezzeddine。
## 五、受众与预期成果

- **适合人群**:本课程适合数据科学家、机器学习工程师和AI研究人员,要求学员具备基本的机器学习和自然语言处理知识。
- **预期成果**:完成课程后,学员将能够设计和实施高效的RAG系统,优化LLM的上下文检索能力,并有效评估和改进这些系统的性能。

## 六、致谢

感谢所有参与本课程创建的人员,包括LlamaIndex团队的Logan Markehwich,TruEra团队的Shayak Sen、Joshua Reini、Barbara Lewis,以及DeepLearning.ai团队的Eddie Shyu和Dialla Ezzeddine。
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@
"# 第二章 高级的RAG管道"
]
},
{
"cell_type": "markdown",
"id": "f206ace2",
"metadata": {},
"source": [
"接下来,导入该课程需要的工具包utils,然后设置openai的API密钥。\n",
"有三种方式设置API密钥:\n",
"1. 在环境变量中设置`OPENAI_API_KEY`,然后使用utils直接获取;\n",
"2. 显式设置api_key,直接赋值给openai.api_key;\n",
"3. 如果没有openai的密钥的话,也可以选择使用第三方服务,修改openai.api_base即可;"
]
},
{
"cell_type": "code",
"execution_count": 1,
Expand All @@ -32,10 +44,19 @@
],
"source": [
"import utils\n",
"# 导入自定义的工具包\n",
"\n",
"import os\n",
"import openai\n",
"openai.api_key = utils.get_openai_api_key()"
"# openai.api_key = utils.get_openai_api_key()\n",
"# 设置OpenAI的API密钥,从环境变量中获取\n",
"\n",
"# openai.api_key = \"\" \n",
"# 或者这里填入你的OpenAI API密钥\n",
"\n",
"# openai.api_key = \"sk- \" \n",
"# openai.api_base = \" \"\n",
"# 或者自定义API密钥和API基础地址,可适用第三方API服务\n"
]
},
{
Expand Down Expand Up @@ -169,6 +190,7 @@
"source": [
"from llama_index import Document\n",
"\n",
"# 将documents中的内容合并成一个大文档,而不是每一页都是一个文档\n",
"document = Document(text=\"\\n\\n\".join([doc.text for doc in documents]))\n",
"document_en = Document(text=\"\\n\\n\".join([doc.text for doc in documents_en]))"
]
Expand Down Expand Up @@ -212,7 +234,15 @@
"from llama_index import ServiceContext\n",
"from llama_index.llms import OpenAI\n",
"\n",
"# 设置使用的大模型\n",
"# \"gpt-3.5-turbo\"是模型的名称\n",
"# temperature是温度,用来控制文本生成过程中的多样性\n",
"llm = OpenAI(model=\"gpt-3.5-turbo\", temperature=0.1)\n",
"\n",
"# 设置embedding模型\n",
"# 这里是在本地使用BAAI/bge-small-zh-v1.5\n",
"# document的所有的内容会索引到sentence index对象中\n",
"# 国内使用可以切换huggingface镜像站\n",
"service_context = ServiceContext.from_defaults(\n",
" llm=llm, embed_model=\"local:BAAI/bge-small-zh-v1.5\"\n",
")\n",
Expand Down Expand Up @@ -315,7 +345,7 @@
"id": "e50a1ac5",
"metadata": {},
"source": [
"## 二、使用Trulens进行评测"
"## 二、使用TruLens进行评测"
]
},
{
Expand Down Expand Up @@ -474,6 +504,25 @@
"通过调用 reset_database() 方法重置 Trulens 数据库。清空之前的记录和反馈数据。"
]
},
{
"cell_type": "markdown",
"id": "fb0cd6ea",
"metadata": {},
"source": [
"首先需要安装本课程中需要的评估框架,如果已经安装就可以跳过这一步骤。"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6767db6c",
"metadata": {},
"outputs": [],
"source": [
"# requirements\n",
"# pip install trulens_eval"
]
},
{
"cell_type": "code",
"execution_count": 18,
Expand All @@ -493,10 +542,16 @@
}
],
"source": [
"# 导入Tru类\n",
"from trulens_eval import Tru\n",
"\n",
"\n",
"# 实例化Tru类\n",
"tru = Tru()\n",
"\n",
"tru.reset_database()"
"# 重置数据库\n",
"# 数据库之后会用来存储问题、中间召回结果、答案以及评估结果\n",
"tru.reset_database()\n"
]
},
{
Expand Down Expand Up @@ -989,6 +1044,8 @@
"source": [
"from utils import get_sentence_window_query_engine\n",
"\n",
"# 根据sentence_index对象创建一个搜索引擎\n",
"# 之后会被用于在RAG应用中进行召回\n",
"sentence_window_engine = get_sentence_window_query_engine(sentence_index)"
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -384,11 +384,6 @@
"output_en.metadata"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
Expand Down