Homus
‹ All talks

How we taught agents to use good retrieval

AI Engineer World's Fair 2026: Online Track · Video gốc

Vì sao agent viết query keyword vô nghĩa, và cách Mixedbread dùng harness bốn search tool cùng SFT và RL để dạy agent dùng semantic search đúng cách.

AgentsRetrievalContext Engineering

1. Closing the Oracle Gap với knowledge agent

Talk mở đầu bằng tên đầy đủ của chủ đề: làm sao để dạy agent dùng retrieval tốt, hay theo cách nhóm gọi nội bộ, closing the oracle gap with knowledge agents, tức là thu hẹp khoảng cách giữa kết quả agent đạt được và kết quả nó lẽ ra đạt được nếu có đúng tài liệu trong tay. Có hai người trình bày. Hanna Lichtenberg là AI engineer tại Mixedbread và đang dẫn dắt mảng agentic search của công ty. Aamir Shakir là co-founder của Mixedbread. Aamir nói phần mở đầu về vấn đề, Hanna nói phần cách nhóm xây và train search agent.

Slide tiêu đề How we taught agents to use good retrieval, cùng hai diễn giả
Slide tiêu đề với dòng phụ "Closing the Oracle Gap with knowledge agents" và tên hai diễn giả, Hanna Lichtenberg và Aamir Shakir của Mixedbread. Bên phải là khung camera của hai người.
Slide giới thiệu Hanna Lichtenberg và Aamir Shakir
Slide giới thiệu: Hanna Lichtenberg, AI Engineer, trước đó ở Volkswagen và TU Berlin; Aamir Shakir, CEO & Cofounder, trước đó ở Google và EPFL.

2. Reasoning tăng theo cấp số mũ, search thì không

Aamir bắt đầu bằng một quan sát mà ai làm với LLM vài năm qua đều thấy: model ngày càng giỏi, và năng lực reasoning tăng theo đường cấp số mũ. Anh gợi người nghe nhớ lại GPT-3.5 từng giỏi tới đâu, rồi so với GPT-5.5 bây giờ. Theo anh, đó rõ ràng là một đường cong exponential.

Nhưng nếu nhìn sang search trong khoảng 20 năm qua thì khác hẳn. Search có tiến bộ, nhưng tiến bộ rất, rất chậm. Vậy là có một khoảng cách lớn giữa tốc độ phát triển của LLM và reasoning với tốc độ phát triển của retrieval.

Khoảng cách này quan trọng vì retrieval tool chính là đường truy cập chủ yếu để lớp reasoning lấy được đúng kiến thức. Muốn model thật sự hữu ích ra ngoài phạm vi code, chẳng hạn trong công việc pháp lý, tài chính, và nhiều lĩnh vực khác nữa, thì model phải tìm được đúng tài liệu. Nội bộ Mixedbread gọi khoảng cách đang mở rộng giữa reasoning và search là knowledge gap.

Biểu đồ capabilities theo thời gian: đường Reasoning cong lên, đường Search gần như thẳng, vùng giữa là Knowledge gap
Trục ngang là thời gian, trục dọc là capabilities. Đường Reasoning (màu vàng) cong vút lên theo cấp số mũ, còn đường Search (màu xám) chỉ dốc lên nhẹ và gần như thẳng. Hai đường cắt nhau, và phần diện tích tô đỏ giữa chúng sau điểm cắt chính là knowledge gap: model suy luận được nhiều hơn những gì search mang về cho nó.

3. Đo knowledge gap: BrowseComp+ và OfficeQA Pro

Aamir nhấn mạnh đây không phải một lý thuyết lạ của riêng nhóm. Họ thấy khoảng cách này trên benchmark thật và task thật. Anh lấy hai benchmark làm ví dụ.

  • BrowseComp+ là một benchmark về browsing: các query khá phức tạp, một corpus gồm một trăm nghìn tài liệu, và nhiệm vụ là trả lời câu hỏi. Về cơ bản đây là một task deep search kiểu đời thực. BrowseComp gốc do OpenAI tạo ra và luôn chạy trên open web; BrowseComp+ là phiên bản dùng một corpus có kích thước cố định.
  • OfficeQA Pro do Databricks tạo ra, chứa tài liệu của U.S. Treasury trong khoảng một trăm năm qua, và người ta đặt những câu hỏi rất phức tạp trên bộ tài liệu đó.

Trên biểu đồ của nhóm, đường nét đứt là oracle performance. Oracle ở đây nghĩa là hiệu năng tối đa về lý thuyết của model nếu bạn đưa đúng tài liệu cần thiết vào cùng với câu hỏi. Với BrowseComp, con số này là 93%; với OfficeQA Pro là 64%.

Sau đó nhóm lấy một agent như Codex với bộ tool mặc định của nó và hỏi: với các tool hiện có, agent đạt được bao nhiêu? Chất lượng câu trả lời Codex tạo ra tụt mạnh: thấp hơn oracle 9 điểm trên BrowseComp và 8 điểm trên OfficeQA Pro.

Kết luận của Aamir: model cực kỳ có năng lực nếu được đưa đúng tài liệu. Nhưng khi đặt chúng vào một corpus nhiễu, hiệu năng rơi rất nhanh. Nghĩa là nút thắt cổ chai ở đây không phải reasoning, mà là khả năng tiếp cận đúng kiến thức cần để trả lời câu hỏi. Knowledge gap có thật ngoài đời.

BrowseComp+ Oracle93% Codex, tool mặc định−9 điểm GPT-5 + Mixedbread−3 điểm OfficeQA Pro Oracle64% Codex, tool mặc định−8 điểm GPT-5 + Mixedbreadgần bằng oracle
Minh hoạ theo các con số diễn giả nêu: oracle là 93% trên BrowseComp+ và 64% trên OfficeQA Pro. Codex với tool mặc định thấp hơn oracle 9 và 8 điểm; GPT-5 dùng search của Mixedbread chỉ còn cách oracle 3 điểm trên BrowseComp+ và gần như khép hẳn khoảng cách trên OfficeQA Pro. Độ dài thanh là ước lượng từ các chênh lệch đó.

4. Search tốt hơn lấy lại gần hết khoảng cách

Thí nghiệm tiếp theo trả lời câu hỏi ngược lại: nếu chỉ thay vào một công cụ search tốt hơn hẳn thì sao? Nhóm thả search của Mixedbread vào, một search tool dùng late interaction, và lấy lại được phần lớn hiệu năng đã mất.

Với BrowseComp, chênh lệch giữa Oracle và GPT-5 dùng Mixedbread chỉ còn 3 điểm. Với OfficeQA Pro, nhóm gần như khép hoàn toàn khoảng cách. Thông điệp: chỉ cần đưa cho model một search tool tốt hơn là đã thu hồi được phần lớn knowledge gap, mà không phải đụng vào model.

Late interaction là kiểu retrieval mà query và tài liệu không bị nén thành một vector duy nhất. Mỗi token giữ embedding riêng, và điểm liên quan được tính bằng cách so khớp từng token của query với các token của tài liệu lúc tìm kiếm. ColBERT là ví dụ quen thuộc của họ kỹ thuật này. Cách làm này giữ được nhiều chi tiết hơn so với một embedding duy nhất cho cả đoạn văn.

Single vector query 1 vector · so với 1 vector của tài liệu Late interaction query 1 vector mỗi token · khớp từng token với tài liệu
Khác biệt cơ bản giữa retrieval một vector và late interaction, kiểu search mà Mixedbread dùng: query giữ một embedding cho mỗi token thay vì nén cả câu vào một điểm.

5. Agent đang viết query như thế nào, và vì sao

Đến đây mọi thứ trở nên thú vị hơn, theo lời Aamir, khi nhóm nhìn vào chính những query mà model đang viết gửi tới hệ thống search. Một ví dụ nhóm bắt gặp trong lúc benchmark:

Senator woman questions billionaires not at company then ok thank you staff will check hearing

Về cơ bản đây là chuỗi vô nghĩa. Nếu hệ thống search của bạn được thiết kế để nhận câu hỏi tự nhiên, câu hỏi mang ngữ nghĩa, mà lại nhận về một chuỗi keyword chồng keyword như vậy, nó sẽ bị rối. Aamir đưa ra ba lý do khiến model viết query theo kiểu này.

  1. Model chủ yếu được train cho coding. Coding agent được tối ưu để khám phá codebase bằng những tool như grep. Grep chỉ tìm regular expression, nên model cố viết ra càng nhiều biểu thức mà nó đoán là nằm trong tài liệu càng tốt để tìm đúng thứ cần tìm.
  2. Model được train để dùng web hiệu quả. Các web tool vốn được tối ưu rất mạnh cho con người, nên để dùng chúng đúng cách, model bắt chước kiểu query của con người: keyword nối keyword nối keyword. Trên slide, ý này được ghi là quá trình training và eval cho retrieval thừa hưởng phân phối query của web search.
  3. Benchmark bias. Phần lớn benchmark hiện nay như BEIR hay NanoBEIR dùng query kiểu "caveman", tức query dày đặc entity, và cấu trúc này nghiêng hẳn về phía BM25.

