
استفاده از API هوش مصنوعی در C# و .NET با کتابخانهٔ رسمی OpenAI
راهنمای عملی کتابخانهٔ رسمی OpenAI برای .NET با API هیبانا؛ نصب، چت، گفتوگوی چندمرحلهای، استریم، مدیریت خطا و ASP.NET Core با کد آزمودهشده.
۵ دقیقه مطالعه
با API هوش مصنوعی و کتابخانهٔ python-pptx از یک موضوع ساده فایل پاورپوینت بسازید؛ نمونهکد آزموده، خروجی واقعی و نکتههای متن فارسی راستبهچپ.

ساختن یک ارائهٔ خوب دو بخش دارد: فکر کردن به اینکه چه بگوییم و چیدن آن روی اسلایدها. ابزارهای آمادهای مثل Gamma هر دو کار را در یک محیط گرافیکی انجام میدهند، اما اگر بخواهید ساخت اسلاید را خودکار کنید (مثلاً از گزارش هفتگی، از فرم سفارش یا داخل برنامهٔ خودتان)، به یک راه برنامهنویسی نیاز دارید. در این مطلب میبینیم چطور یک مدل زبانی از طریق API هیبانا متن و ساختار اسلایدها را به شکل JSON مینویسد و کتابخانهٔ python-pptx آن را به یک فایل .pptx واقعی تبدیل میکند؛ با نمونهکدی که خودمان اجرا کردهایم و نکتههایی برای متن فارسی.
Gamma در سایت خودش را «همراه طراحی مبتنی بر هوش مصنوعی برای ساخت ارائه، وبسایت و موارد دیگر» معرفی میکند که به مهارت کدنویسی یا طراحی نیاز ندارد. طبق راهنمای خروجی Gamma، ارائه را میتوان بهصورت PDF، PNG و PowerPoint (PPTX) گرفت و برای Google Slides هم فایل PPTX را در آن بارگذاری کرد.
این ابزارها برای کسی که یک ارائه را دستی و با چند کلیک میسازد مناسباند. اما اگر:
ساختن اسلاید با کد گزینهٔ انعطافپذیرتری است. ایدهٔ اصلی ساده است: مدل محتوا را مینویسد، کد آن را میچیند.
مدل زبانی فایل پاورپوینت نمیسازد؛ متن مینویسد. پس از مدل میخواهیم ساختار ارائه را در قالبی دقیق و قابل خواندن برای کد برگرداند:
{ "title": "عنوان ارائه", "subtitle": "زیرعنوان", "slides": [ { "title": "عنوان اسلاید", "bullets": ["نکته ۱", "نکته ۲"], "notes": "متن گوینده" } ]}برای اینکه پاسخ حتماً JSON معتبر باشد، از پارامتر response_format با مقدار json_object استفاده میکنیم که در مستندات قابلیتهای پیشرفته آمده است. همانجا تأکید شده که این پارامتر فقط معتبر بودن JSON را تضمین میکند، نه داشتن کلیدهای دلخواه شما را؛ برای همین شکل دقیق کلیدها را در پیام سیستم مینویسیم.
سپس python-pptx (کتابخانهٔ متنباز پایتون برای ساخت و ویرایش فایلهای PowerPoint) برای هر بخش یک اسلاید میسازد. طبق مستندات python-pptx، در قالب پیشفرض چیدمان شمارهٔ ۰ اسلاید عنوان است و چیدمان شمارهٔ ۱ اسلاید «عنوان و محتوا» با فهرست بولت.
ابتدا دو کتابخانه را نصب کنید:
pip install openai python-pptxفایل make_slides.py را بسازید. بهجای YOUR_API_KEY کلید API خودتان را بگذارید. مدل این نمونه gpt-5-nano است که در زمان نگارش این مطلب از حالت JSON پشتیبانی میکند و برای چنین کاری سریع و کمهزینه است:
import json from openai import OpenAIfrom pptx import Presentationfrom pptx.enum.text import PP_ALIGNfrom pptx.oxml.ns import qn client = OpenAI( base_url="https://api-ai.hibanacloud.ir/v1", api_key="YOUR_API_KEY",) SYSTEM = """تو یک طراح ارائه هستی. فقط JSON برگردان، با این شکل:{"title": "...", "subtitle": "...", "slides": [{"title": "...", "bullets": ["...", "..."], "notes": "..."}]}هر اسلاید حداکثر ۴ بولت کوتاه (زیر ۱۲ کلمه) دارد. notes متن گوینده است.""" topic = "معرفی خدمات یک کافهی کوچک به سرمایهگذار؛ ۴ اسلاید" resp = client.chat.completions.create( model="openai/gpt-5-nano", reasoning_effort="low", response_format={"type": "json_object"}, messages=[ {"role": "system", "content": SYSTEM}, {"role": "user", "content": topic}, ],)deck = json.loads(resp.choices[0].message.content)print(json.dumps(deck, ensure_ascii=False, indent=2)) def rtl(paragraph, font="Tahoma"): """پاراگراف را راستچین و راستبهچپ میکند و فونت فارسی را تنظیم میکند.""" paragraph.alignment = PP_ALIGN.RIGHT paragraph._p.get_or_add_pPr().set("rtl", "1") for run in paragraph.runs: rpr = run._r.get_or_add_rPr() cs = rpr.find(qn("a:cs")) if cs is None: cs = rpr.makeelement(qn("a:cs"), {}) rpr.append(cs) cs.set("typeface", font) prs = Presentation() # اسلاید عنوان (چیدمان 0)first = prs.slides.add_slide(prs.slide_layouts[0])first.shapes.title.text = deck["title"]first.placeholders[1].text = deck.get("subtitle", "")for shape in (first.shapes.title, first.placeholders[1]): for p in shape.text_frame.paragraphs: rtl(p) # اسلایدهای محتوا (چیدمان 1: عنوان و متن)for item in deck["slides"]: slide = prs.slides.add_slide(prs.slide_layouts[1]) slide.shapes.title.text = item["title"] rtl(slide.shapes.title.text_frame.paragraphs[0]) body = slide.placeholders[1].text_frame body.text = item["bullets"][0] for bullet in item["bullets"][1:]: body.add_paragraph().text = bullet for p in body.paragraphs: rtl(p) slide.notes_slide.notes_text_frame.text = item.get("notes", "") prs.save("deck.pptx")print("saved deck.pptx with", len(prs.slides), "slides")با python make_slides.py اسکریپت اجرا میشود. این بخشی از خروجی یکی از اجراهای ما با پایتون 3.11 و python-pptx نسخهٔ 1.0.2 است (دو اسلاید میانی را برای کوتاهی حذف کردهایم؛ متن مدل در هر اجرا فرق میکند):
{ "title": "معرفی خدمات کافه کوچک به سرمایهگذار", "subtitle": "فرصتی برای سرمایهگذاری در تجربه محلی", "slides": [ { "title": "مفهوم کافه ما", "bullets": [ "فضای گرم و دوستانه", "منوی نوشیدنیهای تخصصی", "تجربه مشتری متمایز", "رویکرد پایدار و محلی" ], "notes": "شرح اجمالی از مفهوم کافه، هدف از ارائه و مزیت رقابتی نسبت به رقبا." }, ... { "title": "درخواست سرمایه و استفاده", "bullets": [ "سرمایه اولیه برای تجهیزات و فضا", "بازاریابی محلی و افتتاحیه", "آموزش کارکنان و بهبود خدمات", "بازگشت سرمایه حدود 12 ماهه" ], "notes": "چگونگی استفاده از سرمایه و بازگشت سرمایه را توضیح دهید." } ]}saved deck.pptx with 5 slidesنتیجه یک فایل deck.pptx با یک اسلاید عنوان و چهار اسلاید محتوا است و متن گوینده هم در بخش یادداشت (Notes) اسلایدهای محتوا قرار گرفته است. در دو اجرای ما، هر درخواست ۱۱۱ توکن ورودی و حدود ۱٬۰۰۰ تا ۱٬۹۰۰ توکن خروجی مصرف کرد. gpt-5-nano یک مدل استدلالی است و reasoning_effort را روی low گذاشتهایم تا استدلال کوتاهتر بماند. دربارهٔ اینکه این عددها چطور به هزینه تبدیل میشوند، توکن و هزینهٔ API را بخوانید.
به عددهای مدل اعتماد نکنید
به بولت آخر خروجی دقت کنید: «بازگشت سرمایه حدود ۱۲ ماهه». ما چنین عددی به مدل نداده بودیم و مدل آن را از خودش ساخته است. اگر ارائه عدد، قیمت یا آمار دارد، آن داده را خودتان در پیام کاربر بفرستید و از مدل بخواهید فقط از همان استفاده کند. پیش از ارائه هم همهچیز را بازبینی کنید.
بیشترین دردسر ساخت پاورپوینت فارسی با کد، جهت متن است. در مرجع API کتابخانهٔ python-pptx برای پاراگراف ویژگی alignment (چینش) هست، اما ویژگیای برای راستبهچپ وجود ندارد. راستچین کردن بهتنهایی کافی نیست: اگر جهت پاراگراف چپبهراست بماند، بولتها سمت چپ میافتند و ترتیب علامتها و کلمههای لاتین داخل جملهٔ فارسی به هم میریزد.
تابع rtl در نمونهٔ بالا سه کار انجام میدهد:
PP_ALIGN.RIGHT.rtl="1" روی تگ a:pPr در XML پاراگراف. این همان تنظیمی است که خود فایل PPTX برای متن راستبهچپ نگه میدارد.a:cs. ویژگی font.name در python-pptx فقط فونت لاتین (a:latin) را تنظیم میکند؛ متن فارسی از فونت «complex script» یعنی a:cs استفاده میکند. ما Tahoma را گذاشتهایم؛ هر فونتی که انتخاب کنید (مثلاً وزیرمتن)، باید روی سیستمی که ارائه را باز میکند هم نصب باشد.Presentation() بدون ورودی قالب سادهٔ پیشفرض را باز میکند که اندازهٔ اسلایدش ۴:۳ است. یک قالب با رنگ، فونت و نسبت ۱۶:۹ دلخواه در PowerPoint بسازید و آن را با Presentation("template.pptx") باز کنید. شمارهٔ چیدمانها به قالب بستگی دارد، پس آن را با قالب خودتان بررسی کنید.json_object ممکن است کلیدی مثل notes نیاید؛ برای همین در کد از item.get("notes", "") استفاده کردهایم. در برنامهٔ واقعی ساختار JSON را اعتبارسنجی کنید.این روش اسلاید متنی میسازد، نه طراحی کامل. نمودار، چیدمان خلاقانه و تصویر خودکار در آن نیست؛ هرچند python-pptx امکان افزودن تصویر و نمودار را دارد و میتوانید بعداً کد را گسترش دهید. اگر برای اسلایدها تصویر میخواهید، میتوانید با مدلهای ساخت تصویر تصویر بسازید و آن را در اسلاید قرار دهید. همچنین فایل را یک بار در همان نرمافزاری که ارائه را با آن نمایش میدهید باز کنید و ظاهر نهایی آن (بهخصوص فونت و جهت متن) را بررسی کنید.
برای ساخت خودکار پاورپوینت لازم نیست مدل فایل بسازد: مدل محتوا و ساختار را به شکل JSON مینویسد و python-pptx آن را به اسلاید تبدیل میکند. با تنظیم جهت راستبهچپ و فونت a:cs، متن فارسی هم درست نمایش داده میشود. برای شروع، کلید API بگیرید و نمونهٔ بالا را اجرا کنید. اگر تازه با API هوش مصنوعی آشنا میشوید، راهنمای API هوش مصنوعی را بخوانید و برای جزئیات حالت JSON به مستندات قابلیتهای پیشرفته سر بزنید.

راهنمای عملی کتابخانهٔ رسمی OpenAI برای .NET با API هیبانا؛ نصب، چت، گفتوگوی چندمرحلهای، استریم، مدیریت خطا و ASP.NET Core با کد آزمودهشده.
۵ دقیقه مطالعه

راهنمای قدمبهقدم استفاده از کتابخانهٔ رسمی openai در Node.js با API هیبانا؛ نصب، متغیر محیطی، چت، استریم و مدیریت خطا با کد آزمودهشده.
۵ دقیقه مطالعه

هر کد خطای API هیبانا یعنی چه و چه باید کرد؛ از ۴۰۱ و ۴۰۲ تا ۴۲۹ و ۵۰۰، با کد پایتون آزمودهشده برای مدیریت خطا، تلاش مجدد و بررسی موجودی.
۶ دقیقه مطالعه
GPT، Claude، Gemini و دهها مدل دیگر، با پرداخت ریالی و یک API سازگار با OpenAI.