|
| 1 | +import Layout from "@/components/Layout"; |
| 2 | +import Button from "@/components/Common/button"; |
| 3 | +import Section from "@/components/Common/section"; |
| 4 | +import Alert from "@/components/Common/alert"; |
| 5 | +import ThemePlatformIcon from "@/components/Common/themeIcons" |
| 6 | +import Tabs from "@/components/Common/tab"; |
| 7 | +import Step from "@/components/Common/step"; |
| 8 | +import Card from "@/components/Common/card"; |
| 9 | +import Important from "@/components/Common/important"; |
| 10 | +import Highlight from "@/components/Common/highlight"; |
| 11 | +import Link from "next/link"; |
| 12 | +import PlatformIcon from "@/components/Common/icons"; |
| 13 | +import HighlightTabs from "@/components/Common/HighlightTabs"; |
| 14 | +import IconContainer from "@/components/Common/IconContainer"; |
| 15 | +import { |
| 16 | + GoContainer, |
| 17 | + GoDatabase, |
| 18 | + GoRocket, |
| 19 | + GoServer, |
| 20 | + GoMail, |
| 21 | + GoGlobe, |
| 22 | + GoArrowLeft, |
| 23 | + GoTelescope, |
| 24 | +} from "react-icons/go"; |
| 25 | + |
| 26 | +import Head from "next/head"; |
| 27 | + |
| 28 | +<Layout> |
| 29 | +<Head> |
| 30 | +<title>مستندات مهندسی پرامپت در AI SDK - لیارا</title> |
| 31 | +<meta property="og:title" content="مستندات خدمات رایانش ابری لیارا" /> |
| 32 | +<meta property="og:description" content="مستندات مربوط به آشنایی با مفهوم و تکنیکهای مهندسی پرامپت یا Prompt Engineering در AI SDK با سرویس هوش مصنوعی لیارا" /> |
| 33 | +</Head> |
| 34 | + |
| 35 | + |
| 36 | +# مهندسی پرامپت در هوش مصنوعی |
| 37 | +<hr className="mb-2" /> |
| 38 | + |
| 39 | +<Section id='tips' title='نکات قابل توجه' /> |
| 40 | + |
| 41 | +<Section id="prompts-for-tools" title="پرامپتهایی برای toolها" headingTag="h3" /> |
| 42 | + |
| 43 | +وقتی پرامپتهایی را ایجاد میکنید که شامل toolها هستند، با افزایش تعداد و پیچیدگی toolها، دریافت نتایج خوب ممکن است کمی دشوار باشد. |
| 44 | +در ادامه، نکاتی آمده است که به شما |
| 45 | +کمک میکند بهترین نتایج را دریافت کنید: |
| 46 | +<div className="h-4" /> |
| 47 | + |
| 48 | +۱. از مدلی استفاده کنید که در فراخوانی tool قوی باشد؛ مثل مدل <Important>openai/gpt-4o-mini</Important> یا <Important>openai/gpt-4.1</Important>. مدلهای ضعیفتر غالباً در فراخوانی tool به صورت بهینه و بدون خطا، دچار مشکل میشوند. |
| 49 | +<div className="h-4" /> |
| 50 | + |
| 51 | +۲. از toolهای کمی استفاده کنید. مثلاً حداکثر 5 تا یا کمتر. |
| 52 | +<div className="h-4" /> |
| 53 | + |
| 54 | +۳. پیچیدگی پارامترهای tool را پایین نگه دارید، zod schemaهای پیچیده با المنتهای زیاد و تو در تو و اختیاری زیاد و ... میتواند برای مدل چالش برانگیز باشد. |
| 55 | +<div className="h-4" /> |
| 56 | + |
| 57 | +۴. از نامهای معنادار برای toolها، پارامترها و ویژگیهای پارامتر و ... استفاده کنید. |
| 58 | +هرچقدر اطلاعات بیشتری به مدل بدهید، بهتر میفهمد که شما چه چیزی میخواهید. |
| 59 | +<div className="h-4" /> |
| 60 | + |
| 61 | +۵. متد <Important>("...")describe</Important> را به propertyهای zod schema خود اضافه کنید تا به مدل |
| 62 | +سرنخهایی را در مورد هدف هر property دریافت کند. |
| 63 | +<div className="h-4" /> |
| 64 | + |
| 65 | +۶. وقتی که خروجی یک tool ممکن است برای |
| 66 | +مدل نامشخص باشد و بین toolها وابستگی وجود دارد، از فیلد <Important>description</Important> در یک tool استفاده کنید |
| 67 | +تا اطلاعاتی را در مورد خروجی اجرای tool فراهم کرده باشید. |
| 68 | +<div className="h-4" /> |
| 69 | + |
| 70 | +۷. میتوانید مثالهای ورودی/خروجی فراخوانی toolها را در پرامپت خود قرار دهید تا به مدل کمک کنید نحوهی استفاده از toolها را درک کند. به یاد داشته باشید که toolها با آبجکتهای JSON کار میکنند، بنابراین نمونهها باید به فرمت JSON باشند. |
| 71 | +<div className="h-4" /> |
| 72 | + |
| 73 | +به صورت کلی، هدف باید این باشد که تمام اطلاعات موردنیاز مدل را به شکلی شفاف و واضح در اختیار آن قرار دهید. |
| 74 | + |
| 75 | + |
| 76 | +<Section id="tool--structured-data-schemas" title="toolها و schemaهای دادههای ساختاریافته" headingTag="h3" /> |
| 77 | + |
| 78 | +نگاشت اسکیماهای zod به ورودیهای LLMها (که اغلب اسکیمای JSON میپذیرند)، همواره کار سادهای نیست؛ زیرا این نگاشت یک به یک نیست. |
| 79 | + |
| 80 | +<Section id='zod-dates' title='تاریخها در zod' headingTag="h4" /> |
| 81 | + |
| 82 | +zod از آبجکتهای JavaScript Date استفاده میکند، در حالی که مدلها، تاریخها را به صورت string (رشته) بر میگردانند. |
| 83 | +شما میتوانید فرمت تاریخ را با استفاده از <Important>()z.string().datetime</Important> یا <Important>()z.string().date</Important> مشخص و اعتبار سنجی کنید. |
| 84 | +و سپس با استفاده از یک Zod transformer رشته را به یک آبجکت Date تبدیل نمایید. |
| 85 | + |
| 86 | +<div className="h-4" /> |
| 87 | +<div dir='ltr'> |
| 88 | + <Highlight className="js"> |
| 89 | + {`import { generateObject } from 'ai'; |
| 90 | +import { createOpenAI } from '@ai-sdk/openai'; |
| 91 | +import { config } from 'dotenv'; |
| 92 | +import { z } from 'zod'; |
| 93 | +
|
| 94 | +config(); |
| 95 | +const my_model = createOpenAI({ |
| 96 | + baseURL: process.env.BASE_URL!, |
| 97 | + apiKey: process.env.LIARA_API_KEY!, |
| 98 | +}); |
| 99 | +
|
| 100 | +const result = await generateObject({ |
| 101 | + model: my_model('openai/gpt-4o-mini'), |
| 102 | + schema: z.object({ |
| 103 | + events: z.array( |
| 104 | + z.object({ |
| 105 | + event: z.string(), |
| 106 | + date: z |
| 107 | + .string() |
| 108 | + .date() |
| 109 | + .transform(value => new Date(value)), |
| 110 | + }), |
| 111 | + ), |
| 112 | + }), |
| 113 | + prompt: 'List 5 important events from the year 2000.', |
| 114 | +}); |
| 115 | +
|
| 116 | +console.log(result.object)`} |
| 117 | + </Highlight> |
| 118 | +</div> |
| 119 | + |
| 120 | +<hr className="mb-2" /> |
| 121 | +<Section id='debugging' title='اشکالزدایی (Debugging)' /> |
| 122 | + |
| 123 | +<Section id="inspecting-warnings" title="بررسی هشدارها" headingTag="h3" /> |
| 124 | + |
| 125 | +تمام ارائهدهندگان (Providerها) از تمامی قابلیتهای AI SDK پشتیبانی نمیکنند. در مواردی که یک قابلیت پشتیبانی نمیشود، ارائهدهندگان یا exceptionهایی را throw میکنند یا warning بازمیگردانند. برای اطمینان از اینکه پرامپت، toolها و تنظیمات شما به درستی توسط ارائهدهنده پردازش میشوند، میتوانید call warningها را بررسی کنید. |
| 126 | + |
| 127 | +<div className="h-2" /> |
| 128 | +<div dir='ltr'> |
| 129 | + <Highlight className="js"> |
| 130 | + {`import { generateText } from 'ai'; |
| 131 | +import { createOpenAI } from '@ai-sdk/openai'; |
| 132 | +import { config } from 'dotenv'; |
| 133 | +
|
| 134 | +config(); |
| 135 | +const my_model = createOpenAI({ |
| 136 | + baseURL: process.env.BASE_URL!, |
| 137 | + apiKey: process.env.LIARA_API_KEY!, |
| 138 | +}); |
| 139 | +
|
| 140 | +const result = await generateText({ |
| 141 | + model: my_model('openai/gpt-4o-mini'), |
| 142 | + prompt: 'Hello, world!', |
| 143 | +}); |
| 144 | +
|
| 145 | +console.log(result.warnings); |
| 146 | +`} |
| 147 | + </Highlight> |
| 148 | +</div> |
| 149 | + |
| 150 | +<hr className="mb-2" /> |
| 151 | +<Section id='http-request-bodies' title='بدنههای درخواست HTTP' /> |
| 152 | + |
| 153 | +میتوانید بدنههای خام درخواستهای HTTP را در مدلهایی که آنها را در دسترس قرار میدهند (برای مثال OpenAI) بررسی کنید. این قابلیت به شما اجازه میدهد بار ارسالی (payload) دقیق را که به ارائهدهندهی مدل فرستاده میشود، بهصورت خاص بر اساس روش همان ارائهدهنده، مشاهده کنید. |
| 154 | + |
| 155 | +<div className="h-2" /> |
| 156 | +<div dir='ltr'> |
| 157 | + <Highlight className="js"> |
| 158 | + {`import { generateText } from 'ai'; |
| 159 | +import { createOpenAI } from '@ai-sdk/openai'; |
| 160 | +import { config } from 'dotenv'; |
| 161 | +
|
| 162 | +config(); |
| 163 | +const my_model = createOpenAI({ |
| 164 | + baseURL: process.env.BASE_URL!, |
| 165 | + apiKey: process.env.LIARA_API_KEY!, |
| 166 | +}); |
| 167 | +
|
| 168 | +const result = await generateText({ |
| 169 | + model: my_model('openai/gpt-4o-mini'), |
| 170 | + prompt: 'Hello, world!', |
| 171 | +}); |
| 172 | +
|
| 173 | +console.log(result.request.body);`} |
| 174 | + </Highlight> |
| 175 | +</div> |
| 176 | +<div className="h-2" /> |
| 177 | + |
| 178 | +</Layout> |
0 commit comments