Merge pull request #3 from datawhalechina/main

synced with upstream
This commit is contained in:
YixinZ-NUS
2023-07-09 01:07:36 +08:00
committed by GitHub
12 changed files with 3994 additions and 566 deletions

View File

@ -1,33 +0,0 @@
## 吴恩达 LangChain大模型应用开发 开端篇
## LangChain for LLM Application Development
欢迎来到LangChain大模型应用开发短期课程👏🏻👏🏻
本课程由哈里森·蔡斯 (Harrison ChaseLangChain作者与Deeplearning.ai合作开发旨在教大家使用这个神奇工具。
### 🚀 LangChain的诞生和发展
通过对LLM或大型语言模型给出提示(prompt)现在可以比以往更快地开发AI应用程序但是一个应用程序可能需要进行多轮提示以及解析输出。
在此过程有很多胶水代码需要编写,基于此需求,哈里森·蔡斯 (Harrison Chase) 创建了LangChain使开发过程变得更加丝滑。
LangChain开源社区快速发展贡献者已达数百人正以惊人的速度更新代码和功能。
### 📚 课程基本内容
LangChain是用于构建大模型应用程序的开源框架有Python和JavaScript两个不同版本的包。LangChain基于模块化组合有许多单独的组件可以一起使用或单独使用。此外LangChain还拥有很多应用案例帮助我们了解如何将这些模块化组件以链式方式组合以形成更多端到端的应用程序 。
在本课程中我们将介绍LandChain的常见组件。具体而言我们会讨论一下几个方面
- 模型(Models)
- 提示(Prompts): 使模型执行操作的方式
- 索引(Indexes): 获取数据的方式,可以与模型结合使用
- 链式(Chains): 端到端功能实现
- 代理(Agents): 使用模型作为推理引擎
### 🌹致谢课程重要贡献者
最后特别感谢Ankush GholarLandChain的联合作者、Geoff Ladwig,、Eddy Shyu 以及 Diala Ezzedine他们也为本课程内容贡献颇多~

View File

@ -0,0 +1,87 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "cfab521b-77fa-41be-a964-1f50f2ef4689",
"metadata": {},
"source": [
"# 1. 简介\n",
"<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#1.1-LangChain的诞生和发展\" data-toc-modified-id=\"1.1-LangChain的诞生和发展-1\">1.1 LangChain的诞生和发展</a></span></li><li><span><a href=\"#1.2-课程基本内容\" data-toc-modified-id=\"1.2-课程基本内容-2\">1.2 课程基本内容</a></span></li><li><span><a href=\"#1.3-致谢课程重要贡献者\" data-toc-modified-id=\"1.3-致谢课程重要贡献者-3\">1.3 致谢课程重要贡献者</a></span></li></ul></div>\n",
"\n",
"欢迎来到LangChain大模型应用开发短期课程👏🏻👏🏻\n",
"\n",
"本课程由哈里森·蔡斯 (Harrison ChaseLangChain作者与Deeplearning.ai合作开发旨在教大家使用这个神奇工具。\n",
"\n",
"\n",
"\n",
"## 1.1 LangChain的诞生和发展\n",
"\n",
"通过对LLM或大型语言模型给出提示(prompt)现在可以比以往更快地开发AI应用程序但是一个应用程序可能需要进行多轮提示以及解析输出。\n",
"\n",
"在此过程有很多胶水代码需要编写,基于此需求,哈里森·蔡斯 (Harrison Chase) 创建了LangChain使开发过程变得更加丝滑。\n",
"\n",
"LangChain开源社区快速发展贡献者已达数百人正以惊人的速度更新代码和功能。\n",
"\n",
"\n",
"## 1.2 课程基本内容\n",
"\n",
"LangChain是用于构建大模型应用程序的开源框架有Python和JavaScript两个不同版本的包。LangChain基于模块化组合有许多单独的组件可以一起使用或单独使用。此外LangChain还拥有很多应用案例帮助我们了解如何将这些模块化组件以链式方式组合以形成更多端到端的应用程序 。\n",
"\n",
"在本课程中我们将介绍LandChain的常见组件。具体而言我们会讨论一下几个方面\n",
"- 模型(Models)\n",
"- 提示(Prompts): 使模型执行操作的方式\n",
"- 索引(Indexes): 获取数据的方式,可以与模型结合使用\n",
"- 链式(Chains): 端到端功能实现\n",
"- 代理(Agents): 使用模型作为推理引擎\n",
"\n",
" \n",
"\n",
"## 1.3 致谢课程重要贡献者\n",
"\n",
"最后特别感谢Ankush GholarLandChain的联合作者、Geoff Ladwig,、Eddy Shyu 以及 Diala Ezzedine他们也为本课程内容贡献颇多~ "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e3618ca8",
"metadata": {},
"outputs": [],
"source": []
}
],
"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"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -1,12 +1,14 @@
{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"id": "a786c77c",
"metadata": {},
"source": [
"# LangChain: Memory记忆\n",
"# 3. 储存\n",
"\n",
"<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#3.1-对话缓存储存\" data-toc-modified-id=\"3.1-对话缓存储存-1.1\">3.1 对话缓存储存</a></span></li><li><span><a href=\"#3.2-对话缓存窗口储存\" data-toc-modified-id=\"3.2-对话缓存窗口储存-1.2\">3.2 对话缓存窗口储存</a></span></li><li><span><a href=\"#3.3-对话token缓存储存\" data-toc-modified-id=\"3.3-对话token缓存储存-1.3\">3.3 对话token缓存储存</a></span></li><li><span><a href=\"#3.4-对话摘要缓存储存\" data-toc-modified-id=\"3.4-对话摘要缓存储存-1.4\">3.4 对话摘要缓存储存</a></span></li></ul></div>\n",
"\n",
"当你与那些语言模型进行交互的时候,他们不会记得你之前和他进行的交流内容,这在我们构建一些应用程序(如聊天机器人)的时候,是一个很大的问题---显得不够智能!\n",
"\n",
"因此在本节中我们将介绍LangChain 中的 **Memory(记忆)** 模块,即他是如何将先前的对话嵌入到语言模型中的,使其具有连续对话的能力\n",
@ -29,7 +31,7 @@
" \n",
"此次课程主要介绍其中四种记忆模块,其他模块可查看文档学习。\n",
"\n",
"## 大纲\n",
"\n",
"* ConversationBufferMemory对话缓存记忆\n",
"* ConversationBufferWindowMemory对话缓存窗口记忆\n",
"* ConversationTokenBufferMemory对话令牌缓存记忆\n",
@ -37,7 +39,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "7e10db6f",
"metadata": {},
@ -48,18 +49,16 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "1297dcd5",
"metadata": {},
"source": [
"## ConversationBufferMemory对话缓存记忆) \n",
"## 3.1 对话缓存储存 \n",
" \n",
"这种记忆允许存储消息,然后从变量中提取消息。"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "0768ca9b",
"metadata": {},
@ -68,7 +67,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "d76f6ba7",
"metadata": {},
@ -133,7 +131,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "dea83837",
"metadata": {},
@ -142,7 +139,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "1a3b4c42",
"metadata": {},
@ -232,7 +228,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "e71564ad",
"metadata": {},
@ -241,7 +236,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "54d006bd",
"metadata": {},
@ -345,7 +339,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "33cb734b",
"metadata": {},
@ -354,7 +347,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "0393df3d",
"metadata": {},
@ -462,7 +454,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "5a96a8d9",
"metadata": {},
@ -532,7 +523,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "6bd222c3",
"metadata": {},
@ -541,7 +531,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "0b5de846",
"metadata": {},
@ -595,7 +584,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "07d2e892",
"metadata": {},
@ -698,7 +686,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "2ac544f2",
"metadata": {},
@ -767,7 +754,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "8839314a",
"metadata": {},
@ -778,12 +764,11 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "cf98e9ff",
"metadata": {},
"source": [
"## ConversationBufferWindowMemory对话缓存窗口记忆)\n",
"## 3.2 对话缓存窗口储存\n",
" \n",
"随着对话变得越来越长所需的内存量也变得非常长。将大量的tokens发送到LLM的成本也会变得更加昂贵,这也就是为什么API的调用费用通常是基于它需要处理的tokens数量而收费的。\n",
" \n",
@ -804,7 +789,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "641477a4",
"metadata": {},
@ -863,7 +847,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "9b401f0b",
"metadata": {},
@ -899,7 +882,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "63bda148",
"metadata": {},
@ -927,7 +909,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "b6d661e3",
"metadata": {},
@ -1005,7 +986,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "a1080168",
"metadata": {},
@ -1038,16 +1018,14 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "d2931b92",
"metadata": {},
"source": [
"## ConversationTokenBufferMemory对话token缓存记忆)"
"## 3.3 对话token缓存储存"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "dff5b4c7",
"metadata": {},
@ -1069,7 +1047,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "2187cfe6",
"metadata": {},
@ -1094,7 +1071,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "f3a84112",
"metadata": {},
@ -1121,7 +1097,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "7b62b2e1",
"metadata": {},
@ -1153,7 +1128,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "f7f6be43",
"metadata": {},
@ -1188,7 +1162,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "5e4d918b",
"metadata": {},
@ -1204,16 +1177,14 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "5ff55d5d",
"metadata": {},
"source": [
"## ConversationSummaryBufferMemory对话摘要缓存记忆)"
"## 3.4 对话摘要缓存储存"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "7d39b83a",
"metadata": {},
@ -1247,7 +1218,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "6572ef39",
"metadata": {},
@ -1305,7 +1275,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "7ccb97b6",
"metadata": {},
@ -1396,7 +1365,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "4ba827aa",
"metadata": {
@ -1530,7 +1498,20 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.9"
"version": "3.9.12"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
}
},
"nbformat": 4,

View File

@ -29,7 +29,7 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 44,
"id": "541eb2f1",
"metadata": {},
"outputs": [],
@ -40,7 +40,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 45,
"id": "b7ed03ed-1322-49e3-b2a2-33e94fb592ef",
"metadata": {
"tags": []
@ -48,14 +48,18 @@
"outputs": [],
"source": [
"import os\n",
"\n",
"import openai\n",
"from dotenv import load_dotenv, find_dotenv\n",
"_ = load_dotenv(find_dotenv()) # 读取本地 .env 文件"
"\n",
"_ = load_dotenv(find_dotenv()) # 读取本地 .env 文件\n",
"\n",
"# 获取环境变量 OPENAI_API_KEY\n",
"openai.api_key = os.environ['OPENAI_API_KEY'] #\"填入你的专属的API key\""
]
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 3,
"id": "b84e441b",
"metadata": {},
"outputs": [],
@ -74,7 +78,7 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 46,
"id": "974acf8e-8f88-42de-88f8-40a82cb58e8b",
"metadata": {},
"outputs": [],
@ -85,7 +89,7 @@
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 47,
"id": "b7a09c35",
"metadata": {},
"outputs": [
@ -153,7 +157,7 @@
"4 Milk Frother Handheld\\n  I loved this product. But they only seem to l..."
]
},
"execution_count": 11,
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
@ -182,7 +186,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 48,
"id": "e92dff22",
"metadata": {},
"outputs": [],
@ -203,13 +207,12 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 9,
"id": "943237a7",
"metadata": {},
"outputs": [],
"source": [
"OPENAI_API_KEY = \"********\" #\"填入你的专属的API key\"\n",
"llm = ChatOpenAI(temperature=0.0,openai_api_key=OPENAI_API_KEY) #预测下一个token时概率越大的值就越平滑(平滑也就是让差异大的值之间的差异变得没那么大)temperature值越小则生成的内容越稳定"
"llm = ChatOpenAI(temperature=0.0) #预测下一个token时概率越大的值就越平滑(平滑也就是让差异大的值之间的差异变得没那么大)temperature值越小则生成的内容越稳定"
]
},
{
@ -295,17 +298,17 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 14,
"id": "2181be10",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'蓝耳科技 (BlueEar Technologies)'"
"'\"豪华床纺\"'"
]
},
"execution_count": 12,
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
@ -313,10 +316,10 @@
"source": [
"# 中文\n",
"prompt = ChatPromptTemplate.from_template( \n",
" \"描述制造{product}的公司的最佳名称是什么?\"\n",
" \"描述制造{product}的一个公司的最佳名称是什么?\"\n",
")\n",
"chain = LLMChain(llm=llm, prompt=prompt)\n",
"product = \"蓝牙耳机\"\n",
"product = \"大号床单套装\"\n",
"chain.run(product)"
]
},
@ -342,7 +345,7 @@
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 15,
"id": "febee243",
"metadata": {},
"outputs": [],
@ -352,13 +355,12 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 16,
"id": "5d019d6f",
"metadata": {},
"outputs": [],
"source": [
"OPENAI_API_KEY = \"********\" #\"填入你的专属的API key\"\n",
"llm = ChatOpenAI(temperature=0.9,openai_api_key=OPENAI_API_KEY)"
"llm = ChatOpenAI(temperature=0.9)"
]
},
{
@ -481,7 +483,7 @@
},
{
"cell_type": "code",
"execution_count": 23,
"execution_count": 19,
"id": "c7c32997",
"metadata": {},
"outputs": [
@ -492,8 +494,8 @@
"\n",
"\n",
"\u001b[1m> Entering new SimpleSequentialChain chain...\u001b[0m\n",
"\u001b[36;1m\u001b[1;3m“蓝牙耳机制造公司”或“蓝耳制造公司”均可。具体名称应根据公司的定位、目标市场、品牌理念等因素来考虑。\u001b[0m\n",
"\u001b[33;1m\u001b[1;3m专业生产蓝牙耳机的公司,致力于提供高品质、时尚设计、舒适佩戴的产品,满足用户多样化的需求。\u001b[0m\n",
"\u001b[36;1m\u001b[1;3m\"尺寸王床品有限公司\"\u001b[0m\n",
"\u001b[33;1m\u001b[1;3m尺寸王床品有限公司是一家专注于床上用品生产的公司。\u001b[0m\n",
"\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
]
@ -501,18 +503,19 @@
{
"data": {
"text/plain": [
"'专业生产蓝牙耳机的公司,致力于提供高品质、时尚设计、舒适佩戴的产品,满足用户多样化的需求。'"
"'尺寸王床品有限公司是一家专注于床上用品生产的公司。'"
]
},
"execution_count": 23,
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 中文\n",
"\n",
"first_prompt = ChatPromptTemplate.from_template( \n",
" \"描述制造{product}的公司的最名称是什么?\"\n",
" \"描述制造{product}的一个公司的最好的名称是什么\"\n",
")\n",
"chain_one = LLMChain(llm=llm, prompt=first_prompt)\n",
"\n",
@ -522,10 +525,11 @@
")\n",
"chain_two = LLMChain(llm=llm, prompt=second_prompt)\n",
"\n",
"\n",
"overall_simple_chain = SimpleSequentialChain(chains=[chain_one, chain_two],\n",
" verbose=True\n",
" )\n",
"product = \"蓝牙耳机\"\n",
"product = \"大号床单套装\"\n",
"overall_simple_chain.run(product)"
]
},
@ -551,7 +555,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 1,
"id": "4c129ef6",
"metadata": {},
"outputs": [],
@ -573,13 +577,12 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 2,
"id": "03a8e203",
"metadata": {},
"outputs": [],
"source": [
"OPENAI_API_KEY = \"********\" #\"填入你的专属的API key\"\n",
"llm = ChatOpenAI(temperature=0.9,openai_api_key=OPENAI_API_KEY)"
"llm = ChatOpenAI(temperature=0.9)"
]
},
{
@ -593,7 +596,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 23,
"id": "016187ac",
"metadata": {},
"outputs": [],
@ -613,7 +616,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 25,
"id": "0fb0730e",
"metadata": {},
"outputs": [],
@ -633,7 +636,7 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 26,
"id": "6accf92d",
"metadata": {},
"outputs": [],
@ -652,7 +655,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 27,
"id": "c7a46121",
"metadata": {},
"outputs": [],
@ -673,7 +676,7 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 28,
"id": "89603117",
"metadata": {},
"outputs": [],
@ -750,6 +753,121 @@
"overall_chain(review)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "31624a7c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"\u001b[1m> Entering new SequentialChain chain...\u001b[0m\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Retrying langchain.chat_models.openai.ChatOpenAI.completion_with_retry.<locals>._completion_with_retry in 1.0 seconds as it raised RateLimitError: Rate limit reached for default-gpt-3.5-turbo in organization org-kmMHlitaQynVMwTW3jDTCPga on requests per min. Limit: 3 / min. Please try again in 20s. Contact us through our help center at help.openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method..\n",
"Retrying langchain.chat_models.openai.ChatOpenAI.completion_with_retry.<locals>._completion_with_retry in 2.0 seconds as it raised RateLimitError: Rate limit reached for default-gpt-3.5-turbo in organization org-kmMHlitaQynVMwTW3jDTCPga on requests per min. Limit: 3 / min. Please try again in 20s. Contact us through our help center at help.openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method..\n",
"Retrying langchain.chat_models.openai.ChatOpenAI.completion_with_retry.<locals>._completion_with_retry in 4.0 seconds as it raised RateLimitError: Rate limit reached for default-gpt-3.5-turbo in organization org-kmMHlitaQynVMwTW3jDTCPga on requests per min. Limit: 3 / min. Please try again in 20s. Contact us through our help center at help.openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method..\n",
"Retrying langchain.chat_models.openai.ChatOpenAI.completion_with_retry.<locals>._completion_with_retry in 8.0 seconds as it raised RateLimitError: Rate limit reached for default-gpt-3.5-turbo in organization org-kmMHlitaQynVMwTW3jDTCPga on requests per min. Limit: 3 / min. Please try again in 20s. Contact us through our help center at help.openai.com if you continue to have issues. Please add a payment method to your account to increase your rate limit. Visit https://platform.openai.com/account/billing to add a payment method..\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
]
},
{
"data": {
"text/plain": [
"{'Review': \"Je trouve le goût médiocre. La mousse ne tient pas, c'est bizarre. J'achète les mêmes dans le commerce et le goût est bien meilleur...\\nVieux lot ou contrefaçon !?\",\n",
" 'English_Review': \"I find the taste mediocre. The foam doesn't last, it's strange. I buy the same ones in stores and the taste is much better...\\nOld batch or counterfeit?!\",\n",
" 'summary': \"The reviewer finds the taste mediocre and suspects that either the product is from an old batch or it might be counterfeit, as the foam doesn't last and the taste is not as good as the ones purchased in stores.\",\n",
" 'followup_message': \"后续回复: Bonjour! Je vous remercie de votre commentaire concernant notre produit. Nous sommes désolés d'apprendre que vous avez trouvé le goût moyen et que vous soupçonnez qu'il s'agit peut-être d'un ancien lot ou d'une contrefaçon, car la mousse ne dure pas et le goût n'est pas aussi bon que ceux achetés en magasin. Nous apprécions vos préoccupations et nous aimerions enquêter davantage sur cette situation. Pourriez-vous s'il vous plaît nous fournir plus de détails, tels que la date d'achat et le numéro de lot du produit? Nous sommes déterminés à offrir la meilleure qualité à nos clients et nous ferons tout notre possible pour résoudre ce problème. Merci encore pour votre commentaire et nous attendons votre réponse avec impatience. Cordialement.\"}"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 中文\n",
"\n",
"#子链1\n",
"\n",
"# prompt模板 1: 翻译成英语把下面的review翻译成英语\n",
"first_prompt = ChatPromptTemplate.from_template(\n",
" \"把下面的评论review翻译成英文:\"\n",
" \"\\n\\n{Review}\"\n",
")\n",
"# chain 1: 输入Review 输出:英文的 Review\n",
"chain_one = LLMChain(llm=llm, prompt=first_prompt, \n",
" output_key=\"English_Review\"\n",
" )\n",
"\n",
"#子链2\n",
"\n",
"# prompt模板 2: 用一句话总结下面的 review\n",
"second_prompt = ChatPromptTemplate.from_template(\n",
" \"请你用一句话来总结下面的评论review:\"\n",
" \"\\n\\n{English_Review}\"\n",
")\n",
"# chain 2: 输入英文的Review 输出:总结\n",
"chain_two = LLMChain(llm=llm, prompt=second_prompt, \n",
" output_key=\"summary\"\n",
" )\n",
"\n",
"\n",
"#子链3\n",
"\n",
"# prompt模板 3: 下面review使用的什么语言\n",
"third_prompt = ChatPromptTemplate.from_template(\n",
" \"下面的评论review使用的什么语言:\\n\\n{Review}\"\n",
")\n",
"# chain 3: 输入Review 输出:语言\n",
"chain_three = LLMChain(llm=llm, prompt=third_prompt,\n",
" output_key=\"language\"\n",
" )\n",
"\n",
"\n",
"#子链4\n",
"\n",
"# prompt模板 4: 使用特定的语言对下面的总结写一个后续回复\n",
"fourth_prompt = ChatPromptTemplate.from_template(\n",
" \"使用特定的语言对下面的总结写一个后续回复:\"\n",
" \"\\n\\n总结: {summary}\\n\\n语言: {language}\"\n",
")\n",
"# chain 4: 输入: 总结, 语言 输出: 后续回复\n",
"chain_four = LLMChain(llm=llm, prompt=fourth_prompt,\n",
" output_key=\"followup_message\"\n",
" )\n",
"\n",
"\n",
"# 对四个子链进行组合\n",
"\n",
"#输入review 输出英文review总结后续回复 \n",
"overall_chain = SequentialChain(\n",
" chains=[chain_one, chain_two, chain_three, chain_four],\n",
" input_variables=[\"Review\"],\n",
" output_variables=[\"English_Review\", \"summary\",\"followup_message\"],\n",
" verbose=True\n",
")\n",
"\n",
"\n",
"review = df.Review[5]\n",
"overall_chain(review)"
]
},
{
"attachments": {},
"cell_type": "markdown",
@ -788,7 +906,7 @@
},
{
"cell_type": "code",
"execution_count": 31,
"execution_count": 49,
"id": "ade83f4f",
"metadata": {},
"outputs": [],
@ -845,6 +963,59 @@
"{input}\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "f7fade7a",
"metadata": {},
"outputs": [],
"source": [
"# 中文\n",
"#第一个提示适合回答物理问题\n",
"physics_template = \"\"\"你是一个非常聪明的物理专家。 \\\n",
"你擅长用一种简洁并且易于理解的方式去回答问题。\\\n",
"当你不知道问题的答案时,你承认\\\n",
"你不知道.\n",
"\n",
"这是一个问题:\n",
"{input}\"\"\"\n",
"\n",
"\n",
"#第二个提示适合回答数学问题\n",
"math_template = \"\"\"你是一个非常优秀的数学家。 \\\n",
"你擅长回答数学问题。 \\\n",
"你之所以如此优秀, \\\n",
"是因为你能够将棘手的问题分解为组成部分,\\\n",
"回答组成部分,然后将它们组合在一起,回答更广泛的问题。\n",
"\n",
"这是一个问题:\n",
"{input}\"\"\"\n",
"\n",
"\n",
"#第三个适合回答历史问题\n",
"history_template = \"\"\"你是以为非常优秀的历史学家。 \\\n",
"你对一系列历史时期的人物、事件和背景有着极好的学识和理解\\\n",
"你有能力思考、反思、辩证、讨论和评估过去。\\\n",
"你尊重历史证据,并有能力利用它来支持你的解释和判断。\n",
"\n",
"这是一个问题:\n",
"{input}\"\"\"\n",
"\n",
"\n",
"#第四个适合回答计算机问题\n",
"computerscience_template = \"\"\" 你是一个成功的计算机科学专家。\\\n",
"你有创造力、协作精神、\\\n",
"前瞻性思维、自信、解决问题的能力、\\\n",
"对理论和算法的理解以及出色的沟通技巧。\\\n",
"你非常擅长回答编程问题。\\\n",
"你之所以如此优秀,是因为你知道 \\\n",
"如何通过以机器可以轻松解释的命令式步骤描述解决方案来解决问题,\\\n",
"并且你知道如何选择在时间复杂性和空间复杂性之间取得良好平衡的解决方案。\n",
"\n",
"这还是一个输入:\n",
"{input}\"\"\""
]
},
{
"attachments": {},
"cell_type": "markdown",
@ -856,8 +1027,7 @@
},
{
"cell_type": "code",
"execution_count": 32,
"id": "5f590e9f",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
@ -885,6 +1055,38 @@
"]"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "deb8aafc",
"metadata": {},
"outputs": [],
"source": [
"# 中文\n",
"prompt_infos = [\n",
" {\n",
" \"名字\": \"物理学\", \n",
" \"描述\": \"擅长回答关于物理学的问题\", \n",
" \"提示模板\": physics_template\n",
" },\n",
" {\n",
" \"名字\": \"数学\", \n",
" \"描述\": \"擅长回答数学问题\", \n",
" \"提示模板\": math_template\n",
" },\n",
" {\n",
" \"名字\": \"历史\", \n",
" \"描述\": \"擅长回答历史问题\", \n",
" \"提示模板\": history_template\n",
" },\n",
" {\n",
" \"名字\": \"计算机科学\", \n",
" \"描述\": \"擅长回答计算机科学问题\", \n",
" \"提示模板\": computerscience_template\n",
" }\n",
"]\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
@ -896,7 +1098,7 @@
},
{
"cell_type": "code",
"execution_count": 33,
"execution_count": 28,
"id": "31b06fc8",
"metadata": {},
"outputs": [],
@ -917,13 +1119,12 @@
},
{
"cell_type": "code",
"execution_count": 34,
"execution_count": 29,
"id": "f3f50bcc",
"metadata": {},
"outputs": [],
"source": [
"OPENAI_API_KEY = \"********\" #\"填入你的专属的API key\"\n",
"llm = ChatOpenAI(temperature=0,openai_api_key=OPENAI_API_KEY)"
"llm = ChatOpenAI(temperature=0)"
]
},
{
@ -953,12 +1154,11 @@
},
{
"cell_type": "code",
"execution_count": 35,
"execution_count": 30,
"id": "8eefec24",
"metadata": {},
"outputs": [],
"source": [
"\n",
"destination_chains = {}\n",
"for p_info in prompt_infos:\n",
" name = p_info[\"name\"]\n",
@ -971,6 +1171,26 @@
"destinations_str = \"\\n\".join(destinations)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fd6eb641",
"metadata": {},
"outputs": [],
"source": [
"# 中文\n",
"destination_chains = {}\n",
"for p_info in prompt_infos:\n",
" name = p_info[\"名字\"]\n",
" prompt_template = p_info[\"提示模板\"]\n",
" prompt = ChatPromptTemplate.from_template(template=prompt_template)\n",
" chain = LLMChain(llm=llm, prompt=prompt)\n",
" destination_chains[name] = chain \n",
" \n",
"destinations = [f\"{p['名字']}: {p['描述']}\" for p in prompt_infos]\n",
"destinations_str = \"\\n\".join(destinations)"
]
},
{
"attachments": {},
"cell_type": "markdown",
@ -983,7 +1203,7 @@
},
{
"cell_type": "code",
"execution_count": 36,
"execution_count": 31,
"id": "9f98018a",
"metadata": {},
"outputs": [],
@ -1002,9 +1222,28 @@
"这包括要完成的任务的说明以及输出应该采用的特定格式。"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "24f30c2c",
"metadata": {},
"source": [
"注意:此处在原教程的基础上添加了一个示例,主要是因为\"gpt-3.5-turbo\"模型不能很好适应理解模板的意思,使用 \"text-davinci-003\" 或者\"gpt-4-0613\"可以很好的工作,因此在这里多加了示例提示让其更好的学习。\n",
"eg:\n",
"<< INPUT >>\n",
"\"What is black body radiation?\"\n",
"<< OUTPUT >>\n",
"```json\n",
"{{{{\n",
" \"destination\": string \\ name of the prompt to use or \"DEFAULT\"\n",
" \"next_inputs\": string \\ a potentially modified version of the original input\n",
"}}}}\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 37,
"execution_count": 32,
"id": "11b2e2ba",
"metadata": {},
"outputs": [],
@ -1037,7 +1276,75 @@
"<< INPUT >>\n",
"{{input}}\n",
"\n",
"<< OUTPUT (remember to include the ```json)>>\"\"\""
"<< OUTPUT (remember to include the ```json)>>\n",
"\n",
"eg:\n",
"<< INPUT >>\n",
"\"What is black body radiation?\"\n",
"<< OUTPUT >>\n",
"```json\n",
"{{{{\n",
" \"destination\": string \\ name of the prompt to use or \"DEFAULT\"\n",
" \"next_inputs\": string \\ a potentially modified version of the original input\n",
"}}}}\n",
"```\n",
"\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a7aae035",
"metadata": {},
"outputs": [],
"source": [
"# 中文\n",
"\n",
"# 多提示路由模板\n",
"MULTI_PROMPT_ROUTER_TEMPLATE = \"\"\"给语言模型一个原始文本输入,\\\n",
"让其选择最适合输入的模型提示。\\\n",
"系统将为您提供可用提示的名称以及最适合改提示的描述。\\\n",
"如果你认为修改原始输入最终会导致语言模型做出更好的响应,\\\n",
"你也可以修改原始输入。\n",
"\n",
"\n",
"<< 格式 >>\n",
"返回一个带有JSON对象的markdown代码片段该JSON对象的格式如下\n",
"```json\n",
"{{{{\n",
" \"destination\": 字符串 \\ 使用的提示名字或者使用 \"DEFAULT\"\n",
" \"next_inputs\": 字符串 \\ 原始输入的改进版本\n",
"}}}}\n",
"```\n",
"\n",
"\n",
"记住“destination”必须是下面指定的候选提示名称之一\\\n",
"或者如果输入不太适合任何候选提示,\\\n",
"则可以是 “DEFAULT” 。\n",
"记住:如果您认为不需要任何修改,\\\n",
"则 “next_inputs” 可以只是原始输入。\n",
"\n",
"<< 候选提示 >>\n",
"{destinations}\n",
"\n",
"<< 输入 >>\n",
"{{input}}\n",
"\n",
"<< 输出 (记得要包含 ```json)>>\n",
"\n",
"样例:\n",
"<< 输入 >>\n",
"\"什么是黑体辐射?\"\n",
"<< 输出 >>\n",
"```json\n",
"{{{{\n",
" \"destination\": 字符串 \\ 使用的提示名字或者使用 \"DEFAULT\"\n",
" \"next_inputs\": 字符串 \\ 原始输入的改进版本\n",
"}}}}\n",
"```\n",
"\n",
"\"\"\""
]
},
{
@ -1057,7 +1364,7 @@
},
{
"cell_type": "code",
"execution_count": 38,
"execution_count": 34,
"id": "1387109d",
"metadata": {},
"outputs": [],
@ -1085,7 +1392,7 @@
},
{
"cell_type": "code",
"execution_count": 39,
"execution_count": 35,
"id": "2fb7d560",
"metadata": {},
"outputs": [],
@ -1118,8 +1425,8 @@
},
{
"cell_type": "code",
"execution_count": 21,
"id": "d86b2131",
"execution_count": null,
"id": "2217d987",
"metadata": {},
"outputs": [
{
@ -1139,9 +1446,8 @@
"'Black body radiation is the electromagnetic radiation emitted by a perfect black body, which absorbs all incident radiation and reflects none. It is characterized by a continuous spectrum of radiated energy that is dependent on the temperature of the body, with higher temperatures leading to more intense and shorter wavelength radiation. This phenomenon is an important concept in thermal physics and has numerous applications, ranging from understanding stellar spectra to designing artificial light sources.'"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
"output_type": "display_data"
}
],
"source": [
@ -1151,7 +1457,7 @@
},
{
"cell_type": "code",
"execution_count": 24,
"execution_count": 36,
"id": "4446724c",
"metadata": {},
"outputs": [
@ -1162,24 +1468,57 @@
"\n",
"\n",
"\u001b[1m> Entering new MultiPromptChain chain...\u001b[0m\n",
"physics: {'input': 'What is a black hole made of?'}\n",
"physics: {'input': '什么是黑体辐射?'}\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
]
},
{
"data": {
"text/plain": [
"'A black hole is not made of any material substance that we know of. It is formed by the collapse of a massive object, such as a star, into an infinitely small point called a singularity. This singularity has infinite density and gravity, and is surrounded by an event horizon, which is the point of no return for anything that gets too close to the black hole. So, in essence, a black hole is made of nothing but gravity.'"
"'黑体辐射是指一个理想化的物体它能够完全吸收所有入射到它表面的辐射能量并以热辐射的形式重新发射出来。黑体辐射的特点是其辐射能量的分布与温度有关随着温度的升高辐射能量的峰值会向更短的波长方向移动。这个现象被称为黑体辐射谱的位移定律由普朗克在20世纪初提出。黑体辐射在研究热力学、量子力学和宇宙学等领域中具有重要的应用。'"
]
},
"execution_count": 24,
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#中文\n",
"chain.run(\"黑洞是种什么物质?\")"
"chain.run(\"什么是黑体辐射?\")"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "ef81eda3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"\u001b[1m> Entering new MultiPromptChain chain...\u001b[0m\n",
"History: {'input': '你知道李白是谁嘛?'}\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
]
},
{
"data": {
"text/plain": [
"'李白是唐朝时期的一位著名诗人。他的诗歌以豪放、奔放、自由的风格著称,被誉为“诗仙”。他的作品涉及广泛,包括山水田园、历史传说、哲理思考等多个方面,对中国古典文学的发展产生了深远的影响。'"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 中文\n",
"chain.run(\"你知道李白是谁嘛?\")"
]
},
{
@ -1224,6 +1563,53 @@
"chain.run(\"what is 2 + 2\")"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "795bea17",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"\u001b[1m> Entering new MultiPromptChain chain...\u001b[0m\n",
"math: {'input': '2 + 2 等于多少'}"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Retrying langchain.chat_models.openai.ChatOpenAI.completion_with_retry.<locals>._completion_with_retry in 1.0 seconds as it raised ServiceUnavailableError: The server is overloaded or not ready yet..\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
]
},
{
"data": {
"text/plain": [
"'2 + 2 等于 4。'"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 中文\n",
"chain.run(\"2 + 2 等于多少\")"
]
},
{
"attachments": {},
"cell_type": "markdown",
@ -1270,8 +1656,8 @@
},
{
"cell_type": "code",
"execution_count": 41,
"id": "ef81eda3",
"execution_count": 38,
"id": "a64d0759",
"metadata": {},
"outputs": [
{
@ -1281,24 +1667,24 @@
"\n",
"\n",
"\u001b[1m> Entering new MultiPromptChain chain...\u001b[0m\n",
"History: {'input': '你知道李白是谁嘛?'}\n",
"None: {'input': '为什么我们身体里的每个细胞都包含DNA'}\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
]
},
{
"data": {
"text/plain": [
"'李白是唐朝时期的一位著名诗人。他的诗歌以豪放、奔放、自由的风格著称,被誉为“诗仙”。他的作品涉及广泛,包括山水田园、历史传说、哲理思考等多个方面,对中国古典文学的发展产生了深远的影响。'"
"'我们身体里的每个细胞都包含DNA是因为DNA是遗传信息的载体。DNA是由四种碱基腺嘌呤、鸟嘌呤、胸腺嘧啶和鳞嘌呤组成的长链状分子它存储了生物体的遗传信息包括个体的特征、生长发育、代谢功能等。每个细胞都需要这些遗传信息来执行其特定的功能和任务因此每个细胞都需要包含DNA。此外DNA还能通过复制和传递给下一代细胞和个体以保证遗传信息的传承。'"
]
},
"execution_count": 41,
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 中文\n",
"chain.run(\"你知道李白是谁嘛?\")"
"chain.run(\"为什么我们身体里的每个细胞都包含DNA\")"
]
}
],
@ -1318,7 +1704,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.16"
"version": "3.10.9"
}
},
"nbformat": 4,

View File

@ -1,11 +1,20 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "f200ba9a",
"metadata": {},
"source": [
"# 5 基于文档的问答 \n",
"<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#5.1-导入embedding模型和向量存储组件\" data-toc-modified-id=\"5.1-导入embedding模型和向量存储组件-1\">5.1 导入embedding模型和向量存储组件</a></span><ul class=\"toc-item\"><li><span><a href=\"#5.1.2-创建向量存储\" data-toc-modified-id=\"5.1.2-创建向量存储-1.1\">5.1.2 创建向量存储</a></span></li><li><span><a href=\"#5.1.3-使用语言模型与文档结合使用\" data-toc-modified-id=\"5.1.3-使用语言模型与文档结合使用-1.2\">5.1.3 使用语言模型与文档结合使用</a></span></li></ul></li><li><span><a href=\"#5.2-如何回答我们文档的相关问题\" data-toc-modified-id=\"5.2-如何回答我们文档的相关问题-2\">5.2 如何回答我们文档的相关问题</a></span><ul class=\"toc-item\"><li><span><a href=\"#5.2.1-不同类型的chain链\" data-toc-modified-id=\"5.2.1-不同类型的chain链-2.1\">5.2.1 不同类型的chain链</a></span></li></ul></li></ul></div>"
]
},
{
"cell_type": "markdown",
"id": "52824b89-532a-4e54-87e9-1410813cd39e",
"metadata": {},
"source": [
"# 第四章 基于LangChain的文档问答\n",
"\n",
"本章内容主要利用langchain构建向量数据库可以在文档上方或关于文档回答问题因此给定从PDF文件、网页或某些公司的内部文档收集中提取的文本使用llm回答有关这些文档内容的问题"
]
},
@ -16,18 +25,22 @@
"height": 30
},
"source": [
"## 环境配置\n",
"\n",
"\n",
"安装langchain设置chatGPT的OPENAI_API_KEY\n",
"\n",
"* 安装langchain\n",
"\n",
"```\n",
"pip install langchain\n",
"```\n",
"* 安装docarray\n",
"\n",
"```\n",
"pip install docarray\n",
"```\n",
"* 设置API-KEY环境变量\n",
"\n",
"```\n",
"export OPENAI_API_KEY='api-key'\n",
"\n",
@ -81,7 +94,7 @@
"height": 30
},
"source": [
"### 导入embedding模型和向量存储组件\n",
"## 5.1 导入embedding模型和向量存储组件\n",
"使用Dock Array内存搜索向量存储作为一个内存向量存储不需要连接外部数据库"
]
},
@ -264,7 +277,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "3bd6422c",
"metadata": {},
@ -273,12 +285,11 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "2963fc63",
"metadata": {},
"source": [
"#### 创建向量存储\n",
"### 5.1.2 创建向量存储\n",
"将导入一个索引,即向量存储索引创建器"
]
},
@ -373,7 +384,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "eb74cc79",
"metadata": {},
@ -382,12 +392,11 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "dd34e50e",
"metadata": {},
"source": [
"#### 使用语言模型与文档结合使用\n",
"### 5.1.3 使用语言模型与文档结合使用\n",
"想要使用语言模型并将其与我们的许多文档结合使用但是语言模型一次只能检查几千个单词如果我们有非常大的文档如何让语言模型回答关于其中所有内容的问题呢通过embedding和向量存储实现\n",
"* embedding \n",
"文本片段创建数值表示文本语义,相似内容的文本片段将具有相似的向量,这使我们可以在向量空间中比较文本片段\n",
@ -594,12 +603,11 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "fe41b36f",
"metadata": {},
"source": [
"### 如何回答我们文档的相关问题\n",
"## 5.2 如何回答我们文档的相关问题\n",
"首先,我们需要从这个向量存储中创建一个检索器,检索器是一个通用接口,可以由任何接受查询并返回文档的方法支持。接下来,因为我们想要进行文本生成并返回自然语言响应\n"
]
},
@ -685,7 +693,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "12f042e7",
"metadata": {},
@ -779,7 +786,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "e28c5657",
"metadata": {},
@ -788,12 +794,11 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "44f1fa38",
"metadata": {},
"source": [
"#### 不同类型的chain链\n",
"### 5.2.1 不同类型的chain链\n",
"想在许多不同类型的块上执行相同类型的问答该怎么办之前的实验中只返回了4个文档如果有多个文档那么我们可以使用几种不同的方法\n",
"* Map Reduce \n",
"将所有块与问题一起传递给语言模型,获取回复,使用另一个语言模型调用将所有单独的回复总结成最终答案,它可以在任意数量的文档上运行。可以并行处理单个问题,同时也需要更多的调用。它将所有文档视为独立的\n",
@ -804,12 +809,6 @@
"* Stuff \n",
"将所有内容组合成一个文档"
]
},
{
"cell_type": "markdown",
"id": "7988f412",
"metadata": {},
"source": []
}
],
"metadata": {
@ -828,7 +827,20 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.16"
"version": "3.9.12"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
}
},
"nbformat": 4,

