LLM

مرحله اصلیجلسات
۱. مفاهیم پایه (LLM، API، Token، Prompt، Context)جلسه ۱
۲. کار با API (API Key، اولین درخواست، هزینه، Token)جلسه ۲
۳. Prompt Engineering (Prompt، Role، JSON، Few-shot)جلسه ۳
۴. پروژه واقعی (پردازش هزاران چت، حلقه، فایل، دیتابیس)جلسات ۴ و ۵
۵. مباحث پیشرفته (Embeddings، RAG، Agents)جلسات ۶، ۷، ۸
پروژه نهایی و جمع‌بندیجلسات ۹ و ۱۰

دوره LLM Application Developer »

اتفاقاً این کار خیلی حرفه‌ایه. اگر یه سرفصل مشخص داشته باشیم، حتی اگر چند ماه بعد هم برگردی، فقط کافیه بگی:


> «داریم دوره LLM Application Developer رو ادامه میدیم، جلسه ۶.»


و من دقیقاً می‌دونم کجای مسیر هستیم.


من این دوره رو یه مقدار کامل‌تر از قبل طراحی کردم تا چیزی کم نمونه.


---


# دوره: LLM Application Developer (پروژه‌محور)


##

سالنامه دریا پلنر

باید فایل های txt در پوشه اصلی اپل باشد
رنگ هفته های شنبه تا سه شنبه اسم روز یه کم تیره است باید آبی روشنتر بود

دو تا قالبی-یکی در میون-خرگوش هفتگی

Option Explicit


Sub GenerateCalendarRabbit()

    Dim pptPres As Presentation

    Dim slideTemplateFirstHalfW As Slide, slideTemplateSecondHalfW As Slide

    Dim currentSlide As Slide

    Dim eventFile As String, weekFile As String

    Dim eventData As Variant, weekData As Variant

    Dim m As Integer, d As Integer

    Dim row As Integer, col As Integer

    Dim solarDay As Integer, lunarDay As Integer, gregDay As Integer

    Dim solarMonth As Integer, lunarMonth As Integer, gregMonth As Integer


    ' Array declarations for month day limits

    Dim shamsiDays(1 To 12) As Integer

    shamsiDays(1) = 31: shamsiDays(2) = 31: shamsiDays(3) = 31

    shamsiDays(4) = 31: shamsiDays(5) = 31: shamsiDays(6) = 31

    shamsiDays(7) = 30: shamsiDays(8) = 30: shamsiDays(9) = 30

    shamsiDays(10) = 30: shamsiDays(11) = 30: shamsiDays(12) = 29


    Dim miladiDays(1 To 12) As Integer

    miladiDays(1) = 31: miladiDays(2) = 28: miladiDays(3) = 31

    miladiDays(4) = 30: miladiDays(5) = 31: miladiDays(6) = 30

    miladiDays(7) = 31: miladiDays(8) = 31: miladiDays(9) = 30

    miladiDays(10) = 31: miladiDays(11) = 30: miladiDays(12) = 31


    Dim ghamariDays(1 To 12) As Integer

    ghamariDays(1) = 30: ghamariDays(2) = 29: ghamariDays(3) = 30

    ghamariDays(4) = 29: ghamariDays(5) = 30: ghamariDays(6) = 30

    ghamariDays(7) = 30: ghamariDays(8) = 29: ghamariDays(9) = 30

    ghamariDays(10) = 29: ghamariDays(11) = 29: ghamariDays(12) = 29


    Dim gregMonthName(1 To 12) As String


    gregMonthName(1) = "Jan"

    gregMonthName(2) = "Feb"

    gregMonthName(3) = "Mar"

    gregMonthName(4) = "Apr"

    gregMonthName(5) = "May"

    gregMonthName(6) = "Jun"

    gregMonthName(7) = "Jul"

    gregMonthName(8) = "Aug"

    gregMonthName(9) = "Sep"

    gregMonthName(10) = "Oct"

    gregMonthName(11) = "Nov"

    gregMonthName(12) = "Dec"


    Dim WeekNames(1 To 12) As String



 WeekNames(1) = ""

WeekNames(2) = ""

WeekNames(3) = ""

WeekNames(4) = ""

WeekNames(5) = ""

WeekNames(6) = ""

