گفتوگو و نشستها
گفتوگوها چطور ذخیره میشوند، کاربران نهایی چطور از هم جدا میمانند، و بازیابی چطور بخشها را انتخاب میکند.
هر پرسش روی یک فضای کاری اجرا میشود، برای یکی از کاربران نهایی شما، درون گفتوگویی که سرور ذخیرهاش میکند.
نشستها
نشست یعنی یک گفتوگو. اگر session_id نفرستید سرور یکی میسازد و از پیام اولتان برایش عنوان میگذارد؛ اگر پسش بفرستید، گفتوگو با بیست نوبت آخر بهعنوان زمینه ادامه پیدا میکند.
نشستها سمت سرور ذخیره میشوند و از هر اتفاقی در سمت شما جان سالم به در میبرند. لازم نیست خودتان متن گفتوگوها را نگه دارید — هرچند شاید بخواهید، چون مسیرهای فهرست تنها راه بازخواندنشان هستند.
curl -X POST "https://api.daneshyar.info/api/v1/workspaces/8f14e45f-ceea-467a-9f4c-1a2b3c4d5e6f/chat/" \
-H "X-API-Key: dk_live_9f3aC2xQ7mB1vT8sE4nK6pR0jY5wZ2hL" \
-H "Content-Type: application/json" \
-d '{
"external_user_id": "user_4821",
"session_id": "b6d2e1a4-77c3-4f59-9a10-2e8d6c4b0f37",
"message": "And for patients over 70?"
}'جدا کردن کاربران نهایی شما
مقدار external_user_id شناسهٔ شماست برای کسی که میپرسد. در هر فراخوانی الزامی است و همان چیزی است که با وجود اشتراک در یک کلید API، کاربران نهایی شما را از هم جدا نگه میدارد.
از شناسهای پایدار در سامانهٔ خودتان استفاده کنید — شناسهٔ کاربر، نه ایمیل و نه کوکی نشست. اگر تغییر کند، آن شخص تاریخچهاش را از دست میدهد. اگر دو نفر یکی داشته باشند، تاریخچهٔ هم را میبینند.
بازیابی چطور کار میکند
وقتی پرسشی میرسد، سرور آن را بردارسازی میکند، نزدیکترین بخشها را از میان سندهای پردازش شده آن فضای کاری بر اساس شباهت برداری پیدا میکند، و از روی همان بخشها بهعلاوهٔ تاریخچهٔ اخیر گفتوگو پاسخ میدهد.
- بهطور پیشفرض پنج بخش نزدیک را از کل فضای کاری بازیابی میکند.
- اگر resource_ids بفرستید، بازیابی هم اجباری میشود و هم گستردهتر — حدود پانزده بخش، بهعلاوهٔ چند بخش از هر سندی که نام بردهاید، تا سندی که نزدیکترین تطابق نیست هم نماینده داشته باشد.
- فضای کاریای که هیچ سند ready ندارد، بهجای آن از دانش عمومی و بدون ارجاع پاسخ میدهد. تنها حالتی است که پاسخ بر سندهای شما تکیه ندارد.
وقتی پاسخ یک فرم است
گاهی مدل پیش از آنکه بتواند پاسخ بهدردبخوری بدهد به ورودی نیاز دارد. بهجای حدس زدن، response.type را برابر form برمیگرداند همراه با مجموعهای از فیلدها برای جمعآوری.
{
"status": "ok",
"data": {
"assistant_message": {
"role": "assistant",
"content": "Which department should I answer for?",
"response": {
"type": "form",
"parts": [{ "text": "Which department should I answer for?", "source": null }],
"form": {
"title": "Narrow the question",
"fields": [
{
"name": "department",
"label": "Department",
"type": "select",
"required": true,
"options": ["Cardiology", "Neurology", "Oncology"]
}
]
}
}
}
}
}هر فیلد name، label، type و required دارد و ممکن است placeholder و options هم داشته باشد. نوعها عبارتاند از text، textarea، number، select، checkbox، radio، date و email.
یک نکتهٔ ظریف: فیلد checkbox با options یک گروه چندانتخابی است و همان فیلد بدون options یک گزینهٔ سادهٔ بله/خیر. بر اساس وجود options شرط بگذارید.