1. खास जानकारी
इस कोडलैब में, आपको LangChain ऐप्लिकेशन को डिप्लॉय करने का तरीका बताया जाएगा. यह ऐप्लिकेशन, Cloud Run के रिलीज़ नोट के बारे में सवाल पूछने के लिए Gemini का इस्तेमाल करता है.
यहां बताया गया है कि ऐप्लिकेशन कैसे काम करता है: अगर आपने पूछा कि "क्या Cloud Run में Cloud Storage बकेट को वॉल्यूम के तौर पर माउंट किया जा सकता है?", तो ऐप्लिकेशन जवाब देगा कि "हां, 19 जनवरी, 2024 से" या ऐसा ही कुछ.
भरोसेमंद स्रोतों से जवाब पाने के लिए, ऐप्लिकेशन पहले Cloud Run के रिलीज़ नोट ढूंढता है. ये नोट, सवाल से मिलते-जुलते होने चाहिए. इसके बाद, यह Gemini को सवाल और रिलीज़ नोट, दोनों के साथ प्रॉम्प्ट करता है. (इसे आम तौर पर आरएजी कहा जाता है.) यहां ऐप्लिकेशन का आर्किटेक्चर दिखाने वाला डायग्राम दिया गया है:

2. सेटअप और ज़रूरी शर्तें
सबसे पहले, पक्का करें कि आपका डेवलपमेंट एनवायरमेंट सही तरीके से सेट अप किया गया हो.
- ऐप्लिकेशन के लिए ज़रूरी संसाधनों को डिप्लॉय करने के लिए, आपके पास Google Cloud प्रोजेक्ट होना चाहिए.
- ऐप्लिकेशन को डिप्लॉय करने के लिए, आपकी लोकल मशीन पर gcloud इंस्टॉल होना चाहिए. साथ ही, यह ऑथेंटिकेट होना चाहिए और प्रोजेक्ट का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया होना चाहिए.
gcloud auth logingcloud config set project
- अगर आपको ऐप्लिकेशन को अपनी लोकल मशीन पर चलाना है, तो हमारा सुझाव है कि आप ऐसा करें. इसके लिए, आपको यह पक्का करना होगा कि आपके ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल सही तरीके से सेट अप किए गए हों. इसमें कोटा प्रोजेक्ट सेट करना भी शामिल है.
gcloud auth application-default logingcloud auth application-default set-quota-project
- इसके अलावा, आपको यह सॉफ़्टवेयर भी इंस्टॉल करना होगा:
- Python (वर्शन 3.11 या इसके बाद का वर्शन ज़रूरी है)
- LangChain CLI
- डिपेंडेंसी मैनेज करने के लिए poetry
- आइसोलेटेड वर्चुअल एनवायरमेंट में LangChain CLI और poetry को इंस्टॉल और चलाने के लिए, pipx
यहां एक ब्लॉग दिया गया है. इसमें इस वॉकट्रू के लिए ज़रूरी टूल इंस्टॉल करने के बारे में बताया गया है.
क्लाउड वर्कस्टेशन
अपनी लोकल मशीन के बजाय, Google Cloud पर Cloud Workstations का भी इस्तेमाल किया जा सकता है. ध्यान दें कि अप्रैल 2024 तक, यह Python के 3.11 से कम वर्शन पर काम करता है. इसलिए, आपको शुरू करने से पहले Python को अपग्रेड करना पड़ सकता है.
Cloud API चालू करना
सबसे पहले, यह पक्का करने के लिए कि आपने इस्तेमाल करने के लिए सही Google Cloud प्रोजेक्ट कॉन्फ़िगर किया है, नीचे दिए गए कमांड को चलाएं:
gcloud config list project
अगर सही प्रोजेक्ट नहीं दिख रहा है, तो इस कमांड का इस्तेमाल करके उसे सेट किया जा सकता है:
gcloud config set project <PROJECT_ID>
अब इन एपीआई को चालू करें:
gcloud services enable \ bigquery.googleapis.com \ sqladmin.googleapis.com \ aiplatform.googleapis.com \ cloudresourcemanager.googleapis.com \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ secretmanager.googleapis.com
कोई देश/इलाका चुनें
Google Cloud दुनिया भर में कई जगहों पर उपलब्ध है. आपको इस लैब के लिए इस्तेमाल किए जाने वाले संसाधनों को डिप्लॉय करने के लिए, इनमें से किसी एक जगह को चुनना होगा. अपने शेल में क्षेत्र को एनवायरमेंट वैरिएबल के तौर पर सेट करें. बाद के निर्देश इस वैरिएबल का इस्तेमाल करते हैं:
export REGION=us-central1
3. वेक्टर डेटाबेस इंस्टेंस बनाना
इस ऐप्लिकेशन का मुख्य काम, रिलीज़ नोट पाना है. ये रिलीज़ नोट, उपयोगकर्ता के सवाल के हिसाब से होने चाहिए. इसे और बेहतर तरीके से समझने के लिए, मान लें कि आपको Cloud Storage के बारे में कोई सवाल पूछना है. ऐसे में, आपको प्रॉम्प्ट में यह रिलीज़ नोट जोड़ना होगा:
रिलीज़ नोट से मिलते-जुलते नोट ढूंढने के लिए, टेक्स्ट एम्बेडिंग और वेक्टर डेटाबेस का इस्तेमाल किया जा सकता है.
हम आपको Cloud SQL पर PostgreSQL को वेक्टर डेटाबेस के तौर पर इस्तेमाल करने का तरीका बताएंगे. नया Cloud SQL इंस्टेंस बनाने में कुछ समय लगता है. इसलिए, इसे अभी बना लेते हैं.
gcloud sql instances create sql-instance \ --database-version POSTGRES_14 \ --tier db-f1-micro \ --region $REGION
इस कमांड को चलने दें और अगले चरण पर जाएं. आपको किसी समय डेटाबेस बनाना होगा और उसमें उपयोगकर्ता को जोड़ना होगा. हालांकि, अभी हम स्पिनर को देखने में समय बर्बाद नहीं करेंगे.
PostgreSQL एक रिलेशनल डेटाबेस सर्वर है. Cloud SQL के हर नए इंस्टेंस में, pgvector एक्सटेंशन डिफ़ॉल्ट रूप से इंस्टॉल होता है. इसका मतलब है कि इसे वेक्टर डेटाबेस के तौर पर भी इस्तेमाल किया जा सकता है.
4. LangChain ऐप्लिकेशन को स्कैफ़ोल्ड करना
जारी रखने के लिए, आपके पास LangChain CLI इंस्टॉल होना चाहिए. साथ ही, डिपेंडेंसी मैनेज करने के लिए poetry इंस्टॉल होना चाहिए. pipx का इस्तेमाल करके, इन्हें इंस्टॉल करने का तरीका यहां बताया गया है:
pipx install langchain-cli poetry
यहां दिए गए कमांड का इस्तेमाल करके, LangChain ऐप्लिकेशन को स्कैफ़ोल्ड करें. जब आपसे पूछा जाए, तो फ़ोल्डर का नाम run-rag रखें. इसके बाद, पैकेज इंस्टॉल करने की प्रोसेस को स्किप करने के लिए, Enter दबाएं:
langchain app new
run-rag डायरेक्ट्री में जाएं और डिपेंडेंसी इंस्टॉल करें
poetry install
आपने अभी-अभी एक LangServe ऐप्लिकेशन बनाया है. LangServe, LangChain चेन के चारों ओर FastAPI को रैप करता है. इसमें एक बिल्ट-इन प्लेग्राउंड होता है. इससे प्रॉम्प्ट भेजना और सभी इंटरमीडियरी चरणों के साथ-साथ नतीजों की जांच करना आसान हो जाता है. हमारा सुझाव है कि आप अपने एडिटर में run-rag फ़ोल्डर खोलें और देखें कि उसमें क्या है.
5. इंडेक्स करने का जॉब बनाना
वेब ऐप्लिकेशन बनाना शुरू करने से पहले, आइए पक्का करें कि Cloud Run के रिलीज़ नोट, Cloud SQL डेटाबेस में इंडेक्स किए गए हों. इस सेक्शन में, आपको इंडेक्सिंग का ऐसा जॉब बनाने का तरीका बताया जाएगा जो ये काम करता है:

