如何安全地将OpenAI API密钥添加到系统环境中
OpenAI API密钥是访问OpenAI API服务的关键。本文将介绍怎么以安全的方式将API密钥添加到系统环境中,以便您可使用OpenAI的人工智能功能。
I. 了解OpenAI API密钥
A. OpenAI API密钥的作用
1. OpenAI API密钥用于访问OpenAI API服务,使您能够使用OpenAI的人工智能功能。
2. 它是您与OpenAI进行身份验证和授权的凭证。
B. 获得OpenAI API密钥
1. 登录OpenAI官方网站,导航到API密钥页面。
2. 创建一个新的API密钥,或使用现有的API密钥。
II. 将OpenAI API密钥添加到系统环境中
A. 使用终端命令添加API密钥
1. 打开终端,并履行以下命令:echo "export OPENAI_API_KEY='yourkey'" >> ~/.zshrc
2. 将yourkey
替换为您的实际API密钥,并履行命令。
B. 更新系统环境变量
1. 在终端中运行source ~/.zshrc
命令,以更新当前shell的环境变量。
2. 您现在可以在系统中的任何利用程序中使用OPENAI_API_KEY
环境变量。
III. Python中使用OpenAI API密钥
A. 设置环境变量
1. 在终端中履行以下命令:export OPENAI_API_KEY=<your-secret-key>
2. 将<your-secret-key>
替换为您的实际API密钥。
B. 使用OpenAI库
1. 在Python脚本中导入openai库。
2. 在代码中使用openai.api_key = <your-secret-key>
设置API密钥。
IV. 安全注意事项
A. 不要将API密钥直接暴露在公共代码中或版本控制系统中。
1. 可以通过将API密钥存储在单独的配置文件中,并在代码中援用该文件来增加安全性。
2. 请确保在共享或发布代码之前删除或替换任何包括API密钥的文件。
B. 定期更改API密钥以提高安全性。
1. OpenAI建议定期更改API密钥,以减少潜伏的安全风险。
2. 在更改API密钥后,请确保修改所有相关的利用程序和脚本,以使用新的API密钥。
V. 总结
OpenAI API密钥是访问OpenAI API服务的关键。您可以通过将API密钥添加到系统环境变量或在Python代码中设置来安全地使用它。为了确保安全性,不要直接暴露API密钥,并定期更改密钥。对API密钥的保护是保障您数据和系统安全的重要一步。
export openai_api_key= openai_api_key的进一步展开说明
# 进一步展开说明
## 快速开始
### 安装 LangChain
要安装 LangChain,可以运行以下命令:
使用 pip 安装:
“`
pip install langchain
“`
或使用 conda 安装:
“`
conda install langchain -c conda-forge
“`
### 详细安装指南
要了解更多详细信息,请查看我们的安装指南。
## 使用 LangChain
使用 LangChain 通常需要与一个或多个模型提供商、数据存储和 API 进行集成。在本例中,我们将使用 OpenAI 的模型 API。
首先,需要安装他们的 Python 包:
使用 pip 安装:
“`
pip install openai
“`
要访问 API,需要一个 API 密钥。可以通过创建一个账户并在[此处](https://openai.com/signup/)获得 API 密钥。拿到密钥后,我们需要将其设置为环境变量,方法是运行以下命令:
“`
export OPENAI_API_KEY=”your-api-key”
“`
如果您不想设置环境变量,您也能够直接通过初始化 OpenAI LLM 类时使用名为 openai_api_key 的参数来传递密钥:
“`
from langchain.llms import OpenAI
llm = OpenAI(openai_api_key=”your-api-key”)
“`
现在,我们可以开始构建语言模型利用程序了。LangChain 提供了许多模块,可用于构建语言模型利用程序。模块可以在简单利用程序中作为单独的模块使用,也能够在更复杂的用例中进行组合使用。
LangChain 利用程序的核心构建块是 LLMChain。它组合了三个要素:
1. LLM: 语言模型是核心推理引擎。要使用 LangChain,您需要了解区别类型的语言模型和如何与它们一起使用。
2. Prompt 模板: 这提供了与语言模型的指令。这控制语言模型的输出,因此了解如何构建提示和区别的提示策略相当重要。
3. 输出解析器: 它们将 LLM 的原始响应转换为更可操作的格式,使其易于在下游使用输出。
在这个入门指南中,我们将独立介绍这三个组件,然后介绍如何组合它们构成 LLMChain。理解这些概念将使您能够有效地使用和自定义 LangChain 利用程序。大多数 LangChain 利用程序允许您配置 LLM 和/或使用的提示,因此,了解如何利用这些配置项将是一个重要的能力。
## 语言模型的两种类型
LangChain中有两种类型的语言模型:
1. LLMs: 这是一种以字符串作为输入并返回字符串的语言模型。
2. ChatModels: 这是一种以消息列表作为输入并返回消息的语言模型。
LLMs 的输入/输出很简单易懂 – 只是一个字符串。但是 ChatModels 呢?输入是一个 ChatMessage 的列表,输出是单个 ChatMessage。ChatMessage 包括两个一定要组成部份:
– content: 这是消息的内容。
– role: 这是 ChatMessage 来自的实体的角色。
LangChain 提供了几个对象,以便轻松辨别区别角色:
– HumanMessage: 来自人类/用户的 ChatMessage。
– AIMessage: 来自 AI/助手的 ChatMessage。
– SystemMessage: 来自系统的 ChatMessage。
– FunctionMessage: 来自函数调用的 ChatMessage。
如果上述多种角色都不适合,还可使用 ChatMessage 类手动指定角色。要了解如何最有效地使用这些区别的消息,请参阅我们的提示指南。
LangChain 为这两种类型的模型提供了一个标准接口,但了解这类差异对构建特定语言模型的提示非常有用。LangChain 提供的标准接口有两种方法:
1. predict: 接受一个字符串作为输入,返回一个字符串。
2. predict_messages: 接受一个消息列表作为输入,返回一个消息。
让我们看看怎么处理这些区别类型的模型和区别类型的输入。首先,让我们导入一个 LLM 和一个 ChatModel。
“`
from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
llm = OpenAI()
chat_model = ChatOpenAI()
“`
接下来,让我们使用 predict 方法履行字符串输入。
“`
text = “What would be a good company name for a company that makes colorful socks?”
llm.predict(text)
# Output: “Hi”
chat_model.predict(text)
# Output: “Hi”
“`
OpenAI 和 ChatOpenAI 对象本质上只是配置对象。您可使用参数进行初始化,如温度等,并在各个对象之间传递。
最后,让我们使用 predict_messages 方法将其利用于消息列表。
“`
from langchain.schema import HumanMessage
text = “What would be a good company name for a company that makes colorful socks?”
messages = [HumanMessage(content=text)]
llm.predict_messages(messages)
# Output: “”
chat_model.predict_messages(messages)
# Output: “”
“`
对这两种方法,您还可以通过关键字参数传递参数。例如,您可以传递 temperature=0 来调剂在运行时使用的温度,该值将始终覆盖对象的配置。
大多数 LLM 利用程序不会直接将用户输入传递到 LLM 中。通常,它们会将用户输入添加到更大的文本片断中,称为提示模板,该片断提供有关特定任务的其他上下文信息。
在上面的例子中,我们传递给模型的文本包括了生成一个公司名称的指令。为了我们的利用程序,如果用户只需要提供公司/产品的描写,而无需担心给模型指令,那将非常方便。
这就是 PromptTemplates 能够解决的问题!它们捆绑了将用户输入转换为完全格式化提示的所有逻辑。这可以始于非常简单的情势 – 例如,生成上面字符串的提示只需以下:
“`
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template(“What is a good name for a company that makes {product}?”)
prompt.format(product=”colorful socks”)
# Output: “What is a good name for a company that makes colorful socks?”
“`
但是,使用这些与使用原始字符串格式化相比的优势有几个。可以局部格式化变量 – 例如,您可以一次只格式化某些变量。您可以将它们组合在一起,轻松地将区别的模板组合成一个提示。有关这些功能的解释,请参阅提示章节。
PromptTemplates 也可用于生成消息列表。在这类情况下,提示不但包括有关内容的信息,还包括每一个消息(其角色、在列表中的位置等)。在这里,最多见的是 ChatPromptTemplate 是 ChatMessageTemplates 的列表。每一个 ChatMessageTemplate 包括有关如何格式化该 ChatMessage 的指令 – 其角色,和其内容。以下是示例:
“`
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
template = “You are a helpful assistant that translates {input_language} to {output_language}.”
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = “{text}”
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chat_prompt.format_messages(input_language=”English”, output_language=”French”, text=”I love programming.”)
# Output:
# [
# SystemMessage(content=”You are a helpful assistant that translates English to French.”, additional_kwargs={}),
# HumanMessage(content=”I love programming.”)
# ]
“`
ChatPromptTemplates 还可以包括除 ChatMessageTemplates 以外的其他内容 – 请参阅提示章节以了解更多详细信息。
OutputParsers 将 LLM 的原始输出转换为下游可用的格式。它们主要有以下几种类型的 OutputParsers:
– 将 LLM 的文本转换为结构化信息(例如 JSON)。
– 将 ChatMessage 转换为仅包括字符串。
– 将调用返回的消息以外的其他信息(如 OpenAI 函数调用)转换为字符串。
有关所有详细信息,请参阅输出解析器章节。
在这个入门指南中,我们将编写一个自定义的输出解析器 – 将逗号分隔的列表转换为列表的情势。
“`
from langchain.schema import BaseOutputParser
class CommaSeparatedListOutputParser(BaseOutputParser):
“””Parse the output of an LLM call to a comma-separated list.”””
def parse(self, text: str):
“””Parse the output of an LLM call.”””
return text.strip().split(“, “)
CommaSeparatedListOutputParser().parse(“hi, bye”)
# Output: [‘hi’, ‘bye’]
“`
现在,我们可以将所有这些组合成一个链。该链将接收输入变量,将其传递给提示模板以创建提示,将提示传递给 LLM,然后通过一个(可选的)输出解析器处理输出。这是捆绑一个模块化逻辑的便捷方式。让我们看看它的作用!
“`
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser
class CommaSeparatedListOutputParser(BaseOutputParser):
“””Parse the output of an LLM call to a comma-separated list.”””
def parse(self, text: str):
“””Parse the output of an LLM call.”””
return text.strip().split(“, “)
template = “””You are a helpful assistant who generates comma separated lists.
A user will pass in a category, and you should generate 5 objects in that category in a comma
separated list.
ONLY return a comma separated list, and nothing more.”””
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = “{text}”
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chain = LLMChain(
llm=ChatOpenAI(),
prompt=chat_prompt,
output_parser=CommaSeparatedListOutputParser()
)
chain.run(“colors”)
“`
以上就是了!我们已完成了怎样创建 LangChain 利用程序的核心构建块 – LLMChains。在所有这些组件(LLMs、提示和输出解析器)中还有更多的细微差别,还有更多区别的组件需要了解。要继续您的学习之旅,请参阅以下内容:
export openai_api_key= openai_api_key的常见问答Q&A
问题1:如何确保API密钥的安全性?
答案:确保API密钥的安全性是非常重要的,以下是一些最好实践:
- 不要将API密钥硬编码在源代码中,而是将其存储在安全的地方,例如环境变量或密钥管理服务中。
- 定期轮换API密钥,不要使用相同的密钥太长时间。
- 限制API密钥的权限,只授与必要的访问权限。
相关信息:
- 当使用OpenAI API时,可以将API密钥添加到系统环境变量中,以在代码中援用。
- 在Windows操作系统中,使用以下命令将API密钥添加到环境变量中:export OPENAI_API_KEY=’yourkey’。
- 在Python代码中使用OpenAI API时,可以将API密钥作为参数传递。