تولید خروجی‌های یکسان با پارامتر seed

تولید خروجی‌های یکسان با پارامتر seed

preview

توسعه‌دهندگان اکنون می‌توانند پارامتر seed را در درخواست‌های Chat Completion استفاده کنند تا خروجی‌های نسبتاً ثابتی دریافت کنند. لطفاً توجه داشته باشید که این ویژگی در مرحله بتا است و در حال حاضر فقط برای مدلهای gpt-4-1106-preview و gpt-3.5-turbo-1106 و مدل‌های بعد از آنها پشتیبانی می‌شود.

خروجی API‌های Chat Completions و Completions به طور پیش‌فرض غیر قطعی هستند (که به این معناست که خروجی‌های مدل ممکن است از درخواست به درخواست متفاوت باشند)، اما اکنون با استفاده از چند پارامتر در سطح مدل، می‌توانید خروجی‌ها را تا حدی کنترل کنید. این امکان برای بازتولید نتایج و تست‌ها بسیار مفید است.

پیاده‌سازی خروجی‌های ثابت #

برای دریافت خروجی‌های نسبتاً قطعی در درخواست‌های API:

  1. پارامتر seed را به هر عدد صحیح دلخواه خود تنظیم کنید، اما از همان مقدار در تمام درخواست‌ها استفاده کنید. به عنوان مثال، 12345.
  2. سایر پارامترها (مثل prompt، temperature، top_p، و غیره) را در تمام درخواست‌ها به مقادیر ثابتی تنظیم کنید.
  3. در پاسخ، فیلد system_fingerprint را بررسی کنید. اثر انگشت سیستم یک شناسه برای ترکیب فعلی وزن‌های مدل، زیرساخت و سایر گزینه‌های پیکربندی مورد استفاده سرورهای OpenAI برای تولید پاسخ است. این مقدار هر زمان که پارامترهای درخواست تغییر کند یا OpenAI پیکربندی زیرساخت‌هایش را به‌روزرسانی کند (که ممکن است چند بار در سال اتفاق بیفتد) تغییر می‌کند.
  4. اگر seed، پارامترهای دیگر درخواست API، و system_fingerprint در تمام درخواست‌ها مطابقت داشته باشند، خروجی‌های مدل عمدتاً یکسان خواهند بود. با این حال، هنوز احتمال کمی وجود دارد که پاسخ‌ها حتی وقتی پارامترهای درخواست و system_fingerprint مطابقت دارند، متفاوت باشند که این به دلیل عدم قطعیت ذاتی مدل‌هاست.

مثال: تولید خروجی با یک seed ثابت #

در این مثال، ما نحوه تولید یک قطعه کوتاه با استفاده از یک seed ثابت را نشان می‌دهیم. این می‌تواند به ویژه در سناریوهایی که نیاز به تولید نتایج ثابت برای تست، اشکال‌یابی یا برای برنامه‌هایی که نیاز به خروجی‌های ثابت دارند، مفید باشد.

Python SDK #

برای اجرای کدهای زیر ابتدا باید یک کلید API را از طریق پنل کاربری گیلاس تولید کنید. برای این کار ابتدا یک حساب کاربری جدید بسازید یا اگر صاحب حساب کاربری هستید وارد پنل کاربری خود شوید. سپس، به صفحه کلید API بروید و با کلیک روی دکمه “ساخت کلید API” یک کلید جدید برای دسترسی به Gilas API بسازید.
 1!pip install --upgrade openai 
 2
 3import openai
 4import asyncio
 5from IPython.display import display, HTML
 6
 7from utils.embeddings_utils import (
 8    get_embedding,
 9    distances_from_embeddings
10)
11
12GPT_MODEL = "gpt-3.5-turbo"
13
14async def get_chat_response(
15    system_message: str, user_request: str, seed: int = None, temperature: float = 0.7
16):
17    try:
18        messages = [
19            {"role": "system", "content": system_message},
20            {"role": "user", "content": user_request},
21        ]
22
23        response = openai.chat.completions.create(
24            model=GPT_MODEL,
25            messages=messages,
26            seed=seed,
27            max_tokens=200,
28            temperature=temperature,
29        )
30
31        response_content = response.choices[0].message.content
32        system_fingerprint = response.system_fingerprint
33        prompt_tokens = response.usage.prompt_tokens
34        completion_tokens = response.usage.total_tokens - response.usage.prompt_tokens
35
36        table = f"""
37        <table>
38        <tr><th>Response</th><td>{response_content}</td></tr>
39        <tr><th>System Fingerprint</th><td>{system_fingerprint}</td></tr>
40        <tr><th>Number of prompt tokens</th><td>{prompt_tokens}</td></tr>
41        <tr><th>Number of completion tokens</th><td>{completion_tokens}</td></tr>
42        </table>
43        """
44        display(HTML(table))
45
46        return response_content
47    except Exception as e:
48        print(f"An error occurred: {e}")
49        return None
50
51def calculate_average_distance(responses):
52    """
53    این تابع میانگین فاصله بین جاسازی‌های پاسخ‌ها را محاسبه می‌کند.
54    فاصله بین جاسازی‌ها معیاری برای شباهت پاسخ‌ها است.
55    """
56    # محاسبه جاسازی‌ها برای هر پاسخ
57    response_embeddings = [get_embedding(response) for response in responses]
58
59    # محاسبه فاصله‌ها بین اولین پاسخ و بقیه
60    distances = distances_from_embeddings(response_embeddings[0], response_embeddings[1:])
61
62    # محاسبه میانگین فاصله
63    average_distance = sum(distances) / len(distances)
64
65    # بازگشت میانگین فاصله
66    return average_distance

