LangChain: Blog
85

Thủ thuật

Cube kết hợp LangChain: Xây dựng trải nghiệm dữ liệu AI thông qua lớp ngữ nghĩa

(giờ Việt Nam)

Tóm tắt AI

Cube và LangChain hợp tác sử dụng lớp ngữ nghĩa để cung cấp ngữ cảnh dữ liệu có cấu trúc cho LLM, giúp giảm thiểu hiện tượng ảo giác và hỗ trợ truy vấn dữ liệu bằng ngôn ngữ tự nhiên.

Bản dịch AI

Cube x LangChain: Building AI experiences with LLMs and the semantic layer

Lời người biên tập: Bài viết này được thực hiện với sự hợp tác của đội ngũ Cube. Lớp ngữ nghĩa (semantic layer) đóng vai trò then chốt trong việc đảm bảo tính chính xác và khả năng dự đoán khi xây dựng các ứng dụng LLM chuyển đổi văn bản thành SQL (text-to-sql). Việc tích hợp với LangChain giúp các nhà phát triển bắt đầu xây dựng ứng dụng AI trên nền tảng lớp ngữ nghĩa của Cube trở nên vô cùng dễ dàng.

Đã nhiều năm nay, chúng ta đang sống trong một thế giới dựa trên dữ liệu, nơi việc truy cập và rút ra thông tin chi tiết từ dữ liệu một cách hiệu quả là điều tối quan trọng. Năm nay, chúng ta chứng kiến sự bùng nổ về mối quan tâm đối với trí tuệ nhân tạo (AI) và đặc biệt là các mô hình ngôn ngữ lớn (LLM), được thúc đẩy bởi những bước tiến mới nhất trong công nghệ và những triển vọng rộng lớn đang mở ra.

LangChain, một bộ công cụ mở rộng để làm việc với LLM, đã trở thành một trong những nền tảng quan trọng nhất cho các nhà phát triển ứng dụng AI. Tại Cube, chúng tôi hiểu rằng lớp ngữ nghĩa của mình cũng là một thành phần quan trọng cho các ứng dụng AI, bởi Cube không chỉ tập trung hóa các phép tính chỉ số mà còn đóng vai trò như một liều thuốc giải cho tình trạng "ảo giác" của AI.

Trình tải tài liệu ngữ nghĩa (Semantic document loader)

Hôm nay, chúng tôi rất vui mừng được giới thiệu sự tích hợp của Cube với LangChain. Đây là một trình tải tài liệu (document loader) được thiết kế để nạp dữ liệu vào cơ sở dữ liệu vector với các embedding được trích xuất từ mô hình dữ liệu của lớp ngữ nghĩa. Sau đó, cơ sở dữ liệu vector này có thể được truy vấn để tìm ra các thực thể phù hợp nhất trong lớp ngữ nghĩa. Điều này rất hữu ích để khớp các đầu vào tự do, ví dụ như các truy vấn bằng ngôn ngữ tự nhiên, với các view và thành phần của chúng trong mô hình dữ liệu.

вуьщ

Chúng tôi cũng cung cấp một ứng dụng demo dựa trên chat (xem mã nguồn trên GitHub) cùng các ví dụ về prompt OpenAI để xây dựng truy vấn cho SQL API của Cube. Nếu bạn muốn tạo một giao diện hội thoại hỗ trợ bởi AI cho lớp ngữ nghĩa, hoạt động tương tự như Delphi, thì các prompt này có thể là một điểm khởi đầu tốt.

Phân tích ứng dụng demo dựa trên chat

Dưới đây là những gì bạn có thể xây dựng với trình tải tài liệu hoàn toàn mới dành cho LangChain, một cơ sở dữ liệu vector, một LLM của OpenAI và Streamlit cho giao diện người dùng:

0:00/1×

Hãy xem cách các bảng, cột, phép tổng hợp và bộ lọc trong truy vấn SQL do LLM tạo ra khớp với đầu vào của con người như thế nào. Hãy kiểm tra tệp README trên GitHub để biết hướng dẫn chạy ứng dụng demo này trên máy của bạn hoặc lướt qua các điểm nổi bật dưới đây.

Nạp metadata từ Cube và đưa vào cơ sở dữ liệu vector. Hàm ingest_cube_meta trong tệp ingest.py sẽ tải mô hình dữ liệu từ Cube bằng cách sử dụng CubeSemanticLoader hoàn toàn mới. Lưu ý rằng chỉ các view mới được tải vì chúng được coi là "giao diện" (facade) của mô hình dữ liệu. Các tài liệu được tải sau đó sẽ được chuyển thành embedding và lưu vào kho vector FAISS, rồi được lưu trữ (pickle) để sử dụng sau này.

def ingest_cube_meta:... loader = CubeSemanticLoader(api_url, api_token) documents = loader.load... with open("vectorstore.pkl", "wb") as f: pickle.dump(vectorstore, f)

Thiết lập LLM. Trong tệp main.py, các phụ thuộc được nhập vào và các biến môi trường được tải. Mô hình OpenAI (llm) được khởi tạo với khóa API đã cung cấp.

import...load_dotenv llm = OpenAI( temperature=0, openai_api_key=os.environ.get("OPENAI_API_KEY"), verbose=True)

Đầu vào người dùng và khởi tạo kho vector. Trong cùng tệp đó, các thành phần cơ bản của Streamlit được sử dụng để nhận đầu vào từ người dùng:

question = st.text_input( "Your question: ", placeholder="Ask me anything...", key="input")if st.button("Submit", type="primary"): check_input(question) vectorstore = init_vectorstore

Truy vấn kho vector. Kho vector được truy vấn để tìm các tài liệu tương tự với câu hỏi của người dùng. Tên bảng của kết quả khớp nhất sẽ được trích xuất và coi là dự đoán tốt nhất để thử tạo một prompt sử dụng các cột từ vectorstore:

docs = vectorstore.similarity_search(question) # lấy tài liệu đầu tiên làm dự đoán tốt nhất table_name = docs[0].metadata["table_name"] # Các cột columns_question = "All available columns" column_docs = vectorstore.similarity_search( columns_question, filter=dict(table_name=table_name), k=15)

# Các cột columns_question = "All available columns" column_docs = vectorstore.similarity_search( columns_question, filter=dict(table_name=table_name), k=15)

Xây dựng prompt và gọi OpenAI. Mô hình ngôn ngữ lớn OpenAI được gọi với prompt đã xây dựng, và phản hồi được phân tích cú pháp để trích xuất truy vấn SQL cùng các bộ lọc liên quan:

# Xây dựng prompt prompt = CUBE_SQL_API_PROMPT.format( input_question=question, table_info=table_name, columns_info=columns, top_k=1000, no_answer_text=_NO_ANSWER_TEXT,)llm_answer = llm(prompt + PROMPT_POSTFIX)

Tổng kết

Sự tích hợp của Cube với LangChain cung cấp một giao diện liền mạch để truy vấn dữ liệu bằng ngôn ngữ tự nhiên. Bằng cách trừu tượng hóa các phức tạp của SQL và tận dụng sức mạnh của LLM, nó mang đến cho những người xây dựng ứng dụng AI một phương pháp tiếp cận dữ liệu thân thiện với người dùng và giảm thiểu sai sót.

LangChainCubeLLMDữ liệuAI
Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ LangChain: Blog. Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.