Skip to content

Commit fdb0d11

Browse files
committed
feat: translate vi unit 2.2
1 parent f0eb197 commit fdb0d11

29 files changed

+4308
-0
lines changed

units/vi/unit2/introduction.mdx

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Giới thiệu về Agentic Framework
2+
3+
<img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/thumbnail.jpg" alt="Thumbnail"/>
4+
5+
Chào mừng bạn đến với Chương thứ hai, nơi **chúng ta sẽ khám phá các agentic framework khác nhau** để xây dựng các ứng dụng agentic mạnh mẽ.
6+
7+
Chúng ta sẽ tìm hiểu:
8+
9+
- Trong Chương 2.1: [smolagents](https://huggingface.co/docs/smolagents/en/index)
10+
- Trong Chương 2.2: [LlamaIndex](https://www.llamaindex.ai/)
11+
- Trong Chương 2.3: [LangGraph](https://www.langchain.com/langgraph)
12+
13+
Cùng bắt đầu nào! 🕵
14+
15+
## Khi nào nên dùng Agentic Framework
16+
17+
Agentic framework **không phải lúc nào cũng cần thiết** khi xây dựng ứng dụng xung quanh mô hình ngôn ngữ lớn (LLM). Chúng cung cấp tính linh hoạt trong quy trình làm việc (workflow) để giải quyết các tác vụ cụ thể, nhưng không phải luôn cần dùng đến.
18+
19+
Đôi khi **các workflow được định nghĩa sẵn là đủ** để đáp ứng yêu cầu người dùng, và không cần framework agentic. Nếu cách xây dựng agent đơn giản như một chuỗi prompt, việc dùng code thuần có thể đủ. Ưu điểm là nhà phát triển sẽ **có toàn quyền kiểm soát và hiểu rõ hệ thống mà không cần abstraction**.
20+
21+
Tuy nhiên khi workflow trở nên phức tạp hơn như cho LLM gọi function hay dùng nhiều agent, các abstraction này bắt đầu phát huy tác dụng.
22+
23+
Từ những ý trên, ta có thể xác định nhu cầu về các tính năng:
24+
25+
* *LLM engine* làm nền tảng hệ thống
26+
* *Danh sách tools* mà agent có thể truy cập
27+
* *Parser* để trích xuất tool calls từ đầu ra LLM
28+
* *System prompt* đồng bộ với parser
29+
* Hệ thống *memory* (bộ nhớ)
30+
* *Cơ chế log lỗi và thử lại* để kiểm soát lỗi từ LLM
31+
Chúng ta sẽ khám phá cách các framework như `smolagents`, `LlamaIndex``LangGraph` giải quyết những vấn đề này.
32+
33+
## Các Chương về Agentic Framework
34+
35+
| Framework | Mô tả | Tác giả Chương |
36+
|------------|----------------|----------------|
37+
| [smolagents](./smolagents/introduction) | Các Framework Agent do Hugging Face phát triển | Sergio Paniego - [HF](https://huggingface.co/sergiopaniego) - [X](https://x.com/sergiopaniego) - [Linkedin](https://www.linkedin.com/in/sergio-paniego-blanco) |
38+
| [Llama-Index](./llama-index/introduction) | Công cụ toàn diện để triển khai AI agent tăng cường ngữ cảnh vào production | David Berenstein - [HF](https://huggingface.co/davidberenstein1957) - [X](https://x.com/davidberenstei) - [Linkedin](https://www.linkedin.com/in/davidberenstein) |
39+
| [LangGraph](./langgraph/introduction) | Agents cho phép điều phối trạng thái của các agent | Joffrey THOMAS - [HF](https://huggingface.co/Jofthomas) - [X](https://x.com/Jthmas404) - [Linkedin](https://www.linkedin.com/in/joffrey-thomas) |
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# Các thành phần cơ bản của LangGraph
2+
3+
Để xây dựng ứng dụng với LangGraph, ta cần hiểu các thành phần cơ bản của nó. Hãy cùng khám phá những yếu tố nền tảng tạo nên một ứng dụng LangGraph.
4+
5+
<img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/LangGraph/Building_blocks.png" alt="Building Blocks" width="70%"/>
6+
7+
Một ứng dụng trong LangGraph bắt đầu từ **entrypoint** (điểm vào), và tùy vào quá trình thực thi, luồng có thể đi đến function này hoặc function khác cho đến khi đạt đến END.
8+
9+
<img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/LangGraph/application.png" alt="Application"/>
10+
11+
## 1. State (Trạng thái)
12+
13+
**State** là khái niệm trung tâm trong LangGraph, đại diện cho mọi thông tin luân chuyển qua ứng dụng của bạn.
14+
15+
```python
16+
from typing_extensions import TypedDict
17+
18+
class State(TypedDict):
19+
graph_state: str
20+
```
21+
22+
State được **User defined** (định nghĩa bởi người dùng), do đó các trường dữ liệu cần được thiết kế cẩn thận để chứa mọi thông tin cần thiết cho quá trình ra quyết định!
23+
24+
> 💡 **Mẹo:** Hãy cân nhắc kỹ về những thông tin ứng dụng cần theo dõi giữa các bước.
25+
26+
## 2. Nodes (Nút)
27+
28+
**Nodes** là các function Python. Mỗi node:
29+
- Nhận state làm đầu vào
30+
- Thực hiện các thao tác
31+
- Trả về các cập nhật cho state
32+
33+
```python
34+
def node_1(state):
35+
print("---Node 1---")
36+
return {"graph_state": state['graph_state'] +" I am"}
37+
38+
def node_2(state):
39+
print("---Node 2---")
40+
return {"graph_state": state['graph_state'] +" happy!"}
41+
42+
def node_3(state):
43+
print("---Node 3---")
44+
return {"graph_state": state['graph_state'] +" sad!"}
45+
```
46+
47+
Ví dụ, các Node có thể chứa:
48+
- **LLM calls**: Tạo văn bản hoặc đưa ra quyết định
49+
- **Tool calls**: Tương tác với hệ thống bên ngoài
50+
- **Conditional logic**: Xác định các bước tiếp theo
51+
- **Human intervention**: Nhận input từ người dùng
52+
53+
> 💡 **Thông tin:** Một số node cần thiết cho toàn bộ workflow như START và END đã có sẵn trong LangGraph.
54+
55+
## 3. Edges (Cạnh)
56+
57+
**Edges** kết nối các node và xác định các đường đi có thể trong đồ thị:
58+
59+
```python
60+
import random
61+
from typing import Literal
62+
63+
def decide_mood(state) -> Literal["node_2", "node_3"]:
64+
65+
# Thông thường, ta sẽ sử dụng state để quyết định node tiếp theo
66+
user_input = state['graph_state']
67+
68+
# Ở đây, ta chia tỷ lệ 50/50 giữa node 2 và 3
69+
if random.random() < 0.5:
70+
71+
# 50% trường hợp trả về Node 2
72+
return "node_2"
73+
74+
# 50% trường hợp trả về Node 3
75+
return "node_3"
76+
```
77+
78+
Edges có thể là:
79+
- **Direct**: Luôn đi từ node A đến node B
80+
- **Conditional**: Chọn node tiếp theo dựa trên state hiện tại
81+
82+
## 4. StateGraph (Đồ thị trạng thái)
83+
84+
**StateGraph** là container chứa toàn bộ workflow của Agent:
85+
86+
```python
87+
from IPython.display import Image, display
88+
from langgraph.graph import StateGraph, START, END
89+
90+
# Xây dựng đồ thị
91+
builder = StateGraph(State)
92+
builder.add_node("node_1", node_1)
93+
builder.add_node("node_2", node_2)
94+
builder.add_node("node_3", node_3)
95+
96+
# Logic
97+
builder.add_edge(START, "node_1")
98+
builder.add_conditional_edges("node_1", decide_mood)
99+
builder.add_edge("node_2", END)
100+
builder.add_edge("node_3", END)
101+
102+
# Tổng hợp
103+
graph = builder.compile()
104+
```
105+
106+
Có thể visualize đồ thị này!
107+
```python
108+
# Hiển thị
109+
display(Image(graph.get_graph().draw_mermaid_png()))
110+
```
111+
<img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/LangGraph/basic_graph.jpeg" alt="Graph Visualization"/>
112+
113+
Nhưng quan trọng nhất là cách invoke:
114+
```python
115+
graph.invoke({"graph_state" : "Hi, this is Lance."})
116+
```
117+
output :
118+
```
119+
---Node 1---
120+
---Node 3---
121+
{'graph_state': 'Hi, this is Lance. I am sad!'}
122+
```
123+
124+
## Bước tiếp theo là gì?
125+
126+
Trong phần tiếp theo, chúng ta sẽ áp dụng các khái niệm này vào thực tế bằng cách xây dựng đồ thị đầu tiên. Đồ thị này cho phép Alfred tiếp nhận email, phân loại chúng và soạn câu trả lời sơ bộ nếu chúng là email thật.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Kết luận
2+
3+
Chúc mừng bạn đã hoàn thành mô-đun LangGraph của Chương 2! 🥳
4+
5+
Bạn đã nắm vững kiến thức nền tảng về xây dựng workflow có cấu trúc với LangGraph mà bạn có thể triển khai vào môi trường thực tế.
6+
7+
Mô-đun này mới chỉ là khởi đầu hành trình LangGraph của bạn. Để khám phá chuyên sâu hơn, chúng mình gợi ý:
8+
9+
- Tham khảo [tài liệu chính thức của LangGraph](https://github.com/langchain-ai/langgraph)
10+
- Tham gia [Khóa học Giới thiệu về LangGraph](https://academy.langchain.com/courses/intro-to-langgraph) từ học viện LangChain
11+
- Hãy tự xây dựng một thứ gì đó!
12+
13+
Trong Chương tiếp theo, bạn sẽ khám phá các use case thực tế. Đã đến lúc rời lý thuyết để bước vào thực chiến!
14+
15+
Chúng mình rất trân trọng **ý kiến đóng góp và đề xuất cải thiện** của bạn. Nếu có phản hồi, vui lòng 👉 [điền vào form này](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog)
16+
17+
### Hãy tiếp tục học hỏi và luôn tỏa sáng! 🤗
18+
19+
Kính gửi Quý Ngài/Quý Bà! 🎩🦇
20+
21+
-Alfred-

0 commit comments

Comments
 (0)