লিগ্যাল ঈগলস ইন দ্য ক্লাউড: গুগলের সাথে কোর্ট সিস্টেম হ্যাকিং (আইনিভাবে)

1. ভূমিকা

আমি সর্বদা কোর্টরুমের তীব্রতা দ্বারা মুগ্ধ হয়েছি, নিজেকে কল্পনা করে এর জটিলতাগুলিকে চতুরতার সাথে নেভিগেট করতে এবং শক্তিশালী সমাপনী যুক্তি প্রদান করছি। যদিও আমার কর্মজীবনের পথ আমাকে অন্য কোথাও নিয়ে গেছে, আমি ভাগ করে নিতে উত্তেজিত যে AI এর সাহায্যে, আমরা সবাই হয়তো সেই আদালতের স্বপ্ন বাস্তবায়নের আরও কাছাকাছি হতে পারি।

বেটার কল ঈগল

আজ, আমরা কীভাবে Google-এর শক্তিশালী AI সরঞ্জামগুলি ব্যবহার করব—যেমন Vertex AI, Firestore, এবং ক্লাউড রান ফাংশনগুলি আইনি ডেটা প্রক্রিয়া এবং বুঝতে, বিদ্যুত-দ্রুত অনুসন্ধানগুলি সঞ্চালন করতে এবং হয়ত, আপনার কাল্পনিক ক্লায়েন্টকে (বা নিজেকে) একটি আঠালো পরিস্থিতি থেকে বের করতে সাহায্য করতে চাই।

আপনি হয়ত একজন সাক্ষীকে জেরা করছেন না, কিন্তু আমাদের সিস্টেমের সাহায্যে, আপনি তথ্যের পাহাড়ের মধ্যে দিয়ে যেতে, স্পষ্ট সারাংশ তৈরি করতে এবং সেকেন্ডের মধ্যে সবচেয়ে প্রাসঙ্গিক ডেটা উপস্থাপন করতে সক্ষম হবেন।

2. স্থাপত্য

এই প্রকল্পটি Google ক্লাউড AI সরঞ্জামগুলি ব্যবহার করে একটি আইনি সহকারী তৈরি করার উপর ফোকাস করে, কীভাবে আইনি ডেটা প্রক্রিয়া, বোঝা এবং অনুসন্ধান করতে হয় তার উপর জোর দেয়৷ সিস্টেমটি প্রচুর পরিমাণে তথ্য সংগ্রহ করার জন্য, সারাংশ তৈরি করতে এবং প্রাসঙ্গিক ডেটা দ্রুত উপস্থাপন করার জন্য ডিজাইন করা হয়েছে। আইনি সহকারীর আর্কিটেকচারে বেশ কয়েকটি মূল উপাদান রয়েছে:

অসংগঠিত ডেটা থেকে একটি জ্ঞানের ভিত্তি তৈরি করা : Google ক্লাউড স্টোরেজ (GCS) আইনি নথি সংরক্ষণ করতে ব্যবহৃত হয়। Firestore, একটি NoSQL ডাটাবেস, একটি ভেক্টর স্টোর হিসাবে কাজ করে, নথির খণ্ডগুলি এবং তাদের সংশ্লিষ্ট এম্বেডিংগুলি ধরে রাখে। মিল অনুসন্ধানের জন্য Firestore-এ ভেক্টর অনুসন্ধান সক্ষম করা হয়েছে। যখন একটি নতুন আইনি নথি GCS-এ আপলোড করা হয়, তখন Eventarc একটি ক্লাউড রান ফাংশন ট্রিগার করে। এই ফাংশনটি ডকুমেন্টটিকে খণ্ডে বিভক্ত করে এবং Vertex AI এর টেক্সট এমবেডিং মডেল ব্যবহার করে প্রতিটি খণ্ডের জন্য এমবেডিং তৈরি করে প্রক্রিয়া করে। এই এমবেডিংগুলি তখন টেক্সট খণ্ডগুলির পাশাপাশি Firestore-এ সংরক্ষণ করা হয়। ডেটা প্রসেস

LLM এবং RAG দ্বারা চালিত অ্যাপ্লিকেশন : প্রশ্ন-উত্তর সিস্টেমের মূল হল ask_llm ফাংশন, যা ল্যাংচেইন লাইব্রেরি ব্যবহার করে ভার্টেক্স এআই জেমিনি লার্জ ল্যাঙ্গুয়েজ মডেলের সাথে ইন্টারঅ্যাক্ট করে। এটি ব্যবহারকারীর ক্যোয়ারী থেকে একটি HumanMessage তৈরি করে এবং একটি SystemMessage অন্তর্ভুক্ত করে যা LLM-কে একটি সহায়ক আইনি সহকারী হিসেবে কাজ করার নির্দেশ দেয়। সিস্টেমটি একটি পুনরুদ্ধার-অগমেন্টেড জেনারেশন (RAG) পদ্ধতি ব্যবহার করে, যেখানে, একটি প্রশ্নের উত্তর দেওয়ার আগে, সিস্টেমটি Firestore ভেক্টর স্টোর থেকে প্রাসঙ্গিক প্রসঙ্গ পুনরুদ্ধার করতে search_resource ফাংশন ব্যবহার করে। প্রদত্ত আইনি তথ্যে এলএলএম-এর উত্তরকে ভিত্তি করার জন্য এই প্রসঙ্গটি তারপর সিস্টেমমেসেজে অন্তর্ভুক্ত করা হয়েছে। অনুমান

প্রকল্পটির লক্ষ্য হল RAG ব্যবহার করে LLM-এর "সৃজনশীল ব্যাখ্যা" থেকে দূরে সরে যাওয়া, যা প্রথমে একটি উত্তর তৈরি করার আগে একটি বিশ্বস্ত আইনি উৎস থেকে প্রাসঙ্গিক তথ্য পুনরুদ্ধার করে। এর ফলে প্রকৃত আইনি তথ্যের উপর ভিত্তি করে আরও সঠিক, জ্ঞাত প্রতিক্রিয়া পাওয়া যায়। সিস্টেমটি Google ক্লাউড শেল, ভার্টেক্স এআই, ফায়ারস্টোর, ক্লাউড রান এবং ইভেন্টর্কের মতো বিভিন্ন Google ক্লাউড পরিষেবা ব্যবহার করে তৈরি করা হয়েছে।

3. আপনি শুরু করার আগে

Google ক্লাউড কনসোলে , প্রকল্প নির্বাচক পৃষ্ঠায়, একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন। নিশ্চিত করুন যে আপনার ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে৷ একটি প্রকল্পে বিলিং সক্ষম কিনা তা পরীক্ষা করতে শিখুন

ক্লাউড শেল IDE-তে জেমিনি কোড সহায়তা সক্ষম করুন৷

👉 Google ক্লাউড কনসোলে, Gemini Code Assist Tools- এ যান, শর্তাবলীর সাথে সম্মত হয়ে বিনা খরচে Gemini Code Assist চালু করুন।

কোড সহায়তা

অনুমতি সেটআপ উপেক্ষা, এই পৃষ্ঠা ছেড়ে.

ক্লাউড শেল এডিটরে কাজ করুন

👉 গুগল ক্লাউড কনসোলের শীর্ষে ক্লাউড শেল সক্রিয় করুন ক্লিক করুন (এটি ক্লাউড শেল প্যানের শীর্ষে টার্মিনাল আকৃতির আইকন)

মেঘের শেল

👉 "ওপেন এডিটর" বোতামে ক্লিক করুন (এটি একটি পেন্সিল সহ একটি খোলা ফোল্ডারের মতো দেখায়)। এটি উইন্ডোতে ক্লাউড শেল সম্পাদক খুলবে। আপনি বাম দিকে একটি ফাইল এক্সপ্লোরার দেখতে পাবেন।

সম্পাদক খুলুন

