Xây dựng Tool AI tự động viết bài chuẩn SEO (AI Writer)

AI Hunter

Member
Bạn đang xây dựng diễn đàn XenForo hoặc Blog cá nhân và đau đầu vì bí ý tưởng nội dung? Thuê cộng tác viên thì tốn kém, tự viết thì không có thời gian.

Xây dựng Tool AI tự động viết bài chuẩn SEO (AI Writer).jpg

Trong bài viết này, chúng ta sẽ xây dựng một "Cỗ máy viết bài" (AI SEO Writer) bằng Python. Công cụ này không chỉ viết bài dựa trên vốn kiến thức có sẵn (như ChatGPT), mà nó hoạt động như một phóng viên thực thụ:
  1. Nghiên cứu: Tự động Google để lấy thông tin mới nhất về chủ đề.
  2. Phân tích: Học hỏi từ Top 10 bài viết đứng đầu Google.
  3. Sáng tạo: Tổng hợp và viết một bài mới chuẩn SEO, độc nhất (unique).

1. Kiến trúc hệ thống (RAG Workflow)​


Chúng ta sẽ áp dụng mô hình **RAG (Retrieval-Augmented Generation)**. Thay vì hỏi thẳng AI, chúng ta cung cấp cho nó dữ liệu tìm kiếm để nó trả lời chính xác hơn.

Quy trình: Nhập từ khóa -> Tool tự Google -> Lấy dữ liệu Top đầu -> Lập dàn ý (Outline) -> Viết bài chi tiết -> Xuất file HTML.

2. Cài đặt thư viện​


Chúng ta cần các thư viện để kết nối OpenAI và tìm kiếm thông tin miễn phí.

Mã:
pip install openai duckduckgo-search requests

Lưu ý: Để bài viết chất lượng tốt nhất, khuyến khích dùng model gpt-4o (nếu có kinh phí) hoặc gpt-3.5-turbo (tiết kiệm hơn).

3. Triển khai Code (Full Source)​


Dưới đây là đoạn code Python hoàn chỉnh. Hãy điền API Key của OpenAI vào và chạy.

Python:
import os
from duckduckgo_search import DDGS
from openai import OpenAI
import re

# --- CẤU HÌNH ---
# Điền API Key của bạn vào đây (Nên dùng biến môi trường để bảo mật)
os.environ["OPENAI_API_KEY"] = "sk-YOUR_OPENAI_API_KEY_HERE"
client = OpenAI()
MODEL_NAME = "gpt-3.5-turbo" # Hoặc "gpt-4o" nếu bạn giàu :D

def search_google(keyword, max_results=5):
    """Module Nghiên cứu: Tìm thông tin từ DuckDuckGo"""
    print(f"🔍 Đang nghiên cứu về: '{keyword}'...")
    research_summary = []
    try:
        with DDGS() as ddgs:
            # Lấy text từ kết quả tìm kiếm
            results = ddgs.text(keyword, max_results=max_results)
            for i, r in enumerate(results):
                # Chỉ lấy tiêu đề và đoạn trích dẫn (snippet)
                research_summary.append(f"--- Source {i+1} ---\nTitle: {r['title']}\nSnippet: {r['body']}\n")
    except Exception as e:
        print(f"⚠️ Lỗi tìm kiếm: {e}")
       
    return "\n".join(research_summary)

def generate_outline(keyword, research_data):
    """Module Dàn ý: Lập cấu trúc bài viết"""
    print("📝 Đang lập dàn ý chuẩn SEO...")
   
    prompt = f"""
    Bạn là một chuyên gia SEO Content Marketing. Hãy lập một dàn ý chi tiết cho bài blog về chủ đề: "{keyword}".
   
    Hãy tham khảo thông tin nghiên cứu dưới đây để đảm bảo tính chính xác:
    {research_data}
   
    Yêu cầu dàn ý:
    1.  **Tiêu đề (H1):** Hấp dẫn, chứa từ khóa chính.
    2.  **Sapo (Mở bài):** Ngắn gọn, khơi gợi sự tò mò.
    3.  **Thân bài:** Chia thành các mục chính (H2), mục phụ (H3).
    4.  **Kết bài:** Tóm tắt và kêu gọi hành động (Call to Action).
   
    Chỉ trả về nội dung dàn ý dạng text, không cần giải thích thêm.
    """
   
    response = client.chat.completions.create(
        model=MODEL_NAME,
        messages=[{"role": "user", "content": prompt}],
        temperature=0.7
    )
    return response.choices[0].message.content

