Dự án AI Agent thông minh sử dụng RAG (Retrieval-Augmented Generation) để trả lời câu hỏi dựa trên dữ liệu riêng của bạn.
Dự án này xây dựng một AI Agent có khả năng:
- 🔍 Tìm kiếm thông tin trong tài liệu của bạn bằng kỹ thuật RAG
- 💬 Trả lời câu hỏi thông minh dựa trên ngữ cảnh
- 🛠️ Sử dụng nhiều công cụ (tools) để giải quyết vấn đề
- 📝 Tìm kiếm pattern trong file với regex
- agent_graph.py: Agent sử dụng OllamaLLM với LangGraph ReActAgent
- agent_rag.py: Phiên bản debug với ChatOllama và logging chi tiết
- rag_qa: Trả lời câu hỏi dựa trên kho tri thức (FAISS vectorstore)
- search_in_file: Tìm kiếm các dòng trong file chứa pattern (hỗ trợ regex)
- Python 3.8+
- Ollama đã được cài đặt và chạy
git clone <your-repo-url>
cd agent_ragpip install -r requirements.txt# Cài đặt model LLM (chọn 1 trong các model sau)
ollama pull qwen3:latest
# hoặc
ollama pull llama3.2:latest
# hoặc
ollama pull mistral:latest
# Cài đặt model embedding (chọn 1)
ollama pull nomic-embed-text
# hoặc
ollama pull mxbai-embed-largepython agent_graph.py --input du_lieu.txt --question "Trung ương làm gì?"python agent_graph.py --rebuild --input du_lieu.txt# Câu hỏi mặc định
python agent_graph.py
# Câu hỏi tùy chỉnh
python agent_graph.py --question "Đại hội 14 diễn ra khi nào?" --time
# Sử dụng agent với debug mode
python agent_rag.py --question "Tìm kiếm thông tin về Trung ương"python rag_langchain.py --input du_lieu.txt --question "Hội nghị Trung ương 12 bàn về gì?"| Tham số | Mặc định | Mô tả |
|---|---|---|
--input |
None | File hoặc thư mục .txt để xây index |
--index-path |
.faiss_index |
Thư mục lưu FAISS index |
--embedding-model |
nomic-embed-text |
Model embedding trong Ollama |
--llm-model |
qwen3:latest |
Model LLM trong Ollama |
--chunk-size |
800 | Kích thước mỗi chunk văn bản |
--chunk-overlap |
100 | Độ overlap giữa các chunk |
--top-k |
4 | Số đoạn văn bản lấy từ vectorstore |
--rebuild |
False | Xây lại index từ đầu |
--question, -q |
None | Câu hỏi cần trả lời |
--time |
False | Hiển thị thời gian thực thi |
Tương tự như trên, thêm:
| Tham số | Mặc định | Mô tả |
|---|---|---|
--encoding |
utf-8 |
Encoding khi đọc file |
agent_rag/
├── agent_graph.py # Agent chính với LangGraph
├── agent_rag.py # Agent debug mode
├── rag_langchain.py # RAG core module
├── search_in_file.py # Tool tìm kiếm trong file
├── test.py # File test
├── du_lieu.txt # Dữ liệu mẫu
├── .faiss_index/ # FAISS vector database (auto-generated)
├── requirements.txt # Dependencies
├── .gitignore # Git ignore rules
└── README.md # Tài liệu này
Cú pháp khi Agent gọi tool:
file=<path>; pattern=<text_or_regex>; ignore_case=true|false; max_results=<int>
Ví dụ:
file=du_lieu.txt; pattern=Trung ương; ignore_case=true; max_results=5
python agent_graph.py \
--input du_lieu.txt \
--question "Hội nghị Trung ương 12 bàn những vấn đề gì?" \
--timepython agent_graph.py \
--llm-model llama3.2:latest \
--embedding-model mxbai-embed-large \
--question "Ai là Tổng Bí thư?" \
--top-k 3# Bước 1: Thêm file .txt vào thư mục data/
mkdir data
cp your_new_data.txt data/
# Bước 2: Rebuild index với thư mục mới
python agent_graph.py \
--rebuild \
--input data/ \
--question "Câu hỏi về dữ liệu mới"Nếu tài liệu của bạn có đoạn văn dài, tăng chunk-size:
python agent_graph.py --chunk-size 1200 --chunk-overlap 200Để LLM có nhiều thông tin hơn:
python agent_graph.py --top-k 6# Kiểm tra Ollama đang chạy
ollama list
# Nếu không, khởi động Ollama
ollama serve# Liệt kê models đã cài
ollama list
# Pull model cần thiết
ollama pull qwen3:latest
ollama pull nomic-embed-textDự án đã có xử lý UTF-8 tự động. Nếu vẫn lỗi, chạy trong PowerShell:
$env:PYTHONIOENCODING="utf-8"
python agent_graph.py --question "..."| File | Mục đích | Khi nào dùng |
|---|---|---|
agent_graph.py |
Agent production | Sử dụng chính, ổn định |
agent_rag.py |
Agent debug | Debugging, xem chi tiết |
rag_langchain.py |
RAG thuần | Không cần agent, chỉ Q&A |
search_in_file.py |
Tool độc lập | Tìm kiếm file riêng lẻ |
Mọi đóng góp đều được hoan nghênh! Hãy:
- Fork dự án
- Tạo branch mới (
git checkout -b feature/AmazingFeature) - Commit thay đổi (
git commit -m 'Add some AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Mở Pull Request
Dự án này được phân phối dưới MIT License. Xem file LICENSE để biết thêm chi tiết.
- LangChain - Framework AI mạnh mẽ
- LangGraph - Xây dựng agent phức tạp
- Ollama - Chạy LLM local dễ dàng
- FAISS - Vector search nhanh
Nếu có câu hỏi hoặc góp ý, hãy mở issue trên GitHub!
Happy Coding! 🎉