الطلبات

فالتلاعب بالطلبات هو الطريقة الأساسية التي تؤثر بها، بصفتك مطور تطبيقات، مخرجات نماذج الذكاء الاصطناعي التوليدي فعلى سبيل المثال، عند استخدام النماذج اللغوية الكبيرة، يمكنك صياغة ومطالبات تؤثر في الأسلوب والتنسيق والطول والخصائص الأخرى استجابات النماذج.

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

سيجد معظم المطوّرين أن مكتبة Dotprompt المضمّنة لتلبية احتياجاتهم للعمل باستخدام الطلبات في Genkit. ومع ذلك، فإن البديل مختلفة أيضًا من خلال العمل مع المطالبات مباشرةً.

تحديد الطلبات

تقبل دوال إنشاء المساعدة في Genkit مطالبات السلاسل، ويمكنك نماذج الاتصال بهذه الطريقة لحالات الاستخدام المباشرة.

انتقال

request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{ai.NewTextPart("You are a helpful AI assistant named Walt.")}},
}}
model.Generate(context.Background(), &request, nil)

في معظم الحالات، ستحتاج إلى تضمين بعض الإدخالات التي قدّمها المستخدم في طلبك. يمكنك تحديد دالة لعرضها على النحو التالي:

انتقال

func helloPrompt(name string) *ai.Part {
  prompt := fmt.Sprintf("You are a helpful AI assistant named Walt. Say hello to %s.", name)
  return ai.NewTextPart(prompt)
}
request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{helloPrompt("Fred")}},
}}
response, err := model.Generate(context.Background(), &request, nil)

ومع ذلك، فإن أحد أوجه القصور في تحديد المطالبات في التعليمات البرمجية هو أن الاختبار يتطلب تنفيذ كجزء من التدفق. لتسهيل التكرار السريع، توفر Genkit مرفقًا لتحديد الطلبات وتشغيلها في واجهة مستخدم المطوّرين.

انتقال

يمكنك استخدام الوظيفة DefinePrompt لتسجيل طلباتك في Genkit.

type HelloPromptInput struct {
  UserName string
}
helloPrompt := ai.DefinePrompt(
  "prompts",
  "helloPrompt",
  nil, // Additional model config
  jsonschema.Reflect(&HelloPromptInput{}),
  func(ctx context.Context, input any) (*ai.GenerateRequest, error) {
      params, ok := input.(HelloPromptInput)
      if !ok {
          return nil, errors.New("input doesn't satisfy schema")
      }
      prompt := fmt.Sprintf(
          "You are a helpful AI assistant named Walt. Say hello to %s.",
          params.UserName)
      return &ai.GenerateRequest{Messages: []*ai.Message{
          {Content: []*ai.Part{ai.NewTextPart(prompt)}},
      }}, nil
  },
)

يحدد إجراء المطالبة دالة تقوم بإرجاع GenerateRequest، والتي يمكن استخدامها مع أي نموذج. يمكنك أيضًا بشكل اختياري تحديد مخطط إدخال بالنسبة إلى المطالبة، وهي مُناظرة لمخطط الإدخال للتدفق. يمكن أن تحدّد الطلبات أيضًا أيًا من خيارات ضبط النموذج الشائعة، مثل درجة الحرارة أو عدد رموز الإخراج.

يمكنك عرض هذا الطلب في طلب نموذج باستخدام الدالة المساعدة المتوفّرة. قم بتوفير متغيرات الإدخال المتوقعة من المطالبة، والنموذج المراد استدعاءه.

انتقال

request, err := helloPrompt.Render(context.Background(), HelloPromptInput{UserName: "Fred"})
if err != nil {
  return err
}
response, err := model.Generate(context.Background(), request, nil)

في واجهة مستخدم المطوّرين Genkit، يمكنك تنفيذ أي طلب حدّدته بهذه الطريقة. يتيح لك ذلك تجربة طلبات فردية خارج نطاق التدفقات التي يمكن استخدامها فيها.

الطلبات النقطية

تتضمن Genkit مكتبة Dotprompt التي تضيف المزيد ووظائفها إلى المطالبات.

  • جارٍ تحميل الطلبات من .prompt ملف مصدر
  • النماذج المستندة إلى المقاود
  • إتاحة نماذج مطالبات متعددة الأدوار ومحتوى الوسائط المتعددة
  • تعريفات دقيقة لمخططات المدخلات والمخرجات
  • يمكن التواصل بطلاقة مع "generate()"