WeekNames(7) = ""


    Set pptPres = ActivePresentation

    eventFile = "/Users/apple/events_output_toolani.txt"

    'monthFile = "/Users/apple/monthnames_output.txt" ' ???? ???? ??? ??????

    weekFile = "/Users/apple/nameofweekdays.txt"

    ' Read event and month data into arrays

    eventData = ReadTextFile(eventFile)

    weekData = ReadTextFile(weekFile)


    Dim x As Integer


            For x = LBound(weekData) To UBound(weekData)

                WeekNames(x + 1) = weekData(x)

            Next x



            Dim slideTemplateFirstHalfW1 As Slide, slideTemplateSecondHalfW1 As Slide

            Dim slideTemplateFirstHalfW2 As Slide, slideTemplateSecondHalfW2 As Slide


            Set slideTemplateFirstHalfW1 = pptPres.Slides(1)

            Set slideTemplateSecondHalfW1 = pptPres.Slides(2)


            Set slideTemplateFirstHalfW2 = pptPres.Slides(3)

            Set slideTemplateSecondHalfW2 = pptPres.Slides(4)


  ' Set slideTemplateFirstHalfW = pptPres.Slides(1)

  '  Set slideTemplateSecondHalfW = pptPres.Slides(2)


    ' Initial Date & Position (1 Farvardin 1404 = Friday)

    solarDay = 1: solarMonth = 1

    lunarDay = 1: lunarMonth = 10 ' SHAval 1446

    gregDay = 21: gregMonth = 3   ' March 2025


    'col = 1 ' Starts on shanbe

    Dim weeknumber As Integer


    Dim activeHalf As Integer

    activeHalf = 1


    For weeknumber = 1 To 53


        If weeknumber Mod 2 = 1 Then

            Set slideTemplateFirstHalfW = slideTemplateFirstHalfW1

            Set slideTemplateSecondHalfW = slideTemplateSecondHalfW1

        Else

            Set slideTemplateFirstHalfW = slideTemplateFirstHalfW2

            Set slideTemplateSecondHalfW = slideTemplateSecondHalfW2

        End If




      ''  If (activeHalf = 1) Then

        Set currentSlide = slideTemplateFirstHalfW.Duplicate(1)

        currentSlide.MoveTo pptPres.Slides.count



        ' Loop through days of the current month

        For d = 1 To 7

            If solarMonth = 0 Then

            weeknumber = 100

            Exit For

            End If


            If d = 5 Then

                  ''  If (activeHalf = 2) Then

                Set currentSlide = slideTemplateSecondHalfW.Duplicate(1)

                currentSlide.MoveTo pptPres.Slides.count

            End If


            ' --- SEARCH LOGIC FOR EVENTS ---

            Dim eventText As String: eventText = ""

            Dim holidayCode As Integer: holidayCode = 1 ' 1 = Normal day by default

            Dim lengthCode As Integer: lengthCode = 0


            Dim i As Long

            Dim prefix As String

            prefix = solarDay & "," & solarMonth & ","


            For i = LBound(eventData) To UBound(eventData)

                If Left(eventData(i), Len(prefix)) = prefix Then

                    Dim parts() As String: parts = Split(eventData(i), ",")

                    Dim uBoundParts As Integer: uBoundParts = UBound(parts)


                    lengthCode = CInt(parts(uBoundParts))

                    holidayCode = CInt(parts(uBoundParts - 1))


                    Dim k As Integer

                    For k = 2 To uBoundParts - 2

                        eventText = eventText & ChrW(CInt(parts(k)))

                    Next k

                    Exit For

                End If

            Next i


            Dim RowIndex As Integer

            RowIndex = d

            If activeHalf = 2 Then

                RowIndex = d - 4

            End If


            '-------------------------------

            ' Table Days

            '-------------------------------


            ' --- Fill Table shamsi) ---

            With currentSlide.Shapes("Table Days").Table.Cell(RowIndex, 1).Shape.TextFrame.TextRange

                '.Font.Name = "X "

                '.Font.Size = 16

                '.Font.Color.RGB = RGB(1, 187, 130)

                .ParagraphFormat.Alignment = ppAlignRight

                .Text = vbNullString

                .InsertAfter ConvertUnicodeCsvToText(WeekNames(d)) & " " & ConvertToPersian(solarDay)

            End With


            ' --- Fill Table  (Gregorian

            With currentSlide.Shapes("Table Days").Table.Cell(RowIndex, 2).Shape.TextFrame.TextRange

                '.Font.Name = "X "

                '.Font.Size = 16

                '.Font.Color.RGB = RGB(1, 187, 130)

                .ParagraphFormat.Alignment = ppAlignLeft

                .Text = vbNullString

                .InsertAfter gregDay & " " & gregMonthName(gregMonth)

            End With

            '-------------------------------

            ' Table Events

            '-------------------------------

            ' --- Fill Table (Events) ---


            With currentSlide.Shapes("Table event").Table.Cell(RowIndex, 3).Shape.TextFrame.TextRange

              '.Font.Name = "X Yekan"


              If lengthCode = 5 Then .Font.Size = 8 Else .Font.Size = 9


              If holidayCode = 0 Then

                  .Font.Color.RGB = RGB(255, 0, 0)

              End If


               If eventText <> "" Then

                    .Text = vbNullString

                    .InsertAfter eventText

                End If

            End With



            ' --- Move Rabbit to next cell ---

            If d = 4 Then

                activeHalf = 2

            End If


            If d = 7 Then

                activeHalf = 1

            End If


            ' Advance calendar counters

            solarDay = solarDay + 1

            lunarDay = lunarDay + 1

            gregDay = gregDay + 1


            ' Check Gregorian limits

            If gregDay > miladiDays(gregMonth) Then

                gregDay = 1

                gregMonth = gregMonth + 1

                If gregMonth > 12 Then gregMonth = 1

            End If


            ' Check solar limits

            If solarDay > shamsiDays(solarMonth) Then

                solarDay = 1

                solarMonth = solarMonth + 1

                If solarMonth > 12 Then solarMonth = 0

            End If


        Next d


    Next weeknumber


    MsgBox "Done!", vbInformation

