Tools and Tool_Choice – Azure GPT4
وقتی صحبت از ادغام GPT در محصولات ما می شود و به خصوص اگر زنجیره ای از تصمیمات منطقی بر اساس نتیجه GPT گرفته می شود، باید نگران ماهیت ساختار نیافته پاسخ GPT باشیم.
راه های مختلفی برای حل این موضوع وجود دارد
- مهندسی سریع – تاکید بر بازگشت یک خروجی ساختاریافته شاید به صورت JSON. این تکنیک ممکن است کار کند، اما گاهی اوقات نتیجه ممکن است هنوز ساختاری نداشته باشد.
- لانگ چین، Llamaindex و DSPy چندین عملکرد را برای تولید خروجی ساختاریافته ارائه می دهد و این تکنیک ها معمولا قوی هستند اما بومی نیستند.
در این وبلاگ میخواهیم یک روش بومی برای دریافت خروجی ساختار یافته از GPT4 ببینیم و جزئیات کنترل این است که هر یک از نوع دادههای پارامتر برگشتی را میتوان مشخص و به دست آورد.
بیایید به یک مثال نگاه کنیم …
ما از GPT4 می خواهیم چند مشکل را حل کند و نتیجه مورد انتظار باید داشته باشد
- فرمول – فرمول مورد استفاده برای حل مشکل
- جایگزینی – مقادیر مسئله را در فرمول جایگزین کنید
- نتیجه – جایگزینی پست پاسخ نهایی
- توضیح – توضیح ساده در مورد اینکه مشکل چیست و چگونه آن را حل کنیم
- دشواری – در مقیاس 1-10 این مشکل برای یک دانشجوی مهندسی چقدر سخت است
بنابراین اگر قرار نیست از هیچ چارچوبی استفاده کنیم، چند نمونه عکس با ساختار خروجی به درستی تعریف شده ممکن است به ما کمک کند خروجی را با فرمت دلخواه دریافت کنیم، اما به طور طبیعی چیزی به نام داریم. ابزار و ابزار_انتخاب برای ساختن خروجی این ویژگی ها منتشر شد تا خروجی GPT را بتوان به عنوان به دست آورد مولفه های و از این پارامترها می توان استفاده کرد یک تابع را فراخوانی کنید.
بیایید به چند کد نگاه کنیم
نصب و راه اندازی
pip install openai
تعریف ساختار خروجی مورد نظر ما
tools = [
{
"type": "function",
"function": {
"name": "problem_solver",
"description": "Used to solve the problem",
"parameters": {
"type": "object",
"properties": {
"formula": {
"type": "string",
"description": "formula used to solve the problem",
},
"substitution": {
"type": "string",
"description": "substitute the values present in the problem into the formula used to solve the problem",
},
"result": {
"type": "string",
"description": "the final answer for the problem in float",
},
"explanation": {
"type": "string",
"description": "explanation on how the problem is solved in simple words",
},
"difficulty": {
"type": "integer",
"description": "on a scale of 1-10, how difficult is the problem to solve for an enginnering student",
},
},
"required": ["formula", "substitution", "result", "explanation", "difficulty"],
},
},
}
]
نام تابع است حلال_مشکل
5 پارامتری که در خروجی می خواهیم هستند فرمول، جایگزینی، نتیجه، توضیح، دشواری که در داخل تعریف شده اند مولفه های ==> خواص.
برای هر یک از پارامترهای بالا نوع، شرح باید تعریف شود که مشخص می کند نوع داده از مقدار برگشتی و توضیحات ساده از آنچه قرار است بازگردانده شود.
در ضروری کلید که یک لیست است باید پارامترهای اجباری را که باید برگردانده شوند مشخص کنیم در غیر این صورت GPT ممکن است آن را اختیاری در نظر بگیرد و ممکن است آن را برنگرداند.
تعریف تابعی که برای فراخوانی مدل Azure GPT استفاده می شود
def solve_problem(messages_list):
api_key = 'your_api_key'
api_base = 'your_api_base_url'
api_version = '2024-02-01'
model = 'your_deployment_name'
client = AzureOpenAI(
azure_endpoint = api_base,
api_key=api_key,
api_version=api_version
)
response = client.chat.completions.create(
model=model,
temperature=0.8,
max_tokens=500,
messages=messages_list,
tools=tools,
tool_choice={"type": "function", "function": {"name": "problem_solver"}}
)
res=response.choices[0].message
return res
در client.chat.completions.create ما دو پارامتر داریم ابزار و ابزار_انتخاب، برای پارامتر tools می توانیم لیست ابزارهایی را که قبلا ایجاد کرده بودیم ارسال کنیم.
را ابزار_انتخاب پارامتر سه مقدار را می پذیرد
- ‘auto’ – این مقدار پیش فرض زمانی است که پارامترها را در مرحله بالا تعریف می کنیم و آن را به ابزار ارسال می کنیم. با مشخص کردن «خودکار»، به GPT اجازه میدهیم تابع و پارامترهایی را که در ابزارها تعریف کردهایم انتخاب کند، گاهی اوقات ممکن است GPT عملکرد و پارامترهای تعریفشده ما را انتخاب نکند، بنابراین در «خودکار» کمی عدم قطعیت وجود دارد.
- هیچ – این مقدار پیش فرض زمانی است که هیچ تابع و پارامتری تعریف نشده باشد. این روشی برای تعیین عدم استفاده از این ویژگی است.
- تعیین یک تابع خاص از طریق {“type: “function”, “function”: {“name”: “my_function”}} مدل را مجبور به فراخوانی آن تابع می کند. در مورد ما این خواهد بود {“type: “function”, “function”: {“name”: “problem_solver”}}. این تقویت می کند GPT برای برگرداندن پارامترهای تعریف شده در زیر problem_solver.
بیایید سعی کنیم چند سوال بپرسیم
result = solve_problem([{
"role":"user",
"content": "An airplane accelerates down a runway at 3.20 m/s2 for 32.8 s until is finally lifts off the ground. Determine the distance traveled before takeoff"
}])
tool_calls = result.tool_calls
parameters = eval(tool_calls[0].function.arguments)
print(parameters)
خروجی
{'formula': 'd = v_i * t + (1/2) * a * t^2',
'substitution': 'd = 0 * 32.8 + (1/2) * 3.20 * (32.8)^2',
'result': '1721.472 m',
'explanation': 'Since the airplane starts from rest, its initial velocity (v_i) is 0. The acceleration (a) is 3.20 m/s2 and the time
'difficulty': 3}
ما می توانیم مشاهده کنیم که خروجی اکنون یک فرهنگ لغت پایتون مناسب است که به راحتی قابل تجزیه است و می تواند برای فراخوانی هر تابعی استفاده شود.
ما میتوانیم چندین تابع و پارامتر را در ابزارها تعریف کنیم و به GPT اجازه دهیم بر اساس دستور و توضیحات ارائه شده با استفاده از “auto” به عنوان مقدار tool_choice تصمیم بگیرد که کدام تابع و پارامتر را استفاده کند یا میتواند استفاده از یک تابع خاص و پارامترهای آن را با تعیین آن در tool_choice اعمال کند.
امیدوارم این کمک کند :))
لینک شده در: https://www.linkedin.com/in/praveenr2998/