ติดตั้งใช้งาน LangChain Agent ใน Cloud Run

1. ภาพรวม

เอเจนต์คือโปรแกรมอัตโนมัติที่พูดคุยกับโมเดล AI เพื่อดำเนินการตามเป้าหมายโดยใช้เครื่องมือและบริบทที่มีอยู่ และสามารถตัดสินใจด้วยตนเองโดยอิงตามข้อเท็จจริง

ใช้เฟรมเวิร์กของ Agent เช่น Agent Development Kit(ADK), LangChain, smolagents เพื่อสร้าง Agent แอปพลิเคชัน Agent ที่สร้างผ่านเฟรมเวิร์กดังกล่าวสามารถทำให้ใช้งานได้ใน Cloud Run และพร้อมให้บริการแก่ผู้ใช้ในรูปแบบแอปพลิเคชันแบบ Serverless

ใน Codelab นี้ เราจะสร้าง Agent โดยใช้ LangChain และติดตั้งใช้งานใน Cloud Run

สิ่งที่คุณจะสร้าง

พร้อมที่จะย้ายจาก PROMPT ต้นแบบไปสร้าง Agent แล้วหรือยัง เราจะสร้างเอเจนต์โดยใช้ LangChain เพื่อรับข้อมูลเกี่ยวกับบุคคลสำคัญในประวัติศาสตร์ในรูปแบบที่มีโครงสร้าง ในห้องทดลองนี้ คุณจะทำสิ่งต่อไปนี้

  1. สร้างเอเจนต์อย่างง่ายเพื่อสร้างข้อมูลเกี่ยวกับบุคคลสำคัญในประวัติศาสตร์ในรูปแบบที่มีโครงสร้างโดยใช้ LangChain
  2. เรียกใช้ตัวแทนในเครื่องและตรวจสอบว่าทำงานได้ตามที่คาดไว้
  3. ทำให้ Agent ใช้งานได้ใน Cloud Run และเรียกใช้โดยใช้ URL ของ Cloud Run

ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน

2. ก่อนเริ่มต้น

สร้างโปรเจ็กต์

  1. ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
  2. ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้วหรือไม่
  3. เปิดใช้งาน Cloud Shell โดยคลิกลิงก์นี้ คุณสามารถสลับระหว่างเทอร์มินัล Cloud Shell (สำหรับเรียกใช้คำสั่งคลาวด์) กับโปรแกรมแก้ไข (สำหรับสร้างโปรเจ็กต์) ได้โดยคลิกปุ่มที่เกี่ยวข้องจาก Cloud Shell
  4. เมื่อเชื่อมต่อกับ Cloud Shell แล้ว ให้ตรวจสอบว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและตั้งค่าโปรเจ็กต์เป็นรหัสโปรเจ็กต์โดยใช้คำสั่งต่อไปนี้
gcloud auth list
  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้จักโปรเจ็กต์ของคุณ
gcloud config list project
  1. หากไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่า
gcloud config set project <YOUR_PROJECT_ID>
  1. ตรวจสอบว่าคุณมี Python 3.13 ขึ้นไป

ดูคำสั่งและการใช้งาน gcloud อื่นๆ ในเอกสารประกอบ

3. การสร้าง LangChain Agent

โครงสร้างโปรเจ็กต์

ใน Cloud Shell ให้สร้างโฟลเดอร์ชื่อ langchain-app แล้วเพิ่มไฟล์ต่อไปนี้ลงในโฟลเดอร์

langchain-gemini-fastapi-app/
├── main.py
├── requirements.txt

โค้ดของแอปพลิเคชัน

คุณควรเพิ่มทรัพยากร Dependency ต่อไปนี้ใน requirements.txt

fastapi
uvicorn
langchain
langchain-google-genai
python-dotenv

ใน main.py เราจะเขียนโค้ดเอเจนต์ที่ใช้โมเดล Gemini และดึงข้อมูลเกี่ยวกับบุคคลสำคัญในประวัติศาสตร์ เมื่อดึงข้อมูลแล้ว จะจัดรูปแบบเป็นรูปแบบที่มีโครงสร้างตามที่กำหนด

