برنامه نویسی

اجرای تاریخچه چت برای برنامه های AI با استفاده از Azure Cosmos DB Go SDK

این پست وبلاگ نحوه ساخت یک اجرای تاریخچه گپ با استفاده از Azure Cosmos DB را برای NOSQL GO SDK و LANGCHAINGO پوشش می دهد. اگر تازه وارد GO SDK هستید ، نمونه برنامه Chatbot که در وبلاگ ارائه شده است به عنوان یک مقدمه عملی عمل می کند ، و شامل عملیات اساسی مانند Read ، Upsert و غیره می شود. همچنین با استفاده از شبیه ساز مبتنی بر Linux Azure Cosmos DB (در پیش نمایش در زمان نوشتن) برای تست های ادغام با TestContainers برای GO نشان می دهد.

GO توسعه دهندگان به دنبال ساخت برنامه های هوش مصنوعی می توانند از آن استفاده کنند langchaingo، که چارچوبی برای برنامه های کاربردی LLM (مدل زبان بزرگ) است. این برنامه API های قابل افزودنی را برای مؤلفه هایی مانند فروشگاه وکتور ، تعبیه ، بارگیری اسناد ، زنجیرها (برای تهیه چندین عملیات) ، تاریخچه گپ و موارد دیگر فراهم می کند.

شرح تصویر

قبل از غواصی ، بیایید یک قدم به عقب برداریم تا اصول را درک کنیم.

تاریخ چت چیست و چرا برای برنامه های مدرن هوش مصنوعی مهم است؟

یک شرط رایج برای برنامه های هوش مصنوعی مکالمه این است که بتوانند پیام های رد و بدل شده به عنوان بخشی از مکالمات را ذخیره و بازیابی کنند. این اغلب به عنوان “تاریخ چت” گفته می شود. اگر از برنامه هایی مانند chatGPT استفاده کرده اید (که از طریق آن از Azure Cosmos DB نیز استفاده می کند!) ، ممکن است با این مفهوم آشنا باشید. هنگامی که کاربر وارد سیستم می شود ، می تواند چت را شروع کند و پیام های رد و بدل شده به عنوان بخشی از مکالمه ذخیره می شوند. هنگامی که دوباره وارد سیستم می شوند ، می توانند مکالمات قبلی خود را مشاهده کنند و می توانند از جایی که ترک می کنند ادامه دهند.

تاریخ چت بدیهی است برای کاربران نهایی برنامه ها مهم است ، اما فراموش نکنید که LLMS را فراموش نکنید! همانطور که به نظر می رسد LLMS SMART ، آنها به دلیل کمبود حافظه داخلی (حداقل در حال حاضر) نمی توانند تعامل گذشته را به یاد بیاورند. با استفاده از تاریخچه گپ ، این شکاف را با ارائه مکالمات قبلی به عنوان زمینه اضافی ، این شکاف را قادر می سازد تا LLM ها را برای تولید پاسخ های مرتبط تر و با کیفیت تر فراهم کنند. این باعث افزایش جریان طبیعی مکالمات می شود و تجربه کاربر را به میزان قابل توجهی بهبود می بخشد.

یک مثال ساده این را نشان می دهد: فرض کنید از طریق API از LLM سؤال کنید ، "Tell me about Azure Cosmos DB" و با یک پاراگراف طولانی پاسخ می دهد. اگر پس از آن تماس دیگری با API برقرار کنید ، "Break this down into bullet points for easier reading"، LLM ممکن است گیج شود زیرا فاقد زمینه از تعامل قبلی است. با این حال ، اگر پیام قبلی را به عنوان بخشی از زمینه در تماس API دوم درج کنید ، LLM به احتمال زیاد پاسخ دقیقی ارائه می دهد (هرچند تضمین نشده است ، زیرا خروجی های LLM ذاتاً غیر تعیین کننده هستند).

چگونه می توان chatbot را اجرا کرد

همانطور که قبلاً نیز اشاره کردم ، برنامه نمونه یک روش مفید برای کشف شما است langchaingo، اجرای تاریخچه چت Azure Cosmos DB و همچنین Go SDK.

قبل از بررسی جزئیات اجرای ، ایده خوبی است که برنامه را در عمل مشاهده کنید. به بخش README مخزن GitHub مراجعه کنید که دستورالعمل هایی در مورد نحوه پیکربندی ، اجرا و شروع مکالمه با Chatbot ارائه می دهد.