def write_full_article(keyword, outline):
    """Module Viết bài: Tạo nội dung chi tiết dạng HTML"""
    print("✍️ Đang viết bài chi tiết (Pha tách cà phê đợi nhé)...")
   
    prompt = f"""
    Hãy đóng vai một Copywriter chuyên nghiệp. Dựa trên dàn ý đã lập, hãy viết một bài blog hoàn chỉnh về "{keyword}".
   
    **Dàn ý:**
    {outline}
   
    **Yêu cầu quan trọng:**
    1.  **Định dạng HTML:** Sử dụng đúng các thẻ `<h1>`, `<h2>`, `<h3>`, `<p>`, `<ul>`/`<ol>` cho danh sách.
    2.  **Phong cách:** Tự nhiên, hướng tới người đọc, không máy móc.
    3.  **Tối ưu SEO:** In đậm (thẻ `<b>` hoặc `<strong>`) các từ khóa quan trọng một cách tự nhiên (mật độ khoảng 1-2%).
    4.  **Độ dài:** Khoảng 1500 - 2000 từ.
   
    **Output cuối cùng:** Chỉ trả về mã HTML của bài viết, bắt đầu từ thẻ `<h1>`.
    """
   
    response = client.chat.completions.create(
        model=MODEL_NAME,
        messages=[{"role": "user", "content": prompt}],
        temperature=0.7
    )
    return response.choices[0].message.content

def save_to_file(keyword, html_content):
    """Lưu kết quả ra file .html"""
    # Tạo tên file từ keyword (thay khoảng trắng bằng gạch dưới)
    safe_keyword = re.sub(r'[^\w\s]', '', keyword).strip().replace(' ', '_')
    filename = f"Bai_viet_{safe_keyword}.html"
   
    # Thêm một chút CSS cơ bản để dễ đọc khi mở trên trình duyệt
    full_html = f"""
    <!DOCTYPE html>
    <html>
    <head>
        <title>{keyword}</title>
        <style>
            body {{ font-family: sans-serif; line-height: 1.6; max-width: 800px; margin: 20px auto; padding: 0 20px; color: #333; }}
            h1 {{ color: #2c3e50; }} h2 {{ color: #e67e22; border-bottom: 2px solid #e67e22; padding-bottom: 10px; }}
            li {{ margin-bottom: 10px; }}
        </style>
    </head>
    <body>
        {html_content}
    </body>
    </html>
    """
   
    with open(filename, "w", encoding="utf-8") as f:
        f.write(full_html)
    print(f"\n✅ Đã viết xong! File được lưu tại: {filename}")
    print("👉 Bạn có thể mở file này bằng trình duyệt để xem hoặc copy code HTML vào trình soạn thảo.")

def main():
    print("=== TOOL AI SEO WRITER ===")
    keyword = input("Nhập chủ đề/từ khóa bạn muốn viết: ")
   
    if not keyword:
        print("❌ Bạn chưa nhập từ khóa!")
        return

    # 1. Nghiên cứu
    research_data = search_google(keyword)
    if not research_data:
        print("⚠️ Không tìm thấy thông tin nghiên cứu. AI sẽ viết dựa trên kiến thức có sẵn.")
   
    # 2. Lập dàn ý
    outline = generate_outline(keyword, research_data)
    # print(f"\n--- DÀN Ý PREVIEW ---\n{outline}\n---------------------\n") # Bỏ comment nếu muốn xem trước dàn ý
   
    # 3. Viết bài
    html_article = write_full_article(keyword, outline)
   
    # 4. Lưu file
    save_to_file(keyword, html_article)

if __name__ == "__main__":
    main()

4. Kết quả và Cách sử dụng​


Ví dụ thực tế: Tôi chạy tool và nhập từ khóa: "Kinh nghiệm du lịch Đà Lạt tháng 12".

Kết quả nhận được: Một file Bai_viet_Kinh_nghiem_du_lich_Da_Lat_thang_12.html. Khi mở ra, tôi có một bài viết hoàn chỉnh với:
  • Tiêu đề H1 giật tít: "Kinh nghiệm du lịch Đà Lạt tháng 12: Săn mây, ngắm hoa dã quỳ đẹp quên lối về"
  • Cấu trúc H2 chuẩn SEO: "Thời tiết Đà Lạt tháng 12 thế nào?", "Những địa điểm check-in không thể bỏ qua", "Món ngon Đà Lạt tháng 12"...
  • Nội dung: Được viết tự nhiên, có chèn các thông tin cập nhật (ví dụ: mùa hoa, lễ hội Festival hoa nếu có trong năm đó nhờ vào việc search Google).
  • Định dạng: Các từ khóa quan trọng như "du lịch Đà Lạt", "hoa dã quỳ" được in đậm.

5. Hướng phát triển nâng cao (Tự động hóa 100%)​


Bạn có thể đưa tool này lên một tầm cao mới:
  • Auto-Posting: Kết nối API của XenForo hoặc WordPress. Tool viết xong sẽ tự động đẩy bài lên web, lưu ở chế độ "Bản nháp" (Draft) để bạn duyệt.
  • Tạo ảnh minh họa (AI Image): Kết hợp thêm DALL-E 3 hoặc Midjourney API. Dựa trên tiêu đề H2, tool sẽ tự tạo ảnh minh họa và chèn vào bài viết.
  • Chạy định kỳ (Cronjob): Lập lịch cho tool mỗi ngày tự chọn 1 từ khóa trong danh sách và viết bài. Bạn đi ngủ, tool vẫn làm việc.

Công cụ này chính là chìa khóa để bạn xây dựng một đế chế nội dung số (Content Farm) một cách hiệu quả và tiết kiệm nhất!
 
Back
Top