6 điểm bởi sungmin330 2025-05-08 | 4 bình luận | Chia sẻ qua WhatsApp

TL;DR

Agent chat LLM được cá nhân hóa. Hệ thống sẽ thu thập thông tin người dùng một cách động để cung cấp câu trả lời được cá nhân hóa về sau.

Q) Tôi thích khoai tây

A) Vậy à

Q) Tôi thích gì?

A) Bạn thích khoai tây~

Link demo: https://delosplatform.com
GitHub: https://github.com/sungminna/mcp_poc

ps) delos-lucia là phiên bản đóng gói và cải tiến các chức năng của dịch vụ velt. delos-lucia hỗ trợ thời gian phản hồi ngắn, streaming LLM và logic bất đồng bộ được cải thiện.

Có thể dùng ngay sau khi đăng ký (đăng nhập). Rất mong nhận được sự quan tâm và phản hồi của mọi người...

Lucia & Velt: Agent chat LLM được cá nhân hóa

Gần đây, ngày càng có nhiều nỗ lực tận dụng LLM để cấu trúc hóa thông tin thu được từ tương tác với người dùng, rồi tái sử dụng thông tin đó trong câu trả lời của LLM nhằm mang lại trải nghiệm cá nhân hóa. Lucia và Velt là các dự án mã nguồn mở nhằm đạt được mục tiêu này. Lucia là thư viện Python mô-đun hóa các chức năng AI cốt lõi để hiện thực hóa LLM cá nhân hóa, còn Velt là hệ thống chat RAG cá nhân hóa được xây dựng dựa trên các khái niệm của Lucia.

Lucia: mô-đun LLM cá nhân hóa

delos-lucia là thư viện Python được đóng gói lại từ các chức năng AI cốt lõi vốn ban đầu được phát triển cho dịch vụ Velt. Do được tổ chức theo mô-đun, thư viện này giúp dễ dàng chọn lọc các chức năng cần dùng hoặc tùy biến theo nhu cầu.

Tính năng chính:

  • Trích xuất thông tin cá nhân và từ khóa: Sử dụng LLM (như các mô hình OpenAI) để nhận diện và trích xuất thông tin cá nhân như sở thích, trạng thái của người dùng cùng các từ khóa cốt lõi từ văn bản.
  • Tạo embedding: Sử dụng mô hình embedding của OpenAI để tạo biểu diễn vector (embedding) cho văn bản. Embedding được tạo ra có thể được cache qua Redis để giảm chi phí gọi API lặp lại.
  • Lưu trữ dữ liệu: Thông tin có cấu trúc đã trích xuất (thông tin cá nhân, quan hệ, v.v.) được lưu vào cơ sở dữ liệu đồ thị (Neo4j hoặc Clickhouse), còn vector embedding được lưu vào vector store (Milvus) để hỗ trợ truy xuất hiệu quả.
  • Cung cấp pipeline: Cung cấp các pipeline dựng sẵn cho các tác vụ phổ biến như KnowledgePipeline (workflow từ trích xuất thông tin, tạo embedding đến lưu trữ) và SearchPipeline (workflow tìm kiếm thông tin dựa trên từ khóa và tăng cường ngữ cảnh), giúp nâng cao tiện lợi cho việc phát triển.
  • Tùy biến: Cung cấp kiến trúc dạng plug-in cho phép người dùng thay thế các thành phần như bộ trích xuất thông tin/từ khóa (Extractor), client embedding (EmbeddingClient), kho lưu trữ thông tin (InfoStore), vector store (VectorStore) bằng các component do chính họ triển khai.

Lucia trừu tượng hóa và cung cấp logic backend cốt lõi cần thiết cho việc xây dựng ứng dụng AI cá nhân hóa (trích xuất thông tin, vector hóa, lưu trữ, tìm kiếm), giúp nhà phát triển có thể tập trung hơn vào logic ứng dụng. (Giấy phép: Apache-2.0)

GitHub Repository: https://github.com/sungminna/mcp_poc/tree/main/lucia

Velt: PoC chatbot RAG cá nhân hóa tận dụng component/khái niệm của Lucia

Velt là ứng dụng backend dựa trên FastAPI được xây dựng bằng cách tận dụng các khái niệm do thư viện Lucia cung cấp. Dự án tích hợp ReAct agent (LangGraph), đồ thị tri thức Neo4j, vector store Milvus, PostgreSQL và Redis, với mục tiêu mang đến trải nghiệm chatbot RAG (Retrieval-Augmented Generation) được cá nhân hóa cho người dùng. Thông qua đối thoại với người dùng, hệ thống động xây dựng thông tin cá nhân hóa vào đồ thị tri thức và sử dụng chúng để tạo ra các câu trả lời có mức độ liên quan cao hơn.

Cách hoạt động cốt lõi:

  1. Xây dựng đồ thị tri thức:
    • Từ cuộc trò chuyện với người dùng ("Tôi thích hamburger"), hệ thống dùng LLM để trích xuất quan hệ ((người dùng) --thích--> (hamburger)).
    • Thông tin đã trích xuất được lưu dưới dạng node và edge trong graph DB Neo4j. Khi đó, các quan hệ khái niệm cấp trên như (hamburger) --bao gồm--> (đồ ăn) cũng được lưu cùng để hỗ trợ suy luận và tìm kiếm linh hoạt hơn. ("Tôi thích món ăn nào?"), (trong lucia sử dụng cách hiệu quả hơn một chút)
  2. Tạo câu trả lời dựa trên RAG:
    • Từ câu hỏi của người dùng ("Tôi có thích mỹ thuật không?"), hệ thống dùng LLM để trích xuất từ khóa ("mỹ thuật", "thích").
    • Dùng các từ khóa đã trích xuất để tìm kiếm vector trong Milvus nhằm tìm ra thông tin có độ liên quan cao.
    • Đồng thời, hệ thống duyệt trong Neo4j các node và quan hệ được kết nối với người dùng và từ khóa tương ứng (quan hệ trực tiếp, quan hệ 1-2 hop, bao gồm cả khái niệm con).
    • Thông tin truy xuất từ Milvus và Neo4j được kết hợp thành ngữ cảnh để tăng cường (Augmented) prompt cho ReAct agent dựa trên LangGraph. (+ lịch sử hội thoại của phiên)
    • Dựa trên ngữ cảnh đã được tăng cường này, agent tạo ra câu trả lời cá nhân hóa cho câu hỏi của người dùng.

