Skip to content

Commit 23cd6e0

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

File tree

10 files changed

+1126
-0
lines changed

10 files changed

+1126
-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: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# Sử dụng Agent trong LlamaIndex
2+
3+
Hãy nhớ Alfred, agent quản gia đáng tin cậy của chúng ta từ những bài trước chứ? Giờ đây anh ấy sắp được nâng cấp!
4+
Sau khi đã hiểu về các Tools có sẵn trong LlamaIndex, ta có thể trang bị thêm khả năng mới cho Alfred để phục vụ tốt hơn.
5+
6+
Nhưng trước khi tiếp tục, hãy cùng ôn lại cách hoạt động của một agent như Alfred.
7+
Từ Chương 1, ta đã học được:
8+
9+
> Agent là hệ thống sử dụng model AI để tương tác với môi trường nhằm đạt được mục tiêu do người dùng định nghĩa. Nó kết hợp khả năng lý luận, lập kế hoạch và thực thi hành động (thông qua các Tools bên ngoài) để hoàn thành nhiệm vụ.
10+
11+
LlamaIndex hỗ trợ **ba loại agent chính**:
12+
13+
![Agents](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/agents.png)
14+
15+
1. `Function Calling Agents` - Loại này làm việc với các model AI có thể gọi các function cụ thể
16+
2. `ReAct Agents` - Có thể hoạt động với bất kỳ AI nào có endpoint chat hoặc text để xử lý các tác vụ lý luận phức tạp
17+
3. `Advanced Custom Agents` - Sử dụng các phương pháp phức tạp hơn để xử lý các workflow phức tạp
18+
19+
<Tip>Tìm hiểu thêm về các agent nâng cao tại <a href="https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/agent/workflow/base_agent.py">BaseWorkflowAgent</a></Tip>
20+
21+
## Khởi tạo Agent
22+
23+
<Tip>
24+
Bạn có thể theo dõi code trong <a href="https://huggingface.co/agents-course/notebooks/blob/main/unit2/llama-index/agents.ipynb" target="_blank">notebook này</a> và chạy thử qua Google Colab.
25+
</Tip>
26+
27+
Để tạo agent, ta bắt đầu bằng cách cung cấp cho nó **một tập hợp các function/Tools xác định khả năng hoạt động**.
28+
Hãy xem cách tạo agent với một số Tools cơ bản. Tại thời điểm viết bài, agent sẽ tự động sử dụng API function calling (nếu có sẵn) hoặc vòng lặp ReAct agent tiêu chuẩn.
29+
30+
Các LLM hỗ trợ API tools/functions còn khá mới, nhưng chúng cung cấp cách mạnh mẽ để gọi Tools bằng cách tránh prompt cụ thể và cho phép LLM tạo lệnh gọi Tools dựa trên schema được cung cấp.
31+
32+
ReAct agents cũng giỏi xử lý các tác vụ lý luận phức tạp và có thể làm việc với bất kỳ LLM nào có khả năng chat hoặc hoàn thiện văn bản. Chúng chi tiết hơn và hiển thị lý luận đằng sau các hành động được thực hiện.
33+
34+
```python
35+
from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI
36+
from llama_index.core.agent.workflow import AgentWorkflow
37+
from llama_index.core.tools import FunctionTool
38+
39+
# định nghĩa một Tool mẫu - chú thích kiểu, tên function và docstring đều được đưa vào schema
40+
def multiply(a: int, b: int) -> int:
41+
"""Nhân hai số nguyên và trả về kết quả dạng số nguyên"""
42+
return a * b
43+
44+
# khởi tạo llm
45+
llm = HuggingFaceInferenceAPI(model_name="Qwen/Qwen2.5-Coder-32B-Instruct")
46+
47+
# khởi tạo agent
48+
agent = AgentWorkflow.from_tools_or_functions(
49+
[FunctionTool.from_defaults(multiply)],
50+
llm=llm
51+
)
52+
```
53+
54+
**Agent mặc định không lưu trữ trạng thái (stateless)**, việc ghi nhớ các tương tác trước được thực hiện thông qua object `Context`
55+
Điều này hữu ích nếu bạn muốn tạo agent cần ghi nhớ ngữ cảnh như chatbot duy trì ngữ cảnh qua nhiều tin nhắn hoặc trình quản lý tác vụ cần theo dõi tiến trình.
56+
57+
```python
58+
# không lưu trạng thái
59+
response = await agent.run("2 nhân 2 bằng mấy?")
60+
61+
# lưu trạng thái
62+
from llama_index.core.workflow import Context
63+
64+
ctx = Context(agent)
65+
66+
response = await agent.run("Tên tôi là Bob.", ctx=ctx)
67+
response = await agent.run("Tên tôi là gì nhỉ?", ctx=ctx)
68+
```
69+
70+
Bạn sẽ thấy agent trong `LlamaIndex` là async (bất đồng bộ) vì chúng sử dụng toán tử `await` của Python. Nếu bạn mới làm quen với async code hoặc cần ôn lại, hãy xem [hướng dẫn async xuất sắc này](https://docs.llamaindex.ai/en/stable/getting_started/async_python/).
71+
72+
Giờ ta đã nắm được kiến thức cơ bản, hãy cùng xem cách sử dụng các Tools phức tạp hơn trong agent.
73+
74+
## Tạo RAG Agent với QueryEngineTools
75+
76+
**Agentic RAG (Tìm kiếm và tạo ra câu trả lời mang tính tác nhân) là cách mạnh mẽ để sử dụng agent trả lời câu hỏi về dữ liệu.** Ta có thể cung cấp nhiều Tools cho Alfred để hỗ trợ trả lời câu hỏi.
77+
Thay vì tự động trả lời dựa trên tài liệu, Alfred có thể quyết định sử dụng bất kỳ Tool nào khác để đưa ra câu trả lời.
78+
79+
![Agentic RAG](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/agentic-rag.png)
80+
81+
Việc **biến `QueryEngine` thành một Tool** cho agent rất dễ dàng.
82+
Khi làm vậy, ta cần **định nghĩa tên và mô tả**. LLM sẽ sử dụng thông tin này để sử dụng Tool chính xác.
83+
Hãy xem cách tải `QueryEngineTool` từ `QueryEngine` đã tạo trong [phần components](components.mdx).
84+
85+
```python
86+
from llama_index.core.tools import QueryEngineTool
87+
88+
query_engine = index.as_query_engine(llm=llm, similarity_top_k=3) # như đã trình bày trong phần Components in LlamaIndex
89+
90+
query_engine_tool = QueryEngineTool.from_defaults(
91+
query_engine=query_engine,
92+
name="name",
93+
description="a specific description",
94+
return_direct=False,
95+
)
96+
query_engine_agent = AgentWorkflow.from_tools_or_functions(
97+
[query_engine_tool],
98+
llm=llm,
99+
system_prompt="Bạn là trợ lý hữu ích có quyền truy cập vào cơ sở dữ liệu mô tả nhân vật. "
100+
)
101+
```
102+
103+
## Tạo hệ thống đa agent
104+
105+
Lớp `AgentWorkflow` cũng hỗ trợ trực tiếp hệ thống đa agent. Bằng cách đặt tên và mô tả cho từng agent, hệ thống duy trì một speaker chính, mỗi agent có khả năng chuyển quyền điều khiển cho agent khác.
106+
107+
Bằng cách thu hẹp phạm vi của từng agent, ta có thể giúp tăng độ chính xác tổng thể khi phản hồi tin nhắn người dùng.
108+
109+
**Agent trong LlamaIndex cũng có thể được sử dụng trực tiếp như Tools** cho các agent khác, phục vụ các kịch bản tùy chỉnh phức tạp hơn.
110+
111+
```python
112+
from llama_index.core.agent.workflow import (
113+
AgentWorkflow,
114+
FunctionAgent,
115+
ReActAgent,
116+
)
117+
118+
# Định nghĩa một số Tools
119+
def add(a: int, b: int) -> int:
120+
"""Cộng hai số."""
121+
return a + b
122+
123+
124+
def subtract(a: int, b: int) -> int:
125+
"""Trừ hai số."""
126+
return a - b
127+
128+
129+
# Tạo cấu hình agent
130+
# LƯU Ý: ta có thể dùng FunctionAgent hoặc ReActAgent ở đây.
131+
# FunctionAgent hoạt động với các LLM có API gọi function.
132+
# ReActAgent hoạt động với mọi LLM.
133+
calculator_agent = ReActAgent(
134+
name="calculator",
135+
description="Thực hiện các phép toán cơ bản",
136+
system_prompt="Bạn là trợ lý máy tính. Hãy dùng Tools cho mọi phép toán.",
137+
tools=[add, subtract],
138+
llm=llm,
139+
)
140+
141+
query_agent = ReActAgent(
142+
name="info_lookup",
143+
description="Tra cứu thông tin về XYZ",
144+
system_prompt="Sử dụng Tool để truy vấn hệ thống RAG trả lời thông tin về XYZ",
145+
tools=[query_engine_tool],
146+
llm=llm
147+
)
148+
149+
# Tạo và chạy workflow
150+
agent = AgentWorkflow(
151+
agents=[calculator_agent, query_agent], root_agent="calculator"
152+
)
153+
154+
# Chạy hệ thống
155+
response = await agent.run(user_msg="5 cộng 3 bằng mấy?")
156+
```
157+
158+
<Tip>Chưa đủ kiến thức? Bạn có thể khám phá thêm về agent và Tools trong LlamaIndex qua <a href="https://docs.llamaindex.ai/en/stable/examples/agent/agent_workflow_basic/">Hướng dẫn cơ bản về AgentWorkflow</a> hoặc <a href="https://docs.llamaindex.ai/en/stable/understanding/agent/">Tài liệu học Agent</a>, nơi bạn có thể đọc thêm về streaming, tuần tự hóa context và human-in-the-loop!</Tip>
159+
160+
Giờ đây khi đã hiểu cơ bản về agent và Tools trong LlamaIndex, hãy cùng xem cách sử dụng LlamaIndex để **tạo các workflow có thể cấu hình và quản lý được!**

0 commit comments

Comments
 (0)