Hệ quả là agent hiện nay đoán keyword để tăng độ trùng lặp giữa query và tài liệu, và không thể dùng đúng cách những search tool mạnh.

Slide với query mẫu vô nghĩa và ba nguyên nhân
Query mẫu mà một agent thật đã viết, kèm ba nguyên nhân: coding agent được tối ưu cho việc khám phá codebase (grep); training và eval cho retrieval thừa hưởng phân phối query của web search; và benchmark bias, khi BEIR và NanoBEIR dùng query kiểu "caveman", dày entity, có lợi cho BM25 về mặt cấu trúc. Dòng kết: agent đoán keyword để tăng độ trùng giữa query và tài liệu.

6. Ba mục tiêu cho search agent của Mixedbread

Chính vấn đề trên thúc đẩy nhóm tự xây một search agent riêng. Từ đây Hanna nói tiếp. Mục tiêu là dạy agent dùng search mạnh cho đúng cách, đặc biệt là chọn đúng search tool cho từng loại tình huống, và làm việc được ngoài phạm vi code search, tức là cho knowledge work. Và quan trọng nhất, agent phải chính xác, nhanh và rẻ.

Slide Goals for our agent với ba mục tiêu
"Goals for our agent": một, học dùng search mạnh cho đúng cách; hai, làm việc được ngoài code, cho knowledge work; ba, precise, fast and cheap.

7. Harness: bốn search tool và một vòng lặp ngắn

Bước đầu tiên để xây agent là định nghĩa một harness thật mạnh. Harness của nhóm được xây hoàn toàn trên nền tảng Mixedbread. Agent có bốn search tool chính:

  • Overview search: một semantic search rất rộng, agent nhận về tối đa 50 chunk, nhưng chỉ thấy bản tóm tắt nội dung của từng chunk. Mục đích là để agent có cái nhìn tổng quan về corpus, biết có những gì trong đó, mà không làm đầy context quá nhiều.
  • Semantic search: tool semantic search chính, agent nhận toàn bộ payload của top 10 chunk tìm được.
  • Filter chunks: tool để sắp xếp và tìm chunk dựa trên các metadata facet.
  • Grep: dĩ nhiên vẫn có, dùng cho tìm kiếm khớp keyword.

Bản thân agent loop, tức harness, rất đơn giản và ngắn vì agent phải nhanh. Nhưng nhóm vẫn muốn nó có nhiều khả năng khám phá. Vì vậy họ đặt giới hạn tối đa bốn vòng search, nhưng trong mỗi vòng agent được chạy nhiều search song song, khởi động vài lượt search cùng lúc.

Ngay từ đầu, agent không chỉ thấy query của người dùng mà còn thấy sẵn kết quả của một lượt semantic search ban đầu chạy trên chính query đó, cộng với gợi ý về những metadata facet hiện có. Dựa trên bản xem trước của corpus này, agent bắt đầu lập kế hoạch search. Nó chia ý định tìm kiếm thành tối đa bốn query, mỗi query phủ một khía cạnh riêng, và với mỗi query, mỗi ý định, nó chọn tool phù hợp nhất.

Khi kết quả từ các tool trả về, harness loại bỏ chunk trùng lặp để agent không bao giờ thấy cùng một chunk nhiều lần, tránh làm đầy context. Sau đó vòng search kế tiếp có thể bắt đầu. Ngay khi agent có đủ bằng chứng để trả lời query của người dùng, nó gửi ranking: xuất ra mọi chunk liên quan đến query theo một thứ tự xếp hạng hợp lý.

Sơ đồ Searcher harness: query, search planning, bốn tool song song, seen chunk filter, submit_ranking
"Search agent harness built on Mixedbread". Sơ đồ Searcher harness: tối đa 4 vòng, mỗi vòng tối đa 4 tool call song song. Query (intent + clues) đi vào bước search planning, nơi ý định được chia thành tối đa 4 query phủ các khía cạnh riêng và mỗi query được gán tool phù hợp nhất. Bốn nhánh ví dụ: overview search (wide recall, top 50 summaries), semantic search cho khía cạnh A, semantic search cho khía cạnh B, filters + grep (metadata và exact terms). Kết quả đi qua seen chunk filter để loại chunk đã thấy, rồi quay lại planning để follow-up vào chỗ còn thiếu; khi đủ bằng chứng thì đi tới submit_ranking. Ghi chú phía trên: speed & exploration, parallel searches, fewer total iterations.

8. Năm lý do harness tạo ra semantic query tốt hơn