👉 দেখানো হিসাবে নীচের স্ট্যাটাস বারে ক্লাউড কোড সাইন-ইন বোতামে ক্লিক করুন। নির্দেশিত হিসাবে প্লাগইন অনুমোদন করুন. আপনি যদি ক্লাউড কোড দেখতে পান - স্ট্যাটাস বারে কোনো প্রকল্প নেই , তাহলে সেটি নির্বাচন করুন তারপর ড্রপ ডাউনে 'একটি Google ক্লাউড প্রকল্প নির্বাচন করুন' এবং তারপরে আপনি যে প্রকল্পগুলির সাথে কাজ করার পরিকল্পনা করছেন তার তালিকা থেকে নির্দিষ্ট Google ক্লাউড প্রকল্পটি নির্বাচন করুন৷

ক্লাউড কোড

👉 ক্লাউড IDE-তে টার্মিনাল খুলুন, নতুন টার্মিনাল

👉 নতুন টার্মিনালে, যাচাই করুন যে আপনি ইতিমধ্যেই প্রমাণীকরণ করেছেন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে:

gcloud auth list

👉 Google ক্লাউড কনসোলের শীর্ষে অ্যাক্টিভেট ক্লাউড শেল ক্লিক করুন।

gcloud config set project <YOUR_PROJECT_ID>

👉 প্রয়োজনীয় Google ক্লাউড API সক্রিয় করতে নিম্নলিখিত কমান্ডটি চালান:

gcloud services enable storage.googleapis.com  \
                        run.googleapis.com  \
                        artifactregistry.googleapis.com  \
                        aiplatform.googleapis.com \
                        eventarc.googleapis.com \
                        cloudresourcemanager.googleapis.com \
                        firestore.googleapis.com \
                        cloudaicompanion.googleapis.com

ক্লাউড শেল টুলবারে (ক্লাউড শেল প্যানের শীর্ষে), "ওপেন এডিটর" বোতামে ক্লিক করুন (এটি একটি পেন্সিল সহ একটি খোলা ফোল্ডারের মতো দেখায়)। এটি উইন্ডোতে ক্লাউড শেল কোড এডিটর খুলবে। আপনি বাম দিকে একটি ফাইল এক্সপ্লোরার দেখতে পাবেন।

👉 টার্মিনালে বুটস্ট্র্যাপ কঙ্কাল প্রকল্প ডাউনলোড করুন:

git clone https://github.com/weimeilin79/legal-eagle.git

ঐচ্ছিক: স্প্যানিশ সংস্করণ

👉 বিদ্যমান ইউনা সংস্করণ বিকল্প এন এস্পানাল। Por favour, utilice la siguiente instrucción para clonar la versión correcta.

git clone -b spanish https://github.com/weimeilin79/legal-eagle.git

ক্লাউড শেল টার্মিনালে এই কমান্ডটি চালানোর পরে, আপনার ক্লাউড শেল পরিবেশে রিপোজিটরি নাম legal-eagle সহ একটি নতুন ফোল্ডার তৈরি করা হবে।

4. জেমিনি কোড অ্যাসিস্ট দিয়ে ইনফারেন্স অ্যাপ্লিকেশন লেখা

এই বিভাগে, আমরা আমাদের আইনি সহকারীর মূল গঠনের উপর ফোকাস করব - ওয়েব অ্যাপ্লিকেশন যা ব্যবহারকারীর প্রশ্নগুলি গ্রহণ করে এবং উত্তর তৈরি করতে AI মডেলের সাথে যোগাযোগ করে। এই অনুমান অংশের জন্য পাইথন কোড লিখতে সাহায্য করার জন্য আমরা জেমিনি কোড অ্যাসিস্ট ব্যবহার করব।

ওভারভিউ-01

প্রাথমিকভাবে, আমরা একটি ফ্লাস্ক অ্যাপ্লিকেশন তৈরি করব যা ভার্টেক্স এআই জেমিনি মডেলের সাথে সরাসরি যোগাযোগ করতে ল্যাংচেইন লাইব্রেরি ব্যবহার করে। এই প্রথম সংস্করণটি মডেলের সাধারণ জ্ঞানের উপর ভিত্তি করে একটি সহায়ক আইনি সহকারী হিসাবে কাজ করবে, কিন্তু এটি এখনও আমাদের নির্দিষ্ট আদালতের মামলার নথিগুলিতে অ্যাক্সেস পাবে না। এটি আমাদের LLM এর বেসলাইন পারফরম্যান্স দেখার অনুমতি দেবে আমরা পরে RAG এর সাথে এটিকে উন্নত করার আগে।

ক্লাউড কোড এডিটরের এক্সপ্লোরার প্যানে (সাধারণত বাম দিকে), আপনি এখন গিট রিপোজিটরি legal-eagle ক্লোন করার সময় তৈরি করা ফোল্ডারটি দেখতে পাবেন, এক্সপ্লোরারে আপনার প্রকল্পের রুট ফোল্ডারটি খুলুন। আপনি এটির মধ্যে একটি webapp সাবফোল্ডার পাবেন, এটিও খুলুন। আইনি নতুন

👉 ক্লাউড কোড এডিটরে legal.py ফাইল এডিট করুন, আপনি জেমিনি কোড অ্যাসিস্ট প্রম্পট করতে বিভিন্ন পদ্ধতি ব্যবহার করতে পারেন।

👉 নিচের প্রম্পটটি legal.py এর নীচে কপি করুন যা স্পষ্টভাবে বর্ণনা করে যে আপনি জেমিনি কোড অ্যাসিস্ট কী তৈরি করতে চান, লাইট বাল্ব 💡 আইকনে ক্লিক করুন এবং মিথুন: জেনারেট কোড নির্বাচন করুন (ক্লাউড কোড সংস্করণের উপর নির্ভর করে সঠিক মেনু আইটেমটি সামান্য পরিবর্তিত হতে পারে)।

"""
Write a Python function called `ask_llm` that takes a user `query` as input. This function should use the `langchain` library to interact with a Vertex AI Gemini Large Language Model.  Specifically, it should:
1.  Create a `HumanMessage` object from the user's `query`.
2.  Create a `ChatPromptTemplate` that includes a `SystemMessage` and the `HumanMessage`. The system message should instruct the LLM to act as a helpful assistant in a courtroom setting, aiding an attorney by providing necessary information. It should also specify that the LLM should respond in a high-energy tone, using no more than 100 words, and offer a humorous apology if it doesn't know the answer.  
3.  Format the `ChatPromptTemplate` with the provided messages.
4.  Invoke the Vertex AI LLM with the formatted prompt using the `VertexAI` class (assuming it's already initialized elsewhere as `llm`).
5.  Print the LLM's `response`.
6.  Return the `response`.
7.  Include error handling that prints an error message to the console and returns a user-friendly error message if any issues occur during the process.  The Vertex AI model should be "gemini-2.0-flash".
"""

কোড তৈরি করুন

উত্পন্ন কোড সাবধানে পর্যালোচনা করুন

  • এটি কি মোটামুটিভাবে আপনি মন্তব্যে বর্ণিত পদক্ষেপগুলি অনুসরণ করে?
  • এটি কি SystemMessage এবং HumanMessage সাথে একটি ChatPromptTemplate তৈরি করে?
  • এটি কি মৌলিক ত্রুটি পরিচালনা অন্তর্ভুক্ত করে ( try...except )?

যদি জেনারেট করা কোডটি ভাল এবং বেশিরভাগই সঠিক হয়, তাহলে আপনি এটি গ্রহণ করতে পারেন (ইনলাইন পরামর্শের জন্য ট্যাব বা এন্টার টিপুন, বা বড় কোড ব্লকের জন্য "স্বীকার করুন" ক্লিক করে)।

যদি জেনারেট করা কোডটি আপনি যা চান ঠিক তেমনটি না হয় বা এতে ত্রুটি থাকে, চিন্তা করবেন না! জেমিনি কোড অ্যাসিস্ট হল আপনাকে সাহায্য করার একটি টুল, প্রথম চেষ্টায় নিখুঁত কোড লেখার জন্য নয়।

এটিকে পরিমার্জিত করতে, ত্রুটিগুলি সংশোধন করতে এবং আপনার প্রয়োজনীয়তাগুলির সাথে আরও ভালভাবে মেলানোর জন্য জেনারেট করা কোডটি সম্পাদনা এবং সংশোধন করুন৷ আপনি আরও মন্তব্য যোগ করে বা কোড অ্যাসিস্ট চ্যাট প্যানেলে নির্দিষ্ট প্রশ্ন জিজ্ঞাসা করে জেমিনি কোড অ্যাসিস্টকে প্রম্পট করতে পারেন।

এবং যদি আপনি এখনও SDK-এ নতুন হন, তাহলে এখানে একটি কার্যকরী উদাহরণ রয়েছে।

👉 কপি করুন এবং পেস্ট করুন এবং আপনার legal.py এ নিম্নলিখিত কোডটি প্রতিস্থাপন করুন:

import os
import signal
import sys
import vertexai
import random
from langchain_google_vertexai import VertexAI
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate
from langchain_core.messages import HumanMessage, SystemMessage
# Connect to resourse needed from Google Cloud
llm = VertexAI(model_name="gemini-2.0-flash")
def ask_llm(query):
    try:
        query_message = {
            "type": "text",
            "text": query,
        }

        input_msg = HumanMessage(content=[query_message])
        prompt_template = ChatPromptTemplate.from_messages(
            [
                SystemMessage(
                    content=(
                        "You are a helpful assistant, and you are with the attorney in a courtroom, you are helping him to win the case by providing the information he needs "
                        "Don't answer if you don't know the answer, just say sorry in a funny way possible"
                        "Use high engergy tone, don't use more than 100 words to answer"
                       # f"Here is some past conversation history between you and the user {relevant_history}"
                       # f"Here is some context that is relevant to the question {relevant_resource} that you might use"
                    )
                ),
                input_msg,
            ]
        )
        prompt = prompt_template.format()
        response = llm.invoke(prompt)
        print(f"response: {response}")
        return response
    except Exception as e:
        print(f"Error sending message to chatbot: {e}") # Log this error too!
        return f"Unable to process your request at this time. Due to the following reason: {str(e)}"

👉 ঐচ্ছিক: স্প্যানিশ সংস্করণ

Sustituye el siguiente texto como se indica: You are a helpful assistant, You are a helpful assistant that speaks Spanish,

এর পরে, একটি রুট পরিচালনা করার জন্য একটি ফাংশন তৈরি করুন যা ব্যবহারকারীর প্রশ্নের উত্তর দেবে।

ক্লাউড শেল এডিটরে main.py খুলুন। আপনি কিভাবে legal.py এ ask_llm জেনারেট করেছেন তার অনুরূপ, ফ্লাস্ক রুট এবং ask_question ফাংশন জেনারেট করতে জেমিনি কোড অ্যাসিস্ট ব্যবহার করুন। main.py এ একটি মন্তব্য হিসাবে নিম্নলিখিত প্রম্পটটি টাইপ করুন : (আপনি if __name__ == "__main__": এ ফ্লাস্ক অ্যাপ শুরু করার আগে এটি যোগ করা হয়েছে তা নিশ্চিত করুন:)

.....
@app.route('/',methods=['GET'])
def index():
    return render_template('index.html')
    

"""
PROMPT:
Create a Flask endpoint that accepts POST requests at the '/ask' route. 
The request should contain a JSON payload with a 'question' field. Extract the question from the JSON payload. 
Call a function named ask_llm (located in a file named legal.py) with the extracted question as an argument. 
Return the result of the ask_llm function as the response with a 200 status code. 
If any error occurs during the process, return a 500 status code with the error message.
"""

# Add this block to start the Flask app when running locally
if __name__ == "__main__":
.....

জেনারেট করা কোডটি ভাল এবং বেশিরভাগ সঠিক হলেই গ্রহণ করুন। আপনি যদি Python-এর সাথে পরিচিত না হন। এখানে একটি কার্যকরী উদাহরণ দেওয়া হল, এটিকে আপনার main.py এ ইতিমধ্যেই থাকা কোডের নিচে কপি করে পেস্ট করুন

👉 নিশ্চিত করুন যে আপনি ওয়েব অ্যাপ্লিকেশন শুরু করার আগে নিম্নলিখিতগুলি পেস্ট করেছেন (যদি নাম == "প্রধান" :)

@app.route('/ask', methods=['POST'])
def ask_question():
    data = request.get_json()
    question = data.get('question')
    try:
        # call the ask_llm in legal.py
        answer_markdown = legal.ask_llm(question)
        
        print(f"answer_markdown: {answer_markdown}")
        # Return the Markdown as the response
        return answer_markdown, 200
    except Exception as e:
        return f"Error: {str(e)}", 500  # Handle errors appropriately

এই পদক্ষেপগুলি অনুসরণ করে, আপনি সফলভাবে জেমিনি কোড অ্যাসিস্ট সক্ষম করতে সক্ষম হবেন, আপনার প্রকল্প সেট আপ করুন এবং আপনার main.py ফাইলে ask ফাংশন তৈরি করতে এটি ব্যবহার করুন৷

5. ক্লাউড এডিটরে স্থানীয় পরীক্ষা

👉 সম্পাদকের টার্মিনালে, নির্ভরশীল লাইব্রেরি ইনস্টল করুন এবং স্থানীয়ভাবে ওয়েব UI চালু করুন।

cd ~/legal-eagle/webapp
python -m venv env
source env/bin/activate
export PROJECT_ID=$(gcloud config get project)
pip install -r requirements.txt
python main.py

ক্লাউড শেল টার্মিনাল আউটপুটে স্টার্টআপ বার্তাগুলি সন্ধান করুন। ফ্লাস্ক সাধারণত বার্তা প্রিন্ট করে যে এটি চলছে এবং কোন পোর্টে চলছে।

  • http://127.0.0.1:8080 এ চলছে

অনুরোধ পরিবেশন করার জন্য অ্যাপ্লিকেশনটিকে চলমান রাখতে হবে।

👉 "ওয়েব প্রিভিউ" মেনু থেকে, পোর্ট 8080-এ প্রিভিউ বেছে নিন। ক্লাউড শেল আপনার অ্যাপ্লিকেশনের ওয়েব প্রিভিউ সহ একটি নতুন ব্রাউজার ট্যাব বা উইন্ডো খুলবে। প্রকল্প আইডি

👉 অ্যাপ্লিকেশন ইন্টারফেসে, বিশেষভাবে আইনি মামলার রেফারেন্স সম্পর্কিত কয়েকটি প্রশ্ন টাইপ করুন এবং দেখুন এলএলএম কীভাবে প্রতিক্রিয়া জানায়। উদাহরণস্বরূপ, আপনি চেষ্টা করতে পারেন:

  • মাইকেল ব্রাউনকে কত বছরের কারাদণ্ড দেওয়া হয়েছিল?
  • জেন স্মিথের ক্রিয়াকলাপের ফলে অননুমোদিত চার্জে কত টাকা তৈরি হয়েছিল?
  • এমিলি হোয়াইটের মামলার তদন্তে প্রতিবেশীদের সাক্ষ্য কী ভূমিকা পালন করেছিল?

👉 ঐচ্ছিক: স্প্যানিশ সংস্করণ

  • ¿A cuántos años de prisión fue sentenciado Michael Brown?
  • ¿Cuánto dinero en cargos no autorizados se generó como resultado de las acciones de Jane Smith?
  • ¿Qué papel jugaron los testimonios de los vecinos en la investigación del caso de Emily White?

