Bài viết này được viết dựa trên thông tin tính đến ngày 16 tháng 12 năm 2023. Nội dung của Building with Amazon Bedrock and LangChain Workshop có thể được cập nhật theo thời gian.

LangChain là gì?

  • Là framework library phát triển ứng dụng sử dụng Large Language Model (LLM)
  • Các tính năng như model/memory/agent/retiriever được trừu tượng hóa, do đó có thể phát triển và tạo ra output hiệu quả mà không cần code quá nhiều

Để tạo ứng dụng LLM, không chỉ vài lựa chọn đơn giản mà cần phải xử lý nhiều workflow. Nếu muốn tạo các ứng dụng để trả lời vấn đề chuyên môn khi không có kiến thức về LLM hoặc muốn trả lời theo định dạng mong muốn thì có thể sử dụng LangChain.

LangChain có thể được sử dụng với các ngôn ngữ lập trình như Python, JavaScript, TypeScript. Bản Python cho phép sử dụng tất cả các tính năng của LangChain, do đó nên sử dụng Python.

Giao diện LangChain
Giao diện LangChain
IMG_256

Các module của LangChain

Models: Kết hợp các model khác nhau

Models là tính năng cho phép sử dụng kết hợp nhiều model khác nhau.

LangChain cho phép kết hợp nhiều model khác nhau như LLM, model chat, model nhúng văn bản.

Sử dụng các mô hình tích hợp trong LangChain giúp giảm bớt công sức viết code.

Prompts

Prompts dùng để nhập các input. Prompt trong LangChain được tích hợp các tính năng như quản lý, tối ưu hóa, và serial hóa, giúp giảm bớt việc viết code.

Ngoài ra, khi phát triển với nhóm nhiều người, có thể chuẩn hoá cách mô tả.

Indexes

Indexes là tính năng kết hợp document hiện có và LLM. Có thể tạo ra các câu trả lời dựa trên data ngoài như PDF, Excel, CSV, v.v.

Thông thường, cần dùng prompt dưới dạng văn bản. Có thể mở rộng tính năng bằng cách dùng LangChain kết hợp data ngoài để gửi chỉ thị hiệu quả hơn.

Chains

Chains cho phép thực hiện nhiều prompt và thực hiện một loạt hành động một cách trơn tru.

Trong model ngôn ngữ thông thường, AI sẽ xuất ra câu trả lời dựa trên prompt người dùng đã nhập.

Sử dụng tính năng Chains, khi cần tóm tắt văn bản có số lượng kí tự lớn, đầu tiên bạn có thể chia văn bản gốc thành nhiều phần và tóm tắt từng phần, sau đó sử dụng tóm tắt của từng phần làm đầu vào để xuất ra tóm tắt tổng thể.

Sử dụng nhiều prompt để nhận được câu trả lời chính xác hơn.

Retrieval

Tính năng này tạo ra câu trả lời sử dụng dữ liệu ngoài như PDF, CSV, v.v. mà LLM chưa học hoặc không thể học.

Agents

Kết hợp các prompt với công cụ để thực hiện action và kết hợp kết quả thành câu trả lời.

Bạn có thể kết hợp các công cụ tìm kiếm để thu thập thông tin và Python code để tạo biểu đồ.

Khi muốn bổ sung thông tin mới nhất vào câu trả lời, bạn có thể sử dụng công cụ tìm kiếm như Google hoặc Bing để thu thập thông tin và đưa thông tin đó vào câu trả lời.

Memory

Memory là tính năng lưu trữ trạng thái (state). Bạn có thể tái sử dụng dữ liệu được lưu trữ  trong Memory. Memory có hai loại: bộ nhớ ngắn hạn và bộ nhớ dài hạn.

Bộ nhớ ngắn hạn lưu giữ dữ liệu trong một lần tương tác. Nó được sử dụng để xử lý tóm tắt văn bản đã nhập.

Bộ nhớ dài hạn lưu giữ dữ liệu qua nhiều lần tương tác. Nó cập nhật bộ nhớ dựa trên thông tin thu được trong quá trình tương tác với người dùng và phản ánh thông tin đó trong các tương tác sau.

Building with Amazon Bedrock and LangChain

Đây là workshop do AWS tổ chức, hiện chỉ có phiên bản tiếng Anh. Do đó, các prompt trong workshop đều sử dụng tiếng Anh.

Workshop được sử dụng ở region us-west-2 (Oregon) hoặc us-east-1 (N. Virginia). Nếu bạn muốn sử dụng prompt tiếng Nhật, hãy sử dụng Claude của Anthropic làm model cơ sở.

Sử dụng Claude

Khi tham gia workshop, bạn sẽ chọn được model phù hợp. 

Chỉnh sửa file bedrock_langchain.py trong thư mục workshop/labs/langchain.

IMG_256

Ở đây, chỉ định import Amazon Bedrock để tạo ra một Bedrock client. Sử dụng client này, bạn có thể thực hiện các lệnh gọi LangChain tiêu chuẩn và tự động hoạt động với model của Bedrock.

import os
from langchain.llms.bedrock import Bedrock

Sau đó, chúng ta chỉ định Claude.

llm = Bedrock( #create a Bedrock llm client
credentials_profile_name=os.environ.get("BWB_PROFILE_NAME"), #sets the profile name to use for AWS credentials (if not the default)
region_name=os.environ.get("BWB_REGION_NAME"), #sets the region name (if not the default)
endpoint_url=os.environ.get("BWB_ENDPOINT_URL"), #sets the endpoint URL (if necessary)
model_id="ai21.j2-ultra-v1" #set the foundation model
)

Theo mặc định, model_id là [ai21.j2-ultra-v1], nghĩa là model Jurassic-2 của công ty AI21 Labs được chỉ định.

Đối với Claude2.0, thay đổi model_id thành [anthropic.claude-v2], và đối với Claude2.1, thay đổi model_id thành [anthropic.claude-v2.1].

llm = Bedrock( #create a Bedrock llm client
credentials_profile_name=os.environ.get("BWB_PROFILE_NAME"), #sets the profile name to use for AWS credentials (if not the default)
region_name=os.environ.get("BWB_REGION_NAME"), #sets the region name (if not the default)
endpoint_url=os.environ.get("BWB_ENDPOINT_URL"), #sets the endpoint URL (if necessary)
model_id="anthropic.claude-v2.1" #set the foundation model
)

Thực hiện lệnh gọi bằng hàm predict của LangChains. Ngoài ra, Bedrock client sẽ tự động trả về phản hồi dưới dạng text.

response_text = llm.predict(prompt) #return a response to the prompt

Tại đây, bạn đã có thể sử dụng Claude2.1 với LangChain.

LangChain là một library mở rộng có thể sử dụng các plugin bên ngoài theo yêu cầu.

Tham khảo: ハンズオン:Building with Amazon Bedrock and LangChainでClaudeを使ってみよう | SunnyCloud