برنامه نویسی

🧪 اعتبار سنجی خروجی های آمازون (NOVA) با استفاده از Openai Evals + SFN + CDK

وقتی در حال ساخت با LLM هایی مانند Amazon Bedrock's Nova هستید ، یک سوال سخت وجود دارد که در نهایت باید با آن روبرو شوید:

“چگونه می دانم که پاسخ های مدل من اساساً شیب AI نیست؟”

ما گذشته از جایی هستیم که پاسخ های چشم به اندازه کافی خوب است – ما نیاز داریم اعتبار سنجی خودکار در زمان اجرا، در حالت ایده آل که متناسب با یک پشته بدون سرور ، سازگار با تولیدبشر

بنابراین بیایید آن را سیم کشی کنیم:

  • ✍ نوا (از طریق بستر آمازون) پاسخی ایجاد می کند
  • 📊 API جدید Evals Openai پاسخ را درجه بندی می کند
  • 🤖 توابع مرحله + لامبدا آن را ارکستر کنید
  • 🧱 CDK همه چیز را مستقر می کند
  • ✅ و ما پاسخ ها را با گذشت زمان دنبال می کنیم تا بهبود یابد

بیایید برویم کودک تمام پشته ، به سبک Eval

معماری سطح بالا

قوس

ما چیزهایی را که Typescript Down XD را حفظ خواهیم کرد

پشته CDK

در اینجا یک تنظیم CDK برهنه (در TypeScript) برای استقرار همه چیز وجود دارد

 const evalNotificationTopic = new sns.Topic(this, 'EvalNotificationTopic');

    evalNotificationTopic.addSubscription(
      new snsSubscriptions.EmailSubscription('your-email@example.com')
    );

const getNova = new NodejsFunction(this, 'NovaFn', {
  entry: 'lambda/getNovaResponse.ts',
  environment: { REGION: 'us-east-1' }
});

const validateFn = new NodejsFunction(this, 'ValidateFn', {
  entry: 'lambda/validateWithOpenAI.ts',
  environment: {
    OPENAI_API_KEY: process.env.OPENAI_API_KEY!,
  }
});

const notifyTask = new tasks.SnsPublish(this, 'Notify', {
      topic: evalNotificationTopic,
      message: stepfunctions.TaskInput.fromText('Evaluation complete. Review results in OpenAI dashboard.'),
      resultPath: stepfunctions.JsonPath.DISCARD,
    });

const flow = new StepFunction(this, 'EvalFlow', {
  definition: Chain
    .start(new LambdaInvoke(this, 'Generate', { lambdaFunction: getNova }))
    .next(new LambdaInvoke(this, 'Eval', { lambdaFunction: validateFn }))
.next(notifyTask)
});

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این پشته CDK چه چیزی کاهش می یابد؟

  • 2 برهدا
  • یک گردش کار عملکردی
  • یک SNS

بیایید آن را تجزیه کنیم

📦 لامبدا 1 – پاسخ نوا (getNovaResponse.ts)

const input = event.prompt ?? "What is the capital of France?";
const command = new ConverseCommand({
  modelId: "amazon.nova-lite-v1:0",
  messages: [{ role: "user", content: [{ text: input }] }],
  inferenceConfig: { temperature: 0.5 },
});
const result = await client.send(command);
const output = result.output?.message?.content?.[0]?.text;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چیزی مانند:

{
  "prompt": "What is the capital of France?",
  "completion": "The capital of France is Paris."
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🔍 Lambda 2 – Eval with Openai (validateWithOpenAI.ts)

const evalRequest = {
  run_spec: {
    eval_name: "cot-correctness",
    args: {
      samples_jsonl: [{
        input: prompt,
        completion: completion,
        ideal: ["Paris"]
      }]
    }
  }
};
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس ارسال به:

https://api.openai.com/v1/evals/runs
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شما برمی گردید runId، که می توانید برای نتایج از آن نظرسنجی کنید (یا در صورت لزوم می توانید به طور خودکار با استفاده از حالت عملکرد مرحله دیگر صبر کنید)

📊 سناریوهای شبیه سازی شده

بیایید چند نمونه را اجرا کنیم و آنها را با استفاده از cot-correctness Eval:

سریع خروجی نوا مورد انتظار نمره EVAL
پایتخت فرانسه چیست؟ پاریس پایتخت فرانسه است. پاریس ✅ پاس
ریشه مربع 64 چیست؟ ریشه مربع 64 8 است. 8 ✅ پاس
چه کسی در جام جهانی 2022 پیروز شد؟ فرانسه در جام جهانی 2022 پیروز شد. وابسته به آرژانتین ❌ شکست
17 + 26 چیست؟ این 33 خواهد بود. 43 ❌ شکست
فتوسنتز را در 1 جمله تعریف کنید. فتوسنتز این است که گیاهان چگونه غذا درست می کنند. معقول ✅ پاس

🔁 چگونه می توان در هنگام عدم موفقیت بهبود یافت

وقتی ارزیابی شما انجام نشود ، در اینجا کاری است که می توانید انجام دهید:

1 تنظیمات استنتاج را تنظیم کنید

  • دمای پایین تر برای پاسخ های قطعی
  • افزایش topP برای خلاقیت گسترده تر (فقط در صورت لزوم)

2 طراحی سریع را بهبود بخشید

- What’s 17 + 26?
+ What’s 17 + 26? Answer only with the number
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

3 RUCHRIC EVAL خود را ارتقا دهید

از Evals خاص تر استفاده کنید (به عنوان مثال cot-accuracyبا exact-matchبا qa-relevance) یا موارد سفارشی ایجاد کنید تا دامنه خود را منعکس کنید

4 زنجیره ای از حالت آزمایش مجدد

در توابع مرحله ، Evals را با یک جریان مجدد با استفاده از یک مدل سریع یا مدل Fallback بسته بندی نکرد

این همه افراد XD است

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا