استدعاء الدالة على Azure Databricks

هام

هذه الميزة في المعاينة العامة وهي مدعومة فقط على واجهات برمجة تطبيقات نموذج الأساس التي تدفع لكل رمز مميز أو نقاط نهاية معدل النقل المقدمة.

توضح هذه المقالة استدعاء الدالة وكيفية استخدامها كجزء من مهام سير عمل التطبيق الذكاء الاصطناعي التوليدية. Databricks Function Calling متوافق مع OpenAI ولا يتوفر إلا أثناء عمل النموذج كجزء من واجهات برمجة تطبيقات نموذج المؤسسة.

ما هو استدعاء الدالة

يوفر استدعاء الدالة طريقة للتحكم في إخراج LLMs، بحيث تقوم بإنشاء استجابات منظمة بشكل أكثر موثوقية. عند استخدام استدعاء دالة، يمكنك وصف الدالات في استدعاء API عن طريق وصف وسيطات الدالة باستخدام مخطط JSON. لا يستدعي LLM نفسه هذه الدالات، ولكنه بدلا من ذلك ينشئ كائن JSON يمكن للمستخدمين استخدامه لاستدعاء الوظائف في التعليمات البرمجية الخاصة بهم.

بالنسبة إلى استدعاء الدالة على Databricks، يكون التسلسل الأساسي للخطوات كما يلي:

  1. استدعاء النموذج باستخدام الاستعلام المرسل ومجموعة من الوظائف المعرفة في المعلمة tools .
  2. يقرر النموذج ما إذا كان يجب استدعاء الدالات المحددة أم لا. عند استدعاء الدالة، يكون المحتوى كائن JSON من السلاسل التي تلتزم بالمخطط المخصص.
  3. تحليل السلاسل في JSON في التعليمات البرمجية الخاصة بك، واستدعاء الدالة الخاصة بك مع الوسيطات المتوفرة إذا كانت موجودة.
  4. استدعاء النموذج مرة أخرى عن طريق إلحاق الاستجابة المنظمة كرسالة جديدة. يتم تعريف بنية الاستجابة بواسطة الوظائف التي قدمتها سابقا في tools. من هنا، يلخص النموذج النتائج ويرسل هذا الملخص إلى المستخدم.

متى تستخدم استدعاء الدالة

فيما يلي أمثلة لحالات الاستخدام لاستدعاء الدالة:

  • إنشاء مساعدين يمكنهم الإجابة عن الأسئلة عن طريق استدعاء واجهات برمجة التطبيقات الأخرى. على سبيل المثال، يمكنك تعريف وظائف مثل send_email(to: string, body: string) أو current_weather(location: string, unit: 'celsius' | 'fahrenheit').
  • تعريف واستخدام استدعاءات واجهة برمجة التطبيقات استنادا إلى اللغة الطبيعية. مثل أخذ عبارة ، "من هم أفضل عملائي؟" وجعل ذلك في استدعاء واجهة برمجة التطبيقات المسمى، get_customers(min_revenue: int, created_before: string, limit: int) واستدعاء واجهة برمجة التطبيقات هذه.
  • تحويل البيانات غير المنظمة إلى بيانات منظمة. مثل تحديد وتصنيف ملاحظات مراجعة المنتج على أنها سلبية أو إيجابية أو محايدة.

النماذج المدعومة

هام

يتم توفير DBRX بموجب وتخضع لترخيص Databricks Open Model، Copyright © Databricks، Inc. كافة الحقوق محفوظة. يتحمل العملاء مسؤولية ضمان الامتثال لتراخيص النموذج المعمول بها، بما في ذلك نهج الاستخدام المقبول ل Databricks.

تم ترخيص Meta Llama 3.1 بموجب ترخيص مجتمع LLAMA 3.1، ومنصة Meta لحقوق النشر ©، وشركة. كافة الحقوق محفوظة. يتحمل العملاء مسؤولية ضمان الامتثال لتراخيص النموذج المعمول بها.

تدعم استدعاء الدالة على Databricks نماذج واجهات برمجة التطبيقات نموذج الأساس التالية على الدفع لكل رمز مميز وأحمال العمل الإنتاجية المتوفرة:

راجع حدود واجهات برمجة التطبيقات لنموذج الأساس لتوفر المنطقة.

تدعم استدعاء الدالة على Databricks ما يلي على أحمال عمل معدل النقل المتوفرة فقط:

استخدام استدعاء الدالة

لاستخدام استدعاء الدالة مع تطبيق الذكاء الاصطناعي التوليدي، يجب توفير دالة parameters descriptionو.

السلوك الافتراضي ل tool_choice هو "auto". يتيح هذا للنموذج تحديد الوظائف التي يجب استدعاؤها وما إذا كان سيتم استدعاؤها.

يمكنك تخصيص السلوك الافتراضي اعتمادا على حالة الاستخدام الخاصة بك. فيما يلي خياراتك:

  • تعيين tool_choice: "required". في هذا السيناريو، يستدعي النموذج دائما دالة واحدة أو أكثر. يحدد النموذج الدالة أو الدالات التي يجب استدعاها.
  • تعيين tool_choice: {"type": "function", "function": {"name": "my_function"}}. في هذا السيناريو، يستدعي النموذج دالة معينة فقط.
  • قم بتعيين tool_choice: "none" لتعطيل استدعاء الدالة واعمل على إنشاء النموذج فقط رسالة مواجهة للمستخدم.

فيما يلي مثال منعطف واحد باستخدام OpenAI SDK ومعلمته tools . راجع مهمة الدردشة للحصول على تفاصيل بناء جملة إضافية.

هام

أثناء المعاينة العامة، تم تحسين استدعاء الدالة على Databricks لاستدعاء وظيفة تشغيل واحدة.

import os
import json
from openai import OpenAI

DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')

client = OpenAI(
  api_key=DATABRICKS_TOKEN,
  base_url=DATABRICKS_BASE_URL
  )

tools = [
  {
    "type": "function",
    "function": {
      "name": "get_current_weather",
      "description": "Get the current weather in a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA"
          },
          "unit": {
            "type": "string",
            "enum": [
              "celsius",
              "fahrenheit"
            ]
          }
        }
      }
    }
  }
]

messages = [{"role": "user", "content": "What is the current temperature of Chicago?"}]

response = client.chat.completions.create(
    model="databricks-meta-llama-3-1-70b-instruct",
    messages=messages,
    tools=tools,
    tool_choice="auto",
)

print(json.dumps(response.choices[0].message.model_dump()['tool_calls'], indent=2))

مخطط JSON

تدعم واجهات برمجة تطبيقات نموذج الأساس تعريفات الوظائف المقبولة من قبل OpenAI على نطاق واسع. ومع ذلك، يؤدي استخدام مخطط JSON أبسط لتعريفات استدعاء الدالة إلى إنشاء استدعاء دالة ذات جودة أعلى ل JSON. لتعزيز توليد أعلى جودة، تدعم واجهات برمجة التطبيقات نموذج الأساس فقط مجموعة فرعية من مواصفات مخطط JSON.

مفاتيح تعريف استدعاء الدالة التالية غير مدعومة:

  • التعبيرات العادية باستخدام pattern.
  • تكوين المخطط المعقد أو المتداخل والتحقق من الصحة باستخدام: anyOfأو allOfprefixItemsoneOf$ref.
  • قوائم الأنواع باستثناء الحالة الخاصة التي [type, “null”] يكون فيها نوع واحد في القائمة هو نوع JSON صالح والآخر هو "null"

بالإضافة إلى ذلك، تنطبق القيود التالية:

  • الحد الأقصى لعدد المفاتيح المحددة في مخطط JSON هو 16.
  • لا تفرض واجهات برمجة تطبيقات نموذج الأساس قيود الطول أو الحجم للكائنات والصفائف.
    • يتضمن ذلك كلمات أساسية مثل maxPropertiesو minPropertiesو.maxLength
  • ستؤدي مخططات JSON المتداخلة بشكل كبير إلى توليد جودة أقل. إذا كان ذلك ممكنا، فحاول تبسيط مخطط JSON للحصول على نتائج أفضل.

استخدام الرمز المميز

يتم استخدام الحقن الفوري والتقنيات الأخرى لتحسين جودة استدعاءات الأدوات. يؤثر القيام بذلك على عدد رموز الإدخال والإخراج المميزة التي يستهلكها النموذج، ما يؤدي بدوره إلى الآثار المترتبة على الفوترة. كلما زاد عدد الأدوات التي تستخدمها، زادت الرموز المميزة للإدخل.

القيود

فيما يلي قيود لاستدعاء الدالة أثناء المعاينة العامة:

  • تم تحسين حل استدعاء الدالة الحالي لاستدعاءات الدالة المنعطفة الفردية. يتم دعم استدعاء الوظائف متعددة الأدوار أثناء المعاينة، ولكن قيد التطوير.
    • لا يدعم نموذجا DBRX Instruct و Meta Llama 3.1 8B Instruct استدعاءات الوظائف متعددة الأدوار.
  • استدعاء الدالة المتوازية غير مدعوم.
  • الحد الأقصى لعدد الدالات التي يمكن تعريفها في tools هو 32 دالة.
  • لدعم معدل النقل المقدم، يتم دعم استدعاء الدالة فقط على نقاط النهاية الجديدة. لا يمكنك إضافة استدعاء دالة إلى نقاط النهاية التي تم إنشاؤها مسبقا.

مثال دفتر الملاحظات

راجع دفتر الملاحظات التالي للحصول على أمثلة مفصلة لاستدعاء الدالة

دفتر ملاحظات مثال استدعاء الدالة

الحصول على دفتر الملاحظات