第一个做装修的网站,网站上用什么格式的图片,vs网站开发视频教程,网站开发开发公司排名环境#xff1a;
Ubuntu20.04
问题描述#xff1a;
如何统一从一个共享的配置文件#xff08;比如 config.yaml 和 config.py#xff09;加载配置信息#xff0c;避免硬编码? 解决方案#xff1a;
希望本地模型和线上模型两块代码完全分开#xff0c;但它们都统一从…环境
Ubuntu20.04
问题描述
如何统一从一个共享的配置文件比如 config.yaml 和 config.py加载配置信息避免硬编码? 解决方案
希望本地模型和线上模型两块代码完全分开但它们都统一从一个**共享的配置文件比如 config.yaml 和 config.py**加载配置信息避免硬编码。
提供三份文件示范
config/config.yaml统一配置文件config/config.py统一读取配置并做环境变量覆盖local_model.py独立文件调用本地模型配置从config读取online_model.py独立文件调用线上模型配置从config读取 1. core/server/config/config.yaml
# 线上模型配置
api_key: d3112f3e479
base_url: https://ark.cn-beijing.volces.com/api/v3
model_name: ep-20250602174215-fw5hx# 本地模型配置
local_model_api: http://192.168.1.9:11434/v1/chat/completions
local_model_name: qwen2.5-3bnsfwny
local_model_max_tokens: 512
local_model_temperature: 0.25
local_model_timeout: 102. core/server/config/config.py
import os
import yamlCONFIG_PATH os.path.join(os.path.dirname(__file__), config.yaml)class Config:def __init__(self):with open(CONFIG_PATH, r, encodingutf-8) as f:data yaml.safe_load(f)for k, v in data.items():env_val os.getenv(k.upper())setattr(self, k, env_val if env_val is not None else v)config Config()3. local_model.py
import requests
from loguru import logger
from typing import Optional
import timefrom core.server.config.config import config # 根据你的实际包结构调整导入路径def summarize_with_model(text: str) - Optional[str]:headers {Content-Type: application/json}payload {model: config.local_model_name,messages: [{role: user, content: text}],max_tokens: int(config.local_model_max_tokens),temperature: float(config.local_model_temperature),stream: False}try:logger.info(调用本地大模型接口准备发送请求)start_time time.time()r requests.post(config.local_model_api, headersheaders, jsonpayload, timeoutint(config.local_model_timeout))r.raise_for_status()logger.info(f接口响应状态码{r.status_code}耗时{time.time() - start_time:.2f}秒)resp_json r.json()content resp_json.get(choices, [{}])[0].get(message, {}).get(content)logger.info(f模型返回内容长度{len(content) if content else 0})logger.info(f模型返回具体内容{content})return contentexcept requests.exceptions.Timeout:logger.error(调用本地大模型失败: 请求超时)return Noneexcept Exception as e:logger.error(f调用本地大模型失败: {e})return Noneif __name__ __main__:test_text 请帮我总结一下这段文字的内容。logger.info( 测试本地模型 )result summarize_with_model(test_text)logger.info(f本地模型返回结果{result})4. online_model.py
from openai import OpenAI
from loguru import logger
from typing import Optionalfrom core.server.config.config import config # 根据你的实际包结构调整导入路径client OpenAI(api_keyconfig.api_key,base_urlconfig.base_url,
)def summarize_with_model(text: str) - Optional[str]:try:logger.info(调用线上DeepSeek模型接口准备发送请求)messages [{role: system, content: },{role: user, content: text},]completion client.chat.completions.create(modelconfig.model_name,messagesmessages,streamFalse)content completion.choices[0].message.contentlogger.info(f线上模型返回内容长度{len(content) if content else 0})logger.info(f线上模型返回内容{content})return contentexcept Exception as e:logger.error(f调用线上模型失败: {e})return Noneif __name__ __main__:test_text 请帮我总结一下这段文字的内容。logger.info( 测试线上模型 )result summarize_with_model(test_text)logger.info(f线上模型返回结果{result})5. 包结构示例及运行说明
core\server\config\__init__.pyconfig.pyconfig.yamlmodules\llm\__init__.pylocal_model.pyonline_model.pyconfig、modules、llm目录都加空的 __init__.py使其成为包。在项目根目录执行
python -m core.server.modules.llm.local_model
python -m core.server.modules.llm.online_model确保Python可以正确解析包路径。 6. 说明
配置集中统一方便维护避免魔法数字和字符串散落代码。代码完全分开互不影响且都共享同一配置便于管理。方便后续增加环境变量覆盖或动态配置读取。