আপনি যদি উত্তরগুলি ঘনিষ্ঠভাবে দেখেন, আপনি সম্ভবত লক্ষ্য করবেন যে মডেলটি হ্যালুসিনেট হতে পারে, অস্পষ্ট বা সাধারণ হতে পারে এবং কখনও কখনও আপনার প্রশ্নের ভুল ব্যাখ্যা করতে পারে, বিশেষ করে যেহেতু এটির এখনও নির্দিষ্ট আইনি নথিগুলিতে অ্যাক্সেস নেই৷

👉 এগিয়ে যান এবং Ctrl+C টিপে স্ক্রিপ্ট বন্ধ করুন।

👉 ভার্চুয়াল পরিবেশ থেকে প্রস্থান করুন, টার্মিনাল রানে:

deactivate

6. ভেক্টর স্টোর সেট আপ করা

আইনের এই এলএলএম 'সৃজনশীল ব্যাখ্যার' অবসান ঘটানোর সময়। সেখানেই উদ্ধারে আসে রিট্রিভাল-অগমেন্টেড জেনারেশন (RAG)! এটি আপনার প্রশ্নের উত্তর দেওয়ার আগে আমাদের LLM-কে একটি সুপার-পাওয়ারড লিগ্যাল লাইব্রেরিতে অ্যাক্সেস দেওয়ার মতো মনে করুন। শুধুমাত্র তার সাধারণ জ্ঞানের উপর নির্ভর করার পরিবর্তে (যা মডেলের উপর নির্ভর করে অস্পষ্ট বা পুরানো হতে পারে), RAG প্রথমে একটি বিশ্বস্ত উত্স থেকে প্রাসঙ্গিক তথ্য নিয়ে আসে - আমাদের ক্ষেত্রে, আইনি নথি - এবং তারপর সেই প্রসঙ্গটি ব্যবহার করে অনেক বেশি তথ্যপূর্ণ এবং সঠিক উত্তর তৈরি করে৷ এটা এমন যেন এলএলএম আদালতের কক্ষে যাওয়ার আগে তার হোমওয়ার্ক করছে!

আমাদের RAG সিস্টেম তৈরি করার জন্য, আমাদের সেই সমস্ত আইনি নথি সংরক্ষণ করার জন্য একটি জায়গা প্রয়োজন এবং গুরুত্বপূর্ণভাবে, অর্থ দ্বারা অনুসন্ধানযোগ্য করে তোলে। সেখানেই ফায়ারস্টোর আসে! Firestore হল Google ক্লাউডের নমনীয়, স্কেলযোগ্য NoSQL ডকুমেন্ট ডাটাবেস।

আমরা আমাদের ভেক্টর স্টোর হিসাবে Firestore ব্যবহার করতে যাচ্ছি। আমরা Firestore- এ আমাদের আইনি নথির খণ্ডগুলি সঞ্চয় করব, এবং প্রতিটি খণ্ডের জন্য, আমরা এর এমবেডিংও সংরক্ষণ করব - এটির অর্থের সংখ্যাসূচক উপস্থাপনা৷

ওভারভিউ-02

তারপরে, আপনি যখন আমাদের আইনি ঈগলকে একটি প্রশ্ন জিজ্ঞাসা করেন, তখন আমরা আপনার প্রশ্নের সাথে সবচেয়ে প্রাসঙ্গিক আইনি পাঠ্যের অংশগুলি খুঁজে পেতে Firestore-এর ভেক্টর অনুসন্ধান ব্যবহার করব৷ এই পুনরুদ্ধার করা প্রেক্ষাপট হল RAG যা ব্যবহার করে আপনাকে উত্তর দিতে যা প্রকৃত আইনি তথ্যের উপর ভিত্তি করে, শুধু এলএলএম কল্পনা নয়!

👉 একটি নতুন ট্যাব/উইন্ডোতে, Google ক্লাউড কনসোলে Firestore-এ যান।

👉 Database Create এ ক্লিক করুন

ডাটাবেস তৈরি করুন

👉 Native mode এবং ডাটাবেসের নাম (default) হিসাবে বেছে নিন।

👉 একক region নির্বাচন করুন : us-central1 , এবং Create Database এ ক্লিক করুন। ফায়ারস্টোর আপনার ডাটাবেসের ব্যবস্থা করবে, এতে কয়েক মুহূর্ত সময় লাগতে পারে।

কনফিগার ডাটাবেস

👉 ক্লাউড IDE এর টার্মিনালে ফিরে যান - আপনার আইনি_ডকুমেন্ট সংগ্রহে ভেক্টর অনুসন্ধান সক্ষম করতে এমবেডিং_ভেক্টর ক্ষেত্রে একটি ভেক্টর সূচক তৈরি করুন।

export PROJECT_ID=$(gcloud config get project)
gcloud firestore indexes composite create \
--collection-group=legal_documents \
--query-scope=COLLECTION \
--field-config field-path=embedding,vector-config='{"dimension":"768", "flat": "{}"}' \
--project=${PROJECT_ID}

Firestore ভেক্টর সূচক তৈরি করা শুরু করবে। সূচক তৈরিতে কিছু সময় লাগতে পারে, বিশেষ করে বড় ডেটাসেটের জন্য। আপনি সূচীটিকে "তৈরি করা" অবস্থায় দেখতে পাবেন এবং এটি নির্মিত হলে এটি "প্রস্তুত"-এ রূপান্তরিত হবে। ফায়ারস্টোর সূচক

7. ভেক্টর স্টোরে ডেটা লোড করা হচ্ছে

এখন যেহেতু আমরা আরএজি এবং আমাদের ভেক্টর স্টোর বুঝতে পেরেছি, এটি এমন ইঞ্জিন তৈরি করার সময় যা আমাদের আইনি লাইব্রেরি তৈরি করে! তাহলে, কীভাবে আমরা আইনি নথিগুলিকে 'অর্থের দ্বারা অনুসন্ধানযোগ্য' করতে পারি? জাদু এম্বেডিং হয়! এম্বেডিংগুলিকে শব্দ, বাক্য বা এমনকি সম্পূর্ণ নথিকে সংখ্যাসূচক ভেক্টরে রূপান্তরিত করার মতো মনে করুন - সংখ্যার তালিকা যা তাদের শব্দার্থগত অর্থ ক্যাপচার করে। অনুরূপ ধারণাগুলি ভেক্টর পায় যেগুলি ভেক্টর স্পেসে একে অপরের 'নিকট'। এই রূপান্তরটি সম্পাদন করতে আমরা শক্তিশালী মডেল ব্যবহার করি (যেমন Vertex AI থেকে)।

এবং আমাদের নথি লোডিং স্বয়ংক্রিয় করতে, আমরা Cloud Run ফাংশন এবং Eventarc ব্যবহার করব। ক্লাউড রান ফাংশন একটি হালকা ওজনের, সার্ভারবিহীন কন্টেইনার যেটি শুধুমাত্র প্রয়োজন হলেই আপনার কোড চালায়। আমরা আমাদের ডকুমেন্ট প্রসেসিং পাইথন স্ক্রিপ্ট একটি পাত্রে প্যাকেজ করব এবং এটিকে ক্লাউড রান ফাংশন হিসাবে স্থাপন করব।

ওভারভিউ-03

👉 একটি নতুন ট্যাব/উইন্ডোতে, ক্লাউড স্টোরেজ- এ যান।

👉 বামদিকের মেনুতে "Buckets" এ ক্লিক করুন।

👉 উপরের "+ CREATE" বোতামে ক্লিক করুন।

👉 আপনার বালতি কনফিগার করুন (গুরুত্বপূর্ণ সেটিংস):

  • বালতির নাম : 'yourprojectID' -doc-bucket (আপনার অবশ্যই শেষে -doc-বালতি প্রত্যয় থাকতে হবে)
  • অঞ্চল : us-central1 অঞ্চল নির্বাচন করুন।
  • স্টোরেজ ক্লাস : "স্ট্যান্ডার্ড"। স্ট্যান্ডার্ড ঘন ঘন অ্যাক্সেস করা ডেটার জন্য উপযুক্ত।
  • অ্যাক্সেস নিয়ন্ত্রণ : ডিফল্ট "ইউনিফর্ম অ্যাক্সেস নিয়ন্ত্রণ" নির্বাচন করুন। এটি সামঞ্জস্যপূর্ণ, বালতি-স্তরের অ্যাক্সেস নিয়ন্ত্রণ প্রদান করে।
  • উন্নত বিকল্প : এই টিউটোরিয়ালের জন্য, ডিফল্ট সেটিংস সাধারণত যথেষ্ট।