End Sub





' ???? ???? ???? ???? ????? ????? ?????? ????-?????? ?? ??? ?????

Function ConvertUnicodeCsvToText(csvStr As String) As String

    Dim cleanStr As String

    cleanStr = csvStr

    If cleanStr = "" Then

        ConvertUnicodeCsvToText = ""

        Exit Function

    End If


    Dim codes() As String

    codes = Split(cleanStr, ",")


    Dim res As String: res = ""

    Dim i As Integer

    For i = LBound(codes) To UBound(codes)

        If Trim(codes(i)) <> "" Then

            res = res & ChrW(CInt(Trim(codes(i))))

        End If

    Next i

    ConvertUnicodeCsvToText = res

End Function


Function ReadTextFile(filePath As String) As Variant

    Dim fileNo As Integer

    Dim lineData As String

    Dim allLines() As String

    Dim count As Long


    fileNo = FreeFile

    count = 0


    Open filePath For Input As #fileNo

    Do While Not EOF(fileNo)

        Line Input #fileNo, lineData

        lineData = Trim(lineData)

        If lineData <> "" Then

            ReDim Preserve allLines(count)

            allLines(count) = lineData

            count = count + 1

        End If

    Loop

    Close #fileNo

    ReadTextFile = allLines

End Function


Function ConvertToPersian(m As Integer) As String

    Dim res As String

    Dim digit As Integer

    Dim n As Integer

    n = m

    res = ""

    If n = 0 Then

        ConvertToPersian = ChrW(1776)

        Exit Function

    End If

    While n > 0

        digit = n Mod 10

        res = ChrW(1776 + digit) & res

        n = n \ 10

    Wend

    ConvertToPersian = res

End Function


Function CleanComma(txt As String) As String

    CleanComma = Mid(Trim(txt), 2, Len(txt) - 2)

End Function


خرگوش هفتگی-عالی-یک قالب دو ص ای

Option Explicit


