Ejen AI · Pelajaran

Pemboleh Ubah Persekitaran untuk Ejen

os.environ, os.getenv() dan sebab rahsia tidak boleh dikodkan secara tetap dalam kod sumber.

Pelajaran 1 daripada 413 langkah

Pemboleh Ubah Persekitaran untuk Ejen ialah pelajaran Ejen AI percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Ejen AI, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Ejen AI merangkumi sejumlah 4 pelajaran.

Mengapa Kunci API Tidak Patut Dikodkan Secara Keras?

Mengekod kunci API secara keras terus dalam kod sumber ialah salah satu kesilapan keselamatan yang paling biasa dan paling mahal akibatnya. Kunci yang dihantar ke kawalan versi boleh dilihat oleh semua orang yang mempunyai akses kepada repository — termasuk penyumbang pada masa hadapan, sistem CI dan sesiapa sahaja yang menemui repository tersebut dalam talian.

Masalah Sejarah Git

Walaupun Anda memadamkan kunci yang dikodkan secara keras daripada kod kemudian, kunci itu masih kekal dalam sejarah Git Anda. Sesiapa yang mengklon repository dan menjalankan git log atau git show boleh menemuinya. Kunci tidak boleh sesekali dimasukkan ke dalam kawalan versi.

import os

os.environ['OPENAI_API_KEY'] = 'sk-proj-abc123def456'  # simulate deployment env

OPENAI_API_KEY = os.environ['OPENAI_API_KEY']
print('Key loaded from environment — never hard-coded')

os.environ[] berbanding os.getenv()

Terdapat dua cara untuk membaca pemboleh ubah persekitaran. os.environ['KEY'] menghasilkan KeyError jika pemboleh ubah tiada — berguna untuk kunci yang diperlukan. os.getenv('KEY', default) mengembalikan nilai lalai jika pemboleh ubah tiada — berguna untuk tetapan pilihan.

import os

os.environ['OPENAI_API_KEY'] = 'sk-proj-demo-key'

try:
    openai_key = os.environ['OPENAI_API_KEY']
except KeyError:
    print('ERROR: OPENAI_API_KEY environment variable is not set!')
    raise

model = os.getenv('AGENT_MODEL', 'gpt-4o-mini')
timeout = float(os.getenv('AGENT_TIMEOUT', '30'))
log_level = os.getenv('LOG_LEVEL', 'INFO')
max_steps = int(os.getenv('AGENT_MAX_STEPS', '20'))

print(f'Model: {model}, Timeout: {timeout}s, Log: {log_level}')

Mengesahkan Pemboleh Ubah Persekitaran Diperlukan Semasa Permulaan

Amalan terbaik ialah menyemak semua pemboleh ubah persekitaran yang diperlukan semasa permulaan dan gagal dengan segera menggunakan mesej ralat yang jelas. Ini mengelakkan kegagalan masa jalan yang sukar dinyahpepijat jauh di dalam gelung ejen apabila kunci tiada.

import os
import sys

REQUIRED_VARS = [
    'OPENAI_API_KEY',
    'SEARCH_API_KEY',
    'DATABASE_URL'
]

def check_required_env_vars():
    missing = [var for var in REQUIRED_VARS if not os.getenv(var)]
    if missing:
        print('FATAL: Missing required environment variables:')
        for var in missing:
            print(f'  - {var}')
        print('\nSet these in your .env file or shell environment.')
        sys.exit(1)
    print(f'All {len(REQUIRED_VARS)} required environment variables are set.')

# Call this at the very start of your agent:
# check_required_env_vars()

if __name__ == '__main__':
    for var in REQUIRED_VARS:
        os.environ.setdefault(var, 'demo-value')
    check_required_env_vars()

Prinsip Aplikasi 12 Faktor

Metodologi Aplikasi 12 Faktor mentakrifkan amalan terbaik untuk perisian moden. Faktor III: Simpan Config dalam persekitaran. Semua perkara yang berubah antara penggunaan (pembangunan, pementasan, pengeluaran) — kunci API, URL dan bendera ciri — hendaklah datang daripada pemboleh ubah persekitaran, bukan kod.

import os

os.environ['OPENAI_API_KEY'] = 'sk-proj-demo'
os.environ['SEARCH_API_KEY'] = 'tvly-demo'
os.environ['DATABASE_URL'] = 'postgresql://user:pass@localhost/agentdb'

