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.