示例代码:
os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY")
with open(here("configs/tools_config.yml")) as cfg:
app_config = yaml.load(cfg, Loader=yaml.FullLoader)
# Uncomment the following configs to run for swiss airline policy document
chunk_size = app_config["swiss_airline_policy_rag"]["chunk_size"]
chunk_overlap = app_config["swiss_airline_policy_rag"]["chunk_overlap"]
embedding_model = app_config["swiss_airline_policy_rag"]["embedding_model"]
vectordb_dir = app_config["swiss_airline_policy_rag"]["vectordb"]
collection_name = app_config["swiss_airline_policy_rag"]["collection_name"]
doc_dir = app_config["swiss_airline_policy_rag"]["unstructured_docs"]
我将详细解释每行代码的作用
1. load_dotenv()
- 作用:
调用load_dotenv()
函数会从项目根目录下的.env
文件中读取环境变量,并将这些变量加载到系统环境变量(os.environ
)中。 - 说人话:
就像把一个装有配置信息(比如 API 密钥)的笔记本打开,把里面写的内容一行一行地放进程序的“工具箱”,让后面的代码可以方便地取出来使用。 - 举例说明:
假设你在项目目录下有个文件.env
,内容是:
当你运行OPENAI_API_KEY=12345abcde DATABASE_URL=postgres://user:pass@localhost:5432/mydb
load_dotenv()
后,程序就能从系统环境变量中获取到OPENAI_API_KEY
和DATABASE_URL
的值。
2. os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY")
- 作用:
这行代码从系统环境变量中获取名为"OPENAI_API_KEY"
的值(用os.getenv("OPENAI_API_KEY")
),然后把它赋值给os.environ['OPENAI_API_KEY']
。 - 说人话:
其实就是确保环境变量里有一个叫做OPENAI_API_KEY
的项,并且它的值就是你从.env
文件中加载到的那个密钥。如果之前加载的时候出了问题,这样重新赋值一次也不会错。 - 举例说明:
如果.env
文件中有OPENAI_API_KEY=12345abcde
,那么os.getenv("OPENAI_API_KEY")
就会返回字符串"12345abcde"
。接着,os.environ['OPENAI_API_KEY']
也被设置成"12345abcde"
。这样,无论后续哪个部分需要这个 API 密钥,都可以从os.environ['OPENAI_API_KEY']
中取到正确的值。
3. 读取 YAML 配置文件
with open(here("configs/tools_config.yml")) as cfg:
app_config = yaml.load(cfg, Loader=yaml.FullLoader)
- 作用:
这段代码打开一个名为tools_config.yml
的 YAML 配置文件,并使用 PyYAML 库把文件内容解析为 Python 对象,存入变量app_config
中。 - 说人话:
就像你把一个“配置说明书”(这里是 YAML 格式的文件)打开,然后把里面的内容(各种设置和参数)读进来,转换成 Python 程序可以理解和使用的数据结构(比如字典)。 - 详细步骤:
- 定位文件:
使用here("configs/tools_config.yml")
获取配置文件的完整路径。通常here()
是一个自定义函数,用来返回相对于项目根目录的路径。 - 打开文件:
open(...)
以读取模式打开这个 YAML 文件,并将文件对象赋值给变量cfg
。 - 解析 YAML:
yaml.load(cfg, Loader=yaml.FullLoader)
读取并解析文件内容,将 YAML 格式的数据转换成 Python 数据(通常是字典或列表)。
- 定位文件:
- 举例说明:
假设configs/tools_config.yml
文件内容如下:
执行上述代码后,变量tool1: enabled: true name: "ExampleTool" tool2: enabled: false name: "AnotherTool"
app_config
将会是一个字典:
这样,程序就可以根据这个配置判断是否启用某个工具、获取工具名称或其他相关设置。{ "tool1": {"enabled": True, "name": "ExampleTool"}, "tool2": {"enabled": False, "name": "AnotherTool"} }
总结
-
加载环境变量:
用load_dotenv()
把.env
文件里的密钥等配置信息加载进程序环境。 -
确保环境变量正确:
把OPENAI_API_KEY
的值从环境变量中取出来,再次设置到os.environ
中,确保后续代码可以正确访问到这个 API 密钥。 -
读取配置文件:
打开并读取一个 YAML 配置文件,把里面的配置信息转换成 Python 数据结构(例如字典),存储在变量app_config
中,供程序后续使用。
这种写法常见于需要使用外部配置和密钥的项目中,能够帮助程序灵活地加载不同的配置信息而无需硬编码到代码里。