Xây dựng AI Research Agent thời gian thực: Hướng dẫn LangChain và Tavily API

AI tutorial - IT technology blog
AI tutorial - IT technology blog

Bối cảnh & Rào cản Kiến thức

Hầu hết chúng ta đều đã từng gặp phải rào cản ‘giới hạn kiến thức’ (knowledge cutoff) khi làm việc với các mô hình ngôn ngữ lớn (LLM). Thử hỏi một mô hình GPT-4 tiêu chuẩn về bản cập nhật framework vừa ra mắt thứ Ba tuần trước. Nó có khả năng sẽ đưa ra một lời nói dối đầy tự tin (ảo giác) hoặc xin lỗi vì dữ liệu huấn luyện chỉ dừng lại ở năm 2023. Đây là một nút thắt cổ chai lớn nếu bạn đang xây dựng các công cụ nghiên cứu kỹ thuật, phân tích thị trường hoặc giám sát bảo mật.

Để khắc phục điều này, chúng ta cần cung cấp cho AI một ‘đôi mắt’ để quan sát internet trực tiếp. Một **AI Research Agent** (Tác vụ nghiên cứu AI) không chỉ dừng lại ở việc trò chuyện cơ bản. Nó suy luận về nhiệm vụ, quyết định xem có cần dữ liệu mới hay không, kích hoạt công cụ tìm kiếm và tổng hợp câu trả lời cuối cùng. Nó hoạt động giống như một nghiên cứu viên sơ cấp hơn là một công cụ dự đoán văn bản đơn thuần.

Tại sao lại là Tavily? Các công cụ tìm kiếm tiêu chuẩn như Google hay Bing được xây dựng cho con người. Chúng trả về mớ hỗn độn mã HTML, quảng cáo và các nội dung rác tối ưu SEO. Ngược lại, Tavily được thiết kế dành riêng cho LLM. Nó làm sạch dữ liệu và trả về nội dung có cấu trúc mà các mô hình thực sự hiểu được. Trong môi trường production, phương pháp này giúp giảm lãng phí token khoảng 30-50% so với việc cào web (web scraping) thô. Tôi đã sử dụng thiết lập này để đối chiếu chéo các tài liệu kỹ thuật và kết quả luôn ổn định.

Đến cuối bài hướng dẫn này, bạn sẽ có một agent Python chức năng, biết nghiên cứu trước khi đưa ra câu trả lời.

Thiết lập Môi trường

Trước khi đi sâu vào logic, hãy chuẩn bị một không gian làm việc sạch sẽ. Python 3.9 trở lên là yêu cầu cơ bản ở đây.

Bắt đầu bằng cách tạo và kích hoạt môi trường ảo (virtual environment):

python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

Tiếp theo, cài đặt các thư viện phụ thuộc cốt lõi. Chúng ta sử dụng langchain để điều phối, langchain-openai cho bộ não, và tavily-python cho việc tìm kiếm. Thư viện python-dotenv sẽ xử lý các bí mật (secrets).

pip install langchain langchain-openai tavily-python python-dotenv langchain-community

Bạn sẽ cần hai API key: một từ **OpenAI** và một từ **Tavily**. Tavily cung cấp 1.000 lượt tìm kiếm miễn phí mỗi tháng cho các nhà phát triển, quá đủ để thử nghiệm. Lưu trữ chúng trong tệp .env ở thư mục gốc của bạn:

OPENAI_API_KEY=key_openai_cua_ban_tai_day
TAVILY_API_KEY=key_tavily_cua_ban_tai_day

Cấu hình Agent

Việc xây dựng một agent yêu cầu ba thành phần: **Tools** (công cụ tìm kiếm), **LLM** (bộ não), và **Agent Logic** (vòng lặp thực thi). Tôi ưu tiên một thiết lập dạng module để việc debug dễ dàng hơn.

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain import hub

load_dotenv()

# 1. Khởi tạo tìm kiếm (k=3 lấy 3 kết quả hàng đầu)
search_tool = TavilySearchResults(k=3)
tools = [search_tool]

# 2. Thiết lập LLM (GPT-4o được khuyến nghị cao để có độ chính xác suy luận tốt nhất)
llm = ChatOpenAI(model="gpt-4o", temperature=0)

# 3. Lấy Prompt Template
prompt = hub.pull("hwchase17/openai-functions-agent")

# 4. Xây dựng và Thực thi
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

Việc thiết lập temperature=0 là rất quan trọng. Chúng ta muốn có suy luận thực tế, nhất quán thay vì những ảo giác sáng tạo. Cờ verbose=True là người bạn đồng hành tốt nhất trong quá trình phát triển. Nó cho phép bạn theo dõi ‘độc thoại nội tâm’ của agent khi nó quyết định chạy các truy vấn tìm kiếm nào.

Hàm create_tool_calling_agent là tiêu chuẩn hiện đại cho việc tích hợp API. Nó ép mô hình phải xuất ra JSON có cấu trúc. Phương pháp này đáng tin cậy hơn nhiều so với việc phân tích cú pháp regex kiểu cũ được sử dụng trong các phiên bản LangChain trước đây.

Kiểm chứng & Giám sát

Việc kiểm chứng không chỉ nằm ở câu trả lời cuối cùng. Đó là việc đảm bảo agent thực sự trích dẫn nguồn một cách chính xác. Chạy một truy vấn thử nghiệm yêu cầu dữ liệu thời gian thực:

response = agent_executor.invoke({
    "input": "Phiên bản hiện tại của LangChain là gì, và có gì thay đổi trong bản phát hành mới nhất?"
})

print(response["output"])

Hãy mong đợi agent nhận ra dữ liệu nội bộ của nó đã cũ. Nó sẽ tạo ra một truy vấn Tavily, phân tích 3 kết quả hàng đầu và xây dựng một bản tóm tắt. Nếu agent thất bại, thường là do truy vấn tìm kiếm quá rộng. Bạn có thể cải thiện điều này bằng cách thêm các ràng buộc cụ thể vào system prompt của mình.

Mẹo cho Môi trường Production

Giám sát là yếu tố sống còn khi chuyển từ một script đơn giản sang ứng dụng thực tế. Agent có thể lặp lại nhiều lần, điều này có thể làm tiêu tốn credit OpenAI của bạn rất nhanh. Hãy chú ý ba khu vực sau:

  • Công tắc ngắt vòng lặp (Iteration Kill-Switches): Sử dụng max_iterations=5 trong AgentExecutor. Điều này ngăn agent lặp lại vô tận nếu nó đi vào ngõ cụt.
  • Liên kết nguồn (Source Links): Đảm bảo agent của bạn bao gồm các URL trong câu trả lời cuối cùng. Điều này cho phép người dùng kiểm tra thông tin thủ công nếu có điều gì đó trông khả nghi.
  • Kiểm soát nhiễu (Noise Control): Nếu agent bị nhầm lẫn, hãy giảm tham số k trong TavilySearchResults. Thường thì hai kết quả chất lượng cao sẽ tốt hơn mười kết quả nhiễu.

Cấu hình này cung cấp một nền tảng vững chắc cho các công cụ phức tạp hơn, chẳng hạn như trình viết bài kỹ thuật tự động hoặc nghiên cứu lỗ hổng bảo mật. Nó thu hẹp khoảng cách giữa kiến thức tĩnh và web trực tiếp.

Share: