更新环境配置章节
This commit is contained in:
@ -43,7 +43,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"本教程使用 OpenAI 所开放的 ChatGPT API,因此您需要首先拥有一个 ChatGPT 的 API_KEY(也可以直接访问官方网址在线测试),然后需要安装 openai 的第三方库"
|
||||
"本教程使用 OpenAI 所开放的 ChatGPT API,因此您需要首先拥有一个 ChatGPT 的 API_KEY(也可以直接访问官方网址在线测试),然后需要安装 OpenAI 的第三方库。为了兼顾简便与兼容性,本教程将介绍在 ```Python 3``` 环境中基于 ```openai.api_key``` 方法的配置。另有基于环境变量的配置方法,详情请参考 [OpenAI 官方文档](https://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety)。"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -51,31 +51,12 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"首先需要安装所需第三方库:\n",
|
||||
"\n",
|
||||
"openai:\n",
|
||||
"\n",
|
||||
"首先需要安装 OpenAI 库:\n",
|
||||
"```bash\n",
|
||||
"pip install openai\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"dotenv:\n",
|
||||
"\n",
|
||||
"```bash\n",
|
||||
"pip install -U python-dotenv\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 30,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 将自己的 API-KEY 导入系统环境变量\n",
|
||||
"!export OPENAI_API_KEY='api-key'"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
@ -83,15 +64,16 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import openai\n",
|
||||
"import os\n",
|
||||
"from dotenv import load_dotenv, find_dotenv\n",
|
||||
"# 导入第三方库\n",
|
||||
"\n",
|
||||
"_ = load_dotenv(find_dotenv())\n",
|
||||
"# 读取系统中的环境变量\n",
|
||||
"openai.api_key = \"sk-...\"\n",
|
||||
"# 设置 API_KEY, 请替换成您自己的 API_KEY\n",
|
||||
"\n",
|
||||
"openai.api_key = os.getenv('OPENAI_API_KEY')\n",
|
||||
"# 设置 API_KEY"
|
||||
"# 以下为基于环境变量的配置方法示例,这样更加安全。仅供参考,后续将不再涉及。\n",
|
||||
"# import openai\n",
|
||||
"# import os\n",
|
||||
"# OPENAI_API_KEY = os.environ.get(\"OPENAI_API_KEY\")\n",
|
||||
"# openai.api_key = OPENAI_API_KEY\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -99,7 +81,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"整个课程将以 gpt-3.5-turbo 模型为例。我们将在后续课程中深入探究 OpenAI 提供的 [Chat Completions API](https://platform.openai.com/docs/guides/gpt/chat-completions-api) 的使用方法,在此处,我们先将它封装成一个函数,您无需知道其内部机理,仅需知道调用该函数输入 Prompt 其将会给出对应的 Completion 即可。"
|
||||
"整个课程将以 gpt-3.5-turbo 模型为例。我们将在后续课程中深入探究 OpenAI 提供的 [Chat Completions API](https://platform.openai.com/docs/guides/gpt/chat-completions-api) 的使用方法,在此处,我们先将它封装成一个函数,您无需知道其内部机理,仅需知道调用该函数,以 Prompt 为输入参数,其将会输出对应的 Completion (回答结果)即可。"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -147,7 +129,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**2.1.1 使用分隔符清晰地表示输入的不同部分**,分隔符可以是:```,\"\",<>,:,\\<tag> \\</tag>等\n",
|
||||
"**2.1.1 使用分隔符清晰地表示输入的不同部分**\n",
|
||||
"\n",
|
||||
"分隔符可以是:```,\"\",<>,:,\\<tag> \\</tag>等。\n",
|
||||
"\n",
|
||||
"您可以使用任何明显的标点符号将特定的文本部分与 Prompt 的其余部分分开。标记的形式不限,只需要让模型明确知道这是一个单独部分。使用分隔符可以有效避免提示词注入( Prompt injection )。提示词注入是指如果允许用户将某些输入添加到(开发者预定义的) Prompt 中,则所提供的指令可能会与开发者想要执行的操作相冲突,从而使 LLM 遵循用户输入的指令,而非执行开发者预期的操作。即,输入里面可能包含其他指令,会覆盖掉您的指令。对此,使用分隔符是一个不错的策略。\n",
|
||||
"\n",
|
||||
@ -217,6 +201,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n",
|
||||
"提供清晰具体的指示,避免无关或不正确响应,不要混淆写清晰和写简短,更长的提示可以提供更多清晰度和上下文信息,导致更详细和相关的输出。"
|
||||
]
|
||||
},
|
||||
@ -225,7 +210,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**2.1.2 寻求结构化的输出**,可以是 Json、HTML 等格式\n",
|
||||
"**2.1.2 寻求结构化的输出**\n",
|
||||
"\n",
|
||||
"输出可以是 Json、HTML 等格式。\n",
|
||||
"\n",
|
||||
"第二个策略是要求生成一个结构化的输出,这可以使模型的输出更容易被我们解析,例如,您可以在 Python 中将其读入字典或列表中。\n",
|
||||
"\n",
|
||||
@ -318,6 +305,11 @@
|
||||
"print(response)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
@ -515,6 +507,11 @@
|
||||
"print(response)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
@ -591,7 +588,7 @@
|
||||
"source": [
|
||||
"### 2.2 给模型时间去思考\n",
|
||||
"\n",
|
||||
"如果您发现模型推理过程过于匆忙,导致得出了错误的结论,那么您应该尝试重新构思 Prompt ,要求模型在提供最终答案之前开展思维链,或进行一系列相关推理(a chain or series of relevant reasoning)。换句话说,如果您给模型一个在短时间内或用少量文字无法完成的复杂任务,它的输出结果就容易出错。这种情况对人来说也是类似:如果您要求某人完成复杂的数学问题,又不给足够时间计算出答案,他们也可能会犯错误。因此,在这些情况下,您应该指示模型花更多时间思考问题,让它在任务上花费更多计算资源。"
|
||||
"如果您发现模型推理过程过于匆忙,导致得出了错误的结论,那么您应该尝试重新构思 Prompt ,要求模型在提供最终答案之前开展**思维链**,或进行一系列相关推理(a chain or series of relevant reasoning)。换句话说,如果您给模型一个在短时间内或用少量文字无法完成的复杂任务,它的输出结果就容易出错。这种情况对人来说也是类似:如果您要求某人完成复杂的数学问题,又不给足够时间计算出答案,他们也可能会犯错误。因此,在这些情况下,您应该指示模型花更多时间思考问题,让它在任务上花费更多计算资源。"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -601,7 +598,7 @@
|
||||
"source": [
|
||||
"**2.2.1 指定完成任务所需的步骤**\n",
|
||||
"\n",
|
||||
"接下来我们将通过给定一个复杂任务,给出完成该任务的一系列步骤,来展示这一策略的效果"
|
||||
"接下来我们将通过给定一个复杂任务,给出完成该任务的一系列步骤,来展示这一策略的效果。"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -712,6 +709,11 @@
|
||||
"print(response)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
@ -1066,6 +1068,11 @@
|
||||
"print(response)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
@ -1084,7 +1091,7 @@
|
||||
"\n",
|
||||
"**虚假知识**:模型偶尔会生成一些看似真实实则编造的知识\n",
|
||||
"\n",
|
||||
"如果模型在训练过程中接触了大量的知识,它并没有完全记住所见的信息,因此它并不很清楚自己知识的边界。这意味着它可能会尝试回答主题晦涩难懂的问题,并编造听起来合理但实际上并不正确的答案。我们称这些编造的想法为幻觉(Hallucination)。\n",
|
||||
"虽然模型在训练过程中接触了大量的知识,但它并没有*完全*记住所见的信息,因此它不甚清楚自己知识的边界。这意味着它可能会尝试回答主题晦涩难懂的问题,并编造听起来合理但实际上并不正确的答案。我们称这些编造的想法为幻觉(Hallucination)。\n",
|
||||
"\n",
|
||||
"如下示例展示了大模型的幻觉。我们要求告诉我们 Boie 公司生产的 *AeroGlide UltraSlim Smart Toothbrush* 产品的信息,事实上,这个公司是真实存在的,但产品是编造的,而模型一本正经地提供了它编造的知识,而且迷惑性很强。\n",
|
||||
"\n"
|
||||
@ -1150,6 +1157,11 @@
|
||||
"print(response)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
|
||||
@ -52,15 +52,10 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import openai\n",
|
||||
"import os\n",
|
||||
"from dotenv import load_dotenv, find_dotenv\n",
|
||||
"# 导入第三方库\n",
|
||||
"\n",
|
||||
"_ = load_dotenv(find_dotenv())\n",
|
||||
"# 读取系统中的环境变量\n",
|
||||
"\n",
|
||||
"openai.api_key = os.getenv('OPENAI_API_KEY')\n",
|
||||
"# 设置 API_KEY"
|
||||
"openai.api_key = \"sk-...\"\n",
|
||||
"# 设置 API_KEY, 请替换成您自己的 API_KEY\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@ -59,6 +59,20 @@
|
||||
"首先,我们需要引入 OpenAI 包,加载 API 密钥,定义 getCompletion 函数。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "1b4bfa7f",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import openai\n",
|
||||
"# 导入第三方库\n",
|
||||
"\n",
|
||||
"openai.api_key = \"sk-...\"\n",
|
||||
"# 设置 API_KEY, 请替换成您自己的 API_KEY\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
@ -66,11 +80,6 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import openai\n",
|
||||
"import os\n",
|
||||
"OPENAI_API_KEY = os.environ.get(\"OPENAI_API_KEY\")\n",
|
||||
"openai.api_key = OPENAI_API_KEY\n",
|
||||
"\n",
|
||||
"def get_completion(prompt, model=\"gpt-3.5-turbo\"): \n",
|
||||
" messages = [{\"role\": \"user\", \"content\": prompt}]\n",
|
||||
" response = openai.ChatCompletion.create(\n",
|
||||
|
||||
@ -27,10 +27,10 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import openai\n",
|
||||
"import os\n",
|
||||
"# 导入第三方库\n",
|
||||
"\n",
|
||||
"OPENAI_API_KEY = os.environ.get(\"OPENAI_API_KEY2\")\n",
|
||||
"openai.api_key = OPENAI_API_KEY"
|
||||
"openai.api_key = \"sk-...\"\n",
|
||||
"# 设置 API_KEY, 请替换成您自己的 API_KEY"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@ -20,16 +20,6 @@
|
||||
"同以上几章,你需要类似的代码来配置一个可以使用 OpenAI API 的环境"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 将自己的 API-KEY 导入系统环境变量\n",
|
||||
"!export OPENAI_API_KEY='api-key'"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
@ -37,15 +27,10 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import openai\n",
|
||||
"import os\n",
|
||||
"from dotenv import load_dotenv, find_dotenv\n",
|
||||
"# 导入第三方库\n",
|
||||
"\n",
|
||||
"_ = load_dotenv(find_dotenv())\n",
|
||||
"# 读取系统中的环境变量\n",
|
||||
"\n",
|
||||
"openai.api_key = os.getenv('OPENAI_API_KEY')\n",
|
||||
"# 设置 API_KEY"
|
||||
"openai.api_key = \"sk-...\"\n",
|
||||
"# 设置 API_KEY, 请替换成您自己的 API_KEY\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -9,9 +9,9 @@
|
||||
"source": [
|
||||
"# ChatGPT与ChatGLM对比\n",
|
||||
"\n",
|
||||
"  国产大模型有很多,比如文心一言、通义千问、星火、MOSS和ChatGLM等等,但现在明确可以部署在本地并且开放api的只有MOOS和ChatGLM。MOOS由于需要的GPU显存过大(不量化的情况下需要80GB,多轮对话还是会爆显存),但ChatGLM可以在笔记本电脑部署(int4版本只需要6GB显存即可)。所以本文采用ChatGLM与ChatGPT做对比,看看国产模型的优点和缺点。\n",
|
||||
"国产大模型有很多,比如文心一言、通义千问、星火、MOSS和ChatGLM等等,但现在明确可以部署在本地并且开放api的只有MOOS和ChatGLM。MOOS由于需要的GPU显存过大(不量化的情况下需要80GB,多轮对话还是会爆显存),但ChatGLM可以在笔记本电脑部署(int4版本只需要6GB显存即可)。所以本文采用ChatGLM与ChatGPT做对比,看看国产模型的优点和缺点。\n",
|
||||
"\n",
|
||||
"  会在选取本教程的各个方面进行对比,最后会总结ChatGPT与ChatGLM各自的优缺点。"
|
||||
"本文会选取本教程的各个方面进行对比,最后会总结ChatGPT与ChatGLM各自的优缺点。另外本文也适用于没有 OpenAI api key的读者,部署好chatglm-6B之后,使用后续介绍的函数也可以学完整个课程。"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -118,31 +118,12 @@
|
||||
"id": "b262731f-870d-4810-8b63-67da58a6a7b8",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"  本教程使用 OpenAI 所开放的 ChatGPT API,因此你需要首先拥有一个 ChatGPT 的 API_KEY(也可以直接访问官方网址在线测试),然后需要安装 openai 的第三方库\n",
|
||||
"\n",
|
||||
"  首先需要安装所需第三方库:\n",
|
||||
"\n",
|
||||
"```\n",
|
||||
" openai:\n",
|
||||
"\n",
|
||||
"引入 OpenAI 包,加载 API 密钥,定义 getCompletion 函数。\n",
|
||||
"```bash\n",
|
||||
" pip install openai\n",
|
||||
" dotenv:\n",
|
||||
"\n",
|
||||
" pip install -U python-dotenv\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "b6dbf0cd-8826-4e36-a8fc-357203cd0a34",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 将自己的 API-KEY 导入系统环境变量\n",
|
||||
"!export OPENAI_API_KEY='api-key'"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
@ -151,23 +132,10 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import openai\n",
|
||||
"import os\n",
|
||||
"from dotenv import load_dotenv, find_dotenv\n",
|
||||
"# 导入第三方库\n",
|
||||
"\n",
|
||||
"_ = load_dotenv(find_dotenv())\n",
|
||||
"# 读取系统中的环境变量\n",
|
||||
"\n",
|
||||
"openai.api_key = os.getenv('OPENAI_API_KEY')\n",
|
||||
"# 设置 API_KEY"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "75927919-bdcd-4534-8b4c-e77acca05eae",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"封装一个函数"
|
||||
"openai.api_key = \"sk-...\"\n",
|
||||
"# 设置 API_KEY, 请替换成您自己的 API_KEY\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user