বালতি তৈরি করুন

👉 আপনার বালতি তৈরি করতে CREATE বাটনে ক্লিক করুন।

👉 আপনি পাবলিক অ্যাক্সেস প্রতিরোধ সম্পর্কে একটি পপ আপ দেখতে পারেন। বক্সটি চেক করা রেখে 'নিশ্চিত করুন' এ ক্লিক করুন।

আপনি এখন বাকেট তালিকায় আপনার নতুন তৈরি বালতি দেখতে পাবেন। আপনার বালতি নামটি মনে রাখবেন, আপনার এটি পরে প্রয়োজন হবে।

8. একটি ক্লাউড রান ফাংশন সেট আপ করুন৷

👉 ক্লাউড শেল কোড এডিটরে, কার্যকরী ডিরেক্টরি লিগ্যাল-ঈগল- এ নেভিগেট করুন : ফোল্ডার তৈরি করতে ক্লাউড এডিটর টার্মিনালে cd কমান্ড ব্যবহার করুন।

cd ~/legal-eagle
mkdir loader
cd loader

👉 main.py , requirements.txt এবং Dockerfile ফাইল তৈরি করুন। ক্লাউড শেল টার্মিনালে, ফাইলগুলি তৈরি করতে স্পর্শ কমান্ডটি ব্যবহার করুন:

touch main.py requirements.txt Dockerfile

আপনি নতুন তৈরি করা ফোল্ডারটি *loader এবং তিনটি ফাইল দেখতে পাবেন।

👉 loader ফোল্ডারের অধীনে main.py সম্পাদনা করুন। বাম দিকের ফাইল এক্সপ্লোরারে, আপনি ফাইলগুলি তৈরি করেছেন এমন ডিরেক্টরিতে নেভিগেট করুন এবং সম্পাদকে এটি খুলতে main.py এ ডাবল-ক্লিক করুন।

নিম্নলিখিত পাইথন কোড main.py এ পেস্ট করুন:

এই অ্যাপ্লিকেশনটি GCS বালতিতে আপলোড করা নতুন ফাইলগুলিকে প্রক্রিয়া করে, টেক্সটকে খণ্ডে বিভক্ত করে, প্রতিটি খণ্ডের জন্য এম্বেডিং তৈরি করে এবং ফায়ারস্টোরে খণ্ডগুলি এবং তাদের এম্বেডিংগুলি সংরক্ষণ করে৷

import os
import json
from google.cloud import storage
import functions_framework
from langchain_google_vertexai import VertexAI, VertexAIEmbeddings
from langchain_google_firestore import FirestoreVectorStore
from langchain.text_splitter import RecursiveCharacterTextSplitter
import vertexai
PROJECT_ID = os.environ.get("GOOGLE_CLOUD_PROJECT")  # Get project ID from env
embedding_model = VertexAIEmbeddings(
    model_name="text-embedding-004" ,
    project=PROJECT_ID,)
COLLECTION_NAME = "legal_documents"
# Create a vector store
vector_store = FirestoreVectorStore(
    collection="legal_documents",
    embedding_service=embedding_model,
    content_field="original_text",
    embedding_field="embedding",
)
@functions_framework.cloud_event
def process_file(cloud_event):
    print(f"CloudEvent received: {cloud_event.data}")  # Print the parsed event data
     
    """Triggered by a Cloud Storage event.
       Args:
            cloud_event (functions_framework.CloudEvent): The CloudEvent
                containing the Cloud Storage event data.
    """
    try:
        event_data = cloud_event.data
        bucket_name = event_data['bucket']
        file_name = event_data['name']
    except (json.JSONDecodeError, AttributeError, KeyError) as e:  # Catch JSON errors
        print(f"Error decoding CloudEvent data: {e} - Data: {cloud_event.data}")
        return "Error processing event", 500  # Return an error response
   
    print(f"New file detected in bucket: {bucket_name}, file: {file_name}")
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(file_name)
    try:
        # Download the file content as string (assuming UTF-8 encoded text file)
        file_content_string = blob.download_as_string().decode("utf-8")
        print(f"File content downloaded. Processing...")
        # Split text into chunks using RecursiveCharacterTextSplitter
        text_splitter = RecursiveCharacterTextSplitter(
            chunk_size=500,
            chunk_overlap=100,
            length_function=len,
        )
        text_chunks = text_splitter.split_text(file_content_string)
        print(f"Text split into {len(text_chunks)} chunks.")
 
        # Add the docs to the vector store
        vector_store.add_texts(text_chunks)    
        print(f"File processing and Firestore upsert complete for file: {file_name}")
        return "File processed successfully", 200  #  Return success response
    except Exception as e:
        print(f"Error processing file {file_name}: {e}")

requirements.txt সম্পাদনা করুন। ফাইলে নিম্নলিখিত লাইনগুলি পেস্ট করুন:

Flask==2.3.3
requests==2.31.0
google-generativeai>=0.2.0
langchain
langchain_google_vertexai
langchain-community
langchain-google-firestore
google-cloud-storage
functions-framework

9. পরীক্ষা করুন এবং ক্লাউড রান ফাংশন তৈরি করুন

👉 আমরা এটি একটি ভার্চুয়াল পরিবেশে চালাব এবং ক্লাউড রান ফাংশনের জন্য প্রয়োজনীয় পাইথন লাইব্রেরিগুলি ইনস্টল করব।

cd ~/legal-eagle/loader
python -m venv env
source env/bin/activate
pip install -r requirements.txt

👉 ক্লাউড রান ফাংশনের জন্য একটি স্থানীয় এমুলেটর শুরু করুন

functions-framework --target process_file --signature-type=cloudevent --source main.py

👉 শেষ টার্মিনালটি চালু রাখুন, একটি নতুন টার্মিনাল খুলুন এবং বালতিতে একটি ফাইল আপলোড করতে কমান্ডটি চালান।

export DOC_BUCKET_NAME=$(gcloud storage buckets list --format="value(name)" | grep doc-bucket)
gsutil cp ~/legal-eagle/court_cases/case-01.txt gs://$DOC_BUCKET_NAME/

দুটি টার্মিনাল

👉 যখন এমুলেটর চলছে, আপনি এতে পরীক্ষামূলক ক্লাউড ইভেন্ট পাঠাতে পারেন। এর জন্য আপনার IDE-তে একটি পৃথক টার্নিয়াল লাগবে।

curl -X POST -H "Content-Type: application/json" \
     -d "{
       \"specversion\": \"1.0\",
       \"type\": \"google.cloud.storage.object.v1.finalized\",
       \"source\": \"//storage.googleapis.com/$DOC_BUCKET_NAME\",
       \"subject\": \"objects/case-01.txt\",
       \"id\": \"my-event-id\",
       \"time\": \"2024-01-01T12:00:00Z\",
       \"data\": {
         \"bucket\": \"$DOC_BUCKET_NAME\",
         \"name\": \"case-01.txt\"
       }
     }" http://localhost:8080/

এটা ঠিক আছে ফিরে আসা উচিত.

👉 আপনি ফায়ারস্টোরে ডেটা যাচাই করবেন, Google ক্লাউড কনসোলে যান এবং "ডাটাবেস" তারপর "ফায়ারস্টোর"-এ নেভিগেট করুন এবং "ডেটা" ট্যাব নির্বাচন করুন এবং তারপর legal_documents সংগ্রহ করুন। আপনি দেখতে পাবেন আপনার সংগ্রহে নতুন নথি তৈরি করা হয়েছে, প্রতিটি আপলোড করা ফাইল থেকে পাঠ্যের একটি অংশ উপস্থাপন করে। আপসর্ট NoSQLDB