مرور کلی برنامه

برنامه گپ از یک مدل دامنه مستقیم پیروی می کند: کاربران می توانند مکالمه های مختلفی را آغاز کنند و هر مکالمه می تواند حاوی چندین پیام باشد. ساخته شده در GO ، برنامه شامل مؤلفه های Backend و Frontend است.

  • پشت: دارای چندین بخش فرعی است:

    • اجرای تاریخچه چت Azure Cosmos DB.
    • عملیات اصلی مانند شروع چت ، ارسال/دریافت پیام و بازیابی تاریخ مکالمه از طریق API REST در معرض دید قرار می گیرد.
    • REST API اعمال می کند langchaingo زنجیره ای برای رسیدگی به پیام های کاربر. این زنجیره به طور خودکار تاریخ گپ را برای اطمینان از ارسال مکالمات گذشته به LLM درج می کند. langchaingo همه ارکستراسیون – دعوت LLM ، گنجاندن تاریخ گپ و موارد دیگر را بدون نیاز به اجرای دستی انجام می دهد.
  • جبهه: با استفاده از JavaScript ، HTML و CSS ساخته شده است. این به عنوان بخشی از سرور وب GO (با استفاده از بسته تعبیه شده) بسته بندی شده است و در پاسخ به تعامل کاربر ، API های Backend REST را فراخوانی می کند

اجرای تاریخچه گپ با استفاده از Azure Cosmos DB

langchaingo یک چارچوب قابل پلاگین ، از جمله مؤلفه چت (یا حافظه) آن است. برای ادغام Azure Cosmos DB ، شما باید Schema.ChatMessageHistory را پیاده سازی کنید ، که روش هایی برای مدیریت تاریخ گپ ارائه می دهد:

  • AddMessage برای افزودن پیام به مکالمه (یا یک مورد جدید).
  • Messages برای بازیابی همه پیام ها برای مکالمه.
  • Clear برای حذف همه پیام ها در یک مکالمه.

در حالی که می توانید مستقیماً A را فوری کنید CosmosDBChatMessageHistory نمونه و استفاده از این روشها ، روش توصیه شده ادغام آن در langchaingo برنامه در زیر نمونه ای از استفاده از تاریخ چت Azure Cosmos DB با a LLMChain:

// Create a chat history instance
cosmosChatHistory, err := cosmosdb.NewCosmosDBChatMessageHistory(cosmosClient, databaseName, containerName, req.SessionID, req.UserID)
if err != nil {
    log.Printf("Error creating chat history: %v", err)
    sendErrorResponse(w, "Failed to create chat session", http.StatusInternalServerError)
    return
}

// Create a memory with the chat history
chatMemory := memory.NewConversationBuffer(
    memory.WithMemoryKey("chat_history"),
    memory.WithChatHistory(cosmosChatHistory),
)

// Create an LLM chain
chain := chains.LLMChain{
    Prompt:       promptsTemplate,
    LLM:          llm,
    Memory:       chatMemory,
    OutputParser: outputparser.NewSimple(),
    OutputKey:    "text",
}
حالت تمام صفحه را وارد کنید

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

از دیدگاه Azure Cosmos DB ، توجه داشته باشید که اجرای این مثال فقط یکی از گزینه های ممکن است. موردی که در اینجا نشان داده شده است بر اساس ترکیبی از UserID به عنوان کلید پارتیشن و شناسه مکالمه (همچنین به عنوان شناسه جلسه نیز گفته می شود) کلید منحصر به فرد است (id از یک مورد کیهان لاجورد DB).

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

  • تمام پیام های مکالمه را دریافت کنید – این یک است نکته ای که می خواند با استفاده از شناسه منحصر به فرد (شناسه مکالمه) و کلید پارتیشن (شناسه کاربر).
  • یک پیام جدید به مکالمه اضافه کنید – از آن استفاده می کند با صعود عمل (به جای ایجاد) برای جلوگیری از نیاز به خواندن قبل از نوشتن.
  • یک مکالمه خاص را حذف کنید – از عملیات حذف برای حذف مکالمه (و تمام پیام های آن) استفاده می کند.

