Xây Dựng Hệ Thống Video RAG Thông Minh với Strands Agents và Amazon Aurora PostgreSQL
Giới thiệu
Trong bài viết này, chúng ta sẽ khám phá cách biến mã Python hiện có thành các công cụ AI tự động thông minh bằng cách sử dụng framework Strands Agents và cơ sở dữ liệu Amazon Aurora PostgreSQL. Nếu bạn đã xây dựng một hệ thống RAG cơ bản cho nội dung video, bài viết này sẽ giúp bạn nâng cấp hệ thống của mình lên một tầm cao mới với khả năng phân tích và tương tác thông minh.
Mục tiêu
- Xây dựng một Hệ thống Video RAG thông minh: Sử dụng Strands để tạo ra các công cụ phân tích video tự động.
- Kết hợp với Amazon Aurora PostgreSQL: Đảm bảo lưu trữ và truy xuất dữ liệu hiệu quả.
Cấu trúc Kiến trúc Agent
1. Đại lý Phân Tích Video
- Mục đích: Xử lý và tìm kiếm nội dung video trên toàn cầu.
- Khả năng: Phân tích các khung hình hình ảnh, âm thanh đã được chuyển thể và nội dung kỹ thuật.
- Công cụ: Sử dụng
video_embedding_localcho tìm kiếm video đa phương thức. - Trường hợp sử dụng: Phân tích nội dung kỹ thuật, tìm kiếm các khoảnh khắc cụ thể trong video.
2. Đại lý Tăng Cường Bộ Nhớ
- Mục đích: Cung cấp phân tích video cá nhân hóa, nhạy bén với ngữ cảnh.
- Khả năng: Nhớ sở thích của người dùng, học hỏi từ các tương tác, cung cấp phản hồi phù hợp.
- Công cụ:
video_embedding_local+s3_vector_memorycho bối cảnh người dùng bền vững. - Trường hợp sử dụng: Trải nghiệm học tập cá nhân hóa, gợi ý nội dung thích ứng.
Sử Dụng Decorator @tool
Strands Agents cho phép bạn biến mã xử lý video hiện có thành các công cụ agent. Dưới đây là một ví dụ về mã xử lý video:
python
from strands import tool
@tool
def video_embedding_local(
video_path: str,
user_id: str = "default_user",
action: str = "process",
query: Optional[str] = None,
similarity_threshold: float = 0.8,
frames_per_second: int = 1,
region: str = None,
) -> Dict[str, Any]:
"""
Bộ xử lý nhúng video đơn giản theo đúng mẫu notebook 05.
Args:
video_path: Đường dẫn đến tệp video (cục bộ)
user_id: Nhận diện người dùng cho việc cách ly dữ liệu
action: Hành động thực hiện ('process', 'search', 'list')
query: Từ khóa tìm kiếm cho việc truy xuất (khi hành động là 'search')
similarity_threshold: Ngưỡng so sánh độ tương đồng khung hình (0.0-1.0)
frames_per_second: Số khung hình trích xuất mỗi giây
region: Khu vực AWS
Returns:
Từ điển chứa kết quả xử lý
"""
try:
# Logic xử lý video phức tạp ở đây...
cluster_arn = os.getenv('AURORA_CLUSTER_ARN')
secret_arn = os.getenv('AURORA_SECRET_ARN')
database_name = os.getenv('AURORA_DATABASE_NAME', 'kbdata')
aurora = AuroraPostgres(cluster_arn, database_name, secret_arn, region)
if action == "search":
return _search_videos(query, aurora, region)
elif action == "list":
return _list_videos(user_id, aurora)
else:
return _process_video(video_path, user_id, similarity_threshold,
frames_per_second, s3_bucket, aurora, region)
except Exception as e:
return {
"status": "error",
"message": f"Error: {str(e)}",
"error_type": type(e).__name__
}
Bằng cách thêm @tool và một docstring mô tả, logic phức tạp cho việc xử lý video, trích xuất khung hình và lưu trữ vào Amazon Aurora PostgreSQL trở nên dễ sử dụng cho các agent.
Bộ Nhớ Bền Vững với S3 Vectors
Một ví dụ mạnh mẽ khác từ blog của tôi là việc xây dựng bộ nhớ agent bền vững sử dụng Amazon S3 Vectors:
python
@tool
def s3_vector_memory(
action: str,
content: str = None,
query: str = None,
user_id: str = None,
vector_bucket_name: str = None,
index_name: str = None,
top_k: int = 20,
min_score: float = 0.1
) -> Dict:
"""
Quản lý bộ nhớ theo native AWS sử dụng Amazon S3 Vectors.
Hành động:
- store: Lưu trữ nội dung bộ nhớ mới
- retrieve: Tìm kiếm và lấy bộ nhớ liên quan
- list: Liệt kê tất cả bộ nhớ của người dùng
"""
if not user_id:
return {"status": "error", "message": "user_id là bắt buộc cho việc cách ly bộ nhớ"}
try:
config = {
"bucket_name": vector_bucket_name or os.environ.get('VECTOR_BUCKET_NAME'),
"index_name": index_name or os.environ.get('VECTOR_INDEX_NAME'),
"region": region_name or os.environ.get('AWS_REGION', 'us-east-1'),
"model_id": embedding_model or os.environ.get('EMBEDDING_MODEL')
}
bedrock = boto3.client("bedrock-runtime", region_name=config["region"])
s3vectors = boto3.client("s3vectors", region_name=config["region"])
if action == "store":
return _store_memory(s3vectors, bedrock, config, content, user_id)
elif action == "retrieve":
return _retrieve_memories(s3vectors, bedrock, config, query, user_id, top_k, min_score)
elif action == "list":
return _list_memories(s3vectors, bedrock, config, user_id, top_k)
except Exception as e:
return {"status": "error", "message": str(e)}
Công cụ này xử lý việc cách ly người dùng, tìm kiếm ngữ nghĩa và bộ nhớ bền vững - tất cả với một giao diện đơn giản mà agent hiểu rất tốt.
Tương Tác Tự Nhiên với Agent
Sức mạnh thực sự xuất hiện trong các cuộc trò chuyện tự nhiên:
- Xử lý đơn giản
python
response = video_agent(f"Video này nói về cái gì trong {VIDEO_PATH}?")
Khi video được xử lý, agent tiến hành phân tích.
- Tương tác tăng cường bộ nhớ
python
response = memory_agent(f"""Tôi quan tâm đến việc học về AI và công nghệ cơ sở dữ liệu.
Lưu sở thích này cho người dùng {USER_ID}, sau đó tìm kiếm video trong {VIDEO_PATH} cho các thảo luận kỹ thuật về cơ sở dữ liệu vector và nhúng.""")
python
response = memory_agent(f"Người dùng {USER_ID} đã hỏi gì trước đây?")
Tối Ưu Hiệu Suất
Hệ thống chấp nhận các tham số cấu hình linh hoạt:
| Tham số | Mô tả | Mặc định |
|---|---|---|
video_path |
Đường dẫn đến video (cục bộ hoặc S3) | Bắt buộc |
user_id |
Nhận diện người dùng | Bắt buộc |
action |
'process', 'search', 'list' | 'process' |
similarity_threshold |
Ngưỡng tương đồng (0.0-1.0) | 0.8 |
frames_per_second |
Tốc độ trích xuất khung hình | 1 |
Ví dụ tối ưu hóa hiệu suất:
- Độ chính xác cao:
frames_per_second: 2,similarity_threshold: 0.7 - Cân bằng:
frames_per_second: 1,similarity_threshold: 0.8 - Xử lý nhanh:
frames_per_second: 0.5,similarity_threshold: 0.9
Khám Phá Thêm Về Strands Agents
Strands Agents cung cấp tài liệu và ví dụ toàn diện để giúp bạn bắt đầu.
Bắt Đầu Ngày Hôm Nay
Bạn đã sẵn sàng để biến mã của mình thành các công cụ agent chưa? Triển khai hoàn chỉnh có sẵn trong kho lưu trữ LangChain embeddings.
Tài Nguyên Tham Khảo
- Blog trước: Xử Lý Nội Dung Đa Phương Thức với Strands Agent
- Tài liệu Strands Agent Framework
- Ví dụ mã hoàn chỉnh
Hãy bắt đầu hành trình phát triển của bạn với Strands Agents ngay hôm nay!