Vì sao harness này khuyến khích agent viết semantic query tốt hơn và dùng search tool tốt hơn? Hanna nêu năm điểm chính.

  1. Goal framing. Agent phải nói rõ nó cần bằng chứng gì trước khi viết query.
  2. Tool. Có nhiều tool khác nhau là rất quan trọng: agent chỉ dùng semantic search khi cần tìm theo khía cạnh, và chỉ dùng grep khi cần khớp keyword chính xác.
  3. Cách đóng khung việc viết query. Nhóm "lừa" model để nó không nghĩ mình phải viết một query kiểu BM25 như thường lệ. Thay vì ra lệnh trực tiếp "write a search query", họ yêu cầu nó viết một câu ngắn gọn mô tả điều nó muốn tìm. Như vậy model không rơi vào pattern cũ được.
  4. Examples. Prompt có kèm vài ví dụ để cho thấy thế nào là query tốt, và cách chia một query đầu vào thành nhiều khía cạnh khác nhau để khám phá corpus.
  5. Seed. Nhóm đưa sẵn kết quả semantic search trên query gốc, để agent thấy corpus nói về cái gì, thấy được ngôn ngữ của corpus, và xác định nên đào sâu hơn ở khía cạnh nào.

Câu hướng dẫn ở điểm thứ ba đáng để giữ lại nếu bạn đang viết prompt cho search agent của riêng mình. Theo slide, hai cách diễn đạt được đặt cạnh nhau như sau:

Ask for "one concise sentence describing what you want to find," not "write a search query."
Slide Our harness encourages better semantic queries với bảng Harness guidance năm mục
"Our harness encourages better semantic queries", bảng Harness guidance năm mục: Goal (nói rõ cần bằng chứng gì trước khi viết query), Tool (semantic search cho các khía cạnh, tool chính xác cho thuật ngữ bắt buộc), Prompt (xin một câu ngắn mô tả điều muốn tìm, không phải "write a search query"), Examples (vài query tốt và các bước khám phá theo khía cạnh), Seed (dùng kết quả của query gốc để lộ ra ngôn ngữ và các nhánh của corpus).

9. Training: SFT từ teacher, rồi on-policy RL với search reward

Bước quan trọng thứ hai để xây search agent riêng dĩ nhiên là chính quá trình training. Nhóm quyết định dùng một LLM rất nhỏ để agent còn nhanh hơn nữa. Họ train agent nhỏ này để tối ưu chính chiến lược search: chọn tool tốt hơn, viết semantic query chất lượng hơn, khám phá và xếp hạng tốt hơn, và hiệu quả hơn.

Training có hai giai đoạn:

  1. Supervised fine-tuning với một teacher LLM lớn hơn.
  2. On-policy reinforcement learning với một search reward do nhóm tự định nghĩa.

Search reward là tổ hợp của hai phần: retrieval reward và trajectory reward.

  • Retrieval reward dựa trên kết quả các metric retrieval quen thuộc như recall và nDCG mà danh sách xếp hạng cuối cùng của agent đạt được. Cộng thêm một LLM judge chấm retrieval theo nhiều rubric, mỗi rubric được quyết định là đạt hay không đạt: agent có tìm ra những gì thật sự liên quan cho query không, mọi chunk trả về có liên quan không, và bản thân ranking có hợp lý không.
  • Trajectory reward cũng dùng một LLM judge, và đây là chỗ để thật sự cải thiện việc chọn tool, làm agent hiệu quả hơn, và nâng chất lượng query. Có những rubric để judge quyết định query có thật sự là một câu tự nhiên hay không, và mức độ khám phá đã đủ chưa, nhiều quá hay ít quá.
1. SFTteacher LLM lớn hơn 2. On-policy RLagent nhỏ, search reward search reward retrieval rewardrecall, nDCG của ranking cuối+ LLM judge: relevant? ranking hợp lý? trajectory rewardLLM judge: chọn tool, hiệu quả,query là câu tự nhiên? khám phá đủ?
Hai giai đoạn training của search agent nhỏ: supervised fine-tuning từ một teacher LLM lớn hơn, rồi on-policy RL với search reward gồm retrieval reward (metric và LLM judge trên kết quả) và trajectory reward (LLM judge trên cách agent search).

10. Đọc một trajectory thật

Hanna cho xem một trajectory mẫu dưới dạng timeline. Lúc đầu là initial search và các metadata hint ban đầu. Sau đó agent chạy bốn search song song ở vòng thứ nhất, rồi ở vòng thứ hai chỉ là một lượt grep đơn giản.

Agent trajectories timeline: waterfall các tool call trong một lượt agentic search
"Agent trajectories - timeline": waterfall của các tool call trong một lượt Agentic Search Trace, tổng thời gian 5s 690ms, 10 span, 3 round. Thứ tự: search và inspect_metadata ở đầu, một bước generation, rồi search (song song), thêm generation, một lượt grep ngắn, và generation cuối. Các bước generation chiếm phần lớn thời gian, còn mỗi lượt search hay grep chỉ tốn vài trăm mili giây hoặc ít hơn.

Tiếp theo là một đoạn trích trajectory cho thấy chính các query agent viết. Query đầu vào nằm bên trái: một query rất dài, kiểu kể lể lan man điển hình, lấy từ benchmark obliq-congress. Nhìn sang các query agent viết cho tool semantic search đầu tiên, đó thật sự là một câu mô tả điều nó muốn tìm, chứ không phải một chuỗi keyword dồn cạnh nhau một cách kỳ quặc. Còn các lượt grep thì dĩ nhiên là pattern keyword điển hình, và đó chính xác là điều nhóm mong muốn.

Agent trajectories tool calls: query đầu vào và bốn tool call song song trong vòng một
"Agent trajectories - tool calls". Bên trái là query đầu vào, một đoạn kể kiểu "có ai nhớ cái clip ở Thượng viện mà một nghị sĩ hỏi dồn một ông nhà giàu…". Ở giữa là Fast Searcher Iteration 1 với 4 call song song: hai semantic_search có query là câu hoàn chỉnh (một nữ thượng nghị sĩ bình tĩnh dồn một CEO công nghệ giàu có về thời điểm ông biết về một vụ bê bối; một thượng nghị sĩ hỏi một nhân chứng giàu có câu có hoặc không rồi nói lời phủ nhận của ông không thể tin được), và hai lượt grep với regex keyword. Sau đó là Iteration 2 và submit_ranking.

11. Kết quả eval và lời mời

Agent đã train của nhóm tiếc là chưa được phát hành, nhưng đã có vài kết quả trung gian.

Bên trái là benchmark obliq-congress: agent đạt nDCG@10 là 0,4, một bước nhảy lớn so với model tốt nhất trong paper của benchmark này, một GPT multi-hop agent, vốn đạt 0,18. Trên slide, cột recall@10 cho thấy mức chênh lệch tương tự.

Bên phải là kết quả của bản beta search agent mà nhóm đang chạy production, tên là Mixedbread agentic search. Agent này đứng top một trên benchmark MADQA của Snowflake, đạt accuracy 93,4 khi dùng model Gemini 3.5 Flash với agentic search của Mixedbread làm search tool. Kết quả này đạt được trong khi effort thấp hơn nhiều so với các LLM tương đương đi kèm search agent khác. Bạn có thể tự xem leaderboard của MADQA.

Slide Evals: bảng obliq-congress và bảng MADQA
Slide "Evals". Bảng obliq-congress (nDCG@10, recall@10): Mixedbread search agent 0.404 và 0.433; GPT-5.2 Multi-Hop Agent 0.183 và 0.195; Mixedbread Wholembed-v3 0.106 và 0.142; Gemini-2-Embedding 0.059 và 0.079. Bảng MADQA (accuracy, effort): Gemini 3.5 Flash & Mixedbread search agent 93.4 với effort 4.4; Gemini 3 Pro with Mixedbread Wholembed-v3 88.2; Gemini 3 Pro with BM25 Search Tool 82.2 với effort khoảng 25.6. Một số số nhỏ trên slide khá mờ.

Những kết quả này cho thấy vẫn còn rất nhiều dư địa cải thiện khi nói đến các language model lớn và search tool của chúng. Lời kết của Hanna: nếu bạn muốn góp phần đẩy giới hạn của retrieval xa hơn nữa, Mixedbread rất mong nhận đơn ứng tuyển của bạn.

Nguồn và liên kết

  • Mixedbread: nền tảng search của hai diễn giả, nơi harness và agentic search được xây
  • BrowseComp-Plus: phiên bản BrowseComp với corpus cố định dùng trong phần đo knowledge gap
  • BrowseComp của OpenAI: benchmark browsing gốc trên open web (openai.com/index/browsecomp)
  • OBLIQ-Bench: paper giới thiệu bộ benchmark có tác vụ Congress hearings (obliq-congress)
  • MADQA: bài giới thiệu benchmark của Snowflake, và MADQA Leaderboard
  • BEIR: benchmark retrieval được nhắc trong phần benchmark bias
  • GitHub của Hanna Lichtenberg · X của Hanna Lichtenberg
  • LinkedIn của Hanna Lichtenberg: linkedin.com/in/hanna-lichtenberg-64778b221