Giới thiệu
Trí tuệ nhân tạo (AI) đang phát triển nhanh chóng và làm thay đổi nhiều ngành công nghiệp. Ban đầu, các tác nhân LLM chỉ có thể cung cấp cho chúng ta những thông tin dựa trên dữ liệu huấn luyện của chúng, điều này rất hạn chế và ngăn cản việc sử dụng AI để có được những thông tin thời gian thực và sử dụng hiệu quả trong bối cảnh doanh nghiệp.
Sự ra đời của MCP (Model Context Protocol) đã trở thành một bước ngoặt trong lĩnh vực này, cho phép các tác nhân AI có thể truy cập thông tin thời gian thực và dữ liệu doanh nghiệp, mở ra một phạm vi mới cho việc sử dụng các tác nhân AI và thực hiện các trường hợp sử dụng mạnh mẽ.
Trong bài viết này, tôi muốn chia sẻ những kiến thức của mình về MCP Server và hướng dẫn một dự án mẫu trong đó tôi lấy dữ liệu máy móc từ nhà máy được lưu trữ trong cơ sở dữ liệu PostgreSQL bằng cách sử dụng MCP Server, và tác nhân AI sẽ gọi các công cụ được cung cấp bởi MCP server để lấy dữ liệu máy móc dựa trên đầu vào của người dùng và cung cấp cho người dùng một phản hồi có cấu trúc.
Mã nguồn đầy đủ cho dự án này có thể được tìm thấy tại [Link].
Trước khi đi vào chi tiết của việc triển khai dự án, hãy cùng tìm hiểu MCP là gì, lợi ích của việc sử dụng nó và cách mà nó mở khóa những khả năng mới cho các tác nhân AI.
MCP Server
MCP (Model Context Protocol) được giới thiệu bởi Anthropic vào tháng 11 năm 2024, cung cấp một cách chuẩn hóa để các ứng dụng AI kết nối với các hệ thống và dữ liệu bên ngoài. Với MCP, các LLM không còn bị giới hạn bởi dữ liệu huấn luyện tĩnh, mà giờ đây chúng có thể truy cập thông tin thời gian thực và hệ thống doanh nghiệp một cách an toàn.
MCP Server cung cấp 3 Primitives:
- Công cụ (Tools): Các hàm thực thi mà các ứng dụng AI có thể gọi (ví dụ: gọi API, truy vấn cơ sở dữ liệu)
- Tài nguyên (Resources): Các nguồn dữ liệu cung cấp ngữ cảnh (ví dụ: nội dung tệp, bản ghi cơ sở dữ liệu, phản hồi API)
- Lời nhắc (Prompts): Các mẫu có cấu trúc giúp hướng dẫn các LLM (ví dụ: lời nhắc hệ thống, ví dụ few-shot)
Lợi ích của việc sử dụng MCP Server trong bối cảnh doanh nghiệp
- Truy cập bảo mật: Truy cập dữ liệu một cách an toàn chỉ dành cho các chương trình được ủy quyền.
- Truy cập hạn chế: Kiểm soát tinh vi đối với dữ liệu mà các tác nhân AI sử dụng.
- Tích hợp tiêu chuẩn: Thay vì xây dựng các kết nối tùy chỉnh cho mỗi tác nhân AI, MCP cung cấp một giao thức chung để kết nối với cơ sở dữ liệu, API và công cụ nội bộ.
- Khả năng kiểm toán & Tuân thủ: Mỗi cuộc gọi công cụ và yêu cầu cơ sở dữ liệu của tác nhân AI có thể được ghi lại, điều này giúp đáp ứng yêu cầu tuân thủ và theo dõi hành vi của AI.
Kiến trúc Dự án
Trong dự án này, tôi đã thiết lập một MCP Server mà cung cấp dữ liệu nhà máy được lưu trữ trong PostgreSQL dưới dạng công cụ. Ứng dụng chat-client giao tiếp với MCP Server bằng các cuộc gọi HTTP có thể stream. Trong triển khai này, tôi đã khởi tạo cơ sở dữ liệu PostgreSQL bằng một bộ dữ liệu Dự báo Năng lượng Công nghiệp mẫu từ Kaggle. Bộ dữ liệu có thể tải xuống tại [Link].
- MCP Server: Cung cấp các công cụ mà tác nhân AI gọi để lấy dữ liệu máy móc được lưu trữ trong cơ sở dữ liệu.
- PostgreSQL: Lưu trữ bộ dữ liệu đã được khởi tạo từ Kaggle.
- Ollama: LLM cục bộ (llama3.1)
- Chat Client: Một ứng dụng express tương tác với MCP server và LLM để nhận phản hồi cho yêu cầu của người dùng.
Thiết lập
-
Khởi động các dịch vụ
bashdocker compose up -d -
Kéo mô hình llm cho llama
bashdocker exec -it ollama ollama pull llama3.1
Logic Ứng dụng chính
MCP Server
Trong dự án này, MCP Server được xây dựng như một ứng dụng express mà cung cấp các công cụ mà các tác nhân AI có thể sử dụng để lấy dữ liệu theo yêu cầu.
Tôi đã tạo một hàm registerTools để đăng ký tất cả các công cụ có sẵn do MCP server cung cấp trong tools.ts (mcp-server/src/modules/tools.ts). Hiện tại, tôi chỉ có một công cụ get-machine-record được sử dụng để lấy bản ghi mới nhất của một machineId nhất định từ cơ sở dữ liệu postgres.
Mỗi công cụ được định nghĩa với các thành phần sau:
- Tên: nhận diện cho công cụ (ví dụ: "get-machine-record")
- Sơ đồ đầu vào: Sơ đồ JSON mô tả các tham số yêu cầu (ví dụ: { "device": "string" })
- Callback: hàm chứa logic (ví dụ: truy vấn SQL).
Ví dụ:
javascript
server.tool(
"get-machine-record",
"Lấy bản ghi mới nhất cho một máy",
{
machineId: z.string(),
},
async ({ machineId }) => {
// Lấy dữ liệu từ PostgreSQL
console.log(`Đang lấy bản ghi cho máy ${machineId}`);
const machineRecord = await getLatestMachineRecord(machineId);
if (machineRecord) {
return {
content: [{ type: "text", text: JSON.stringify(machineRecord) }],
};
} else {
return {
content: [{ type: "text", text: "[]" }],
};
}
}
);
Chat Client
Chat client cũng là một ứng dụng express mà cung cấp 2 API.
1. Truy vấn trực tiếp MCP
http://localhost:4001/machines/${machineID} → Lấy dữ liệu máy thô của machineID từ MCP server bằng cách gọi trực tiếp công cụ get-machine-record.
2. Truy vấn hỗ trợ AI
http://localhost:4001/chat → API này cung cấp phản hồi được tạo ra bởi AI cho các chi tiết yêu cầu của một máy. Logic chính được triển khai trong chat.service.ts (chat-client/src/services/chat.services.ts).
Quy trình làm việc:
- Tin nhắn của người dùng được chuyển đổi thành một lời nhắc và gửi đến Ollama (LLM cục bộ).
- Nếu LLM quyết định cần dữ liệu bên ngoài, nó sẽ gọi công cụ được cung cấp bởi MCP server.
- Công cụ này lấy dữ liệu máy móc từ PostgreSQL và cung cấp lại cho chat client.
- Kết quả sau đó được trả lại cho LLM.
- LLM tạo ra một câu trả lời tinh chỉnh, dễ đọc cho người dùng.
Các bước tiếp theo 🚀
Trong phiên bản tiếp theo của dự án này, tôi dự định thực hiện các tính năng sau:
1. Tích hợp dữ liệu trực tiếp: Nhập dữ liệu telemetry nhà máy thời gian thực vào PostgreSQL, để tác nhân AI làm việc với dữ liệu mới nhất.
2. Thêm xác thực cho MCP Server: Hạn chế truy cập chỉ dành cho các ứng dụng và người dùng được ủy quyền.
3. Mở rộng bộ công cụ: Tạo thêm các công cụ mới.
4. Hỗ trợ nhiều MCP Servers: Cho phép client kết nối và tổng hợp phản hồi từ các MCP servers khác nhau.