Free lesson · GenAI Agent Engineering

సురక్షిత API key నిర్వహణ

.env ఫైళ్లు + python-dotenv + .gitignore నమూనాలను ఉపయోగించి LLM API keys ను మీరు సురక్షితంగా నిల్వ చేయగలరు, రహస్యాలు (secrets) ఎప్పుడూ version control లోకి ప్రవేశించకుండా చూసుకోగలరు.

Course: GenAI Agent Engineering · Chapter 1 · The Dev Environment

Free to read — no subscription required.

పరిచయం

మీరు ఒక API కీని సోర్స్‌లో హార్డ్‌కోడ్ చేసి GitHubకు పుష్ చేసినప్పుడు, ఆటోమేటెడ్ స్కానర్లు సాధారణంగా 30 సెకన్ల లోపే దానిని కనుగొంటాయి — మరియు డెవలపర్ గమనించకముందే ఒక్క లీక్ అయిన LLM కీ ఐదు అంకెల బిల్లులను సృష్టించిన సందర్భాలు ఉన్నాయి. ఏజెంట్ కోడ్ ముఖ్యంగా ఎక్కువగా ప్రమాదంలో ఉంటుంది, ఎందుకంటే అది సాధారణంగా ఒకేసారి అనేక ప్రొవైడర్ కీలను (OpenAI, Anthropic, Google) కలిగి ఉంటుంది. ఈ పాఠం ముగిసేసరికి మీరు ఆ కీలను సోర్స్ కంట్రోల్ నుండి దూరంగా ఉంచగలరు, python-dotenvతో రన్‌టైమ్‌లో వాటిని సురక్షితంగా లోడ్ చేయగలరు, మరియు ఏదైనా కీ లేనప్పుడు స్టార్టప్‌లోనే వెంటనే ఫెయిల్ అయ్యేలా చేయగలరు.

కీలక పదజాలం

  • .env file — నిజమైన రహస్యాలను కలిగి ఉండే KEY=value జతల ప్లెయిన్-టెక్స్ట్ ఫైల్; ఇది డెవలపర్ మెషీన్‌లో ఉంటుంది మరియు Git నుండి మినహాయించబడుతుంది, ఇదే కీలను ప్రైవేట్‌గా ఉంచుతుంది.
  • .env.example — అదే కీల కమిట్ చేయబడిన టెంప్లేట్, ప్లేస్‌హోల్డర్ విలువలతో; ఇది ఏ వాస్తవ క్రెడెన్షియల్స్‌ను బహిర్గతం చేయకుండా ఏజెంట్‌కు ఏ వేరియబుల్స్ అవసరమో డాక్యుమెంట్ చేస్తుంది.
  • python-dotenv — స్టార్టప్‌లో .env ఫైల్‌ను చదివి దాని విలువలను os.environలోకి ఇంజెక్ట్ చేసే లైబ్రరీ, తద్వారా అప్లికేషన్ కోడ్ వాటిని os.getenv()తో చదవగలదు.
  • Startup validation — ప్రోగ్రామ్ ప్రారంభంలో ప్రతి అవసరమైన వేరియబుల్ ఉందో లేదో చూసే స్పష్టమైన తనిఖీ; ఇది నిశ్శబ్ద తప్పు కాన్ఫిగరేషన్‌ను తక్షణ, డీబగ్ చేయగల ఎర్రర్‌గా మారుస్తుంది.
  • Pydantic BaseSettings — .env నుండి వేరియబుల్స్‌ను లోడ్ చేసి, వాటిని ప్రకటించిన టైప్‌లకు మార్చి, ఇన్‌స్టాన్షియేషన్ సమయంలో లేని లేదా తప్పుగా రూపొందించిన విలువలను తిరస్కరించే టైప్డ్ కాన్ఫిగరేషన్ కంటైనర్.

భావనలు

హార్డ్‌కోడ్ చేసిన కీలు ఎందుకు విఫలమవుతాయి

పబ్లిక్ Git హిస్టరీ శాశ్వతం — తొలగించిన కమిట్ కూడా reflog మరియు ఫోర్క్‌ల ద్వారా చేరుకోదగినదిగా ఉంటుంది. స్కానర్ బాట్‌లు GitHub ఈవెంట్ ఫైర్‌హోస్‌ను గమనిస్తూ, లీక్ అయిన ప్రతి కీని సెకన్లలోపే ప్రయత్నిస్తాయి. అనేక ప్రొవైడర్ కీలను కలిగి ఉండే ఏజెంట్ల విషయంలో, ఒక్క లీక్ ప్రతి ప్రొవైడర్‌ను ఒకేసారి రాజీ పడేలా చేస్తుంది.

Loading diagram...

.env / .env.example విభజన

రెండు ఫైళ్లు, ఒకే ఉద్దేశ్యం: .env.example కమిట్ చేయబడుతుంది మరియు ఏజెంట్‌కు అవసరమైన ప్రతి వేరియబుల్‌ను ప్లేస్‌హోల్డర్ విలువలతో జాబితా చేస్తుంది; .env gitignore చేయబడుతుంది మరియు నిజమైన రహస్యాలను కలిగి ఉంటుంది. కొత్త కంట్రిబ్యూటర్లు టెంప్లేట్‌ను కాపీ చేసి, తమ సొంత కీలను నింపుతారు, మరియు ఏదైనా కమిట్‌కు ముందు git check-ignore .env ఆ ఫైల్ మినహాయించబడిందని నిర్ధారిస్తుంది.

ఒకసారి లోడ్ చేయండి, స్టార్టప్‌లో వాలిడేట్ చేయండి

python-dotenv .envను os.environలోకి చదువుతుంది, తద్వారా మిగిలిన కోడ్ కేవలం ఎన్విరాన్‌మెంట్ వేరియబుల్స్‌ను మాత్రమే చూస్తుంది — అదే కోడ్ పాత్ లోకల్‌గా, CIలో, మరియు ప్రొడక్షన్‌లో పనిచేస్తుంది. లోడ్‌ను స్పష్టమైన అవసరమైన-వేరియబుల్ తనిఖీతో జతచేయడం వలన, లేని కాన్ఫిగరేషన్ రిక్వెస్ట్ మధ్యలో గందరగోళమైన 401గా కాకుండా బూట్ సమయంలోనే బిగ్గరగా వైఫల్యంగా మారుతుంది (కోడ్ వాక్‌త్రూ చూడండి).

Pydanticతో టైప్డ్ సెట్టింగ్‌లు

పెద్ద ఏజెంట్ల కోసం, pydantic_settings.BaseSettings టైప్ కోయెర్షన్ (int, float, bool), అవసరమైన-ఫీల్డ్ అమలు, మరియు ఒకే క్యాష్ చేయబడిన Settings ఆబ్జెక్ట్‌ను జోడిస్తుంది. ఇది చెల్లాచెదురుగా ఉన్న os.getenv() కాల్స్‌ను ఒక వాలిడేట్ చేయబడిన ఆబ్జెక్ట్‌తో భర్తీ చేస్తుంది, ఇది ఏదైనా అవసరమైన కీ లేకపోయినా లేదా తప్పుగా రూపొందించబడినా స్టార్టప్‌లోనే విఫలమవుతుంది.

కోడ్ వాక్‌త్రూ

ఈ వాక్‌త్రూ మూడు రన్‌టైమ్ భావనలను — .env లోడ్ చేయడం, అవసరమైన కీలను వాలిడేట్ చేయడం, మరియు టైప్డ్ సెట్టింగ్‌ల ఆబ్జెక్ట్‌ను అందించడం — మీ ఏజెంట్ ఎంట్రీ పాయింట్ ఇంపోర్ట్ చేయగల ఒకే సమగ్ర నమూనాగా కలుపుతుంది.

Code snippetpython
1import os 2from functools import lru_cache 3from dotenv import load_dotenv, find_dotenv 4from pydantic_settings import BaseSettings 5from pydantic import Field 6 7load_dotenv(find_dotenv()) 8 9def validate_environment() -> None: 10 required = ["OPENAI_API_KEY", "ANTHROPIC_API_KEY"] 11 missing = [v for v in required if not os.getenv(v)] 12 if missing: 13 raise EnvironmentError( 14 f"Missing required environment variables: {', '.join(missing)}. " 15 f"Copy .env.example to .env and fill in your values." 16 ) 17 18class Settings(BaseSettings): 19 openai_api_key: str = Field(..., alias="OPENAI_API_KEY") 20 anthropic_api_key: str = Field(..., alias="ANTHROPIC_API_KEY") 21 default_model: str = Field("gpt-4o", alias="DEFAULT_MODEL") 22 max_iterations: int = Field(10, alias="AGENT_MAX_ITERATIONS") 23 24 class Config: 25 env_file = ".env" 26 case_sensitive = False 27 28@lru_cache() 29def get_settings() -> Settings: 30 return Settings() 31 32if __name__ == "__main__": 33 validate_environment() 34 settings = get_settings() 35 print(f"Loaded config, default model: {settings.default_model}")
  • load_dotenv(find_dotenv()) ప్రస్తుత డైరెక్టరీ నుండి పైకి వెళ్తూ .env దొరికే వరకు వెతుకుతుంది, కాబట్టి అదే కోడ్ ఏ వర్కింగ్ డైరెక్టరీ నుండైనా పనిచేస్తుంది.
  • validate_environment() ఏదైనా API కాల్‌కు ముందే రన్ అవుతుంది; కీ లేకపోతే తర్వాత 401గా విఫలం కాకుండా, ఫిక్స్-ఇట్ సూచనతో వెంటనే ఎర్రర్ రైజ్ చేస్తుంది.
  • Settings ప్రతి వేరియబుల్‌ను దాని టైప్ మరియు అవసరమైనది/ఐచ్ఛికం అనే స్థితితో ప్రకటిస్తుంది — Pydantic AGENT_MAX_ITERATIONS="10"ను ఆటోమేటిక్‌గా intకు మారుస్తుంది మరియు అవసరమైన ఫీల్డ్ లేకపోతే ఇన్‌స్టాన్షియేట్ చేయడానికి నిరాకరిస్తుంది.
  • get_settings()పై @lru_cache() మిగిలిన కోడ్‌బేస్‌కు ఒకే షేర్డ్ Settings ఇన్‌స్టాన్స్‌ను ఇస్తుంది.

