From d1b5898e2b2388e56994dbe9f78ba1ca33d9efcf Mon Sep 17 00:00:00 2001 From: joyenjoye Date: Sun, 9 Jul 2023 22:51:58 +0800 Subject: [PATCH] Add chapter 1 and 2 --- .../1.简介 Introduction.md | 34 + .../2.文档加载 Document Loading.ipynb | 819 ++++++++++++++++++ ...ndbook d331da39bd0341ed8d5ee2942fecf17a.md | 119 +++ .../MachineLearning-Lecture01.pdf | Bin 0 -> 64553 bytes 4 files changed, 972 insertions(+) create mode 100644 content/LangChain Chat with Data/1.简介 Introduction.md create mode 100644 content/LangChain Chat with Data/2.文档加载 Document Loading.ipynb create mode 100644 content/LangChain Chat with Data/docs/Notion_DB/Blendle's Employee Handbook d331da39bd0341ed8d5ee2942fecf17a.md create mode 100644 content/LangChain Chat with Data/docs/cs229_lectures/MachineLearning-Lecture01.pdf diff --git a/content/LangChain Chat with Data/1.简介 Introduction.md b/content/LangChain Chat with Data/1.简介 Introduction.md new file mode 100644 index 0000000..0c4dffa --- /dev/null +++ b/content/LangChain Chat with Data/1.简介 Introduction.md @@ -0,0 +1,34 @@ +# 第一章 简介 + +本课程由哈里森·蔡斯 (Harrison Chase,LangChain作者)与Deeplearning.ai合作开发,课程将介绍如何使用LangChain和自有数据进行对话。 + + +## 一、背景 +大语言模型(Large Language Model, LLM), 比如ChatGPT, 可以回答许多不同的问题。但是大语言模型的知识来源于其训练数据集,并没有用户的信息(比如用户的个人数据,公司的自自有数据),也没有最新发生时事的信息(在大模型数据训练后发表的文章或者新闻)。因此大模型能给出的答案比较受限。 + +如果能够让大模型结合已有信息和自有数据中的信息来进行对话,回答我们的问题,那我们便能够得到更好的答案。 + + +## 二、 课程基本内容 + +在本课程中,我们学习如何使用LangChain和自有数据进行对话。 + +LangChain是用于构建大模型应用程序的开源框架,有Python和JavaScript两个不同版本的包。LangChain基于模块化组合,有许多单独的组件,可以一起使用或单独使用。LangChain的组件包括: + +- 提示(Prompts): 使模型执行操作的方式 +- 模型(Models):大语言模型、对话模型,文本表示模型。目前包含多个模型的集成。 +- 索引(Indexes): 获取数据的方式,可以与模型结合使用 +- 链式(Chains): 端到端功能实现 +- 代理(Agents): 使用模型作为推理引擎 + +此外LangChain还拥有很多应用案例,帮助我们了解如何将这些模块化组件以链式方式组合,以形成更多端到端的应用程序 。 + +如果你想要了解关于LangChain的基础知识,可以学习使用 LangChain 开发基于 LLM 的应用程序课程(LangChain for LLM Application Development)。 + +## 三、致谢课程重要贡献者 + +最后特别感谢对本课程内容贡献者 +- Ankush Gola(LandChain) +- Lance Martin(LandChain) +- Geoff Ladwig(DeepLearning.AI) +- Diala Ezzedine(DeepLearning.AI) diff --git a/content/LangChain Chat with Data/2.文档加载 Document Loading.ipynb b/content/LangChain Chat with Data/2.文档加载 Document Loading.ipynb new file mode 100644 index 0000000..e94972e --- /dev/null +++ b/content/LangChain Chat with Data/2.文档加载 Document Loading.ipynb @@ -0,0 +1,819 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "cc2eb3ad-8c1c-406a-b7aa-a3f61b754ac5", + "metadata": {}, + "source": [ + "# 第一章 文档加载\n", + "文本加载器(Document Loaders) 可以处理不同类型的数据类型。数据类型可以是结构化/非结构化" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "582125c3-2afb-4cca-b651-c1810a5e5c22", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install -q langchain --upgrade" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "bb73a77f-e17c-45a2-b456-e3ad2bf0fb5c", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import openai\n", + "import sys\n", + "sys.path.append('../..')\n", + "\n", + "from dotenv import load_dotenv, find_dotenv\n", + "_ = load_dotenv(find_dotenv()) \n", + "\n", + "openai.api_key = os.environ['OPENAI_API_KEY']" + ] + }, + { + "cell_type": "markdown", + "id": "63558db2-5279-4c1b-9bec-355ab04731e6", + "metadata": {}, + "source": [ + "## 一、PDF文档\n", + "\n", + "首先,我们来加载一个[PDF文档](https://see.stanford.edu/materials/aimlcs229/transcripts/MachineLearning-Lecture01.pdf)。该文档为吴恩达教授的2009年机器学习课程的字幕文件。因为这些字幕为自动生成,所以词句直接可能不太连贯和通畅。" + ] + }, + { + "cell_type": "markdown", + "id": "dd5fe85c-6aae-4739-9b47-68e791afc9ac", + "metadata": {}, + "source": [ + "### 1.1 安装相关包 " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c527f944-35dc-44a2-9cf9-9887cf315f3a", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install -q pypdf" + ] + }, + { + "cell_type": "markdown", + "id": "8dcb2102-0414-4130-952b-3b6fa33b61bb", + "metadata": {}, + "source": [ + "### 1.2 加载PDF文档" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "52d9891f-a8cc-47c4-8c09-81794647a720", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import PyPDFLoader\n", + "\n", + "# 创建一个 PyPDFLoader Class 实例,输入为待加载的pdf文档路径\n", + "loader = PyPDFLoader(\"docs/cs229_lectures/MachineLearning-Lecture01.pdf\")\n", + "\n", + "# 调用 PyPDFLoader Class 的函数 load对pdf文件进行加载\n", + "pages = loader.load()" + ] + }, + { + "cell_type": "markdown", + "id": "68d40600-49ab-42a3-97d0-b9a2c4ab8139", + "metadata": {}, + "source": [ + "### 1.3 探索加载的数据" + ] + }, + { + "cell_type": "markdown", + "id": "feca9f1e-1596-49f2-a6d9-6eeaeffbd90b", + "metadata": {}, + "source": [ + "文档加载后储存在`pages`变量中:\n", + "- `page`的变量类型为`List`\n", + "- 打印 `pages` 的长度可以看到pdf一共包含多少页" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9463b982-c71c-4241-b3a3-b040170eef2e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(pages))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "67a2b815-586f-43a5-96a4-cfe46001a766", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22\n" + ] + } + ], + "source": [ + "print(len(pages))" + ] + }, + { + "cell_type": "markdown", + "id": "2cde6b9d-71c8-4851-a8f6-a3f0e76f6dab", + "metadata": {}, + "source": [ + "`page`中的每一元素为一个文档,变量类型为`langchain.schema.Document`, 文档变量类型包含两个属性\n", + "- `page_content` 包含该文档的内容。\n", + "- `meta_data` 为文档相关的描述性数据。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "921827ae-3a5b-4f29-b015-a5dde3be1410", + "metadata": {}, + "outputs": [], + "source": [ + "page = pages[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "aadaa840-0f30-4ae3-b06b-7fe8f468d146", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(page))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "85777ce2-42c7-4e11-b1ba-06fd6a0d8502", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MachineLearning-Lecture01 \n", + "Instructor (Andrew Ng): Okay. Good morning. Welcome to CS229, the machine \n", + "learning class. So what I wanna do today is ju st spend a little time going over the logistics \n", + "of the class, and then we'll start to talk a bit about machine learning. \n", + "By way of introduction, my name's Andrew Ng and I'll be instru ctor for this class. And so \n", + "I personally work in machine learning, and I' ve worked on it for about 15 years now, and \n", + "I actually think that machine learning i\n" + ] + } + ], + "source": [ + "print(page.page_content[0:500])" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "8a1f8acd-f8c7-46af-a29f-df172067deba", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'source': 'docs/cs229_lectures/MachineLearning-Lecture01.pdf', 'page': 0}\n" + ] + } + ], + "source": [ + "print(page.metadata)" + ] + }, + { + "cell_type": "markdown", + "id": "1e9cead7-a967-4a8f-8d3d-0f94f2ff129e", + "metadata": {}, + "source": [ + "## 二、YouTube音频\n", + "\n", + "在第一部分的内容,我们学习了如何加载PDF文档。在这部分的内容,我们学习对于给定的 YouTube 视频链接\n", + "- 如何使用LongChain加载器将视频的音频下载到本地\n", + "- 然后使用OpenAIWhisperPaser解析器将音频转化为文本" + ] + }, + { + "cell_type": "markdown", + "id": "b4720268-ddab-4c18-9072-10aab8f0ac7c", + "metadata": {}, + "source": [ + "### 2.1 安装相关包 " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "37dbeb50-d6c5-4db0-88da-1ef9d3e47417", + "metadata": {}, + "outputs": [], + "source": [ + "!pip -q install yt_dlp\n", + "!pip -q install pydub" + ] + }, + { + "cell_type": "markdown", + "id": "a243b258-eae3-46b0-803f-cd897b31cf78", + "metadata": {}, + "source": [ + "### 2.2 加载Youtube音频文档" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "f25593f9-a6d2-4137-94cb-881141ca99fd", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders.generic import GenericLoader\n", + "from langchain.document_loaders.parsers import OpenAIWhisperParser\n", + "from langchain.document_loaders.blob_loaders.youtube_audio import YoutubeAudioLoader" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5ca7b99a-ba4d-4989-aed6-be76acb405c0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[youtube] Extracting URL: https://www.youtube.com/watch?v=jGwO_UgTS7I\n", + "[youtube] jGwO_UgTS7I: Downloading webpage\n", + "[youtube] jGwO_UgTS7I: Downloading ios player API JSON\n", + "[youtube] jGwO_UgTS7I: Downloading android player API JSON\n", + "[youtube] jGwO_UgTS7I: Downloading m3u8 information\n", + "[info] jGwO_UgTS7I: Downloading 1 format(s): 140\n", + "[download] docs/youtube//Stanford CS229: Machine Learning Course, Lecture 1 - Andrew Ng (Autumn 2018).m4a has already been downloaded\n", + "[download] 100% of 69.76MiB\n", + "[ExtractAudio] Not converting audio docs/youtube//Stanford CS229: Machine Learning Course, Lecture 1 - Andrew Ng (Autumn 2018).m4a; file is already in target format m4a\n", + "Transcribing part 1!\n", + "Transcribing part 2!\n", + "Transcribing part 3!\n", + "Transcribing part 4!\n" + ] + } + ], + "source": [ + "url=\"https://www.youtube.com/watch?v=jGwO_UgTS7I\"\n", + "save_dir=\"docs/youtube/\"\n", + "\n", + "# 创建一个 GenericLoader Class 实例\n", + "loader = GenericLoader(\n", + " #将链接url中的Youtube视频的音频下载下来,存在本地路径save_dir\n", + " YoutubeAudioLoader([url],save_dir), \n", + " \n", + " #使用OpenAIWhisperPaser解析器将音频转化为文本\n", + " OpenAIWhisperParser()\n", + ")\n", + "\n", + "# 调用 GenericLoader Class 的函数 load对视频的音频文件进行加载\n", + "docs = loader.load()" + ] + }, + { + "cell_type": "markdown", + "id": "ffb4db5d-39b5-4cd7-82d9-824ed71fc116", + "metadata": { + "tags": [] + }, + "source": [ + "### 2.3 探索加载的数据" + ] + }, + { + "cell_type": "markdown", + "id": "0fd91c34-ac19-4a09-8ca0-99262011d9ba", + "metadata": {}, + "source": [ + "文档加载后储存在`docs`变量中:\n", + "- `docs`的变量类型为`List`\n", + "- 打印 `docs` 的长度可以看到一共包含多少页" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "ddb89cee-32bd-4c5f-91f1-c46d1f0300da", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(docs))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "2cea4ff3-8548-4158-9e55-a574de0fd29e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + } + ], + "source": [ + "print(len(docs))" + ] + }, + { + "cell_type": "markdown", + "id": "24952655-128e-4a7b-b8c0-e93156acbe1b", + "metadata": {}, + "source": [ + "`docs`中的每一元素为一个文档,变量类型为`langchain.schema.document.Document`, 文档变量类型包含两个属性\n", + "- `page_content` 包含该文档的内容。\n", + "- `meta_data` 为文档相关的描述性数据。" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "d89bf91d-d39b-4682-9c56-0cde449d6051", + "metadata": {}, + "outputs": [], + "source": [ + "doc = docs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "e6df253f-ad9e-42d5-b6e1-47b7c0d2d564", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(doc))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "80e4b798-875e-4f0e-ba16-5277f8ec1f62", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Welcome to CS229 Machine Learning. Uh, some of you know that this is a class that's taught at Stanford for a long time. And this is often the class that, um, I most look forward to teaching each year because this is where we've helped, I think, several generations of Stanford students become experts in machine learning, got- built many of their products and services and startups that I'm sure, many of you or probably all of you are using, uh, uh, today. Um, so what I want to do today was spend s\n" + ] + } + ], + "source": [ + "print(doc.page_content[0:500])" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "7f363e33-6a4d-4b78-aa7d-1b8cf6b59567", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'source': 'docs/youtube/Stanford CS229: Machine Learning Course, Lecture 1 - Andrew Ng (Autumn 2018).m4a', 'chunk': 0}\n" + ] + } + ], + "source": [ + "print(doc.metadata)" + ] + }, + { + "cell_type": "markdown", + "id": "5b7ddc7d-2d40-4811-8cb3-5e73344ebe24", + "metadata": {}, + "source": [ + "## 三、网页文档\n", + "\n", + "在第二部分,我们对于给定的 YouTube 视频链接 (URL),使用 LongChain 加载器将视频的音频下载到本地,然后使用 OpenAIWhisperPaser 解析器将音频转化为文本。\n", + "\n", + "本部分,对于给定网页文档链接(URLs),我们学习如何对其进行加载。这里我们对Github上的网页文档进行加载,该文档格式为markdown。" + ] + }, + { + "cell_type": "markdown", + "id": "b28abf4d-4907-47f6-b54d-6d322a5794e6", + "metadata": {}, + "source": [ + "### 3.1 加载网页文档" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "1a68375f-44ae-4905-bf9c-1f01ec800481", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import WebBaseLoader\n", + "\n", + "\n", + "# 创建一个 WebBaseLoader Class 实例\n", + "url = \"https://github.com/basecamp/handbook/blob/master/37signals-is-you.md\"\n", + "header = {'User-Agent': 'python-requests/2.27.1', \n", + " 'Accept-Encoding': 'gzip, deflate, br', \n", + " 'Accept': '*/*',\n", + " 'Connection': 'keep-alive'}\n", + "loader = WebBaseLoader(web_path=url,header_template=header)\n", + "\n", + "# 调用 WebBaseLoader Class 的函数 load对文件进行加载\n", + "docs = loader.load()" + ] + }, + { + "cell_type": "markdown", + "id": "fc24f44a-01f5-49a3-9529-2f05c1053b2c", + "metadata": { + "tags": [] + }, + "source": [ + "### 3.2 探索加载的数据" + ] + }, + { + "cell_type": "markdown", + "id": "f2f108b9-713b-4b98-b44d-4dfc3dcbcde2", + "metadata": {}, + "source": [ + "文档加载后储存在`docs`变量中:\n", + "- `docs`的变量类型为`List`\n", + "- 打印 `docs` 的长度可以看到一共包含多少页" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "8c8670fa-203b-4c35-9266-f976f50f0f5d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(docs))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "0e85a526-55e7-4186-8697-d16a891bcabc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + } + ], + "source": [ + "print(len(docs))" + ] + }, + { + "cell_type": "markdown", + "id": "b4397791-4d3c-4609-86be-3cda90a3f2fc", + "metadata": {}, + "source": [ + "`docs`中的每一元素为一个文档,变量类型为`langchain.schema.document.Document`, 文档变量类型包含两个属性\n", + "- `page_content` 包含该文档的内容。\n", + "- `meta_data` 为文档相关的描述性数据。" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "26423c51-6503-478c-b17d-bbe57049a04c", + "metadata": {}, + "outputs": [], + "source": [ + "doc = docs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "a243638f-0c23-46b8-8854-13f1f1de6f0a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(doc))" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "9f237541-79b7-4ae4-9e0e-27a28af99b7a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\"payload\":{\"allShortcutsEnabled\":false,\"fileTree\":{\"\":{\"items\":[{\"name\":\"37signals-is-you.md\",\"path\":\"37signals-is-you.md\",\"contentType\":\"file\"},{\"name\":\"LICENSE.md\",\"path\":\"LICENSE.md\",\"contentType\":\"file\"},{\"name\":\"README.md\",\"path\":\"README.md\",\"contentType\":\"file\"},{\"name\":\"benefits-and-perks.md\",\"path\":\"benefits-and-perks.md\",\"contentType\":\"file\"},{\"name\":\"code-of-conduct.md\",\"path\":\"code-of-conduct.md\",\"contentType\":\"file\"},{\"name\":\"faq.md\",\"path\":\"faq.md\",\"contentType\":\"file\"},{\"name\":\"getting-started.md\",\"path\":\"getting-started.md\",\"contentType\":\"file\"},{\"name\":\"how-we-work.md\",\"path\":\"how-we-work.md\",\"contentType\":\"file\"},{\"name\":\"international-travel-guide.md\",\"path\":\"international-travel-guide.md\",\"contentType\":\"file\"},{\"name\":\"making-a-career.md\",\"path\":\"making-a-career.md\",\"contentType\":\"file\"},{\"name\":\"managing-work-devices.md\",\"path\":\"managing-work-devices.md\",\"contentType\":\"file\"},{\"name\":\"moonlighting.md\",\"path\":\"moonlighting.md\",\"contentType\":\"file\"},{\"name\":\"our-internal-systems.md\",\"path\":\"our-internal-systems.md\",\"contentType\":\"file\"},{\"name\":\"our-rituals.md\",\"path\":\"our-rituals.md\",\"contentType\":\"file\"},{\"name\":\"performance-plans.md\",\"path\":\"performance-plans.md\",\"contentType\":\"file\"},{\"name\":\"product-histories.md\",\"path\":\"product-histories.md\",\"contentType\":\"file\"},{\"name\":\"stateFMLA.md\",\"path\":\"stateFMLA.md\",\"contentType\":\"file\"},{\"name\":\"titles-for-data.md\",\"path\":\"titles-for-data.md\",\"contentType\":\"file\"},{\"name\":\"titles-for-designers.md\",\"path\":\"titles-for-designers.md\",\"contentType\":\"file\"},{\"name\":\"titles-for-ops.md\",\"path\":\"titles-for-ops.md\",\"contentType\":\"file\"},{\"name\":\"titles-for-programmers.md\",\"path\":\"titles-for-programmers.md\",\"contentType\":\"file\"},{\"name\":\"titles-for-support.md\",\"path\":\"titles-for-support.md\",\"contentType\":\"file\"},{\"name\":\"vocabulary.md\",\"path\":\"vocabulary.md\",\"contentType\":\"file\"},{\"name\":\"what-influenced-us.md\",\"path\":\"what-influenced-us.md\",\"contentType\":\"file\"},{\"name\":\"what-we-stand-for.md\",\"path\":\"what-we-stand-for.md\",\"contentType\":\"file\"},{\"name\":\"where-we-work.md\",\"path\":\"where-we-work.md\",\"contentType\":\"file\"}],\"totalCount\":26}},\"fileTreeProcessingTime\":3.936437,\"foldersToFetch\":[],\"reducedMotionEnabled\":null,\"repo\":{\"id\":90042196,\"defaultBranch\":\"master\",\"name\":\"handbook\",\"ownerLogin\":\"basecamp\",\"currentUserCanPush\":false,\"isFork\":false,\"isEmpty\":false,\"createdAt\":\"2017-05-02T14:23:23.000Z\",\"ownerAvatar\":\"https://avatars.githubusercontent.com/u/13131?v=4\",\"public\":true,\"private\":false,\"isOrgOwned\":true},\"refInfo\":{\"name\":\"master\",\"listCacheKey\":\"v0:1682672280.0\",\"canEdit\":false,\"refType\":\"branch\",\"currentOid\":\"1577f27c63aa8df61996924824afb8df6f1bf20e\"},\"path\":\"37signals-is-you.md\",\"currentUser\":null,\"blob\":{\"rawBlob\":null,\"colorizedLines\":null,\"stylingDirectives\":null,\"csv\":null,\"csvError\":null,\"dependabotInfo\":{\"showConfigurationBanner\":false,\"configFilePath\":null,\"networkDependabotPath\":\"/basecamp/handbook/network/updates\",\"dismissConfigurationNoticePath\":\"/settings/dismiss-notice/dependabot_configuration_notice\",\"configurationNoticeDismissed\":null,\"repoAlertsPath\":\"/basecamp/handbook/security/dependabot\",\"repoSecurityAndAnalysisPath\":\"/basecamp/handbook/settings/security_analysis\",\"repoOwnerIsOrg\":true,\"currentUserCanAdminRepo\":false},\"displayName\":\"37signals-is-you.md\",\"displayUrl\":\"https://github.com/basecamp/handbook/blob/master/37signals-is-you.md?raw=true\",\"headerInfo\":{\"blobSize\":\"2.19 KB\",\"deleteInfo\":{\"deletePath\":null,\"deleteTooltip\":\"You must be signed in to make or propose changes\"},\"editInfo\":{\"editTooltip\":\"You must be signed in to make or propose changes\"},\"ghDesktopPath\":\"https://desktop.github.com\",\"gitLfsPath\":null,\"onBranch\":true,\"shortPath\":\"e5ca0f0\",\"siteNavLoginPath\":\"/login?return_to=https%3A%2F%2Fgithub.com%2Fbasecamp%2Fhandbook%2Fblob%2Fmaster%2F37signals-is-you.md\",\"isCSV\":false,\"isRichtext\":true,\"toc\":[{\"level\":1,\"text\":\"37signals Is You\",\"anchor\":\"37signals-is-you\",\"htmlText\":\"37signals Is You\"}],\"lineInfo\":{\"truncatedLoc\":\"11\",\"truncatedSloc\":\"6\"},\"mode\":\"file\"},\"image\":false,\"isCodeownersFile\":null,\"isValidLegacyIssueTemplate\":false,\"issueTemplateHelpUrl\":\"https://docs.github.com/articles/about-issue-and-pull-request-templates\",\"issueTemplate\":null,\"discussionTemplate\":null,\"language\":\"Markdown\",\"large\":false,\"loggedIn\":false,\"newDiscussionPath\":\"/basecamp/handbook/discussions/new\",\"newIssuePath\":\"/basecamp/handbook/issues/new\",\"planSupportInfo\":{\"repoIsFork\":null,\"repoOwnedByCurrentUser\":null,\"requestFullPath\":\"/basecamp/handbook/blob/master/37signals-is-you.md\",\"showFreeOrgGatedFeatureMessage\":null,\"showPlanSupportBanner\":null,\"upgradeDataAttributes\":null,\"upgradePath\":null},\"publishBannersInfo\":{\"dismissActionNoticePath\":\"/settings/dismiss-notice/publish_action_from_dockerfile\",\"dismissStackNoticePath\":\"/settings/dismiss-notice/publish_stack_from_file\",\"releasePath\":\"/basecamp/handbook/releases/new?marketplace=true\",\"showPublishActionBanner\":false,\"showPublishStackBanner\":false},\"renderImageOrRaw\":false,\"richText\":\"37signals Is You\\nEveryone working at 37signals represents 37signals. When a customer gets a response from Merissa on support, Merissa is 37signals. When a customer reads a tweet by Eron that our systems are down, Eron is 37signals. In those situations, all the other stuff we do to cultivate our best image is secondary. What’s right in front of someone in a time of need is what they’ll remember.\\nThat’s what we mean when we say marketing is everyone’s responsibility, and that it pays to spend the time to recognize that. This means avoiding the bullshit of outage language and bending our policies, not just lending your ears. It means taking the time to get the writing right and consider how you’d feel if you were on the other side of the interaction.\\nThe vast majority of our customers come from word of mouth and much of that word comes from people in our audience. This is an audience we’ve been educating and entertaining for 20 years and counting, and your voice is part of us now, whether you like it or not! Tell us and our audience what you have to say!\\nThis goes for tools and techniques as much as it goes for prose. 37signals not only tries to out-teach the competition, but also out-share and out-collaborate. We’re prolific open source contributors through Ruby on Rails, Trix, Turbolinks, Stimulus, and many other projects. Extracting the common infrastructure that others could use as well is satisfying, important work, and we should continue to do that.\\nIt’s also worth mentioning that joining 37signals can be all-consuming. We’ve seen it happen. You dig 37signals, so you feel pressure to contribute, maybe overwhelmingly so. The people who work here are some of the best and brightest in our industry, so the self-imposed burden to be exceptional is real. But here’s the thing: stop it. Settle in. We’re glad you love this job because we all do too, but at the end of the day it’s a job. Do your best work, collaborate with your team, write, read, learn, and then turn off your computer and play with your dog. We’ll all be better for it.\\n\",\"renderedFileInfo\":null,\"tabSize\":8,\"topBannersInfo\":{\"overridingGlobalFundingFile\":false,\"globalPreferredFundingPath\":null,\"repoOwner\":\"basecamp\",\"repoName\":\"handbook\",\"showInvalidCitationWarning\":false,\"citationHelpUrl\":\"https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files\",\"showDependabotConfigurationBanner\":false,\"actionsOnboardingTip\":null},\"truncated\":false,\"viewable\":true,\"workflowRedirectUrl\":null,\"symbols\":{\"timedOut\":false,\"notAnalyzed\":true,\"symbols\":[]}},\"csrf_tokens\":{\"/basecamp/handbook/branches\":{\"post\":\"o3HTNEDyuKtINffBkguVz-P3KUwBN04ZM_vvyoNKymcy66lDUtXVvEi7EvsbgFoz2d3qgU_earsuIftbbtKlcg\"}}},\"title\":\"handbook/37signals-is-you.md at master · basecamp/handbook\",\"locale\":\"en\"}\n" + ] + } + ], + "source": [ + "print(doc.page_content)" + ] + }, + { + "cell_type": "markdown", + "id": "26538237-1fc2-4915-944a-1f68f3ae3759", + "metadata": {}, + "source": [ + " " + ] + }, + { + "cell_type": "markdown", + "id": "52025103-205e-4137-a116-89f37fcfece1", + "metadata": {}, + "source": [ + "可以看到上面的文档内容包含许多冗余的信息。通常来讲,我们需要进行对这种数据进行进一步处理(Post Processing)。" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "a7c5281f-aeed-4ee7-849b-bbf9fd3e35c7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "37signals Is You\n", + "Everyone working at 37signals represents 37signals. When a customer gets a response from Merissa on support, Merissa is 37signals. When a customer reads a tweet by Eron that our systems are down, Eron is 37signals. In those situations, all the other stuff we do to cultivate our best image is secondary. What’s right in front of someone in a time of need is what they’ll remember.\n", + "That’s what we mean when we say marketing is everyone’s responsibility, and that it pays to spend the time to recognize that. This means avoiding the bullshit of outage language and bending our policies, not just lending your ears. It means taking the time to get the writing right and consider how you’d feel if you were on the other side of the interaction.\n", + "The vast majority of our customers come from word of mouth and much of that word comes from people in our audience. This is an audience we’ve been educating and entertaining for 20 years and counting, and your voice is part of us now, whether you like it or not! Tell us and our audience what you have to say!\n", + "This goes for tools and techniques as much as it goes for prose. 37signals not only tries to out-teach the competition, but also out-share and out-collaborate. We’re prolific open source contributors through Ruby on Rails, Trix, Turbolinks, Stimulus, and many other projects. Extracting the common infrastructure that others could use as well is satisfying, important work, and we should continue to do that.\n", + "It’s also worth mentioning that joining 37signals can be all-consuming. We’ve seen it happen. You dig 37signals, so you feel pressure to contribute, maybe overwhelmingly so. The people who work here are some of the best and brightest in our industry, so the self-imposed burden to be exceptional is real. But here’s the thing: stop it. Settle in. We’re glad you love this job because we all do too, but at the end of the day it’s a job. Do your best work, collaborate with your team, write, read, learn, and then turn off your computer and play with your dog. We’ll all be better for it.\n", + "\n" + ] + } + ], + "source": [ + "import json\n", + "convert_to_json = json.loads(doc.page_content)\n", + "extracted_markdow = convert_to_json['payload']['blob']['richText']\n", + "print(extracted_markdow)" + ] + }, + { + "cell_type": "markdown", + "id": "d35e99b4-dd67-4940-bbeb-b2a59bf8cd3d", + "metadata": {}, + "source": [ + "## 四、Notion文档\n", + "\n", + "- 点击[Notion示例文档](https://yolospace.notion.site/Blendle-s-Employee-Handbook-e31bff7da17346ee99f531087d8b133f)右上方复制按钮(Duplicate),复制文档到你的Notion空间\n", + "- 点击右上方`⋯` 按钮,选择导出为Mardown&CSV。导出的文件将为zip文件夹\n", + "- 解压并保存mardown文档到本地路径`docs/Notion_DB/`" + ] + }, + { + "cell_type": "markdown", + "id": "f8cf2778-288c-4964-81e7-0ed881e31652", + "metadata": {}, + "source": [ + "### 4.1 加载Notion Markdown文档" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "081f5ee4-6b5d-45bf-a7e6-079abc560729", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import NotionDirectoryLoader\n", + "loader = NotionDirectoryLoader(\"docs/Notion_DB\")\n", + "docs = loader.load()" + ] + }, + { + "cell_type": "markdown", + "id": "88d5d094-a490-4c64-ab93-5c5cec0853aa", + "metadata": { + "tags": [] + }, + "source": [ + "### 4.2 探索加载的数据" + ] + }, + { + "cell_type": "markdown", + "id": "a3ffe318-d22a-4687-b613-f679ad9ad616", + "metadata": {}, + "source": [ + "文档加载后储存在`docs`变量中:\n", + "- `docs`的变量类型为`List`\n", + "- 打印 `docs` 的长度可以看到一共包含多少页" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "106323dd-0d24-40d4-8302-ed2a35d13347", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(docs))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "fa3ee0fe-7daa-4193-9ee1-4ee89cb3b843", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + } + ], + "source": [ + "print(len(docs))" + ] + }, + { + "cell_type": "markdown", + "id": "b3cd3feb-d2c1-46b6-8b16-d4b2101c5632", + "metadata": {}, + "source": [ + "`docs`中的每一元素为一个文档,变量类型为`langchain.schema.document.Document`, 文档变量类型包含两个属性\n", + "- `page_content` 包含该文档的内容。\n", + "- `meta_data` 为文档相关的描述性数据。" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "5b220df6-fd0b-4b62-9da4-29962926fe87", + "metadata": {}, + "outputs": [], + "source": [ + "doc = docs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "98ef8fbf-e820-41de-919d-c462a910f4f1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(doc))" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "933da0f3-4d5f-4363-9142-050ecf226c1f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# Blendle's Employee Handbook\n", + "\n", + "This is a living document with everything we've learned working with people while running a startup. And, of course, we continue to learn. Therefore it's a document that will continue to change. \n", + "\n", + "**Everything related to working at Blendle and the people of Blendle, made public.**\n", + "\n", + "These are the lessons from three years of working with the people of Blendle. It contains everything from [how our leaders lead](https://www.notion.so/ecfb7e647136468a9a0a32f1771a8f52?pv\n" + ] + } + ], + "source": [ + "print(doc.page_content[0:500])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/content/LangChain Chat with Data/docs/Notion_DB/Blendle's Employee Handbook d331da39bd0341ed8d5ee2942fecf17a.md b/content/LangChain Chat with Data/docs/Notion_DB/Blendle's Employee Handbook d331da39bd0341ed8d5ee2942fecf17a.md new file mode 100644 index 0000000..a39a3c2 --- /dev/null +++ b/content/LangChain Chat with Data/docs/Notion_DB/Blendle's Employee Handbook d331da39bd0341ed8d5ee2942fecf17a.md @@ -0,0 +1,119 @@ +# Blendle's Employee Handbook + +This is a living document with everything we've learned working with people while running a startup. And, of course, we continue to learn. Therefore it's a document that will continue to change. + +**Everything related to working at Blendle and the people of Blendle, made public.** + +These are the lessons from three years of working with the people of Blendle. It contains everything from [how our leaders lead](https://www.notion.so/ecfb7e647136468a9a0a32f1771a8f52?pvs=21) to [how we increase salaries](https://www.notion.so/Salary-Review-e11b6161c6d34f5c9568bb3e83ed96b6?pvs=21), from [how we hire](https://www.notion.so/Hiring-451bbcfe8d9b49438c0633326bb7af0a?pvs=21) and [fire](https://www.notion.so/Firing-5567687a2000496b8412e53cd58eed9d?pvs=21) to [how we think people should give each other feedback](https://www.notion.so/Our-Feedback-Process-eb64f1de796b4350aeab3bc068e3801f?pvs=21) — and much more. + +We've made this document public because we want to learn from you. We're very much interested in your feedback (including weeding out typo's and Dunglish ;)). Email us at hr@blendle.com. If you're starting your own company or if you're curious as to how we do things at Blendle, we hope that our employee handbook inspires you. + +If you want to work at Blendle you can check our [job ads here](https://blendle.homerun.co/). If you want to be kept in the loop about Blendle, you can sign up for [our behind the scenes newsletter](https://blendle.homerun.co/yes-keep-me-posted/tr/apply?token=8092d4128c306003d97dd3821bad06f2). + +## Blendle general + +*Information gap closing in 3... 2... 1...* + +--- + +[To Do/Read in your first week](https://www.notion.so/To-Do-Read-in-your-first-week-9ef69b65b63a4ec7b8394ec703856c32?pvs=21) + +[History](https://www.notion.so/History-29b2b8fd36dd48db80dc682119aaefef?pvs=21) + +[DNA & culture](https://www.notion.so/DNA-culture-7723839e26124ed2ba3adafe8de0a080?pvs=21) + +[General & practical ](https://www.notion.so/General-practical-87085be150824011b79891eb30ca9530?pvs=21) + +## People operations + +*You can tell a company's DNA by looking at how they deal with the practical stuff.* + +--- + +[Office](https://www.notion.so/Office-b014d3d2c62240308865d11bba495322?pvs=21) + +[Time off: holidays and national holidays](https://www.notion.so/Time-off-holidays-and-national-holidays-bd94b931280a45a6b8eb3f29c2c4b42a?pvs=21) + +[Calling in sick/better](https://www.notion.so/Calling-in-sick-better-b82ec184fd544a8e9aa926ac37bb1ab1?pvs=21) + +[Perks and benefits](https://www.notion.so/Perks-and-benefits-820593b38ebc44209fe35ae553100de6?pvs=21) + +[Travel costs and reimbursements](https://www.notion.so/Travel-costs-and-reimbursements-e76623c6e0664863a769aeed028954e2?pvs=21) + +[Parenthood](https://www.notion.so/Parenthood-a6d62b65a9d84489a75586a3c542b3f1?pvs=21) + +## People topics + +*Themes we care about.* + +--- + +[Blendle Social Code](https://www.notion.so/Blendle-Social-Code-685a79c8df154ee09f35b35cc147af6b?pvs=21) + +[Diversity and inclusion](https://www.notion.so/Diversity-and-inclusion-d7f9d3e6b6ef4a1ab8f2c0a7b3ea3eec?pvs=21) + +[#letstalkaboutstress](https://www.notion.so/letstalkaboutstress-d46961f6ac98432ab07b5d5afc52c2d0?pvs=21) + +## Feedback and development + +*The number 1 reason for people to work at Blendle is growth and learning from smart people.* + +--- + +[Your 1st month ](https://www.notion.so/Your-1st-month-85909edc55a34f349bbed522c5245a65?pvs=21) + +[Goals](https://www.notion.so/Goals-122bff69bd634c519cd3c6dc01dbc282?pvs=21) + +[Feedback cycle](https://www.notion.so/Feedback-cycle-5f32358dba874c39be5ca5aa464c310e?pvs=21) + +[The Matrix™ (job profiles)](https://www.notion.so/The-Matrix-job-profiles-da91736ff35545458559eceb0075ed66?pvs=21) + +[Blendle library](https://www.notion.so/Blendle-library-f34188e536234c9a8976c9d4602b0be3?pvs=21) + +## **Hiring** + +*The coolest and most impactful thing when done right.* + +--- + +[Rating systems](https://www.notion.so/Rating-systems-2ba332377459427194acc798e5f8869c?pvs=21) + +[Getting people in (branding&sourcing)](https://www.notion.so/Getting-people-in-branding-sourcing-a3277fef078041a881f56556e24f0d8a?pvs=21) + +[Highly Skilled Migrants and relocation](https://www.notion.so/Highly-Skilled-Migrants-and-relocation-84a6576fb27d4a8fae2f73e4eae57d21?pvs=21) + +## How to lead at Blendle + +*Here are some tips and tools to help you become a great leader.* + +--- + +[How to lead at Blendle ](https://www.notion.so/How-to-lead-at-Blendle-f8c6b1d989d841bb87510fc2ab1ba970?pvs=21) + +[Your check-list](https://www.notion.so/Your-check-list-aaca857a846848688da3a37f28682c15?pvs=21) + +[Leading Feedback ](https://www.notion.so/Leading-Feedback-a1970c9f7b70443d881ca92d4e98be25?pvs=21) + +[Salary talks](https://www.notion.so/Salary-talks-35681ab732c048a9bbdf8c50babe64b5?pvs=21) + +[Hiring ](https://www.notion.so/Hiring-0bdf54d3d25f4c59bfdf3712a5104bbc?pvs=21) + +[Firing](https://www.notion.so/Firing-e0da1de62b304751bbd95a681908c7ad?pvs=21) + +[Party and study budget](https://www.notion.so/Party-and-study-budget-4e31001531c24d0fa447bbfcd6ccfd3f?pvs=21) + +[Holidays](https://www.notion.so/Holidays-1529506bb8884f0aa11cc799ced11ed0?pvs=21) + +[Sickness absence](https://www.notion.so/Sickness-absence-79a495f601df4004801475ea79b3d198?pvs=21) + +[Personal User Guide](https://www.notion.so/Personal-User-Guide-be2238ccb597412e8a517d40cda7e7d5?pvs=21) + +[Soft shizzle](https://www.notion.so/Soft-shizzle-41255d79fbe84492b153121cd7a2e3e8?pvs=21) + +## About this document + +--- + +*Lessons from three years of HR* + +[About this document and the author](https://www.notion.so/About-this-document-and-the-author-ee1faab1bcae4456b8c62043a8a194cd?pvs=21) \ No newline at end of file diff --git a/content/LangChain Chat with Data/docs/cs229_lectures/MachineLearning-Lecture01.pdf b/content/LangChain Chat with Data/docs/cs229_lectures/MachineLearning-Lecture01.pdf new file mode 100644 index 0000000000000000000000000000000000000000..34da5de76f3aee52436db79d774a58626749ddc3 GIT binary patch literal 64553 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

B^aA%~Eo8udyIkKRcttEk~?Z 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

QW>H?{L=86CvQ)& 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 j?0}DDC^l(h6S*N4Axq`m^Eib