config = {
    'openai_key': os.environ['OPENAI_API_KEY'],
    'search_key': os.environ['SEARCH_API_KEY'],
    'database_url': os.environ['DATABASE_URL'],
    'redis_url': os.getenv('REDIS_URL', 'redis://localhost:6379'),
    'enable_caching': os.getenv('ENABLE_CACHING', 'true') == 'true',
    'max_results': int(os.getenv('MAX_RESULTS', '10')),
    'log_level': os.getenv('LOG_LEVEL', 'INFO'),
    'env': os.getenv('ENV', 'development')
}

print('Config loaded from environment:', config['env'])

Menetapkan Pemboleh Ubah Persekitaran dalam Terminal

Tetapkan pemboleh ubah persekitaran dalam sesi terminal Anda menggunakan export (Mac/Linux) atau set (Windows). Pemboleh ubah ini tersedia kepada mana-mana program yang dijalankan dalam sesi tersebut.

# Mac/Linux (bash/zsh):
# export OPENAI_API_KEY='sk-proj-your-key-here'
# export AGENT_MODEL='gpt-4o-mini'
# python agent.py

# Windows (Command Prompt):
# set OPENAI_API_KEY=sk-proj-your-key-here
# python agent.py

# Windows (PowerShell):
# $env:OPENAI_API_KEY = 'sk-proj-your-key-here'
# python agent.py

# One-liner (temporary, only for this command):
# OPENAI_API_KEY='sk-proj-...' python agent.py

print('Shell exports set env vars for the current session only')

Menyenaraikan Pemboleh Ubah Diperlukan dalam Komen Kod

Dokumentasikan pemboleh ubah persekitaran yang diperlukan oleh ejen Anda terus dalam kod sumber. Pembangun baharu sepatutnya boleh membaca bahagian atas fail ejen Anda dan mengetahui dengan tepat perkara yang perlu dikonfigurasikan.

# agent.py
#
# REQUIRED ENVIRONMENT VARIABLES:
#   OPENAI_API_KEY       OpenAI API key (get from platform.openai.com)
#   SEARCH_API_KEY       Tavily search API key (get from tavily.com)
#
# OPTIONAL ENVIRONMENT VARIABLES:
#   AGENT_MODEL          LLM model (default: gpt-4o-mini)
#   AGENT_MAX_STEPS      Max loop iterations (default: 20)
#   LOG_LEVEL            Logging verbosity: DEBUG|INFO|WARNING (default: INFO)
#   DATABASE_URL         PostgreSQL URL (default: none, disables memory storage)
#
# EXAMPLE SETUP:
#   cp .env.example .env
#   Edit .env with your keys
#   python agent.py --query 'Your question'

print('Document required variables at the top of each agent file')

Mengakses Konfigurasi Bersarang dengan Selamat

Untuk ejen yang mempunyai banyak pilihan konfigurasi, bina kelas konfigurasi yang membaca dan mengesahkan semua pemboleh ubah persekitaran di satu tempat. Ini memusatkan pengesahan dan menjadikan kod Anda yang lain lebih kemas.

import os

class AgentConfig:
    def __init__(self):
        self.openai_key = self._require('OPENAI_API_KEY')
        self.search_key = self._require('SEARCH_API_KEY')
        self.model = os.getenv('AGENT_MODEL', 'gpt-4o-mini')
        self.max_steps = int(os.getenv('AGENT_MAX_STEPS', '20'))
        self.log_level = os.getenv('LOG_LEVEL', 'INFO')
        self.env = os.getenv('ENV', 'development')

    def _require(self, key: str) -> str:
        value = os.getenv(key)
        if not value:
            raise EnvironmentError(
                f'Required environment variable {key} is not set. '
                f'See .env.example for setup instructions.'
            )
        return value

# config = AgentConfig()  # raises clear error if any key is missing
# client = openai.OpenAI(api_key=config.openai_key)

if __name__ == '__main__':
    os.environ.setdefault('OPENAI_API_KEY', 'sk-demo-1234')
    os.environ.setdefault('SEARCH_API_KEY', 'demo-search-key')
    config = AgentConfig()
    print(f'Model: {config.model}, max_steps: {config.max_steps}, env: {config.env}')

Menyamarkan Kunci dalam Pengelogan

Jangan sesekali merekod kunci API mentah. Jika Anda perlu merekod konfigurasi untuk penyahpepijatan, samarkan semua aksara kecuali 4 aksara terakhir. Dengan cara ini, Anda boleh mengesahkan bahawa kunci telah dimuatkan tanpa mendedahkannya.

import os

def mask_key(key: str) -> str:
    if not key or len(key) < 8:
        return '****'
    return '*' * (len(key) - 4) + key[-4:]