View File

@ -0,0 +1,64 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "87f7cfaa",
"metadata": {},
"source": [
"# 8. 总结\n",
"\n",
"\n",
"本次简短课程涵盖了一系列LangChain的应用实践包括处理顾客评论和基于文档回答问题以及通过LLM判断何时求助外部工具 (如网站) 来回答复杂问题。\n",
"\n",
"**👍🏻 LangChain如此强大**\n",
"\n",
"构建这类应用曾经需要耗费数周时间而现在只需要非常少的代码就可以通过LangChain高效构建所需的应用程序。LangChain已成为开发大模型应用的有力范式希望大家拥抱这个强大工具积极探索更多更广泛的应用场景。\n",
"\n",
"**🌈 不同组合, 更多可能性**\n",
"\n",
"LangChain还可以协助我们做什么呢基于CSV文件回答问题、查询sql数据库、与api交互有很多例子通过Chain以及不同的提示Prompts和输出解析器output parsers组合得以实现。\n",
"\n",
"**💪🏻 出发 去探索新世界吧**\n",
"\n",
"因此非常感谢社区中做出贡献的每一个人无论是协助文档的改进还是让其他人更容易上手还是构建新的Chain打开一个全新的世界。\n",
"\n",
"如果你还没有这样做,快去打开电脑,运行 pip install LangChain然后去使用LangChain、搭建惊艳的应用吧~\n",
"\n"
]
}
],
"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"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -1,20 +0,0 @@
## 吴恩达 LangChain大模型应用开发 总结篇
## LangChain for LLM Application Development
本次简短课程涵盖了一系列LangChain的应用实践包括处理顾客评论和基于文档回答问题以及通过LLM判断何时求助外部工具 (如网站) 来回答复杂问题。
### 👍🏻 LangChain如此强大
构建这类应用曾经需要耗费数周时间而现在只需要非常少的代码就可以通过LangChain高效构建所需的应用程序。LangChain已成为开发大模型应用的有力范式希望大家拥抱这个强大工具积极探索更多更广泛的应用场景。
### 🌈 不同组合->更多可能性
LangChain还可以协助我们做什么呢基于CSV文件回答问题、查询sql数据库、与api交互有很多例子通过Chain以及不同的提示Prompts和输出解析器output parsers组合得以实现。
### 💪🏻 出发~去探索新世界吧~
因此非常感谢社区中做出贡献的每一个人无论是协助文档的改进还是让其他人更容易上手还是构建新的Chain打开一个全新的世界。
如果你还没有这样做,快去打开电脑,运行 pip install LangChain然后去使用LangChain、搭建惊艳的应用吧~

