Truy xuất
Cách một lượt tìm kiếm kết hợp ý nghĩa, từ khoá và mã tài liệu nguyên văn thành một bảng xếp hạng, nằm trong quy tắc phạm vi hiển thị và trả về dưới dạng trích dẫn.
Truy xuất đọc kho theo ba cách — theo ý nghĩa, theo từ khoá và theo mã tài liệu nguyên văn — rồi hợp nhất thành một bảng xếp hạng. Phạm vi hiển thị được áp trước khi truy vấn chạy, và mỗi kết quả đến mô hình dưới dạng trích dẫnTrích dẫnCitationSố đánh dấu trong câu trả lời dẫn về đoạn nguồn. Nguồn được lưu cùng câu trả lời và vẫn mở được sau khi tài liệu thay đổi.Mở trong Thuật ngữ.
Quy tắc chính
- Ba nhánh, một bảng xếp hạng: ý nghĩa, từ khoá và mã tài liệu, hợp nhất theo thứ hạng nghịch đảo (reciprocal rank).
- Phạm vi hiển thị trước: các kho tri thức được tìm được xác định trước truy vấn; quy tắc chặn loại bỏ một kho trước khi chạy bất cứ gì.
- Mô hình không chỉ định được kho tri thức: lượt tìm suy ra chúng từ các ràng buộc của lượt.
- Giữ dấu thanh tiếng Việt —
đăngvàdanglà hai từ khác nhau. - Portal không bao giờ biến văn bản thành vector; máy chủ agent embedding câu truy vấn.
Một lượt tìm kiếm, từng bước
-
Runtime embedding câu truy vấn
Runtime của agent embedding câu truy vấn và giữ lại các từ.
-
Backend xác định được đọc gì
Runtime gửi embedding, các từ và các ràng buộc của lượt. Backend lấy các ràng buộc trừ đi mọi kho tri thức người gọi bị chặn.
-
Postgres chạy ba nhánh
Nhánh ý nghĩa, từ khoá và nguyên văn chạy trong Postgres của portal (pgvector), chỉ trả về các dòng thoả điều kiện phạm vi.
-
Hợp nhất kết quả
Backend hợp nhất các nhánh theo thứ hạng nghịch đảo và trả về kết quả kèm điểm hợp nhất.
-
Runtime gộp, cắt gọn và trích dẫn
Kết quả từ nhiều kho tri thức được gộp, cắt theo ngân sách ngữ cảnh, và đưa cho mô hình dưới dạng trích dẫn.
Ba nhánh
| Nhánh | Khớp với | Ghi chú |
|---|---|---|
| Ý nghĩa | Embedding | Tìm đoạn nói cùng ý bằng chữ khác, tiếng Anh hay tiếng Việt |
| Từ khoá | Các từ của câu truy vấn | Giữ dấu thanh; bỏ hư từ, vì mọi từ còn lại đều phải có trong mỗi kết quả |
| Mã nguyên văn | Số biểu mẫu hay quy trình như QT-07 | Không sống sót qua embedding lẫn tách từ; chỉ chạy khi câu truy vấn có token dạng mã |
Thứ hạng hợp nhất không có điểm tối thiểu; số lượng yêu cầu giới hạn kết quả — hẹp cho bộ nhớ, rộng hơn cho tri thức.
Dấu thanh: đăng và dang
Nhánh từ khoá giữ dấu thanh tiếng Việt, vì đăng và dang là hai từ khác nhau. Gộp chúng sẽ trả về kết quả sai và còn che mất bản chép đã đọc sai dấu.
Mô hình embedding đa ngôn ngữ
Với mô hình chỉ tiếng Anh, một câu hỏi lạc đề và một kết quả khớp thật với tài liệu tiếng Việt nằm quá gần nhau để phân biệt. Đổi mô hình nghĩa là embedding lại mọi đoạn và mọi câu trong bộ nhớ.
Ai thấy được gì
Mỗi dòng ghi kho tri thức mà nó thuộc về. Các kho tri thức một lượt tìm được phép đọc được xác định theo người gọi trước khi truy vấn chạy, từ quy tắc phạm vi hiển thị của từng kho, nên phép kiểm tra trong cơ sở dữ liệu chỉ là kiểm tra thuộc danh sách đó. Thấy một kho tri thức trong danh sách không cấp quyền đọc dòng nào.
Câu trong bộ nhớ có gắn với một cuộc hội thoại chỉ khớp với yêu cầu của cùng người đó trong cùng cuộc hội thoại, nên id do người gọi đưa ra không bao giờ tự cấp quyền; nó là một dòng trong kho tri thức riêng của người đó, hết hạn cùng cuộc hội thoại.
Lượt tìm đi sâu đến đâu
Số đoạn một lượt tìm trả về, và cách cân nhánh ngữ nghĩa với nhánh từ khoá, là cấu hình của bản triển khai. Mọi kho tri thức được tìm theo cùng một cách.
Truy xuất trong một lượt
Tool tri thức của runtime suy ra các kho tri thức được tìm từ chính các ràng buộc của lượt; yêu cầu không nêu kho nào, vì mô hình soạn câu truy vấn, và bất cứ thứ gì nó nêu được đều có thể bị kẻ tấn công điều khiển qua prompt injection. Các ràng buộc được giao với những gì chủ của lượt được đọc, nhờ đó quy tắc chặn đi vào tận runtime.
- Mỗi kho tri thức được gắn được tìm với số lượng của yêu cầu và trọng số của bản triển khai — mười đoạn mỗi truy vấn của runtime là mười đoạn cho mỗi kho được gắn.
- Kết quả được gộp, mỗi dòng một lần ở điểm hợp nhất cao nhất, rồi cắt theo ngân sách ngữ cảnh; phần bị giữ lại được ghi trên bước trace.
- Mỗi kết quả đến mô hình dưới dạng trích dẫn: mục chứa nó, tiêu đề, phiên bản và thời điểm nạp của tài liệu, vị trí từng đoạn khớp, và điểm hợp nhất.
- Cùng các kết quả đó được lưu thành bản chụp gắn với câu trả lời của lượt, vì lập chỉ mục lại sẽ giải phóng dòng của đoạn. Danh sách nguồn dưới câu trả lời mở từng tài liệu đến đúng các đoạn mô hình đã thấy.
- Một lượt tìm nhiều lần song song, nên thứ hạng trích dẫn do cơ sở dữ liệu cấp sau một khoá, và đoạn đã được trích thì bỏ qua. Thao tác ghi chạy ngoài bước trace và không làm hỏng lượt tìm.
Tìm kiếm tính vào phòng ban của người tìm — xem quy trình xử lý tri thức → ai chi trả.
Vì sao làm như vậy
Vì sao ba nhánh thay vì chỉ tìm vector?
Ý nghĩa bắt được cách diễn đạt khác, từ khoá bắt thuật ngữ chính xác, còn mã tài liệu như QT-07 không sống sót qua embedding lẫn tách từ. Hợp nhất theo thứ hạng nghịch đảo kết hợp chúng mà không cần điểm số so sánh được.
Vì sao mô hình không được chọn kho tri thức để tìm?
Mô hình viết câu truy vấn, và một tài liệu chứa prompt injection có thể điều khiển nó. Suy ra phạm vi từ ràng buộc của lượt và quyền của chủ lượt giữ lượt tìm trong những gì người đó được đọc.