Tech stack:

  • Backend: FastAPI, Uvicorn, Python 3.13+
  • AI/LLM: LangChain, LangGraph, langchain-openai, OpenAI Embeddings
  • Cơ sở dữ liệu: Neo4j (Graph), Milvus (Vector), PostgreSQL (User/Chat Data), Redis (Cache)
  • Khác: SQLAlchemy (Async), JWT (Auth), slowapi (Rate Limiting), Poetry, Docker
  • Frontend: SvelteKit (thư mục velt/ riêng)

Kết quả chính và các điểm cần cân nhắc:

  • Xác nhận tính khả thi: Đã xác nhận khả năng xây dựng đồ thị tri thức cá nhân hóa một cách động bằng cách kết hợp LLM với graph/vector DB, và khả năng hiện thực hóa dịch vụ LLM siêu cá nhân hóa dựa trên đó.
  • Hiệu năng: Hiện quan sát thấy hiện tượng nghẽn cổ chai ở phần truy cập DB (query), cần được tối ưu hóa. Cũng cần kiểm chứng hiệu năng của Neo4j trong môi trường thời gian thực quy mô lớn. (đã giải quyết một phần trong lucia)
  • Chất lượng câu trả lời: Dù LLM trả lời dựa trên thông tin truy xuất được (ngữ cảnh), vẫn cần kiểm chứng và cải thiện thêm xem liệu hệ thống có luôn cung cấp câu trả lời tự nhiên và phù hợp nhất hay không. Đặc biệt, khi áp dụng RAG, cần xử lý xu hướng câu trả lời trở nên thiếu tự nhiên do phụ thuộc quá mức vào ngữ cảnh.
  • Prompt engineering: Đôi khi LLM không tuân theo instruction, nên cần cải thiện prompt và xem xét các vấn đề về hiệu năng mô hình.
  • Khả năng mở rộng: Có thể tăng tính linh hoạt bằng cách thay thế các truy vấn DB đang hardcode bằng Text-to-Cypher/SQL, v.v. Nếu không có nhu cầu phân tích quan hệ giữa người dùng với nhau, cũng có thể xem xét khả năng xây dựng dựa trên RDB. (trong lucia đã được cải tiến để có thể dùng Clickhouse)

GitHub Repository: https://github.com/sungminna/mcp_poc
Demo Service: https://delosplatform.com
Directory: https://my.surfit.io/w/528136765


Tóm tắt:

Lucia là thư viện Python mô-đun dành cho trích xuất thông tin cá nhân/từ khóa dựa trên LLM, embedding và lưu vào graph/vector DB. Velt là PoC dựa trên FastAPI, tận dụng các khái niệm của Lucia để xây dựng đồ thị tri thức động (Neo4j) từ hội thoại với người dùng và kết hợp tìm kiếm vector (Milvus) với RAG (LangGraph ReAct agent) nhằm cung cấp phản hồi chatbot được cá nhân hóa. Hai dự án cho thấy tiềm năng của việc xây dựng AI cá nhân hóa, nhưng vẫn còn các bài toán như tối ưu hiệu năng và cải thiện độ tự nhiên của câu trả lời.

4 bình luận

 
sungmin330 2025-05-11

Vì là LLM nên không phải lúc nào cũng hoạt động ổn định đâu (T_T)... Mong mọi người cứ thoải mái dùng nhiều nhé.
Mình viết ra các nguyên nhân gây ra vấn đề hiệu năng đến hiện tại, phòng khi có ai đó tò mò,,,

  • Mình đã viết prompt để trích xuất kw bằng tiếng Anh, nhưng đôi khi lại trích xuất bằng tiếng Hàn nên phát sinh hạn chế khi tìm kiếm
  • Có trường hợp không thể trích xuất được từ khóa phù hợp
  • Dù đang thực hiện tìm kiếm ngữ nghĩa bằng cách nhúng kw rồi đo độ tương đồng, nhưng hiệu năng vẫn chưa rõ ràng

ps) Hiệu năng của delos-lucia tốt hơn web PoC. Nếu chạy delos-lucia trên nền shell thì có lẽ bạn sẽ thấy kết quả tốt hơn một chút.

ps) Đến khi tự tay làm dịch vụ mới thấy cả QA lẫn việc đưa eval vào đều khó. Cứ nghĩ chỉ cần hiệu năng của LLM tốt là kiểu gì cũng giải quyết được, nhưng mình nhận ra ngoài mô hình ra còn có rất nhiều phần khác cần nhiều công sức hơn mình tưởng.

 
1206good 2025-05-08

Gần đây tôi đã thấy một dự án tương tự, khá thú vị.
Tôi sẽ thử một lần.

website : https://www.secondme.io/
Github repo : https://github.com/mindverse/Second-Me

 
sungmin330 2025-05-11

Ồ, đây là một dự án thú vị đấy!! Cảm ơn bạn

 
rlaehdus2003 2025-05-08

Có khi sẽ trở thành AI hiểu tôi còn hơn cả chính tôi..?