Teknik Penggantian Pemboleh Ubah
f-strings, .format() dan pustaka templat untuk memaparkan gesaan.
Teknik Penggantian Pemboleh Ubah ialah pelajaran Kejuruteraan Arahan AI percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kejuruteraan Arahan AI, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kejuruteraan Arahan AI merangkumi sejumlah 4 pelajaran.
Empat Pendekatan Python untuk Pemaparan Templat
Python menawarkan beberapa cara untuk memaparkan templat gesaan dengan penggantian pemboleh ubah. Setiap pendekatan mempunyai kelebihan dan pertukaran:
- rentetan-f — sebaris, serta-merta, tiada pengimportan diperlukan
- str.format() — ruang letak bernama, mudah disahkan
- string.Template — penggantian tanda dolar yang selamat, menyokong pengisian separa
- Jinja2 — enjin templat lengkap: syarat, gelung, penapis dan pewarisan
Pemilihan pendekatan yang sesuai bergantung pada kerumitan templat, kemahiran pasukan dan sama ada anda memerlukan ciri lanjutan seperti syarat dan gelung.
Pendekatan 1: Rentetan-f Python
Rentetan-f ialah pendekatan paling mudah untuk templat gesaan apabila semua pemboleh ubah tersedia pada masa pemaparan:
import openai
client = openai.OpenAI(api_key='sk-...')
def generate_linkedin_post(company, topic, tone, word_count):
prompt = (
f'Write a LinkedIn post for {company} about {topic}. '
f'Tone: {tone}. '
f'Length: {word_count} words. '
'Professional but conversational. '
'End with one question to engage readers. '
'No hashtags. Active voice.'
)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return response.choices[0].message.content
print(generate_linkedin_post(
company='DataStream Analytics',
topic='how AI is changing data pipelines',
tone='enthusiastic but grounded',
word_count=180
))Pendekatan 2: str.format()
str.format() berfungsi dengan baik apabila anda mahu menyimpan rentetan templat secara berasingan daripada kod yang mengisinya — berguna untuk memuatkan templat daripada fail:
import openai
client = openai.OpenAI(api_key='sk-...')
# Template stored as a module-level constant or loaded from a file
SUPPORT_REPLY_TEMPLATE = '''You are a customer support agent for {company_name}.
Respond to this customer message:
---
{customer_message}
---
Tone: {tone}.
Keep the response under {max_words} words.
Do not offer refunds unless the customer explicitly asks.
Always close by asking if there is anything else you can help with.'''
def generate_support_reply(company, message, tone='empathetic and helpful', max_words=150):
prompt = SUPPORT_REPLY_TEMPLATE.format(
company_name=company,
customer_message=message,
tone=tone,
max_words=max_words
)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return response.choices[0].message.contentPendekatan 3: string.Template
string.Template daripada pustaka standard Python menggunakan ruang letak tanda dolar ($variable atau ${variable}). Kelebihan utamanya: safe_substitute() meninggalkan pemboleh ubah yang tiada sebagai teks ruang letak harfiah dan bukannya mencetuskan ralat, lalu membolehkan pengisian separa:
from string import Template
import openai
client = openai.OpenAI(api_key='sk-...')
# $ placeholders — safe with code that contains curly braces
BASE_TEMPLATE = Template(
'Write a $format_type for $audience about $topic. '
'Tone: $tone. Length: $word_count words. '
'Active voice. No jargon.'
)
def generate(format_type, audience, topic, tone='professional', word_count=200):
prompt = BASE_TEMPLATE.substitute(
format_type=format_type,
audience=audience,
topic=topic,
tone=tone,
word_count=word_count
)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return response.choices[0].message.content
# Partial fill example — safe_substitute leaves $word_count as-is
partial = BASE_TEMPLATE.safe_substitute(
format_type='blog post', audience='developers', topic='API design'
)
print(partial) # $tone and $word_count remain as placeholdersPendekatan 4: Asas Jinja2
Jinja2 ialah enjin templat lengkap. Ia menyokong syarat, gelung, penapis dan pewarisan templat — jauh melampaui penggantian rentetan mudah:
from jinja2 import Template
import openai
client = openai.OpenAI(api_key='sk-...')
# Jinja2 uses {{ }} for variables and {% %} for logic
JINJA_PROMPT = Template('''
Write a {{content_type}} for {{audience}} about {{topic}}.
Tone: {{tone}}.
{% if include_examples %}
Include {{example_count}} concrete examples.
{% endif %}
{% if word_count %}
Length: {{word_count}} words.
{% else %}
Aim for 200-300 words.
{% endif %}
Active voice. No jargon.
''')
def generate(content_type, audience, topic, tone, include_examples=False, example_count=2, word_count=None):
prompt = JINJA_PROMPT.render(
content_type=content_type,
audience=audience,
topic=topic,
tone=tone,
include_examples=include_examples,
example_count=example_count,
word_count=word_count
)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return response.choices[0].message.contentGelung Jinja2 dalam Templat
Gelung Jinja2 membolehkan anda mengulangi item dalam senarai di dalam templat — berguna untuk menjana gesaan berbilang item daripada struktur data:
from jinja2 import Template
import openai
client = openai.OpenAI(api_key='sk-...')
MULTI_PRODUCT_TEMPLATE = Template('''
Write a product comparison for {{audience}}.
Compare the following products:
{% for product in products %}
- {{product.name}}: {{product.description}}
{% endfor %}
Structure: one paragraph per product, then a 2-sentence recommendation.
Tone: {{tone}}. Active voice. No bullet points in paragraphs.
''')
products = [
{'name': 'Asana', 'description': 'project management with timeline views'},
{'name': 'Linear', 'description': 'developer-focused issue tracking'},
{'name': 'Monday.com', 'description': 'visual work management for teams'}
]
prompt = MULTI_PRODUCT_TEMPLATE.render(
audience='startup founders',
products=products,
tone='direct and practical'
)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
print(response.choices[0].message.content)Penapis Jinja2
Penapis Jinja2 mengubah nilai pemboleh ubah sebaris semasa pemaparan templat. Penapis terbina dalam yang berguna untuk gesaan:
{{ topic | upper }}— jadikan topik huruf besar{{ word_count | default(200) }}— gunakan 200 jika word_count tidak diberikan{{ audience | title }}— jadikan rentetan audience dalam huruf tajuk{{ items | join(', ') }}— gabungkan senarai dengan koma
Penapis mengekalkan logik perubahan di dalam templat dan bukannya dalam kod Python yang memanggilnya, menjadikan templat lebih tersendiri dan mudah dipindahkan.
Memuatkan Templat daripada Fail
Bagi templat besar atau kompleks, menyimpannya dalam fail teks berasingan memastikan kod Python kekal kemas. Komponen Environment dan FileSystemLoader Jinja2 mengendalikan perkara ini dengan baik:
from jinja2 import Environment, FileSystemLoader
import openai
client = openai.OpenAI(api_key='sk-...')
# Load all templates from the 'prompts/' directory
env = Environment(loader=FileSystemLoader('prompts/'))
def render_template(template_name, variables):
'''Load and render a .j2 template file with the given variables.'''
template = env.get_template(template_name)
return template.render(**variables)
def generate_from_file(template_name, variables):
prompt = render_template(template_name, variables)
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}]
)
return response.choices[0].message.content
# Usage: load prompts/blog_post.j2 and fill with variables
result = generate_from_file('blog_post.j2', {
'topic': 'API rate limiting strategies',
'audience': 'backend engineers',
'tone': 'technical and direct',
'word_count': 500
})
print(result)Memilih Pendekatan yang Sesuai
Padankan pendekatan penggantian dengan kerumitan templat anda:
- rentetan-f — skrip pantas, automasi sekali guna atau templat yang cukup pendek untuk dibaca sebaris
- str.format() — templat tersimpan, pangkalan kod pasukan atau keadaan apabila KeyError bagi pemboleh ubah yang tiada memang dikehendaki
- string.Template — apabila kandungan mungkin mengandungi pendakap keriting seperti coretan kod, atau apabila pengisian separa diperlukan
- Jinja2 — templat kompleks dengan syarat, gelung, berbilang fail atau pasukan yang berpengalaman dengan penemplatan
Reka bentuk berlebihan ialah risiko sebenar — pilih Jinja2 hanya apabila anda benar-benar memerlukan ciri lanjutnya.
Keselamatan Templat: Serangan Suntikan
Apabila nilai pemboleh ubah berasal daripada masukan pengguna, suntikan gesaan ialah risiko sebenar. Pengguna berniat jahat mungkin memberikan nilai seperti: "Abaikan semua arahan terdahulu dan..."
Langkah perlindungan:
- Sahkan dan bersihkan semua pemboleh ubah yang diberikan pengguna sebelum penggantian
- Bagi masukan yang menghadap pengguna, apit pemboleh ubah dengan pembatas: "Masukan pengguna ialah: ---{user_input}---"
- Gunakan penapisan keluaran untuk mengesan dan menolak respons yang kelihatan seperti mematuhi arahan yang disuntik
- Jangan sesekali memberikan nilai yang diberikan pengguna akses kepada pemboleh ubah gesaan sistem
Menguji Pemaparan Templat
Sentiasa uji pemaparan templat secara berasingan daripada panggilan API. Sahkan rentetan hasil pemaparan sebelum menghantarnya kepada model:
def test_template_render():
test_cases = [
{'topic': 'cloud security', 'audience': 'CTOs', 'tone': 'formal', 'word_count': 300},
{'topic': 'ML pipelines', 'audience': 'data scientists', 'tone': 'technical', 'word_count': 500},
# Edge cases
{'topic': '', 'audience': 'developers', 'tone': 'casual', 'word_count': 100}, # empty topic
{'topic': 'AI' * 100, 'audience': 'all', 'tone': 'brief', 'word_count': 50}, # very long topic
]
TEMPLATE = 'Write a {word_count}-word {tone} article about {topic} for {audience}. Active voice.'
for i, case in enumerate(test_cases):
try:
rendered = TEMPLATE.format(**case)
assert len(rendered) > 0, 'Empty render'
print(f'Case {i+1} OK: {len(rendered)} chars')
except (KeyError, AssertionError) as e:
print(f'Case {i+1} FAILED: {e}')
test_template_render()Semakan Pengetahuan: Teknik Penggantian
Anda sedang membina sistem gesaan yang fail templatnya disimpan pada cakera, templatnya mengandungi bahagian bersyarat seperti memasukkan bahagian tentang penetapan harga secara pilihan berdasarkan bendera, dan templatnya mungkin disumbangkan oleh beberapa ahli pasukan yang biasa dengan penemplatan web.
Apakah pendekatan penggantian yang paling sesuai untuk keadaan ini?
Ringkasan: Teknik Penggantian Pemboleh Ubah
Python menawarkan empat pendekatan untuk pemaparan templat gesaan: rentetan-f (sebaris, mudah), str.format() (ruang letak bernama, KeyError bagi pemboleh ubah yang tiada), string.Template (sintaks tanda dolar, pengisian separa yang selamat) dan Jinja2 (enjin lengkap dengan syarat, gelung, penapis dan pemuatan fail).
Padankan pendekatan dengan kerumitannya: gunakan rentetan-f untuk skrip pantas, str.format() untuk templat tersimpan, string.Template apabila kandungan mengandungi pendakap keriting dan Jinja2 apabila anda memerlukan syarat, gelung atau templat berasaskan fail. Sentiasa uji pemaparan secara berasingan daripada panggilan API.
Pelajari Kejuruteraan Arahan 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
- 53
- Pelajaran
- 199
Soalan Lazim
Adakah pelajaran “Teknik Penggantian Pemboleh Ubah” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Kejuruteraan Arahan AI, termasuk “Teknik Penggantian Pemboleh Ubah”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Kejuruteraan Arahan AI merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Teknik Penggantian Pemboleh Ubah”?
f-strings, .format() dan pustaka templat untuk memaparkan gesaan. Anda berlatih Kejuruteraan Arahan 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 Kejuruteraan Arahan AI?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Kejuruteraan Arahan 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 3 daripada 4.
Berapa lamakah pelajaran “Teknik Penggantian Pemboleh Ubah” 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 Kejuruteraan Arahan AI ini?
Ya. Setiap pelajaran Kejuruteraan Arahan 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
- Apakah Templat Gesaan?
- Mencipta Corak Isi Tempat Kosong
- Teknik Penggantian Pemboleh Ubah
- Mengguna Semula Templat Merentas Tugasan