环境配置
安装依赖库
首先需要安装python-dotenv库
python-dotenv 是一个专门用于从 .env 文件加载环境变量到 Python 程序中的库。它可以帮助我们将配置信息从代码中分离出来,以一种更加安全、灵活的方式进行管理。
在实际开发中,我们常常会遇到以下问题:
- 敏感信息泄露风险:如果将敏感信息直接写入代码,一旦代码被泄露,这些信息也会随之曝光,给系统带来巨大的安全隐患。
- 环境切换困难:不同的开发环境(开发、测试、生产等)可能需要不同的配置信息。如果配置信息直接写在代码中,每次切换环境都需要手动修改代码,这不仅繁琐,还容易出错。
- 代码可维护性差:将配置信息与代码混在一起,会使代码结构变得混乱,难以维护和扩展。
而 python-dotenv 的出现,正是为了解决这些问题。通过使用 .env 文件来存储配置信息,并利用 python-dotenv 将这些信息加载到程序中,我们可以轻松地实现配置信息的分离和管理。
安装很简单
pip install openai python-dotenv
配置.env文件
# .env file
LLM_API_KEY="YOUR-API-KEY"
LLM_MODEL_ID="YOUR-MODEL"
LLM_BASE_URL="YOUR-URL"
调用.env文件也很简单,直接使用以下代码
load_dotenv(dotenv_path="config/.env") #参数可以不要,默认路径就是当前python文件的目录
注意,这里的.env文件命名就是".env",在.前面不要加任何其它名字
封装大模型调用类
class LLMs:
def __init__(self, model : str = None, apiKey : str = None, url : str = None, timeout : int = None):
#初始化,提供大模型的api_key, name, url
if(model is None) : self.model = os.getenv("LLM_MODEL_ID")
if(model is None) : apiKey = os.getenv("LLM_API_KEY")
if(model is None) : url = os.getenv("LLM_BASE_URL")
if(model is None) : timeout = int(os.getenv("LLM_TIMEOUT", 1200))
if self.model == None or apiKey == None or url == None:
raise ValueError("模型ID、API密钥和服务地址缺少, 可能没有在.env文件中定义, 或者.env文件路径问题")#强制中断
self.client = OpenAI(api_key=apiKey, base_url=url, timeout=timeout) #模型需要支持openai调用,可以查阅模型的api文档,一般会提供可供openai使用的接口
def think(self, messages : List[Dict[str, str]], temperature : float = 0) -> str:
print(messages)
print(f"正在调用{self.model}模型...")
try:
response = self.client.chat.completions.create(
model=self.model,
messages=messages,
max_tokens=65536,
temperature=temperature,
stream=True,
)
print("大模型响应成功")
#流式输出
response_content = []
for chunk in response:
content = chunk.choices[0].delta.content or ""
print(content, end="", flush=True)
response_content.append(content)
print() # 在流式输出结束后换行
return "".join(response_content)
except Exception as e:
print(f"调用LLM API时发生错误: {e}")
return None