इंडेक्स करने की प्रोसेस में, रिलीज़ नोट लिए जाते हैं. इसके बाद, टेक्स्ट एंबेड करने वाले मॉडल का इस्तेमाल करके, उन्हें वेक्टर में बदला जाता है. इसके बाद, उन्हें वेक्टर डेटाबेस में सेव किया जाता है. इससे, सिमैंटिक मतलब के आधार पर, मिलते-जुलते रिलीज़ नोट को आसानी से खोजा जा सकता है.
run-rag/app फ़ोल्डर में, indexer.py नाम की फ़ाइल बनाएं और उसमें यह कॉन्टेंट शामिल करें:
import os
from google.cloud.sql.connector import Connector
import pg8000
from langchain_community.vectorstores.pgvector import PGVector
from langchain_google_vertexai import VertexAIEmbeddings
from google.cloud import bigquery
# Retrieve all Cloud Run release notes from BigQuery
client = bigquery.Client()
query = """
SELECT
CONCAT(FORMAT_DATE("%B %d, %Y", published_at), ": ", description) AS release_note
FROM `bigquery-public-data.google_cloud_release_notes.release_notes`
WHERE product_name= "Cloud Run"
ORDER BY published_at DESC
"""
rows = client.query(query)
print(f"Number of release notes retrieved: {rows.result().total_rows}")
# Set up a PGVector instance
connector = Connector()
def getconn() -> pg8000.dbapi.Connection:
conn: pg8000.dbapi.Connection = connector.connect(
os.getenv("DB_INSTANCE_NAME", ""),
"pg8000",
user=os.getenv("DB_USER", ""),
password=os.getenv("DB_PASS", ""),
db=os.getenv("DB_NAME", ""),
)
return conn
store = PGVector(
connection_string="postgresql+pg8000://",
use_jsonb=True,
engine_args=dict(
creator=getconn,
),
embedding_function=VertexAIEmbeddings(
model_name="textembedding-gecko@003"
),
pre_delete_collection=True
)
# Save all release notes into the Cloud SQL database
texts = list(row["release_note"] for row in rows)
ids = store.add_texts(texts)
print(f"Done saving: {len(ids)} release notes")
ज़रूरी डिपेंडेंसी जोड़ें:
poetry add \ "cloud-sql-python-connector[pg8000]" \ langchain-google-vertexai==1.0.5 \ langchain-community==0.2.5 \ pgvector
डेटाबेस और उपयोगकर्ता बनाना
Cloud SQL इंस्टेंस sql-instance पर डेटाबेस release-notes बनाएं:
gcloud sql databases create release-notes --instance sql-instance
app नाम का डेटाबेस उपयोगकर्ता बनाएं:
gcloud sql users create app --instance sql-instance --password "myprecious"
इंडेक्सिंग जॉब को डिप्लॉय और रन करना
अब जॉब को डिप्लॉय करें और चलाएं:
DB_INSTANCE_NAME=$(gcloud sql instances describe sql-instance --format="value(connectionName)") gcloud run jobs deploy indexer \ --source . \ --command python \ --args app/indexer.py \ --set-env-vars=DB_INSTANCE_NAME=$DB_INSTANCE_NAME \ --set-env-vars=DB_USER=app \ --set-env-vars=DB_NAME=release-notes \ --set-env-vars=DB_PASS=myprecious \ --region=$REGION \ --execute-now
यह एक लंबा निर्देश है. आइए, देखते हैं कि क्या हो रहा है:
पहली कमांड, कनेक्शन का नाम (project:region:instance के तौर पर फ़ॉर्मैट किया गया यूनीक आईडी) वापस लाती है और इसे एनवायरमेंट वैरिएबल DB_INSTANCE_NAME के तौर पर सेट करती है.
दूसरी कमांड, Cloud Run जॉब को डिप्लॉय करती है. फ़्लैग के बारे में यहां बताया गया है:
--source .: इससे पता चलता है कि जॉब का सोर्स कोड, मौजूदा वर्किंग डायरेक्ट्री में है. यह वह डायरेक्ट्री होती है जहां कमांड चलाई जा रही है.--command python: इससे कंटेनर के अंदर चलाने के लिए कमांड सेट की जाती है. इस मामले में, Python को चलाने के लिए.--args app/indexer.py: यह python कमांड के लिए तर्क उपलब्ध कराता है. इससे ऐप्लिकेशन डायरेक्ट्री में script indexer.py को चलाने का निर्देश मिलता है.--set-env-vars: यह एनवायरमेंट वैरिएबल सेट करता है. Python स्क्रिप्ट, इन्हें एक्ज़ीक्यूशन के दौरान ऐक्सेस कर सकती है.--region=$REGION: इससे उस इलाके के बारे में पता चलता है जहां नौकरी के लिए आवेदन किया जा सकता है.--execute-now: इससे Cloud Run को यह निर्देश मिलता है कि जॉब को डिप्लॉय करने के तुरंत बाद शुरू कर दिया जाए.
यह पुष्टि करने के लिए कि काम पूरा हो गया है, यह तरीका अपनाएं:
- वेब कंसोल की मदद से, नौकरी के एक्ज़ीक्यूशन के लॉग पढ़ें. इसमें "सेव हो गया: xxx रिलीज़ नोट" मैसेज दिखना चाहिए. यहां xxx, सेव किए गए रिलीज़ नोट की संख्या है.
- वेब कंसोल में Cloud SQL इंस्टेंस पर जाकर, Cloud SQL Studio का इस्तेमाल करके भी
langchain_pg_embeddingटेबल में मौजूद रिकॉर्ड की संख्या के बारे में क्वेरी की जा सकती है.
6. वेब ऐप्लिकेशन लिखना
अपने एडिटर में app/server.py फ़ाइल खोलें. आपको यह लाइन दिखेगी:
# Edit this to add the chain you want to add
उस टिप्पणी की जगह यह स्निपेट डालें:
# (1) Initialize VectorStore
connector = Connector()
def getconn() -> pg8000.dbapi.Connection:
conn: pg8000.dbapi.Connection = connector.connect(
os.getenv("DB_INSTANCE_NAME", ""),
"pg8000",
user=os.getenv("DB_USER", ""),
password=os.getenv("DB_PASS", ""),
db=os.getenv("DB_NAME", ""),
)
return conn
vectorstore = PGVector(
connection_string="postgresql+pg8000://",
use_jsonb=True,
engine_args=dict(
creator=getconn,
),
embedding_function=VertexAIEmbeddings(
model_name="textembedding-gecko@003"
)
)
# (2) Build retriever
def concatenate_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
notes_retriever = vectorstore.as_retriever() | concatenate_docs
# (3) Create prompt template
prompt_template = PromptTemplate.from_template(
"""You are a Cloud Run expert answering questions.
Use the retrieved release notes to answer questions
Give a concise answer, and if you are unsure of the answer, just say so.
Release notes: {notes}
Here is your question: {query}
Your answer: """)
# (4) Initialize LLM
llm = VertexAI(
model_name="gemini-1.0-pro-001",
temperature=0.2,
max_output_tokens=100,
top_k=40,
top_p=0.95
)
# (5) Chain everything together
chain = (
RunnableParallel({
"notes": notes_retriever,
"query": RunnablePassthrough()
})
| prompt_template
| llm
| StrOutputParser()
)
आपको ये इंपोर्ट भी जोड़ने होंगे:
import pg8000
import os
from google.cloud.sql.connector import Connector
from langchain_google_vertexai import VertexAI
from langchain_google_vertexai import VertexAIEmbeddings
from langchain_core.runnables import RunnablePassthrough, RunnableParallel
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_community.vectorstores.pgvector import PGVector
आखिर में, "NotImplemented" वाली लाइन को बदलकर यह करें:
# add_routes(app, NotImplemented)
add_routes(app, chain)
7. वेब ऐप्लिकेशन को Cloud Run पर डिप्लॉय करना
ऐप्लिकेशन को Cloud Run पर डिप्लॉय करने के लिए, run-rag डायरेक्ट्री में जाकर यह कमांड इस्तेमाल करें:
DB_INSTANCE_NAME=$(gcloud sql instances describe sql-instance --format="value(connectionName)") gcloud run deploy run-rag \ --source . \ --set-env-vars=DB_INSTANCE_NAME=$DB_INSTANCE_NAME \ --set-env-vars=DB_USER=app \ --set-env-vars=DB_NAME=release-notes \ --set-env-vars=DB_PASS=myprecious \ --region=$REGION \ --allow-unauthenticated
इस कमांड से ये काम किए जाते हैं:
- सोर्स कोड को Cloud Build पर अपलोड करना
- docker build चलाएं.
- कंटेनर इमेज को Artifact Registry में पुश करें.
- कंटेनर इमेज का इस्तेमाल करके, Cloud Run सेवा बनाएं.
कमांड पूरी होने पर, यह run.app डोमेन पर एक एचटीटीपीएस यूआरएल दिखाती है. यह आपकी नई Cloud Run सेवा का सार्वजनिक यूआरएल है
8. Playground को एक्सप्लोर करना
Cloud Run सेवा का यूआरएल खोलें और /playground पर जाएं. इससे एक टेक्स्ट फ़ील्ड खुलता है. इसका इस्तेमाल Cloud Run के रिलीज़ नोट के बारे में सवाल पूछने के लिए करें. जैसे, यहां:

9. बधाई हो
आपने Cloud Run पर LangChain ऐप्लिकेशन बना लिया है और उसे डिप्लॉय कर दिया है. बहुत खूब!
यहां मुख्य कॉन्सेप्ट दिए गए हैं:
- LangChain फ़्रेमवर्क का इस्तेमाल करके, जानकारी खोजने और जवाब जनरेट करने वाला (आरएजी) ऐप्लिकेशन बनाना.
- Cloud SQL पर PostgreSQL का इस्तेमाल, pgvector के साथ वेक्टर डेटाबेस के तौर पर किया जा सकता है. pgvector, Cloud SQL पर डिफ़ॉल्ट रूप से इंस्टॉल होता है.
- Cloud Run jobs के तौर पर इंडेक्सिंग का काम लंबे समय तक चलाएं. साथ ही, Cloud Run service के तौर पर वेब ऐप्लिकेशन चलाएं.
- LangServe की मदद से, LangChain चेन को FastAPI ऐप्लिकेशन में रैप करें. इससे आपको अपने RAG ऐप्लिकेशन के साथ इंटरैक्ट करने के लिए एक आसान इंटरफ़ेस मिलता है.
व्यवस्थित करें
इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud Platform खाते से शुल्क न लिए जाने के लिए:
- Cloud Console में, मैनेज किए जा रहे संसाधन पेज पर जाएं.
- प्रोजेक्ट की सूची में, अपना प्रोजेक्ट चुनें. इसके बाद, मिटाएं पर क्लिक करें.
- डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए बंद करें पर क्लिक करें.
अगर आपको प्रोजेक्ट रखना है, तो पक्का करें कि आपने इन संसाधनों को मिटा दिया हो:
- Cloud SQL इंस्टेंस
- Cloud Run सेवा
- Cloud Run जॉब