👉 এমুলেটর চলমান টার্মিনালে, প্রস্থান করতে Ctrl+C টাইপ করুন। এবং দ্বিতীয় টার্মিনাল বন্ধ করুন।

👉 ভার্চুয়াল পরিবেশ থেকে প্রস্থান করতে নিষ্ক্রিয় চালান।

deactivate

10. কন্টেইনার ইমেজ তৈরি করুন এবং আর্টিফ্যাক্টস রিপোজিটরিতে পুশ করুন

👉 ক্লাউডে এটি স্থাপন করার সময়। ফাইল এক্সপ্লোরারে, ডকারফাইলে ডাবল-ক্লিক করুন। জেমিনিকে আপনার জন্য ডকারফাইল তৈরি করতে বলুন, জেমিনি কোড অ্যাসিস্ট খুলুন এবং ফাইলটি তৈরি করতে নিম্নলিখিত প্রম্পটটি ব্যবহার করুন।

In the loader folder, 
Generate a Dockerfile for a Python 3.12 Cloud Run service that uses functions-framework. It needs to:
1. Use a Python 3.12 slim base image.
2. Set the working directory to /app.
3. Copy requirements.txt and install Python dependencies.
4. Copy main.py.
5. Set the command to run functions-framework, targeting the 'process_file' function on port 8080

সর্বোত্তম অনুশীলনের জন্য, খোলা ফাইলের সাথে ডিফ- এ ক্লিক করার পরামর্শ দেওয়া হচ্ছে (বিপরীত দিক সহ দুটি তীর, এবং পরিবর্তনগুলি গ্রহণ করুন।) মিথুন ডকার

👉 আপনি যদি কন্টেইনারে নতুন হন, তাহলে এখানে একটি কাজের উদাহরণ দেওয়া হল:

# Use a Python 3.12 slim base image
FROM python:3.12-slim
# Set the working directory to /app
WORKDIR /app
# Copy requirements.txt and install Python dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy main.py
COPY main.py .
# Set the command to run functions-framework
CMD ["functions-framework", "--target", "process_file", "--port", "8080"]

👉 টার্মিনালে, আমরা যে ডকার ইমেজটি তৈরি করতে যাচ্ছি তা সংরক্ষণ করার জন্য একটি আর্টিফ্যাক্ট রিপোজিটরি তৈরি করুন।

gcloud artifacts repositories create my-repository \
    --repository-format=docker \
    --location=us-central1 \
    --description="My repository"

আপনার তৈরি করা সংগ্রহস্থল [my-repository] দেখতে হবে।

👉 ডকার ইমেজ তৈরি করতে নিম্নলিখিত কমান্ডটি চালান।

cd ~/legal-eagle/loader
export PROJECT_ID=$(gcloud config get project)
docker build -t gcr.io/${PROJECT_ID}/legal-eagle-loader .

👉 আপনি এটিকে এখন রেজিস্ট্রিতে পুশ করবেন

export PROJECT_ID=$(gcloud config get project)
docker tag gcr.io/${PROJECT_ID}/legal-eagle-loader us-central1-docker.pkg.dev/${PROJECT_ID}/my-repository/legal-eagle-loader
docker push us-central1-docker.pkg.dev/${PROJECT_ID}/my-repository/legal-eagle-loader

ডকার ইমেজ এখন মাই-রিপোজিটরি আর্টিফ্যাক্টস রিপোজিটরিতে পাওয়া যায়।

মিথুন ডকার

11. ক্লাউড রান ফাংশন তৈরি করুন এবং Eventarc ট্রিগার সেট আপ করুন

আমাদের আইনি ডকুমেন্ট লোডার স্থাপনের সুনির্দিষ্ট বিষয়ে আলোচনা করার আগে, আসুন সংক্ষিপ্তভাবে জড়িত উপাদানগুলিকে বুঝি: ক্লাউড রান একটি সম্পূর্ণরূপে পরিচালিত সার্ভারবিহীন প্ল্যাটফর্ম যা আপনাকে কন্টেইনারাইজড অ্যাপ্লিকেশনগুলিকে দ্রুত এবং সহজে স্থাপন করতে দেয়৷ এটি অবকাঠামো ব্যবস্থাপনাকে বিমূর্ত করে, আপনাকে আপনার কোড লেখা এবং স্থাপনে ফোকাস করতে দেয়।

আমরা একটি ক্লাউড রান পরিষেবা হিসাবে আমাদের নথি লোডার স্থাপন করব৷ এখন, আমাদের ক্লাউড রান ফাংশন সেট আপ করার সাথে এগিয়ে চলুন:

👉 Google ক্লাউড কনসোলে, ক্লাউড রানে নেভিগেট করুন।

👉 Deploy Container এ যান এবং ড্রপ ডাউনে SERVICE এ ক্লিক করুন।

👉 আপনার ক্লাউড রান পরিষেবা কনফিগার করুন:

  • ধারক চিত্র : URL ক্ষেত্রে "নির্বাচন করুন" এ ক্লিক করুন। আপনি আর্টিফ্যাক্ট রেজিস্ট্রিতে যে ছবিটি পুশ করেছেন সেটি খুঁজুন (যেমন, us-central1-docker.pkg.dev/your-project-id/my-repository/legal-eagle-loader/yourimage)।
  • পরিষেবার নাম : legal-eagle-loader
  • অঞ্চল : us-central1 অঞ্চল নির্বাচন করুন।
  • প্রমাণীকরণ : এই কর্মশালার উদ্দেশ্যে, আপনি "অপ্রমাণিত আহ্বানের অনুমতি দিন" অনুমতি দিতে পারেন। উৎপাদনের জন্য, আপনি সম্ভবত অ্যাক্সেস সীমাবদ্ধ করতে চাইবেন।
  • ধারক, নেটওয়ার্কিং, নিরাপত্তা : ডিফল্ট।

👉 CREATE এ ক্লিক করুন। ক্লাউড রান আপনার পরিষেবা স্থাপন করবে। ক্লাউড রান

আমাদের স্টোরেজ বালতিতে নতুন ফাইল যুক্ত হলে এই পরিষেবাটি স্বয়ংক্রিয়ভাবে ট্রিগার করতে, আমরা Eventarc ব্যবহার করব। Eventarc আপনাকে ইভেন্ট-চালিত আর্কিটেকচার তৈরি করার অনুমতি দেয় বিভিন্ন উত্স থেকে আপনার পরিষেবাগুলিতে ইভেন্টগুলি রাউটিং করে।

ওভারভিউ-04

Eventarc সেট আপ করার মাধ্যমে, আমাদের ক্লাউড রান পরিষেবা স্বয়ংক্রিয়ভাবে নতুন যোগ করা নথিগুলি আপলোড হওয়ার সাথে সাথে Firestore-এ লোড করবে, আমাদের RAG অ্যাপ্লিকেশনের জন্য রিয়েল-টাইম ডেটা আপডেটগুলি সক্ষম করে৷

👉 Google ক্লাউড কনসোলে, EventArc-এর অধীনে ট্রিগারগুলিতে নেভিগেট করুন। "+ CREATE TRIGGER" এ ক্লিক করুন। 👉 Eventarc ট্রিগার কনফিগার করুন:

  • ট্রিগারের নাম: legal-eagle-upload-trigger
  • ট্রিগার টাইপ: গুগল সোর্স
  • ইভেন্ট প্রদানকারী: ক্লাউড স্টোরেজ নির্বাচন করুন।
  • ইভেন্টের ধরন: google.cloud.storage.object.v1.finalized বেছে নিন
  • ক্লাউড স্টোরেজ বাকেট: ড্রপডাউন থেকে আপনার GCS বাকেট নির্বাচন করুন।
  • গন্তব্যের ধরন: "ক্লাউড রান পরিষেবা"।
  • পরিষেবা: legal-eagle-loader নির্বাচন করুন।
  • অঞ্চল: us-central1
  • পথ: আপাতত এটি ফাঁকা ছেড়ে দিন।
  • পৃষ্ঠায় অনুরোধ করা সমস্ত অনুমতি দিন

