Nhảy đến nội dung chính

Thực hành Xây dựng AI Agent “Sales Manager” với Guardrails

Mục tiêu:

  • Tạo một agent gửi email chào hàng tự động.

  • Ngăn chặn đầu vào chứa thông tin nhạy cảm như tên người thật (input guardrail).

  • Đảm bảo đầu ra không chứa cụm từ lỗi thời (output guardrail).

I. Cài đặt Môi trường

pip install langchain langchain-core openai guardrails-ai

II. Cấu hình Guardrails

a. Input Guardrail – Kiểm tra Tên Riêng

Tạo file input_guardrail.xml:

<guardrail>
  <input>
    <validation name="no_personal_name" on_fail="exception">
      <regex pattern="\b(Alice|Bob|Charlie|David)\b" match="false"/>
    </validation>
  </input>
</guardrail>

Regex ở đây sẽ từ chối đầu vào có chứa các tên người thường gặp.

b. Output Guardrail – Chặn Từ Lỗi Thời

Tạo file output_guardrail.xml:

<guardrail>
  <output>
    <validation name="no_copyright" on_fail="exception">
      <regex pattern="copyright 2023" match="false"/>
    </validation>
  </output>
</guardrail>

III. Code Agent “Sales Manager”

Tạo file sales_manager.py:

from guardrails import Guard
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage

# Load Guardrails
input_guard = Guard.from_rail("input_guardrail.xml")
output_guard = Guard.from_rail("output_guardrail.xml")

# Model
llm = ChatOpenAI(model="gpt-3.5-turbo")

def run_sales_email(prompt):
    # Kiểm tra input
    input_guard.validate(prompt)

    # Sinh email
    messages = [HumanMessage(content=prompt)]
    response = llm(messages).content

    # Kiểm tra output
    output_guard.validate(response)

    return response

# TEST 1 – Gây lỗi (Tên người thật)
try:
    print("▶ Test 1 – Có tên thật")
    prompt = "Viết email chào hàng gửi CEO từ Alice"
    print(run_sales_email(prompt))
except Exception as e:
    print("⛔ Guardrail kích hoạt:", e)

# TEST 2 – Thành công
try:
    print("\n▶ Test 2 – Không có PII")
    prompt = "Viết email chào hàng gửi CEO từ Trưởng phòng Kinh doanh"
    print(run_sales_email(prompt))
except Exception as e:
    print("⛔ Guardrail kích hoạt:", e)

IV. Kết quả mong đợi

  • Test 1 sẽ bị từ chối, vì có tên thật “Alice” → input guardrail phát hiện.

  • Test 2 sẽ thành công, tạo ra email phù hợp → output guardrail không bị kích hoạt.

V. Mở rộng

  • Thêm guardrail kiểm tra số điện thoại, email (\d{10,11} hoặc [a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+).

  • Dùng structured output (ví dụ: sinh ra JSON với trường: subject, body, signature).

  • Tích hợp vào ứng dụng web với form đầu vào.