ابتدا، بیایید چند نسخه مختلف از یک قطعه کوتاه در مورد “یک سفر به مریخ” بدون پارامتر seed تولید کنیم. این رفتار پیش‌فرض است:

 1topic = "a journey to Mars"
 2system_message = "You are a helpful assistant."
 3user_request = f"Generate a short excerpt of news about {topic}."
 4
 5responses = []
 6
 7async def get_response(i):
 8    print(f'Output {i + 1}\n{"-" * 10}')
 9    response = await get_chat_response(
10        system_message=system_message, user_request=user_request
11    )
12    return response
13
14responses = await asyncio.gather(*[get_response(i) for i in range(5)])
15average_distance = calculate_average_distance(responses)
16print(f"The average similarity between responses is: {average_distance}")

خروجی:

```bash Output 1 ---------- Response "NASA's Mars mission reaches critical stage as spacecraft successfully enters orbit around the red planet. The historic journey, which began over a year ago, has captured the world's attention as scientists and astronauts prepare to land on Mars for the first time. The mission is expected to provide valuable insights into the planet's geology, atmosphere, and potential for sustaining human life in the future." System Fingerprint fp_772e8125bb Number of prompt tokens 29 Number of completion tokens 76 Output 2 ---------- Response "NASA's Perseverance rover successfully landed on Mars, marking a major milestone in the mission to explore the red planet. The rover is equipped with advanced scientific instruments to search for signs of ancient microbial life and collect samples of rock and soil for future return to Earth. This historic achievement paves the way for further exploration and potential human missions to Mars in the near future." System Fingerprint fp_772e8125bb Number of prompt tokens 29 Number of completion tokens 76 Output 3 ---------- Response "SpaceX successfully launched the first manned mission to Mars yesterday, marking a historic milestone in space exploration. The crew of four astronauts will spend the next six months traveling to the red planet, where they will conduct groundbreaking research and experiments. This mission represents a significant step towards establishing a human presence on Mars and paves the way for future interplanetary travel." System Fingerprint fp_772e8125bb Number of prompt tokens 29 Number of completion tokens 72 Output 4 ---------- Response "NASA's latest Mars mission exceeds expectations as the Perseverance rover uncovers tantalizing clues about the Red Planet's past. Scientists are thrilled by the discovery of ancient riverbeds and sedimentary rocks, raising hopes of finding signs of past life on Mars. With this exciting progress, the dream of sending humans to Mars feels closer than ever before." System Finger print fp_772e8125bb Number of prompt tokens 29 Number of completion tokens 72 Output 5 ---------- Response "NASA's Perseverance Rover Successfully Lands on Mars, Begins Exploration Mission In a historic moment for space exploration, NASA's Perseverance rover has successfully landed on the surface of Mars. After a seven-month journey, the rover touched down in the Jezero Crater, a location scientists believe may have once held a lake and could potentially contain signs of ancient microbial life. The rover's primary mission is to search for evidence of past life on Mars and collect rock and soil samples for future return to Earth. Equipped with advanced scientific instruments, including cameras, spectrometers, and a drill, Perseverance will begin its exploration of the Martian surface, providing valuable data and insights into the planet's geology and potential habitability. This successful landing marks a significant milestone in humanity's quest to understand the red planet and paves the way for future manned missions to Mars. NASA's Perseverance rover is poised to unravel the mysteries of Mars and unlock new possibilities System Fingerprint fp_772e8125bb Number of prompt tokens 29 Number of completion tokens 200 The average similarity between responses is: 0.1136714512418833 ```