Sub GenerateCalendarRabbit()

    Dim pptPres As Presentation

    Dim slideTemplateFirstHalfW As Slide, slideTemplateSecondHalfW As Slide

    Dim currentSlide As Slide

    Dim eventFile As String, weekFile As String

    Dim eventData As Variant, weekData As Variant

    Dim m As Integer, d As Integer

    Dim row As Integer, col As Integer

    Dim solarDay As Integer, lunarDay As Integer, gregDay As Integer

    Dim solarMonth As Integer, lunarMonth As Integer, gregMonth As Integer


    ' Array declarations for month day limits

    Dim shamsiDays(1 To 12) As Integer

    shamsiDays(1) = 31: shamsiDays(2) = 31: shamsiDays(3) = 31

    shamsiDays(4) = 31: shamsiDays(5) = 31: shamsiDays(6) = 31

    shamsiDays(7) = 30: shamsiDays(8) = 30: shamsiDays(9) = 30

    shamsiDays(10) = 30: shamsiDays(11) = 30: shamsiDays(12) = 29


    Dim miladiDays(1 To 12) As Integer

    miladiDays(1) = 31: miladiDays(2) = 28: miladiDays(3) = 31

    miladiDays(4) = 30: miladiDays(5) = 31: miladiDays(6) = 30

    miladiDays(7) = 31: miladiDays(8) = 31: miladiDays(9) = 30

    miladiDays(10) = 31: miladiDays(11) = 30: miladiDays(12) = 31


    Dim ghamariDays(1 To 12) As Integer

    ghamariDays(1) = 30: ghamariDays(2) = 29: ghamariDays(3) = 30

    ghamariDays(4) = 29: ghamariDays(5) = 30: ghamariDays(6) = 30

    ghamariDays(7) = 30: ghamariDays(8) = 29: ghamariDays(9) = 30

    ghamariDays(10) = 29: ghamariDays(11) = 29: ghamariDays(12) = 29


    Dim gregMonthName(1 To 12) As String


    gregMonthName(1) = "Jan"

    gregMonthName(2) = "Feb"

    gregMonthName(3) = "Mar"

    gregMonthName(4) = "Apr"

    gregMonthName(5) = "May"

    gregMonthName(6) = "Jun"

    gregMonthName(7) = "Jul"

    gregMonthName(8) = "Aug"

    gregMonthName(9) = "Sep"

    gregMonthName(10) = "Oct"

    gregMonthName(11) = "Nov"

    gregMonthName(12) = "Dec"


    Dim WeekNames(1 To 12) As String



 WeekNames(1) = ""

WeekNames(2) = ""

WeekNames(3) = ""

WeekNames(4) = ""

WeekNames(5) = ""

WeekNames(6) = ""

WeekNames(7) = ""


    Set pptPres = ActivePresentation

    eventFile = "/Users/apple/events_output_toolani.txt"

    'monthFile = "/Users/apple/monthnames_output.txt" ' ???? ???? ??? ??????

    weekFile = "/Users/apple/nameofweekdays.txt"

    ' Read event and month data into arrays

    eventData = ReadTextFile(eventFile)

    weekData = ReadTextFile(weekFile)


    Dim x As Integer


            For x = LBound(weekData) To UBound(weekData)

                WeekNames(x + 1) = weekData(x)

            Next x






    Set slideTemplateFirstHalfW = pptPres.Slides(1)

    Set slideTemplateSecondHalfW = pptPres.Slides(2)


    ' Initial Date & Position (1 Farvardin 1404 = Friday)

    solarDay = 1: solarMonth = 1

    lunarDay = 1: lunarMonth = 10 ' SHAval 1446

    gregDay = 21: gregMonth = 3   ' March 2025


    'col = 1 ' Starts on shanbe

    Dim weeknumber As Integer


    Dim activeHalf As Integer

    activeHalf = 1


    For weeknumber = 1 To 5


      ''  If (activeHalf = 1) Then

        Set currentSlide = slideTemplateFirstHalfW.Duplicate(1)

        currentSlide.MoveTo pptPres.Slides.count



        ' Loop through days of the current month

        For d = 1 To 7

            If solarMonth = 0 Then

            weeknumber = 100

            Exit For

            End If


            If d = 5 Then

                  ''  If (activeHalf = 2) Then

                Set currentSlide = slideTemplateSecondHalfW.Duplicate(1)

                currentSlide.MoveTo pptPres.Slides.count

            End If


            ' --- SEARCH LOGIC FOR EVENTS ---

            Dim eventText As String: eventText = ""

            Dim holidayCode As Integer: holidayCode = 1 ' 1 = Normal day by default

            Dim lengthCode As Integer: lengthCode = 0


            Dim i As Long

            Dim prefix As String

            prefix = solarDay & "," & solarMonth & ","


            For i = LBound(eventData) To UBound(eventData)

                If Left(eventData(i), Len(prefix)) = prefix Then

                    Dim parts() As String: parts = Split(eventData(i), ",")

                    Dim uBoundParts As Integer: uBoundParts = UBound(parts)


                    lengthCode = CInt(parts(uBoundParts))

                    holidayCode = CInt(parts(uBoundParts - 1))


                    Dim k As Integer

                    For k = 2 To uBoundParts - 2

                        eventText = eventText & ChrW(CInt(parts(k)))

                    Next k

                    Exit For

                End If

            Next i


            Dim RowIndex As Integer

            RowIndex = d

            If activeHalf = 2 Then

                RowIndex = d - 4

            End If


            '-------------------------------

            ' Table Days

            '-------------------------------


            ' --- Fill Table shamsi) ---

            With currentSlide.Shapes("Table Days").Table.Cell(RowIndex, 1).Shape.TextFrame.TextRange

                '.Font.Name = "X "

                '.Font.Size = 16

                '.Font.Color.RGB = RGB(1, 187, 130)

                .ParagraphFormat.Alignment = ppAlignRight

                .Text = vbNullString

                .InsertAfter ConvertUnicodeCsvToText(WeekNames(d)) & " " & ConvertToPersian(solarDay)

            End With


            ' --- Fill Table  (Gregorian

            With currentSlide.Shapes("Table Days").Table.Cell(RowIndex, 2).Shape.TextFrame.TextRange

                '.Font.Name = "X "

                '.Font.Size = 16

                '.Font.Color.RGB = RGB(1, 187, 130)

                .ParagraphFormat.Alignment = ppAlignLeft

                .Text = vbNullString

                .InsertAfter gregDay & " " & gregMonthName(gregMonth)

            End With

            '-------------------------------

            ' Table Events

            '-------------------------------

            ' --- Fill Table (Events) ---


            With currentSlide.Shapes("Table event").Table.Cell(RowIndex, 3).Shape.TextFrame.TextRange

              '.Font.Name = "X Yekan"


              If lengthCode = 5 Then .Font.Size = 8 Else .Font.Size = 9


              If holidayCode = 0 Then

                  .Font.Color.RGB = RGB(255, 0, 0)

              End If


               If eventText <> "" Then

                    .Text = vbNullString

                    .InsertAfter eventText

                End If

            End With



            ' --- Move Rabbit to next cell ---

            If d = 4 Then

                activeHalf = 2

            End If


            If d = 7 Then

                activeHalf = 1

            End If


            ' Advance calendar counters

            solarDay = solarDay + 1

            lunarDay = lunarDay + 1

            gregDay = gregDay + 1


            ' Check Gregorian limits

            If gregDay > miladiDays(gregMonth) Then

                gregDay = 1

                gregMonth = gregMonth + 1

                If gregMonth > 12 Then gregMonth = 1

            End If


            ' Check solar limits

            If solarDay > shamsiDays(solarMonth) Then

                solarDay = 1

                solarMonth = solarMonth + 1

                If solarMonth > 12 Then solarMonth = 0

            End If


        Next d


    Next weeknumber


    MsgBox "Done!", vbInformation

End Sub





' ???? ???? ???? ???? ????? ????? ?????? ????-?????? ?? ??? ?????

Function ConvertUnicodeCsvToText(csvStr As String) As String

    Dim cleanStr As String

    cleanStr = csvStr

    If cleanStr = "" Then

        ConvertUnicodeCsvToText = ""

        Exit Function

    End If


    Dim codes() As String

    codes = Split(cleanStr, ",")


    Dim res As String: res = ""

    Dim i As Integer

    For i = LBound(codes) To UBound(codes)

        If Trim(codes(i)) <> "" Then

            res = res & ChrW(CInt(Trim(codes(i))))

        End If

    Next i

    ConvertUnicodeCsvToText = res

End Function


Function ReadTextFile(filePath As String) As Variant

    Dim fileNo As Integer

    Dim lineData As String

    Dim allLines() As String

    Dim count As Long


    fileNo = FreeFile

    count = 0


    Open filePath For Input As #fileNo

    Do While Not EOF(fileNo)

        Line Input #fileNo, lineData

        lineData = Trim(lineData)

        If lineData <> "" Then

            ReDim Preserve allLines(count)

            allLines(count) = lineData

            count = count + 1

        End If

    Loop

    Close #fileNo

    ReadTextFile = allLines

End Function


Function ConvertToPersian(m As Integer) As String

    Dim res As String

    Dim digit As Integer

    Dim n As Integer

    n = m

    res = ""

    If n = 0 Then

        ConvertToPersian = ChrW(1776)

        Exit Function

    End If

    While n > 0

        digit = n Mod 10

        res = ChrW(1776 + digit) & res

        n = n \ 10

    Wend

    ConvertToPersian = res

End Function


Function CleanComma(txt As String) As String

    CleanComma = Mid(Trim(txt), 2, Len(txt) - 2)

End Function