การติดตั้งใช้งานนี้ใช้ไวยากรณ์ LCEL (LangChain Expression Language) สมัยใหม่

import os
import uvicorn
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser

# Initialize FastAPI
app = FastAPI(title="LangChain App for Historical Figures")

# 1. Setup Gemini Model
# We expect GOOGLE_API_KEY to be set in the environment variables
llm = ChatGoogleGenerativeAI(
    model="gemini-2.5-flash",
    temperature=0.7
)

# 2. Define the Prompt
prompt = ChatPromptTemplate.from_template("You are an expert Historian. For the historical personality {name}, you are able to accurately tell their birth date and birth country. Return the output in the JSON format containing name, birthDate, birthCountry. In case you are unable to retrieve birthDate or birthCountry, just have the unknown values as null. ensure the response is a valid json object only.")
output_parser = JsonOutputParser()

# Chain: Prompt -> Model -> Json Output Parser
chain = prompt | llm | output_parser

# 3. Define Request Model
class QueryRequest(BaseModel):
    name: str

# 4. Define Endpoint
@app.post("/chat")
async def chat(request: QueryRequest):
    try:
        response = await chain.ainvoke({"name": request.name})
        return response
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.get("/")
def health_check():
    return {"status": "ok", "service": "LangChain-Gemini-FastAPI"}

4. ทดสอบ Agent

คุณสามารถทดสอบฟังก์ชันนี้ได้ในเครื่องก่อนที่จะนำไปใช้งาน

  1. สร้างคีย์ Gemini API ใน AI Studio
  2. ส่งออกคีย์ Gemini API เป็น
export GOOGLE_API_KEY="AIzaSy..."
  1. เรียกใช้เซิร์ฟเวอร์
uvicorn main:app --port 8080 --host 0.0.0.0
  1. ทดสอบ Agent โดยใช้คำสั่ง curl ต่อไปนี้
curl -X POST http://localhost:8080/chat \
     -H "Content-Type: application/json" \
     -d '{"name": "Abraham Lincoln"}'

ตรวจสอบว่าคุณได้รับเอาต์พุตที่มีโครงสร้าง JSON ซึ่งมีชื่อ วันเกิด และประเทศเกิด

5. ทำให้ใช้งานได้กับ Cloud Run

เราจะใช้คำสั่ง gcloud run deploy เพื่อติดตั้งใช้งานแอปพลิเคชัน Agent ใน Cloud Run คำสั่งต่อไปนี้จะสร้างคอนเทนเนอร์โดยใช้ Cloud Build และทำให้ใช้งานได้ใน Cloud Run ในขั้นตอนเดียว

แทนที่ YOUR_API_KEY ด้วยคีย์ Gemini API จริงของคุณ

gcloud run deploy gemini-fastapi-service \
  --source . \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated \
  --set-env-vars GOOGLE_API_KEY=<YOUR_API_KEY>

เมื่อติดตั้งใช้งานแล้ว คุณควรเห็นปลายทางในเทอร์มินัลซึ่งพร้อมให้คุณใช้งาน

6. ทดสอบการทำให้ใช้งานได้

ใช้ปลายทาง Cloud Run และทำตามcurlเพื่อให้ได้ผลลัพธ์ที่คาดไว้

curl -X POST <CLOUD_RUN_ENDPOINT> \
     -H "Content-Type: application/json" \
     -d '{"name": "Abraham Lincoln"}'

คุณควรได้รับผลลัพธ์เช่นเดียวกับที่ได้รับในแอปพลิเคชันที่ทำงานในเครื่อง

7. ล้างข้อมูล

โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโค้ดแล็บนี้

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์

8. ขอแสดงความยินดี

ยินดีด้วย คุณสร้างและโต้ตอบกับ LangChain Agent ที่ทําให้ใช้งานได้ใน Cloud Run เรียบร้อยแล้ว