Giới thiệu
Trong bài viết này, chúng ta sẽ khám phá cách xây dựng một AI Agent sẵn sàng cho sản xuất bằng cách sử dụng Strands Agents và triển khai trên Amazon Bedrock AgentCore. Strands Agents thực hiện một triết lý dựa trên mô hình giúp mã nguồn của chúng ta trở nên sạch sẽ và dễ bảo trì hơn, nhờ vào việc cho phép khả năng của mô hình điều khiển hành vi của agent. Hãy cùng bắt đầu!
Mục tiêu
Mục tiêu của chúng ta là tạo ra một AI Agent có thể ghi nhớ các thông tin từ cuộc trò chuyện trước đó và sử dụng chúng trong các phiên tiếp theo, nhờ vào hệ thống bộ nhớ của AgentCore.
Cài đặt môi trường phát triển
Trước tiên, chúng ta cần clone kho mã nguồn từ GitHub:
bash
git clone https://github.com/danilop/agentcore-multi-framework-examples.git
cd agentcore-multi-framework-examples
Tiếp theo, thiết lập dự án Strands Agents:
bash
cd agentcore-strands-agents
uv sync
source .venv/bin/activate
Các phụ thuộc trong dự án
Dự án này bao gồm các phụ thuộc sau:
strands-agents
: Framework chính để xây dựng agentstrands-agents-tools
: Các công cụ cộng đồng như máy tínhbedrock-agentcore
: SDK để tích hợp với dịch vụ AgentCorebedrock-agentcore-starter-toolkit
: Công cụ CLI để triển khai
Tạo và cấu hình bộ nhớ AgentCore
Trước khi xây dựng agent, chúng ta cần thiết lập bộ nhớ của AgentCore. Dịch vụ này sẽ lưu trữ các cuộc trò chuyện của agent và trích xuất thông tin có ý nghĩa.
Hiểu các chiến lược bộ nhớ
AgentCore Memory cung cấp ba chiến lược tích hợp sẵn:
- Thích nghi của người dùng: Ghi lại các mẫu hành vi của người dùng.
- Thực tế ngữ nghĩa: Lưu giữ thông tin và sự kiện liên quan.
- Tóm tắt phiên: Tạo ra các tóm tắt ngắn gọn về cuộc trò chuyện.
Tạo instance bộ nhớ
Chúng ta sẽ sử dụng một script để tạo một instance bộ nhớ với tất cả ba chiến lược:
bash
cd scripts
uv sync
uv run create-memory
Script này sẽ tạo một instance mới của AgentCore Memory và cấu hình với tất cả ba chiến lược. Cấu hình bộ nhớ sẽ được lưu tại ../config/memory-config.json
.
Thêm bộ nhớ mẫu
Chúng ta sẽ thêm một sự kiện bộ nhớ mẫu để kiểm tra:
bash
uv run add-sample-memory
Sự kiện này sẽ lưu lại một thông điệp đơn giản từ người dùng: "Tôi thích táo nhưng không thích chuối".
Xây dựng agent với hooks
Bây giờ chúng ta sẽ xây dựng agent. Kiến trúc sử dụng hệ thống hook của Strands để tách biệt việc quản lý bộ nhớ khỏi logic chính của agent.
Hiểu hệ thống hook
Hệ thống hook cho phép chúng ta đăng ký các sự kiện và mở rộng chức năng của agent mà không làm phức tạp logic cốt lõi. Tôi đã tạo hai hook bổ sung cho việc quản lý bộ nhớ:
Hook 1: Bộ nhớ ngắn hạn (ShortMemoryHook)
python
class ShortMemoryHook(HookProvider):
def register_hooks(self, registry: HookRegistry) -> None:
registry.add_callback(AgentInitializedEvent, self.on_agent_initialized)
registry.add_callback(MessageAddedEvent, self.on_message_added)
def on_agent_initialized(self, event: AgentInitializedEvent) -> None:
# Tải lịch sử cuộc trò chuyện khi agent khởi động
conversations = self.memory_client.get_last_k_turns(
memory_id=self.memory_id,
actor_id=event.agent.state.get("actor_id"),
session_id=event.agent.state.get("session_id"),
k=100 # Tải tối đa 100 lượt trò chuyện trước
)
if conversations:
# Định dạng lịch sử cuộc trò chuyện cho ngữ cảnh
context_messages = []
for turn in reversed(conversations):
for message in turn:
context_messages.append(f"{message['role']}: {message['content']}")
# Chèn vào prompt của agent
event.agent.system_prompt += f"\n\nCuộc trò chuyện gần đây:\n{'\n'.join(context_messages)}"
Hook 2: Bộ nhớ dài hạn (LongTermMemoryHook)
python
class LongTermMemoryHook(HookProvider):
def register_hooks(self, registry: HookRegistry) -> None:
registry.add_callback(BeforeInvocationEvent, self.on_before_invocation)
def on_before_invocation(self, event: BeforeInvocationEvent) -> None:
# Chỉ xử lý tin nhắn của người dùng
last_message = event.agent.messages[-1]
if last_message.get("role") != "USER":
return
user_query = last_message.get("content", "")
# Tìm kiếm ngữ nghĩa cho bộ nhớ liên quan
retrieved_memories = retrieve_memories_for_actor(
memory_id=self.memory_config.memory_id,
actor_id=event.agent.state.get("actor_id"),
search_query=user_query,
memory_client=self.memory_client
)
if retrieved_memories:
# Định dạng và chèn bộ nhớ vào ngữ cảnh
memory_context = format_memory_context(retrieved_memories)
event.agent.system_prompt += f"\n\nNgữ cảnh bộ nhớ dài hạn liên quan:\n{memory_context}"
Điểm vào chính của agent
python
from bedrock_agentcore import BedrockAgentCoreApp
from strands import Agent, tool
from strands_tools import calculator
app = BedrockAgentCoreApp()
agent = None
@app.entrypoint
def invoke(payload: Dict[str, Any], context: Optional[RequestContext] = None) -> Dict[str, Any]:
"""Điểm vào agent AI"""
global agent
actor_id = payload.get("actor_id", "my-user-id")
session_id = context.session_id if context and context.session_id else payload.get("session_id", "DEFAULT")
if agent is None:
agent = create_agent(actor_id, session_id)
user_message = payload.get("prompt", "Giải thích những gì bạn có thể làm cho tôi.")
try:
result = agent(user_message)
return {"result": result.message}
except Exception as e:
logger.error("Lỗi trong quá trình gọi agent: %s", e)
return {"error": "Đã xảy ra lỗi trong quá trình xử lý yêu cầu của bạn"}
def main():
"""Điểm vào chính cho ứng dụng."""
app.run()
if __name__ == "__main__":
main()
Kiểm tra tại chỗ
Trước khi triển khai lên đám mây, hãy kiểm tra agent của chúng ta tại chỗ. Đầu tiên, cấu hình cho AgentCore:
bash
agentcore configure -n strandsagent -e src/agentcore_strands_agents/agent.py
Sau đó, khởi động agent tại chỗ:
bash
agentcore launch --local
Triển khai lên sản xuất
Khi bạn đã hài lòng với việc kiểm tra tại chỗ, triển khai lên AWS rất đơn giản:
bash
agentcore launch
Các cân nhắc khi triển khai
Việc kết hợp Strands Agents và AgentCore cung cấp nhiều tính năng sẵn sàng cho sản xuất:
- Bảo mật: Mỗi phiên chạy trong một microVM cách ly.
- Khả năng mở rộng: Tự động mở rộng dựa trên nhu cầu.
- Giám sát: Tích hợp CloudWatch cung cấp nhật ký và số liệu.
- Bộ nhớ bền vững: Thông tin và cuộc trò chuyện được lưu giữ.
Kết luận
Bài viết này đã hướng dẫn cách xây dựng một AI Agent sẵn sàng cho sản xuất với khả năng ghi nhớ. Hãy tiếp tục thử nghiệm và khám phá thêm về framework này!
Câu hỏi thường gặp
1. Strands Agents là gì?
Strands Agents là framework giúp xây dựng AI Agents với kiến trúc dựa trên hooks.
2. Làm thế nào để triển khai agent lên AWS?
Sử dụng câu lệnh agentcore launch
để triển khai agent lên AWS.
3. Bộ nhớ của agent hoạt động như thế nào?
Bộ nhớ lưu giữ thông tin từ các phiên trước để tái sử dụng trong các cuộc trò chuyện tiếp theo.