పూర్తి .envతో స్క్రిప్ట్‌ను రన్ చేసినప్పుడు డిఫాల్ట్ మోడల్ ప్రింట్ అయితే, మరియు OPENAI_API_KEY తొలగించి రన్ చేసినప్పుడు "Missing required environment variables" ఎర్రర్‌తో వెంటనే నిష్క్రమిస్తే — రన్‌టైమ్ API వైఫల్యంగా కాకుండా — అది పనిచేస్తోందని మీకు తెలుస్తుంది.

కోసం ఆచరణలో

పై వాక్‌త్రూ ఆధారంగా, అదే .env + వాలిడేషన్ + టైప్డ్-సెట్టింగ్‌ల నమూనా ప్రతి విభాగం తన సొంత స్టాక్‌లో రహస్యాలను ఎలా వ్యవస్థీకరిస్తుందో రూపొందిస్తుంది.

చేయవలసినవి మరియు చేయకూడనివి

చేయవలసినవి

  1. .env.exampleను కమిట్ చేయండి మరియు .envను gitignore చేయండి — టెంప్లేట్ నిజమైన కీలను ఎప్పుడూ Git హిస్టరీలో పెట్టకుండా అవసరమైన వేరియబుల్స్‌ను డాక్యుమెంట్ చేస్తుంది.
  2. అవసరమైన వేరియబుల్స్‌ను స్టార్టప్‌లో వాలిడేట్ చేయండి — లేని కాన్ఫిగరేషన్‌ను డౌన్‌స్ట్రీమ్ 401గా కాకుండా తక్షణ, పేరుతో కూడిన ఎర్రర్‌గా బయటపెట్టండి.
  3. కమిట్‌ను తాకిన ఏ కీనైనా రొటేట్ చేయండి — ఫోర్స్-పుష్ చేసిన లీక్ కూడా reflog మరియు ఫోర్క్‌ల ద్వారా చేరుకోదగినదే; స్కానర్లకు అది ఇప్పటికే దొరికిందని భావించండి.

చేయకూడనివి

  1. "కేవలం ఒక త్వరిత పరీక్ష కోసం" కీలను హార్డ్‌కోడ్ చేయవద్దు — స్కానర్లు లీక్ అయిన కీలను సెకన్లలో కనుగొంటాయి, మరియు కమిట్‌ను రివర్ట్ చేయడం వాటిని అన్-లీక్ చేయదు.
  2. కోడ్ అంతటా os.getenv()ను అడ్-హాక్‌గా చదవవద్దు — ఒకే టైప్డ్ సెట్టింగ్‌ల ఆబ్జెక్ట్ టైపోలను నివారిస్తుంది మరియు వాలిడేషన్‌ను కేంద్రీకరిస్తుంది.
  3. .envను Slack లేదా ఇమెయిల్ ద్వారా షేర్ చేయవద్దు — సీక్రెట్స్ మేనేజర్‌ను (1Password, Vault, GCP Secret Manager) ఉపయోగించండి, తద్వారా యాక్సెస్‌ను ప్రతి యూజర్‌కు విడిగా రద్దు చేయవచ్చు.

A hands-on lab comes with this lesson — real code, in a cloud IDE. Create a free account to run it. No card.

Free account · no card · straight to the lab

Or get the full path — from

Listen to this lesson

Audio overviews of this lesson's labs and its chapter, from GenBodha Bytes.

More free lessons in GenAI Agent Engineering

All free lessons in GenAI Agent Engineering →