View File

@ -0,0 +1,434 @@
product_name,description
全自动咖啡机,"规格:
大型 - 尺寸13.8'' x 17.3''。
中型 - 尺寸11.5'' x 15.2''。
为什么我们热爱它:
这款全自动咖啡机是爱好者的理想选择。 一键操作,即可研磨豆子并沏制出您喜爱的咖啡。它的耐用性和一致性使它成为家庭和办公室的理想选择。
材质与护理:
清洁时只需轻擦。
构造:
由高品质不锈钢制成。
其他特性:
内置研磨器和滤网。
预设多种咖啡模式。
在中国制造。
有问题? 请随时联系我们的客户服务团队,他们会解答您的所有问题。"
电动牙刷,"规格:
一般大小 - 高度9.5''宽度1''。
为什么我们热爱它:
我们的电动牙刷采用先进的刷头设计和强大的电机,为您提供超凡的清洁力和舒适的刷牙体验。
材质与护理:
不可水洗,只需用湿布清洁。
构造:
由食品级塑料和尼龙刷毛制成。
其他特性:
具有多种清洁模式和定时功能。
USB充电。
在日本制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
橙味维生素C泡腾片,"规格:
每盒含有20片。
为什么我们热爱它:
我们的橙味维生素C泡腾片是快速补充维生素C的理想方式。每片含有500mg的维生素C可以帮助提升免疫力保护您的健康。
材质与护理:
请存放在阴凉干燥的地方,避免阳光直射。
构造:
主要成分为维生素C和柠檬酸钠。
其他特性:
含有天然橙味。
易于携带。
在美国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
无线蓝牙耳机,"规格:
单个耳机尺寸1.5'' x 1.3''。
为什么我们热爱它:
这款无线蓝牙耳机配备了降噪技术和长达8小时的电池续航力让您无论在哪里都可以享受无障碍的音乐体验。
材质与护理:
只需用湿布清洁。
构造:
由耐用的塑料和金属构成,配备有软质耳塞。
其他特性:
快速充电功能。
内置麦克风,支持接听电话。
在韩国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
瑜伽垫,"规格:
尺寸24'' x 68''。
为什么我们热爱它:
我们的瑜伽垫拥有出色的抓地力和舒适度,无论是做瑜伽还是健身,都是理想的选择。
材质与护理:
可用清水清洁,自然晾干。
构造:
由环保PVC材料制成。
其他特性:
附带便携包和绑带。
在印度制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
防水运动手表,"规格:
表盘直径40mm。
为什么我们热爱它:
这款防水运动手表配备了心率监测和计步功能,不仅适合日常佩戴,也是户外运动的理想伙伴。
材质与护理:
只需用湿布清洁。
构造:
由不锈钢和硅胶制成。
其他特性:
内置可充电电池。
支持蓝牙连接手机。
在瑞士制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
书籍:《机器学习基础》,"规格:
页数580页。
为什么我们热爱它:
《机器学习基础》以易懂的语言讲解了机器学习的基本概念和方法,适合初学者阅读。
材质与护理:
纸质封面,存放在阴凉干燥处。
构造:
由环保纸张和油墨印刷。
其他特性:
附带实例和习题。
在美国印刷。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
空气净化器,"规格:
尺寸15'' x 15'' x 20''。
为什么我们热爱它:
我们的空气净化器采用了先进的HEPA过滤技术能有效去除空气中的微粒和异味为您提供清新的室内环境。
材质与护理:
清洁时使用干布擦拭。
构造:
由塑料和电子元件制成。
其他特性:
三档风速,附带定时功能。
在德国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
陶瓷保温杯,"规格:
容量350ml。
为什么我们热爱它:
我们的陶瓷保温杯设计优雅,保温效果好,是办公室和户外活动的理想伴侣。
材质与护理:
可以手洗或洗碗机清洗。
构造:
由高品质陶瓷和不锈钢制成。
其他特性:
有多种颜色可选。
在中国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
宠物自动喂食器,"规格:
尺寸14'' x 9'' x 15''。
为什么我们热爱它:
我们的宠物自动喂食器可以定时定量投放食物,让您无论在家或外出都能确保宠物的饮食。
材质与护理:
可用湿布清洁。
构造:
由塑料和电子元件制成。
其他特性:
配备LCD屏幕操作简单。
可以设置多次投食。
在美国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
高清电视机,"规格:
尺寸50''。
为什么我们热爱它:
我们的高清电视机拥有出色的画质和强大的音效,带来沉浸式的观看体验。
材质与护理:
使用干布清洁。
构造:
由塑料、金属和电子元件制成。
其他特性:
支持网络连接,可以在线观看视频。
配备遥控器。
在韩国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
旅行背包,"规格:
尺寸18'' x 12'' x 6''。
为什么我们热爱它:
我们的旅行背包拥有多个实用的内外袋,轻松装下您的必需品,是短途旅行的理想选择。
材质与护理:
可以手洗,自然晾干。
构造:
由防水尼龙制成。
其他特性:
附带可调节背带和安全锁。
在中国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
太阳能庭院灯,"规格:
高度18''。
为什么我们热爱它:
我们的太阳能庭院灯无需电源,只需将其放在阳光下即可充电。到了晚上,它会自动点亮,为您的庭院增添温馨的氛围。
材质与护理:
可以用湿布清洁。
构造:
由塑料和太阳能板制成。
其他特性:
自动感应,日落后自动点亮。
在中国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
厨房刀具套装,"规格:
一套包括8把刀。
为什么我们热爱它:
我们的厨房刀具套装由专业级不锈钢制成,刀身坚固,刀刃锋利,切割效果出色,是厨房必备工具。
材质与护理:
建议手洗并立即擦干,以保持最佳状况。
构造:
由高品质不锈钢制成。
其他特性:
包括多种类型的刀,适合不同的用途。
在德国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
迷你无线蓝牙音箱,"规格:
直径3''高度2''。
为什么我们热爱它:
我们的迷你无线蓝牙音箱体积小巧,音质出色,可以轻松带给您音乐的享受。
材质与护理:
使用湿布擦拭清洁。
构造:
由塑料和金属构成。
其他特性:
内置可充电电池充满后可播放5小时。
在中国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
抗菌洗手液,"规格:
容量500ml。
为什么我们热爱它:
我们的抗菌洗手液含有天然植物精华,能有效杀灭细菌,同时滋润双手。
材质与护理:
直接涂抹在手上,然后用水冲洗。
构造:
由天然植物精华和抗菌成分制成。
其他特性:
具有清新的柠檬香味。
在法国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
纯棉T恤,"规格:
尺码S, M, L, XL, XXL。
为什么我们热爱它:
我们的纯棉T恤采用高品质棉质柔软舒适透气性好是日常穿着的理想选择。
材质与护理:
可以机洗,建议反面洗涤,以保持颜色鲜艳。
构造:
由100%纯棉制成。
其他特性:
有多种颜色可选。
在中国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
自动咖啡机,"规格:
尺寸12'' x 8'' x 14''。
为什么我们热爱它:
我们的自动咖啡机可以轻松制作美味的咖啡,只需按一下钮,就能享受到新鲜的咖啡。
材质与护理:
可以用湿布清洁外部,内部配件可以拆卸清洗。
构造:
由不锈钢和塑料制成。
其他特性:
可调节咖啡浓度。
在意大利制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
摄像头保护套,"规格:
适用于各种品牌和型号的摄像头。
为什么我们热爱它:
我们的摄像头保护套可以有效保护您的摄像头不受灰尘和刮擦的影响。
材质与护理:
使用湿布擦拭。
构造:
由耐磨的合成纤维制成。
其他特性:
设计简洁,易于安装。
在中国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
玻璃保护膜,"规格:
适用于各种尺寸的手机屏幕。
为什么我们热爱它:
我们的玻璃保护膜可以有效防止手机屏幕刮伤和破裂,而且不影响触控的灵敏度。
材质与护理:
使用干布擦拭。
构造:
由高强度的玻璃材料制成。
其他特性:
安装简单,适合自行安装。
在日本制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
儿童益智玩具,"规格:
适合3岁以上的儿童。
为什么我们热爱它:
我们的儿童益智玩具设计独特,色彩鲜艳,能够引发孩子的兴趣,同时训练他们的手眼协调能力和逻辑思维。
材质与护理:
使用湿布擦拭。
构造:
由环保无毒的塑料制成。
其他特性:
具有教育和娱乐的双重功能。
在中国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
迷你书架,"规格:
尺寸20'' x 8'' x 24''。
为什么我们热爱它:
我们的迷你书架占地面积小,设计简约,能够有效存放和展示您的书籍。
材质与护理:
使用干布擦拭。
构造:
由实木制成。
其他特性:
拥有3层收纳空间。
在中国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
防滑瑜伽垫,"规格:
尺寸72'' x 24''。
为什么我们热爱它:
我们的防滑瑜伽垫采用高品质环保材料,触感舒适,防滑效果好,是瑜伽爱好者的理想选择。
材质与护理:
可以用湿布清洁。
构造:
由环保PVC材料制成。
其他特性:
有多种颜色可选。
在中国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
LED台灯,"规格:
尺寸6'' x 6'' x 18''。
为什么我们热爱它:
我们的LED台灯亮度可调采用节能LED灯珠不仅可以提供明亮的光照还可以节省能源。
材质与护理:
使用湿布擦拭。
构造:
由金属和塑料制成。
其他特性:
具有触控开关和调光功能。
在中国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
水晶酒杯,"规格:
容量250ml。
为什么我们热爱它:
我们的水晶酒杯采用高品质水晶玻璃制成,造型优雅,是享受美酒的理想选择。
材质与护理:
建议手洗。
构造:
由水晶玻璃制成。
其他特性:
适合各种场合使用。
在法国制造。
有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。"
1 product_name description
2 全自动咖啡机 规格: 大型 - 尺寸:13.8'' x 17.3''。 中型 - 尺寸:11.5'' x 15.2''。 为什么我们热爱它: 这款全自动咖啡机是爱好者的理想选择。 一键操作,即可研磨豆子并沏制出您喜爱的咖啡。它的耐用性和一致性使它成为家庭和办公室的理想选择。 材质与护理: 清洁时只需轻擦。 构造: 由高品质不锈钢制成。 其他特性: 内置研磨器和滤网。 预设多种咖啡模式。 在中国制造。 有问题? 请随时联系我们的客户服务团队,他们会解答您的所有问题。
3 电动牙刷 规格: 一般大小 - 高度:9.5'',宽度:1''。 为什么我们热爱它: 我们的电动牙刷采用先进的刷头设计和强大的电机,为您提供超凡的清洁力和舒适的刷牙体验。 材质与护理: 不可水洗,只需用湿布清洁。 构造: 由食品级塑料和尼龙刷毛制成。 其他特性: 具有多种清洁模式和定时功能。 USB充电。 在日本制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
4 橙味维生素C泡腾片 规格: 每盒含有20片。 为什么我们热爱它: 我们的橙味维生素C泡腾片是快速补充维生素C的理想方式。每片含有500mg的维生素C,可以帮助提升免疫力,保护您的健康。 材质与护理: 请存放在阴凉干燥的地方,避免阳光直射。 构造: 主要成分为维生素C和柠檬酸钠。 其他特性: 含有天然橙味。 易于携带。 在美国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
5 无线蓝牙耳机 规格: 单个耳机尺寸:1.5'' x 1.3''。 为什么我们热爱它: 这款无线蓝牙耳机配备了降噪技术和长达8小时的电池续航力,让您无论在哪里都可以享受无障碍的音乐体验。 材质与护理: 只需用湿布清洁。 构造: 由耐用的塑料和金属构成,配备有软质耳塞。 其他特性: 快速充电功能。 内置麦克风,支持接听电话。 在韩国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
6 瑜伽垫 规格: 尺寸:24'' x 68''。 为什么我们热爱它: 我们的瑜伽垫拥有出色的抓地力和舒适度,无论是做瑜伽还是健身,都是理想的选择。 材质与护理: 可用清水清洁,自然晾干。 构造: 由环保PVC材料制成。 其他特性: 附带便携包和绑带。 在印度制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
7 防水运动手表 规格: 表盘直径:40mm。 为什么我们热爱它: 这款防水运动手表配备了心率监测和计步功能,不仅适合日常佩戴,也是户外运动的理想伙伴。 材质与护理: 只需用湿布清洁。 构造: 由不锈钢和硅胶制成。 其他特性: 内置可充电电池。 支持蓝牙连接手机。 在瑞士制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
8 书籍:《机器学习基础》 规格: 页数:580页。 为什么我们热爱它: 《机器学习基础》以易懂的语言讲解了机器学习的基本概念和方法,适合初学者阅读。 材质与护理: 纸质封面,存放在阴凉干燥处。 构造: 由环保纸张和油墨印刷。 其他特性: 附带实例和习题。 在美国印刷。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
9 空气净化器 规格: 尺寸:15'' x 15'' x 20''。 为什么我们热爱它: 我们的空气净化器采用了先进的HEPA过滤技术,能有效去除空气中的微粒和异味,为您提供清新的室内环境。 材质与护理: 清洁时使用干布擦拭。 构造: 由塑料和电子元件制成。 其他特性: 三档风速,附带定时功能。 在德国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
10 陶瓷保温杯 规格: 容量:350ml。 为什么我们热爱它: 我们的陶瓷保温杯设计优雅,保温效果好,是办公室和户外活动的理想伴侣。 材质与护理: 可以手洗或洗碗机清洗。 构造: 由高品质陶瓷和不锈钢制成。 其他特性: 有多种颜色可选。 在中国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
11 宠物自动喂食器 规格: 尺寸:14'' x 9'' x 15''。 为什么我们热爱它: 我们的宠物自动喂食器可以定时定量投放食物,让您无论在家或外出都能确保宠物的饮食。 材质与护理: 可用湿布清洁。 构造: 由塑料和电子元件制成。 其他特性: 配备LCD屏幕,操作简单。 可以设置多次投食。 在美国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
12 高清电视机 规格: 尺寸:50''。 为什么我们热爱它: 我们的高清电视机拥有出色的画质和强大的音效,带来沉浸式的观看体验。 材质与护理: 使用干布清洁。 构造: 由塑料、金属和电子元件制成。 其他特性: 支持网络连接,可以在线观看视频。 配备遥控器。 在韩国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
13 旅行背包 规格: 尺寸:18'' x 12'' x 6''。 为什么我们热爱它: 我们的旅行背包拥有多个实用的内外袋,轻松装下您的必需品,是短途旅行的理想选择。 材质与护理: 可以手洗,自然晾干。 构造: 由防水尼龙制成。 其他特性: 附带可调节背带和安全锁。 在中国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
14 太阳能庭院灯 规格: 高度:18''。 为什么我们热爱它: 我们的太阳能庭院灯无需电源,只需将其放在阳光下即可充电。到了晚上,它会自动点亮,为您的庭院增添温馨的氛围。 材质与护理: 可以用湿布清洁。 构造: 由塑料和太阳能板制成。 其他特性: 自动感应,日落后自动点亮。 在中国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
15 厨房刀具套装 规格: 一套包括8把刀。 为什么我们热爱它: 我们的厨房刀具套装由专业级不锈钢制成,刀身坚固,刀刃锋利,切割效果出色,是厨房必备工具。 材质与护理: 建议手洗并立即擦干,以保持最佳状况。 构造: 由高品质不锈钢制成。 其他特性: 包括多种类型的刀,适合不同的用途。 在德国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
16 迷你无线蓝牙音箱 规格: 直径:3'',高度:2''。 为什么我们热爱它: 我们的迷你无线蓝牙音箱体积小巧,音质出色,可以轻松带给您音乐的享受。 材质与护理: 使用湿布擦拭清洁。 构造: 由塑料和金属构成。 其他特性: 内置可充电电池,充满后可播放5小时。 在中国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
17 抗菌洗手液 规格: 容量:500ml。 为什么我们热爱它: 我们的抗菌洗手液含有天然植物精华,能有效杀灭细菌,同时滋润双手。 材质与护理: 直接涂抹在手上,然后用水冲洗。 构造: 由天然植物精华和抗菌成分制成。 其他特性: 具有清新的柠檬香味。 在法国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
18 纯棉T恤 规格: 尺码:S, M, L, XL, XXL。 为什么我们热爱它: 我们的纯棉T恤采用高品质棉质,柔软舒适,透气性好,是日常穿着的理想选择。 材质与护理: 可以机洗,建议反面洗涤,以保持颜色鲜艳。 构造: 由100%纯棉制成。 其他特性: 有多种颜色可选。 在中国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
19 自动咖啡机 规格: 尺寸:12'' x 8'' x 14''。 为什么我们热爱它: 我们的自动咖啡机可以轻松制作美味的咖啡,只需按一下钮,就能享受到新鲜的咖啡。 材质与护理: 可以用湿布清洁外部,内部配件可以拆卸清洗。 构造: 由不锈钢和塑料制成。 其他特性: 可调节咖啡浓度。 在意大利制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
20 摄像头保护套 规格: 适用于各种品牌和型号的摄像头。 为什么我们热爱它: 我们的摄像头保护套可以有效保护您的摄像头不受灰尘和刮擦的影响。 材质与护理: 使用湿布擦拭。 构造: 由耐磨的合成纤维制成。 其他特性: 设计简洁,易于安装。 在中国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
21 玻璃保护膜 规格: 适用于各种尺寸的手机屏幕。 为什么我们热爱它: 我们的玻璃保护膜可以有效防止手机屏幕刮伤和破裂,而且不影响触控的灵敏度。 材质与护理: 使用干布擦拭。 构造: 由高强度的玻璃材料制成。 其他特性: 安装简单,适合自行安装。 在日本制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
22 儿童益智玩具 规格: 适合3岁以上的儿童。 为什么我们热爱它: 我们的儿童益智玩具设计独特,色彩鲜艳,能够引发孩子的兴趣,同时训练他们的手眼协调能力和逻辑思维。 材质与护理: 使用湿布擦拭。 构造: 由环保无毒的塑料制成。 其他特性: 具有教育和娱乐的双重功能。 在中国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
23 迷你书架 规格: 尺寸:20'' x 8'' x 24''。 为什么我们热爱它: 我们的迷你书架占地面积小,设计简约,能够有效存放和展示您的书籍。 材质与护理: 使用干布擦拭。 构造: 由实木制成。 其他特性: 拥有3层收纳空间。 在中国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
24 防滑瑜伽垫 规格: 尺寸:72'' x 24''。 为什么我们热爱它: 我们的防滑瑜伽垫采用高品质环保材料,触感舒适,防滑效果好,是瑜伽爱好者的理想选择。 材质与护理: 可以用湿布清洁。 构造: 由环保PVC材料制成。 其他特性: 有多种颜色可选。 在中国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
25 LED台灯 规格: 尺寸:6'' x 6'' x 18''。 为什么我们热爱它: 我们的LED台灯亮度可调,采用节能LED灯珠,不仅可以提供明亮的光照,还可以节省能源。 材质与护理: 使用湿布擦拭。 构造: 由金属和塑料制成。 其他特性: 具有触控开关和调光功能。 在中国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。
26 水晶酒杯 规格: 容量:250ml。 为什么我们热爱它: 我们的水晶酒杯采用高品质水晶玻璃制成,造型优雅,是享受美酒的理想选择。 材质与护理: 建议手洗。 构造: 由水晶玻璃制成。 其他特性: 适合各种场合使用。 在法国制造。 有问题?请随时联系我们的客户服务团队,他们会解答您的所有问题。

View File

@ -4,7 +4,7 @@
### 目录
1. 简介 Introduction @Sarai
2. 模型提示和解析器 Models, Prompts and Output Parsers @Joye
2. 模型提示和解析器 Models, Prompts and Output Parsers @Joye
3. 存储 Memory @徐虎
4. 模型链 Chains @徐虎
5. 基于文档的问答 Question and Answer @苟晓攀