👉 CREATE এ ক্লিক করুন। Eventarc এখন ট্রিগার সেট আপ করবে।

ক্লাউড রান পরিষেবার বিভিন্ন উপাদান থেকে ফাইল পড়ার অনুমতি প্রয়োজন। আমাদের পরিষেবার পরিষেবা অ্যাকাউন্টের অনুমতি দিতে হবে যা প্রয়োজন৷

ট্রিগার তৈরি করুন

ট্রিগার তৈরি করুন

12. GCS বালতিতে আইনি নথি আপলোড করুন৷

👉 আপনার GCS বালতিতে কোর্ট কেস ফাইল আপলোড করুন। মনে রাখবেন, আপনার বালতির নাম প্রতিস্থাপন করতে।

export DOC_BUCKET_NAME=$(gcloud storage buckets list --format="value(name)" | grep doc-bucket)
gsutil cp ~/legal-eagle/court_cases/case-02.txt gs://$DOC_BUCKET_NAME/
gsutil cp ~/legal-eagle/court_cases/case-03.txt gs://$DOC_BUCKET_NAME/
gsutil cp ~/legal-eagle/court_cases/case-06.txt gs://$DOC_BUCKET_NAME/

ক্লাউড রান পরিষেবা লগগুলি নিরীক্ষণ করুন, ক্লাউড রানে যান -> আপনার পরিষেবা legal-eagle-loader -> "লগস"৷ সফল প্রক্রিয়াকরণ বার্তাগুলির জন্য লগগুলি পরীক্ষা করুন, সহ:

