背景
我在一个语言大模型项目中,多个地方要使用API,这涉及到API密钥的设置,关键我想把项目开源出来,用户设置为自己密钥的时候想提供方便,仅修改一个文件即可,这样会提供方便。于是有了下面的探索
问题
目前API密钥设置在base_memory_chat.py
、dietary_advice.py
、recommended_dishes.py
、recommended_judgment.py
四个文件都有。
如何仅修改一处地方,同时供4个地方的需要?
解决方案
我在 llm_server
目录下创建了一个 config_ai.py
文件,并且填入了一下内容
from volcenginesdkarkruntime import Ark
def generate_api_object():
client = Ark(
base_url="XXXXXXXXXXXXXXXX",
ak="XXXXXXXXXXXXXXXX",
sk="XXXXXXXXXXXXXXXX",
api_key="XXXXXXXXXXXXXXXX"
)
return client
然后我在四个文件,删除 设置并生成对象 的代码。替换成这三行代码
sys.path.append('../')
from config_ai import generate_api_object
client = generate_api_object()
于是当我run四个文件中的任意文件,都能预期的拿到api,模型愉快的运行起来了。
知识
1.config_ai.py
中如果不导入 from volcenginesdkarkruntime import Ark
会报错,尽管可能你四个文件中这包的导入。因为当执行到· from config_ai import generate_api_object
解释器会跳转到 config_ai
文件完整执行一次代码,而文件与文件之间是独立的,导入的包无法共享。
2.sys.path.append('../')
对于这行代码,..
的含义是当前目录的上级目录。作用是python解释器在查找包时,添加此路径。
3.于是python能够找到包,但是仅 import config_ai
无法直接使用 generate_api_object()
,原因是文件模块之间独立,要间接拿到 generate_api_object
方法,或者你像我这样 from config_ai import generate_api_object
。