اکنون، بیایید همان کد را با یک seed ثابت 123 و temperature برابر با 0 اجرا کنیم و پاسخ‌ها و system_fingerprint را مقایسه کنیم.

 1SEED = 123
 2responses = []
 3
 4async def get_response(i):
 5    print(f'Output {i + 1}\n{"-" * 10}')
 6    response = await get_chat_response(
 7        system_message=system_message,
 8        seed=SEED,
 9        temperature=0,
10        user_request=user_request,
11    )
12    return response
13
14responses = await asyncio.gather(*[get_response(i) for i in range(5)])
15
16average_distance = calculate_average_distance(responses)
17print(f"The average distance between responses is: {average_distance}")

:خروجی

```bash Output 1 ---------- Response "NASA's Perseverance Rover Successfully Lands on Mars In a historic achievement, NASA's Perseverance rover has successfully landed on the surface of Mars, marking a major milestone in the exploration of the red planet. The rover, which traveled over 293 million miles from Earth, is equipped with state-of-the-art instruments designed to search for signs of ancient microbial life and collect rock and soil samples for future return to Earth. This mission represents a significant step forward in our understanding of Mars and the potential for human exploration of the planet in the future." System Fingerprint fp_772e8125bb Number of prompt tokens 29 Number of completion tokens 113 Output 2 ---------- Response "NASA's Perseverance rover successfully lands on Mars, marking a historic milestone in space exploration. The rover is equipped with advanced scientific instruments to search for signs of ancient microbial life and collect samples for future return to Earth. This mission paves the way for future human exploration of the red planet, as scientists and engineers continue to push the boundaries of space travel and expand our understanding of the universe." System Fingerprint fp_772e8125bb Number of prompt tokens 29 Number of completion tokens 81 Output 3 ---------- Response "NASA's Perseverance rover successfully lands on Mars, marking a historic milestone in space exploration. The rover is equipped with advanced scientific instruments to search for signs of ancient microbial life and collect samples for future return to Earth. This mission paves the way for future human exploration of the red planet, as NASA continues to push the boundaries of space exploration." System Fingerprint fp_772e8125bb Number of prompt tokens 29 Number of completion tokens 72 Output 4 ---------- Response "NASA's Perseverance rover successfully lands on Mars, marking a historic milestone in space exploration. The rover is equipped with advanced scientific instruments to search for signs of ancient microbial life and collect samples for future return to Earth. This mission paves the way for future human exploration of the red planet, as scientists and engineers continue to push the boundaries of space travel and expand our understanding of the universe." System Fingerprint fp_772e8125bb Number of prompt tokens 29 Number of completion tokens 81 Output 5 ---------- Response "NASA's Perseverance rover successfully lands on Mars, marking a historic milestone in space exploration. The rover is equipped with advanced scientific instruments to search for signs of ancient microbial life and collect samples for future return to Earth. This mission paves the way for future human exploration of the red planet, as scientists and engineers continue to push the boundaries of space travel." System Fingerprint fp_772e8125bb Number of prompt tokens 29 Number of completion tokens 74 The average distance between responses is: 0.0449054397632461 ```

همانطور که مشاهده می‌کنیم، پارامتر seed به ما امکان می‌دهد تا نتایج بسیار ثابتی تولید کنیم.

نتیجه‌گیری #

ما نشان دادیم چگونه می‌توان با استفاده از مقدار seed ثابت، خروجی‌های ثابتی از مدل تولید کرد. این ویژگی به ویژه در سناریوهایی که بازتولید مهم است، مفید است. با این حال، توجه داشته باشید که اگرچه seed ثبات را تضمین می‌کند، کیفیت خروجی را تضمین نمی‌کند. توجه داشته باشید که وقتی می‌خواهید خروجی‌های قابل بازتولید استفاده کنید، باید seed را به همان عدد صحیح در درخواست‌های Chat Completions تنظیم کنید. همچنین باید هر پارامتر دیگری مانند temperature، max_tokens و غیره را تطبیق دهید.