xxx
POST200130 B8.3 sAPIs-Google; (+https://developers.google.com/webmasters/APIs-Google.html) https://legal-eagle-loader-bmngrueyta-uc.a.run.app/?__GCP_CloudEventsMode=GCS_NOTIFICATION
xxx
POST200130 B520 msAPIs-Google; (+https://developers.google.com/webmasters/APIs-Google.html) https://legal-eagle-loader-bmngrueyta-uc.a.run.app/?__GCP_CloudEventsMode=GCS_NOTIFICATION
xxx
POST200130 B514 msAPIs-Google; (+https://developers.google.com/webmasters/APIs-Google.html) https://legal-eagle-loader-bmngrueyta-uc.a.run.app/?__GCP_CloudEventsMode=GCS_NOTIFICATION

এবং লগিং কত দ্রুত সেটআপ হয়েছে তার উপর নির্ভর করে, আপনি এখানে আরও বিস্তারিত লগ দেখতে পাবেন

    "CloudEvent received:"
    "New file detected in bucket:"
    "File content downloaded. Processing..."
    "Text split into ... chunks."
    "File processing and Firestore upsert complete..."

লগে কোনো ত্রুটির বার্তা দেখুন এবং প্রয়োজনে সমস্যা সমাধান করুন। ফাংশন লগ

👉 ফায়ারস্টোরে ডেটা যাচাই করুন। এবং আপনার আইনি_ডকুমেন্ট সংগ্রহ খুলুন।

👉 আপনি আপনার সংগ্রহে তৈরি করা নতুন নথি দেখতে পাবেন। প্রতিটি নথি আপনার আপলোড করা ফাইল থেকে পাঠ্যের একটি অংশ উপস্থাপন করবে এবং এতে থাকবে:

metadata: currently empty
original_text_chunk: The text chunk content.
embedding_: A list of floating-point numbers (the Vertex AI embedding).

NoSQL আপসার্ট

13. RAG বাস্তবায়ন

LangChain হল একটি শক্তিশালী ফ্রেমওয়ার্ক যা বৃহৎ ভাষা মডেল (LLMs) দ্বারা চালিত অ্যাপ্লিকেশনগুলির বিকাশকে প্রবাহিত করার জন্য ডিজাইন করা হয়েছে। LLM API, প্রম্পট ইঞ্জিনিয়ারিং এবং ডেটা হ্যান্ডলিং এর জটিলতার সাথে সরাসরি কুস্তি করার পরিবর্তে, LangChain একটি উচ্চ-স্তরের বিমূর্ততা স্তর প্রদান করে। এটি বিভিন্ন LLM-এর সাথে সংযোগ করা (যেমন OpenAI, Google, বা অন্যদের থেকে), অপারেশনের জটিল চেইন তৈরি করা (যেমন, সংক্ষিপ্তকরণ দ্বারা ডেটা পুনরুদ্ধার করা) এবং কথোপকথন মেমরি পরিচালনা করার মতো কাজের জন্য পূর্ব-নির্মিত উপাদান এবং সরঞ্জাম সরবরাহ করে।

RAG-এর জন্য বিশেষভাবে, LangChain-এর ভেক্টর স্টোরগুলি RAG-এর পুনরুদ্ধারের দিককে সক্রিয় করার জন্য অপরিহার্য। এগুলি ভেক্টর এম্বেডিংগুলিকে দক্ষতার সাথে সঞ্চয় এবং অনুসন্ধান করার জন্য ডিজাইন করা বিশেষ ডেটাবেস, যেখানে শব্দার্থগতভাবে অনুরূপ পাঠ্যগুলিকে ভেক্টর স্পেসের কাছাকাছি বিন্দুতে ম্যাপ করা হয়। LangChain নিম্ন-স্তরের প্লাম্বিংয়ের যত্ন নেয়, যা ডেভেলপারদের তাদের RAG অ্যাপ্লিকেশনের মূল যুক্তি এবং কার্যকারিতার উপর ফোকাস করতে দেয়। এটি উল্লেখযোগ্যভাবে বিকাশের সময় এবং জটিলতা হ্রাস করে, আপনাকে Google ক্লাউড পরিকাঠামোর দৃঢ়তা এবং মাপযোগ্যতার সুবিধা দেওয়ার সময় দ্রুত প্রোটোটাইপ এবং RAG-ভিত্তিক অ্যাপ্লিকেশন স্থাপন করার অনুমতি দেয়।

ওভারভিউ-05

LangChain ব্যাখ্যা করার সাথে সাথে, আপনাকে এখন RAG বাস্তবায়নের জন্য webapp ফোল্ডারের অধীনে আপনার legal.py ফাইল আপডেট করতে হবে। এটি LLM কে উত্তর দেওয়ার আগে Firestore-এ প্রাসঙ্গিক নথি অনুসন্ধান করতে সক্ষম করবে৷

👉 FirestoreVectorStore এবং অন্যান্য প্রয়োজনীয় মডিউল ল্যাংচেইন এবং ভার্টেক্সাই থেকে আমদানি করুন। বর্তমান legal.py এ নিম্নলিখিত যোগ করুন

from langchain_google_vertexai import VertexAIEmbeddings
from langchain_google_firestore import FirestoreVectorStore

👉 ভার্টেক্স এআই এবং এমবেডিং মডেল শুরু করুন text-embedding-004 ব্যবহার করবেন। মডিউল আমদানি করার পর নিচের কোডটি যোগ করুন।

PROJECT_ID = os.environ.get("GOOGLE_CLOUD_PROJECT")  # Get project ID from env
embedding_model = VertexAIEmbeddings(
    model_name="text-embedding-004" ,
    project=PROJECT_ID,)

👉 একটি FirestoreVectorStore তৈরি করুন আইনি_দস্তাবেজ সংগ্রহের দিকে নির্দেশ করে, প্রাথমিক এমবেডিং মডেল ব্যবহার করে এবং বিষয়বস্তু এবং এম্বেডিং ক্ষেত্রগুলি নির্দিষ্ট করে৷ পূর্ববর্তী এমবেডিং মডেল কোডের পরে এটি যোগ করুন।

COLLECTION_NAME = "legal_documents"
# Create a vector store
vector_store = FirestoreVectorStore(
    collection="legal_documents",
    embedding_service=embedding_model,
    content_field="original_text",
    embedding_field="embedding",
)

👉 search_resource নামক একটি ফাংশন সংজ্ঞায়িত করুন যা একটি ক্যোয়ারী নেয়, vector_store.similarity_search ব্যবহার করে একটি মিল অনুসন্ধান করে এবং সম্মিলিত ফলাফল প্রদান করে।

def search_resource(query):
    results = []
    results = vector_store.similarity_search(query, k=5)
    
    combined_results = "\n".join([result.page_content for result in results])
    print(f"==>{combined_results}")
    return combined_results

👉 ask_llm ফাংশন রিপ্লেস করুন এবং ব্যবহারকারীর প্রশ্নের উপর ভিত্তি করে প্রাসঙ্গিক প্রসঙ্গ পুনরুদ্ধার করতে search_resource ফাংশন ব্যবহার করুন।

def ask_llm(query):
    try:
        query_message = {
            "type": "text",
            "text": query,
        }
        relevant_resource = search_resource(query)
       
        input_msg = HumanMessage(content=[query_message])
        prompt_template = ChatPromptTemplate.from_messages(
            [
                SystemMessage(
                    content=(
                        "You are a helpful assistant, and you are with the attorney in a courtroom, you are helping him to win the case by providing the information he needs "
                        "Don't answer if you don't know the answer, just say sorry in a funny way possible"
                        "Use high engergy tone, don't use more than 100 words to answer"
                        f"Here is some context that is relevant to the question {relevant_resource} that you might use"
                    )
                ),
                input_msg,
            ]
        )
        prompt = prompt_template.format()
        
        response = llm.invoke(prompt)
        print(f"response: {response}")
        return response
    except Exception as e:
        print(f"Error sending message to chatbot: {e}") # Log this error too!
        return f"Unable to process your request at this time. Due to the following reason: {str(e)}"

👉 ঐচ্ছিক: স্প্যানিশ সংস্করণ

Sustituye el siguiente texto como se indica: You are a helpful assistant, You are a helpful assistant that speaks Spanish,

👉 legal.py-এ RAG প্রয়োগ করার পরে, আপনাকে স্থাপন করার আগে স্থানীয়ভাবে এটি পরীক্ষা করা উচিত, কমান্ড দিয়ে অ্যাপ্লিকেশনটি চালান:

cd ~/legal-eagle/webapp
source env/bin/activate
python main.py

👉 অ্যাপ্লিকেশন অ্যাক্সেস করতে ওয়েবপ্রিভিউ ব্যবহার করুন, সহায়তার সাথে কথা বলুন এবং স্থানীয়ভাবে চালানো প্রক্রিয়া থেকে বেরিয়ে আসতে ctrl+c টাইপ করুন। এবং ভার্চুয়াল পরিবেশ থেকে প্রস্থান করতে নিষ্ক্রিয় চালান।

deactivate

👉 ক্লাউড রানে ওয়েব অ্যাপ্লিকেশন স্থাপন করতে, এটি লোডার ফাংশনের অনুরূপ। আপনি ডকার ইমেজটিকে আর্টিফ্যাক্ট রেজিস্ট্রিতে তৈরি, ট্যাগ এবং পুশ করবেন:

export PROJECT_ID=$(gcloud config get project)
docker build -t gcr.io/${PROJECT_ID}/legal-eagle-webapp .
docker tag gcr.io/${PROJECT_ID}/legal-eagle-webapp us-central1-docker.pkg.dev/${PROJECT_ID}/my-repository/legal-eagle-webapp
docker push us-central1-docker.pkg.dev/${PROJECT_ID}/my-repository/legal-eagle-webapp

👉 এটি Google ক্লাউডে ওয়েব অ্যাপ্লিকেশন স্থাপন করার সময়। টার্মিনালে, এই কমান্ডগুলি চালান:

export PROJECT_ID=$(gcloud config get project)
gcloud run deploy legal-eagle-webapp \
  --image us-central1-docker.pkg.dev/$PROJECT_ID/my-repository/legal-eagle-webapp \
  --region us-central1 \
  --set-env-vars=GOOGLE_CLOUD_PROJECT=${PROJECT_ID}  \
  --allow-unauthenticated

Google ক্লাউড কনসোলে ক্লাউড রানে গিয়ে স্থাপনা যাচাই করুন৷ আপনার তালিকাভুক্ত legal-eagle-webapp নামের একটি নতুন পরিষেবা দেখতে হবে৷

02-10-run-webapp.png

পরিষেবাটির বিস্তারিত পৃষ্ঠায় ক্লিক করুন, আপনি উপরে উপলভ্য স্থাপন করা URL খুঁজে পেতে পারেন। NoSQL আপসার্ট

👉 এখন, একটি নতুন ব্রাউজার ট্যাবে স্থাপন করা URL খুলুন। আপনি আইনি সহকারীর সাথে যোগাযোগ করতে পারেন এবং আপনার লোড করা আদালতের মামলাগুলির সাথে সম্পর্কিত প্রশ্ন জিজ্ঞাসা করতে পারেন (কোর্ট_কেস ফোল্ডারের অধীনে):

  • মাইকেল ব্রাউনকে কত বছরের কারাদণ্ড দেওয়া হয়েছিল?
  • জেন স্মিথের ক্রিয়াকলাপের ফলে অননুমোদিত চার্জে কত টাকা তৈরি হয়েছিল?
  • এমিলি হোয়াইটের মামলার তদন্তে প্রতিবেশীদের সাক্ষ্য কী ভূমিকা পালন করেছিল?

👉 ঐচ্ছিক: স্প্যানিশ সংস্করণ

  • ¿A cuántos años de prisión fue sentenciado Michael Brown?
  • ¿Cuánto dinero en cargos no autorizados se generó como resultado de las acciones de Jane Smith?
  • ¿Qué papel jugaron los testimonios de los vecinos en la investigación del caso de Emily White?

আপনার লক্ষ্য করা উচিত যে প্রতিক্রিয়াগুলি এখন আরও নির্ভুল এবং আপনার আপলোড করা আইনি নথির বিষয়বস্তুর উপর ভিত্তি করে, RAG-এর ক্ষমতা প্রদর্শন করে!

কর্মশালা শেষ করার জন্য অভিনন্দন!! আপনি সফলভাবে LLM, LangChain, এবং Google ক্লাউড ব্যবহার করে একটি আইনি নথি বিশ্লেষণ অ্যাপ্লিকেশন তৈরি এবং স্থাপন করেছেন। আপনি শিখেছেন কিভাবে আইনি নথিগুলি গ্রহণ করতে হয় এবং প্রক্রিয়া করতে হয়, RAG ব্যবহার করে প্রাসঙ্গিক তথ্য সহ LLM প্রতিক্রিয়া বাড়াতে হয় এবং আপনার অ্যাপ্লিকেশনটিকে সার্ভারহীন পরিষেবা হিসাবে স্থাপন করতে হয়। এই জ্ঞান এবং তৈরি করা অ্যাপ্লিকেশন আপনাকে আইনি কাজের জন্য LLM-এর ক্ষমতা আরও অন্বেষণ করতে সাহায্য করবে। ভালো হয়েছে!"

14. চ্যালেঞ্জ

বিভিন্ন ধরনের মিডিয়া: :

আদালতের ভিডিও এবং অডিও রেকর্ডিংয়ের মতো বিভিন্ন ধরনের মিডিয়া কীভাবে ইনজেস্ট এবং প্রক্রিয়া করা যায় এবং প্রাসঙ্গিক পাঠ্য বের করা যায়।

অনলাইন সম্পদ :

ওয়েব পেজ লাইভ মত অনলাইন সম্পদ প্রক্রিয়া কিভাবে.