def log_config_summary(config: dict):
    print('Agent configuration:')
    for name, value in config.items():
        if 'key' in name.lower() or 'secret' in name.lower() or 'token' in name.lower():
            print(f'  {name}: {mask_key(value)}')
        else:
            print(f'  {name}: {value}')

config = {
    'openai_key': os.getenv('OPENAI_API_KEY', ''),
    'model': 'gpt-4o-mini',
    'max_steps': '20'
}
log_config_summary(config)
# openai_key: ****abcd
# model: gpt-4o-mini

Pemboleh Ubah Persekitaran dalam Docker dan CI

Dalam Docker, hantar pemboleh ubah persekitaran menggunakan bendera -e atau --env-file. Dalam GitHub Actions, simpan pemboleh ubah tersebut sebagai rahsia dan rujukkannya dalam YAML aliran kerja. Jangan sesekali memasukkannya ke dalam imej Docker.

# Docker run with env vars:
# docker run -e OPENAI_API_KEY='sk-...' -e AGENT_MODEL='gpt-4o-mini' myagent:latest

# Docker with an env file:
# docker run --env-file .env myagent:latest

# GitHub Actions workflow (secrets stored in repo settings):
# env:
#   OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
#   SEARCH_API_KEY: ${{ secrets.SEARCH_API_KEY }}

# docker-compose.yml:
# services:
#   agent:
#     image: myagent:latest
#     env_file:
#       - .env

print('Never bake secrets into Docker images — always inject at runtime')

Apa yang Perlu Dilakukan apabila Kunci Terdedah

Jika Anda tersilap menghantar kunci API ke repository awam atau dikongsi, bertindak dengan segera. Anggap kunci itu telah terjejas sebaik sahaja ia keluar daripada kawalan Anda — bot mengimbas GitHub untuk mencari kunci dalam beberapa saat selepas sesuatu komit.

# Immediate response if a key is exposed:
# 1. REVOKE the key immediately (provider dashboard)
#    OpenAI: platform.openai.com/api-keys -> Delete key
#    Anthropic: console.anthropic.com -> API Keys
# 2. Generate a new key
# 3. Update your .env file with the new key
# 4. Rotate in all environments (staging, prod)

# Remove from git history (does NOT guarantee removal from forks/clones):
# git filter-branch or git-filter-repo to rewrite history
# Force push to all branches

# Note: Rewriting git history cannot undo exposure
# if others have already cloned or forked the repo
print('Revoke immediately. Do not just remove from code — rotate the key.')

Semakan Pengetahuan: Pemboleh Ubah Persekitaran

Uji pemahaman Anda tentang pemboleh ubah persekitaran untuk pengurusan rahsia ejen.

Imbas Kembali: Pemboleh Ubah Persekitaran untuk Ejen

Kini Anda memahami pendekatan yang betul untuk pengurusan rahsia ejen:

  • Jangan sesekali mengekod kunci API secara keras — kunci itu akan kekal dalam sejarah Git selama-lamanya
  • Gunakan os.environ['KEY'] untuk pemboleh ubah yang diperlukan dan os.getenv('KEY', default) untuk pemboleh ubah pilihan
  • Sahkan semua pemboleh ubah yang diperlukan semasa permulaan menggunakan mesej ralat yang jelas
  • Dokumentasikan pemboleh ubah yang diperlukan dalam komen kod dan .env.example
  • Samarkan kunci dalam pengelogan — paparkan hanya 4 aksara terakhir
  • Suntikkan rahsia semasa masa jalan dalam Docker; gunakan rahsia GitHub dalam CI
  • Jika kunci terdedah: batalkan dahulu, kemudian lakukan rotasi di semua tempat
Percuma untuk bermula

Pelajari Ejen AI dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
60
Pelajaran
239

Soalan Lazim

Adakah pelajaran “Pemboleh Ubah Persekitaran untuk Ejen” percuma?

Ya — teks penuh “Pemboleh Ubah Persekitaran untuk Ejen” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Ejen AI, tingkat taraf kepada CoddyKit PRO. Kursus Ejen AI merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pemboleh Ubah Persekitaran untuk Ejen”?

os.environ, os.getenv() dan sebab rahsia tidak boleh dikodkan secara tetap dalam kod sumber. Anda berlatih Ejen AI menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Ejen AI?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Ejen AI di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Pemboleh Ubah Persekitaran untuk Ejen” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Ejen AI ini?

Ya. Setiap pelajaran Ejen AI menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pemboleh Ubah Persekitaran untuk Ejen
  2. Fail .env dan python-dotenv
  3. Putaran Rahsia dan Keselamatan
  4. Profil Konfigurasi untuk Pembangunan dan Pengeluaran
← Kembali ke Ejen AI