اگرچه langchaingo رابط آن را در معرض دید قرار نمی دهد ، هنگام ادغام این موضوع به عنوان بخشی از یک برنامه ، می توانید یک پرس و جو جداگانه نیز برای دریافت همه مکالمات برای یک کاربر صادر کنید. این همچنین از آنجا که به یک پارتیشن واحد تبدیل شده است ، کارآمد است.

آزمایش را با شبیه ساز Azure Cosmos DB و TestContainers ساده کنید

برنامه نمونه شامل موارد تست اساسی برای هر دو تاریخ چت کیهان Azure Cosmos و برنامه اصلی است. شایان ذکر است که استفاده از TestContainers-Go را برای ادغام کانتینر Docker Emulator مبتنی بر Linux Linux Azure Cosmos DB Linux برجسته کنید.

این برای تست های ادغام بسیار عالی است زیرا پایگاه داده به صورت محلی در دسترس است و تست ها خیلی سریعتر اجرا می شوند (بیایید پس انداز هزینه را نیز فراموش نکنیم!). یخی در بالای آن این است که شما نیازی به مدیریت چرخه حیات ظرف Docker به صورت دستی ندارید. به لطف این مجموعه به عنوان بخشی از مجموعه آزمون مراقبت می شود testcontainers-go API که باعث می شود قبل از انجام آزمایشات ، ظرف را شروع کنید و پس از اتمام آنها خاتمه دهید.

برای جزئیات بیشتر می توانید به موارد آزمایش در برنامه نمونه مراجعه کنید. در اینجا قطعه ای از چگونگی testcontainers-go استفاده می شود:

func setupCosmosEmulator(ctx context.Context) (testcontainers.Container, error) {
    req := testcontainers.ContainerRequest{
        Image:        emulatorImage,
        ExposedPorts: []string{emulatorPort + ":8081", "1234:1234"},
        WaitingFor:   wait.ForListeningPort(nat.Port(emulatorPort)),
    }

    container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
        ContainerRequest: req,
        Started:         true,
    })
    if err != nil {
        return nil, fmt.Errorf("failed to start container: %w", err)
    }

    // Give the emulator a bit more time to fully initialize
    time.Sleep(5 * time.Second)

    return container, nil
}
حالت تمام صفحه را وارد کنید

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

اگر علاقه مند به استفاده از Emulator Azure Cosmos DB در خطوط لوله CI هستید ، پست وبلاگ را بررسی کنید – با استفاده از Azure Cosmos DB Emulator در خطوط لوله CI/CD.

پیچیدن

توانایی ذخیره تاریخ گپ بخش مهمی از برنامه های هوش مصنوعی مکالمه است. آنها می توانند به عنوان یک افزودنی عالی به تکنیک های موجود مانند RAG (نسل تقویت شده بازیابی) خدمت کنند. برنامه chatbot را امتحان کنید و به ما اطلاع دهید که چه فکر می کنید!

در حالی که اجرای برنامه نمونه نسبتاً ساده است ، نحوه مدل سازی داده های تاریخ چت به الزامات بستگی دارد. یکی از این سناریوها ارائه شده است ، این پست عالی وبلاگ در مورد چگونگی مقیاس Microsoft Copilot به میلیون ها کاربر مبتلا به Azure Cosmos DB است.

برخی از نیازهای شما ممکن است شامل موارد زیر باشد:

  • ذخیره ابرداده ، مانند واکنش (علاوه بر پیام)
  • نمایش پیام های برتر N
  • با در نظر گرفتن دوره حفظ داده های تاریخ چت (با استفاده از TTL)
  • شامل تجزیه و تحلیل های اضافی (در تعامل کاربر) بر اساس داده های تاریخ گپ و موارد دیگر.

صرف نظر از اجرای ، همیشه حتماً بهترین روشها را برای مدل سازی داده ها درج کنید. با استفاده از یک مثال در دنیای واقعی برای دستورالعمل ها ، نحوه مدل سازی و داده های پارتیشن را در مورد Azure Cosmos DB مشاهده کنید.

آیا در حال حاضر از استفاده یا برنامه ریزی برای استفاده از Azure Cosmos DB برای برنامه های GO خود استفاده می کنید؟ ما دوست داریم از شما بشنویم! سوالات و بازخورد خود را برای ما ارسال کنید.

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

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

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

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