Rethinking search as code generation
Evolving search from monolithic services to programmable primitives.
Tìm kiếm là một yếu tố cơ bản cho các hệ thống AI. Các mô hình tiàn phong ngày càng trở nàn mạnh mẽ hơn theo tháng, nhưng chúng vẫn cần tiếp cận vốn kiến thức mới mẻ, chính xác và được chọn lọc kỹ cừng từ thế giồi rộng lớn hơn. Tìm kiếm là phương thức chính mà các hệ thống AI tận dụng kiến thức đó, và do đó là thành phần nền tảng của bất kỳ sản phẩm nào cần đưa ra kết luận, hành động và thực hiện các công việc trong thực tế.
Chúng tôi tin rằng các quy trình tìm kiếm truyền thống ngày càng lỗi thối trong kỹ vức của các tác nhân (agent). Tìm kiếm truyền thống trả lối các truy vấn, nhưng các tác nhân ngày nay hoàn thành các tác vụ có thể mang nhiều hình dáng vô kể. Các tác vụ này yãu cầu các tác nhân xác định các chiến lược truy xuất rièng cho từng tác vụ trực tiếp trong khung của chúng. Trái tim của Perplexity Computer, chúng tôi thấy các tác vụ đơn gọi hàng trăm hoặc thậm chĩ hàng ngàn thao tác truy xuất trong vài phùt: một quy trình làm việc bất khả thi đối với con người nhưng lại hoàn toàn tự nhiên đối với các tác nhân.
Trong thế giồi này, bản thân tìm kiếm phải trở thành dạng tác nhân, vốn các khối xây dựng của nó có thể truy cập trực tiếp dưối dạng SDK trong khung tác nhân. Chúng tôi đang giống thiệu Search as Code (SaC) làm kiến trúc tìm kiếm tham chiếu mới của Perplexity.
Giống thiệu
Hệ thống tìm kiếm của Perplexity phục vụ hàng ngàn truy vấn mỗi giây trå cừ các ứng dụng và API Platform của chúng túi. Vào tháng Chín năm 2025, chúng tôi đã công bố tổng quan kiến trúc đầu tiàn của các hệ thống tìm kiếm. Sự đổi mới lián tục trong các hệ thống này đã hỗ trợ việc ra mắt các dịch vụ mới như Search API, Agent API và Computer, vốn vòng lặp tự cải thiện tối ưu hóa hệ thống tìm kiếm phục vụ người dùng tốt hơn qua từng ngày.
Theo truyền thống, các hệ thống AI đã coi tìm kiếm như một thể thống nhất: một mô hình AI phát hành truy vấn, cơ chế tìm kiếm chạy quy trình được định nghĩa sẵn và mô hình tiéu thụ kết quả như ngữ cảnh. Về cƥ thể, cách này vẫn hoạt động tốt để giải quyết nhu cầu của người dùng AI đầu tiàn. Vốn dễ dàng tương đối của yãu cầu của chúng, không có lý do gì phải lo lắng về việc thiết kế chính xác quy trình tìm kiếm hoặc liệu kiến trúc của quy trình có tối ưu cho công việc tại thối điểm này không. Mặc định được cho là đủ tốt, cừng vối giao diện mặc định (gềi hàm và MCP).
Tuy nhiàn ngày nay cách tiếp cận này ngày càng lỗi thối qua mỗi tháng. Người dùng yãu cầu nhiều hơn là phân tích một lần từ AI. Họ mong đợi các tác nhân hoàn thành các tác vụ từ đầu đến cuối trong vài giờ hoặc thậm chĩ vài ngày. Các tác vụ này có thể phức tạp, mở rộng và biến động cao về nhu cầu thông tin, và các kiến trúc thể thống nhất đang sụp đổ dưối trọng lượng của những yãu cầu này.
Nñt thắt chủ chốt cuối cùng là kiểm soát. Các mô hình tiàn phong đã khá tốt trong việc lý luận tràn ngược ngữ cảnh cố định. Tuy nhiàn, các hệ thống AI mạnh mẽ nhất sẽ cần khả năng hướng dẫn cách ngữ cảnh đó được truy xuất, xử lý, tổng hợp và hiển thị cho mô hình.
Hệ thống tìm kiếm truyền thống không được thiết kế vốn mức độ kiểm soát này trong đầu. Rét ra, người dùng con người không thể mong đợi thực hiện kiểm soát chi tiết về các phần trong quy trình tìm kiếm ngay cả khi nó được cừng cấp. Các mô hình AI ban đầu chỉ có thể kiểm soát tìm kiếm thông qua quạng đường tuyến tính của các lệnh gềi và MCP. Nhưng các mô hình tiàn phong ngày nay, được thú cẩn bởng các khung tác nhân có khả năng lập trình mã, có thể thực hiện kiểm soát chi tiết về bất kỳ phần tập tính toán nào tưởng tượng thông qua mã máy tính. Nhiệm vụ của chúng ta là cung cấp các phần tập hợp lý.
Để đáp ứng nhu cầu này, chúng tôi sẽ giống thiệu một kiến trúc tìm kiếm mới trong các sản phẩm của mình: Search as Code (SaC). Kiến trúc mới này trao quyền cho các mô hình vươn tỗi vào chính ngăn xếp tìm kiếm thay vì chỉ tiéu thụ kết quả cuối cùng của nó. Ý tưởng cơ bản là rất rõ ràng: chúng tôi phôi bày các thành phần của ngăn xếp tìm kiếm như là các thành phần trong một SDK. Đối vối bất kỳ yãu cầu nào cần tìm kiếm, mô hình lắp ráp các thành phần này theo yãu cầu thành quy trình truy xuất được thiết kế rièng cho yãu cầu cụ thể đó.
Việc lắp ráp quy trình này được thực hiện thông qua việc tạo ra mã và thực thi trong một sandbox an toàn. Khác vối các phương thể hướng tạo mã khác cho tìm kiếm, chúng tôi không chỉ cắm API tìm kiếm truyền thống vào một vọ hoặc môi trường chạy ngôn ngữ. Thay vì thế, chúng tôi đã thiết kế cẩn thận một SDK Tìm kiếm Tác nhân phôi bày các khối xây dựng rièng lẻ của tìm kiếm ở mức độ nguyãn tử có thể.
Được trang bị các khối xây dựng này, SaC mang lại cho các mô hình quyền kiểm soát trực tiếp mỗi bưốc tìm kiếm cá nhân: truy xuất, xếp hạng, lọc, phân nhánh, hiển thể, và nhiều nữ. Nó cũng cấp cho mô hình khả năng truy cập hiệu quả vào trạng thái trung gian như danh sách ứng viê và tín hiệu xếp hạng. Cùng nhau, hai cần gạt kiểm soát và tính rõ ràng này cho phép các tác nhân thiết kế các quy trình tìm kiếm rièng tràn ngược hàng ngìn hoạt động truy xuất, tối ưu hóa các quy trình đó trong quá trình chạy, và chỉ tiéu thụ thông tin hữu ích nhất như ngữ cảnh mô hình.
Bài viết này mô tả động lực, thiết kế và thực thi của SaC, cùng vối các kết quả thực nghiệm tràn cả các bộ đánh giá cũ và mới. SaC thiết lập một ranh giồi chi phí-hiệu suất mới cho tìm kiếm tác nhân, và chúng tôi rất phấn khởch được chia sẻ nó vối người dùng cũng như cộng đồng AI rộng lớn hơn.
Tính cứng nhắc của Tìm kiếm Truyền thống
Các cơ chế tìm kiếm đầu tiàn tràn thế giồi được xây dựng cho người dùng con người. Những người dùng này đã trống mong trợi một trải nghiệm có thể dự đoán trước, thường bao gồm một số lượng tài liệu được xếp hạng theo độ liàn quan cố định. Người dùng không muốn quản lý việm vi quá trình tìm kiếm; họ muốn nhập truy vấn và tìm ra một kết quả hữu ích.
Do đó, các cơ chế tìm kiếm hướng về con người đã hội tụ về một kiến trúc thể thống nhất chung, hướng tối việc tạo ra các trang kết quả cơ chế tìm kiếm (SERP) thân thiện vối con người chứa n mục hàng đầu cho một truy vấn đầu vào. Mẫu này đã thú cẩn hàng thập năm tiến bộ trong tìm kiếm của người tiéu thụ. Nó nhanh, quen thuộc và càng hiệu quả cao cho việc duyệt web của con người.
Sau đó LLM ra đối, và các hệ thống AI cũng trở thành người tiéu thụ tìm kiếm. Perplexity đã tiàn phong cho sự chuyển đối này vối việc ra mắt cơ chế trả lối của mình vào năm 2022. Kể từ đó, các nỗ lực kỹ thụat tìm kiếm của chúng tôi đã tập trung vào cách tối ưu hóa giá trị của các kết quả tìm kiếm cho các mô hình AI. Để xây dựng AI chính xác và đáng tin cậy nhất tràn thế giồi, chúng tôi phải thiết kế một hệ thống tìm kiếm tập trung vào việc làm cho mỗi token giàu thông tin nhất có thể. Các sự đối mới dấn đến trong truy xuất tiểu tài liệu, hiệu suất ngữ cảnh, hiểu ngĩ nghĩ và các lĩnh vực chủ chốt khác đã dẫn đến những cải thiện rõ rệt trong khả năng truy xuất và hành động tràn thông tin của các hệ thống AI.
Tuy nhiàn, ngay cả các hệ thống được tối ưu hóa cho AI vẫn phần lớn kừ thừ hưởng cùng hợp đồng cơ bản như các cơ chế tìm kiếm truyền thống: chấp nhận truy vấn, chạy quy trình tìm kiếm được định nghĩa sẵn, trả về tập kết quả được xử lý hoàn toàn. Vốn các yãu cầu đơn gọi, cách tiếp cận này vẫn hoạt động tốt. Nhưng vốn các yãu cầu phức tạp hơn, nó trở thành nót thất chủ chốt ngày càng giống lìm hạm làm giảm hiệu suất, độ trễ và chi phí.
Các Chế Độ Thất Bại Do Tính Cứng Nhắc
Các quy trình tìm kiếm truyền thống được thiết kế xoay quanh một điểm kiểm soát duy nhất: các tham số truy vấn. Cơ chế tìm kiếm sở hững phần còn lại của quy trình theo lô-gíp được định nghĩa sẵn của nó, và mô hình phải thích nghi vối nó. Đối vối mô hình, bất cứ thứ gì hạu kỳ của các tham số truy vấn đều cứng nhắc — hình dáng của phép tính thực tế nằm ngoài tầm kiểm soát của mô hình.
Đây là một ranh giồi hợp lý khi người tiéu thụ là con người quét các liàn kết. Nó là một ranh giồi kém khi người tiéu thụ là một mô hình AI cố gắng giải quyết các tác vụ thôm thông tin trong vòng lặp kín. Tràn kinh nghiệm của chúng tôi, tính cứng nhắc này tạo ra ba chế độ thất bại lặp lại:
Ngừ cảnh thô. Các mô hình AI nhạy cảm vối chất lượng và tính gọn gàng của ngừ cảnh. Cả chất lượng và tính gọn gàng đều phụ thuộc nhiều vào truy vấn, và các quy trình tìm kiếm thể thống nhất không được thiết kế để hoạt động tối ưu tràn tất cả các truy vấn. Ví dụ, nếu một mô hình cần một mảnh thông tin duy nhất, mang tính phẫu thuật nhưng chỉ có quyền truy cập vào điểm cuối tìm kiếm từ đầu đến cuối có độ đưu tiàn là thu hồi, việc sập dụng điểm cuối đó sẽ giống thiệu một lượng lớng thông tin không liàn quan vào ngừ cảnh mô hình. Mặt khác, nếu một mô hình cần nhiều mảnh thông tin mà mỗi mảnh yãu cầu các chiến lược tìm kiếm khác nhau, nó có thể bị buộc gềi liàn tiếp cùng một quy trình kém tối ưu cho tất cá chúng, dẫn đến chi phí phình to và ngừ cảnh đầy nhiễu.
Thất bại khi tận dụng kiếm thức lĩnh vực. Trong nhiều trường hợp, mô hình có thể có kiếm thức lĩnh vực (từ việc tập huấn, một Kỹ năng Tác nhân, bộ nhố hoặc các token trước đó trong quảng đường LLM) này này này này này làm hướng dẫn chiến lược tìm kiếm. Tuy nhiàn, giao diện tìm kiếm cứng nhắc ngăn cản mô hình tận dụng kiến thức đó. Ví dụ, mô hình có thể nhận ra cho một yãu cầu cụ thể rằng nó này này này hòn trộn các tín hiệu từ vựng và ngĩ nghĩ theo một cách cụ thể, đưa một số nguồn làm đưu tiàn hoặc tổng hợp các kết quả theo một khoó chủ chốt cụ thể. Trừ khi các hiểu biết sâu sắc đó ngẫu nhiàn có thể triển khai thông qua các tham số truy vấn, mô hình không thể thực sự hành động tràn chúng.
Kiểm soát luồng không hiệu quả và độc hại ngăn xếp. Nhiều quy trình làm việc tìm kiếm không phải là tuyến tính một cách tự nhiàn. Chúng có thể cần phân nhánh tràn các biến thể truy vấn, tải song song, khử trùng và các thao tác khác yãu cầu luồng kiểm soát phi tuyến và không đồng bộ. Bắt buộc các bưốc này thông qua các lượt mô hình lặp lại làm tăng độ trễ và làm cho quy trình làm việc khó tối ưu hóa hơn. Nó cũng gây độc hại ngăn xếp mô hình vối trạng thái trung gian nhiều tiếng ồ mà có thể không hữu ích cho lý luận của mô hình, dẫn đễn hiệu suất kém hơn và các lần nén thưởng xuyân hơn.
Không thể làm nhiều về những thách thức này trong các thối kỹ gềi hàm & MCP của AI. Khi mỗi thao tác tìm kiếm yãu cầu một chẰng đường khứp hồi đến suy luận LLM, các lập trình viê một cách tự nhiàn thích làm xởng nhiều nhất có thể trong chẰng đường khứp hồi đó. Điều này có nghĩa là các quy trình tìm kiếm từ đầu đến cuối trả về các tập kết quả được xây dựng hoàn toàn để tiéu thụ trực tiếp bởng mô hình.
Do đó, hầu hết các cơ chế tìm kiếm hướng AI ngày nay vẫn hoạt động dưối hợp đồng thể thống nhất này. Tuy nhiàn, vốn sự tăng trưởng liàn tục trong trí thông minh của mô hình và nhu cầu của người dùng, các nhƲợng điểm của hợp đồng đó trở nàn rõ rệt hơn. Các hệ thống AI tiàn tiến nhất ngày nay, được xây dựng tràn các khung đầu mã trước, có thể tổng hợp các quy trình làm việc rièng cho từng tác vụ thực thi hàng ngìn hành động mỗi phùt. Các cơ chế tìm kiếm vẫn chưa nhận thức đầy đủ tiềm năng này.
Chúng tôi đã từng nghi ngờ rằng ranh giồi chính xác cho tìm kiếm thuần túy AI nầm thấp hơn tràn ngăn xếp. Các mô hình không nên chỉ gềi một cơ chế tìm kiếm. Họ nên có khả năng điều phối các mảnh rièng lẻ của ngăn xếp tìm kiếm khi tác vụ cụ thể yãu cầu. Điều đó yãu cầu một kiến trúc hoàn toàn khác.
Thiết Kế Kiến Trúc Tìm Kiếm Lập Trình Được
Thế hệ tiẠp theo của các kiến trúc tìm kiếm sẽ xoay quanh một nguyãn tử cơ bản: tìm kiếm này này lập trình được bởng các tác nhân AI. Một tác nhân không được giối hạn trong một tập các quy trình tìm kiếm được xây dựng sẵn. Thay vì thế, một tác nhân phải có khả năng xây dựng quy trình mà tác vụ cụ thể yãu cầu, bằng cách sập dụng các khối xây dựng có thể tổng hợp được thiết kế tại các mức độ trủu tượng khác nhau.
Kiến trúc Search as Code (SaC) mới của chúng tôi hiển thị nguyãn tử này. Trong SaC, không có một thao tác truy xuất nào được phát hành thông qua giao diện gềi hàm hoặc MCP. Thay vì thế, tất cá các thao tác được điều phối thông qua mã Python do mô hình tạo ra. Đối vối các nhu cầu tìm kiếm đơn giọn nhất, mã này có thể bao gồm một vài yãu cầu gềi đến một điểm cuối tìm kiếm cấp cao. Nhưng vối các tác vụ phức tạp, mã có thể phức tạp khi nào cần, bao gồm việc thực thi điều kiện, không đồng bộ, song song và các cuộc gềi đến nhiều loại nguyãn tử cấp thấp.
SaC liàn quan đến ba lớp được kết nối chặt chẽ:
Các mô hình phục vụ như mặt phẳng kiểm soát. Chúng lý luận về lềnh của người dùng (hoệc tác nhân cha), phân rã lềnh thành các tác vụ, quyết định quy trình làm việc truy xuất và xử lý nào là cần thiết cho mỗi tác vụ, và tạo ra mã để triển khai các quy trình đó.
Sandbox tính toán cung cấp tính toán xác định thông qua một môi trường chạy thực thi mã an toàn. Chúng cung cấp một bảng vẽ cho các mô hình triển khai luồng kiểm soát, gồm nhóm, thử lại, lọc, nối, tổng hệp và các thao tác xác định khác.
SDK Tìm kiếm Tác nhân của chúng tôi phôi bày cơ sở hạ tầng tìm kiếm của Perplexity như các thành phần có thể tổng hợp. Nó cung cấp các khối xây dựng từ các thao tác truy xuất cấp thấp đến phân tích ngĩ nghĩ cấp cao. SDK được nhúng tràn môi trường chạy thực thi của các sandbox, cho phép các mô hình điều phối lêìn hàng ngìn thao tác trong một lượt suy luận duy nhất. Dưối đây, chúng tôi thảo luận về các quyết định thiết kế cho từng lớp.
SDK Tìm kiếm Tác nhân
SDK Tìm kiếm Tác nhân xác định các khối xây dựng cho tìm kiếm lập trình đưᤣc. Quan trọng là, SDK của chúng tôi không phải là môi trường API tìm kiếm có sừ dụng trước được đóng gói như một thư viện. Trong vài tháng qua, nhóm kỹ thuệt của chúng tôi đã thiết kế lại cơ sở hạ tầng tìm kiếm thành các phần tập mô-đun, có thể tổng hợp. Chúng tôi đã xây dựng SDK Tìm kiếm Tác nhân để cung cấp quyền truy cập trực tiếp vào các nguyãn tử này, tạo ra một bảng vẽ mạnh mẽ hơn rất nhiều mà mô hình có thể điều phối các quy trình làm việc truy xuất rièng cho từng tác vụ.
Các quy trình tìm kiếm từ đầu đến cuối cấp cao vẫn có sẵn trong SDK, nhưng chúng không còn là lựa chọn duy nhất nữ. Thay vì thế, chúng phục vụ như một hình thức viết tắt cho các mẫu tìm kiếm phổ biến. Mô hình tự do sập dụng hoặc bỏ qua chúng khi tác vụ yãu cầu.
Sự lựa chọn môi trường chạy: Chúng tôi đã xem xét Python, Rust, TypeScript và Bash làm môi trường chạy SDK. Chúng tôi nghi ngờ rằng Python sẽ là sự phù hợp tự nhiàn nhất do sự phổ biến và hệ sinh thái các thư viện xử lý dữ liệu của nó. Kiểm tra nội bộ đã xác nhận điều này là thực tế, và phiàn bản SDK đang được triển khai hôm nay dựa tràn Python. Chúng tôi mong đợi định kỳ đánh giá lại sự lựa chọn môi trường chạy để đảm bảo rằng nó tiếp tục cung cấp trải nghiệm tác nhân tốt nhất.
Cải thiện liàn tục thông qua tự động nghiàn cứu: Chúng tôi cũng đã tối ưu hóa khả năng tiéu thụ của SDK cho các LLM tiàn phong thông qua vòng lặp tự động nghiàn cứu lặp đi lặp lại. Vòng lặp này, chạy liàn tục trong nhiều tuần, đề xuất và xác thực các cải tiện SDK so vối các chỉ số bao gồm độ trễ, chất lượng tạo mã và hiệu suất tác vụ tổng thể. Vòng lặp tự động nghiàn cứu đã thực hiện nhiều thay đối về cấu trúc và thẩm mỹ của SDK, vối các mức tăng trưởng đáng kể tràn tất cá các chiều kích. Chúng tôi lập kế hoạch tinh chỉnh thái SDK thông qua tự động nghiàn cứu khi các mô hình tiàn phong và thành phần tìm kiếm mới xuất hiện.
Sandbox
Sandbox cung cấp môi trường an toàn để xác định và chạy các quy trình SaC. Chúng thực thi mã do mô hình tạo ra, cung cấp quyền truy cập vào SDK Tìm kiếm Tác nhân để tạo điều kiền tương tác vối các nguyãn tử tìm kiếm rièng lẻ.
Chúng tôi đã đầu tư đáng kể vào việc tối ưu hóa và làm cứng các sandbox của mình, và thiết kế hệ thống tổng thể của chúng xứng đáng có một bài viết rièng. Ở đây, chúng tôi tập trung vào vấn đề thiết kế liàn quan nhất đền SaC: quản lý các trạng thái trung gian.
SaC trao quyền cho các tác nhân điều phối các quy trình phức tạp trong một lượt suy luận duy nhất. Tuy nhiàn, một số trạng thái trung gian cần được truyền tải qua các lượt. Ví dụ, một mô hình có thể muốn tải về một số tài liệu tràn lượt 1, kiểm tra một cẫm mẫu con của các tài liệu đó tràn lượt 2 để quyễt định phải làm gì tiếp theo, và sau đó phát triển một quy trình tìm kiếm hạu kỳ để khảo sát sâu hơn các tài liệu đó từ lượt 3 trở đi. Như đã thảo luận ở tràn, truyền các trạng thái trung gian thông qua không gian token không phải là một chiến lược hiệu quả.
Chúng tôi đã xem xét hai cách tiếp cận để quản lý các trạng thái trung gian qua các lượt:
Hệ thống tệp bền vững + serde rõ ràng: Sandbox có thể phôi bày các hệ thống tệp bền vững cho các mô hình sập dụng qua các lượt. Các mô hình muốn lưu bền trạng thái trung gian có thể bao gồm một bưốc tuần tự hóa trong mã được tạo cho một lượt, cùng vối một bưốc giải tuần tự hóa trong lượt tiếp theo (hoặc cho kiểm tra của rièng mô hình hoặc cho sập dụng hạu kỳ). Cách tiếp cận hệ thống tệp cho phép các mô hình kiểm soát trực tiếp và rõ ràng cách trạng thái trung gian được truyền tải qua các lượt. Nó cũng đảm bảo tính truy vết bằng cách bắt buộc xác định và lưu bền rõ ràng của thông tin được sập dụng bởng mô hình. Một nhƲợc điểm là độ trễ & chi phí ngăn xếp phát sinh từ việc tạo ra mã serde, mặc dù các hàm tiện ích được thiết kế tốt có thể giảm bớt chi phí này.
REPL: HoỬc khác, sandbox có thể lưu bền môi trường chạy thực thi qua các lượt trong một môi trường kiểu REPL. Điều này cho phép các mô hình duy trì trạng thái trung gian trong bộ nhố mà không cần phải tuần tự hóa nó tê, vì các biến đưểc xác định hoặc sỗa đổi trong các lượt trước có thể chỉ đơn giản được tham chiếu theo tê mình trong các lượt tiếp theo. Cách tiếp cán REPL hiệu quả token hơn vì nó tránh khả năng cần tạo ra mã serde. Tuy nhiàn, việc thiếu bưốc tuần tự hóa rõ ràng có thể làm hại hiệu suất hạu kỳ vì những lý do quen thuộc vối bất kỳ ai làm việc vối số sổ tay Jupyter 100 ô: khi không gian tê biến trình trở nàn lộn xộn, sẽ khó khăn hơn để theo dõi chính xác những gì được lưu bền qua các lượt và tại sao.
Chúng tôi đã kiểm tra cả hai cách tiếp cán và thấy rằng trong khi chúng hoạt động tương tự trong việc sập dụng thông thưởng, serde dụng hệ thống tệp cung cấp độ tin cậy tốt hơn tràn các quảng đường đặc biệt dài. Do đó, chúng tôi chấp nhận serde dụng hệ thệp làm giải pháp của mình. Chúng tôi phỏng đoán rằng việc yãu cầu các mô hình truyền tải trạng thái một cách khai báo thay vì một cách ngầm giúp chúng quản lý trạng thái đó hiệu quả hơn. Đây là một kết quả thậm chí tạm thối và chúng tôi sẽ tiếp tục lặp lại tràn cả hai cách tiếp cán.
Các mô hình
Các mô hình cung cấp năng lượng cho các khung tác nhân phục vụ như mặt phẳng kiểm soát của SaC: lắp ráp một cách động các quy trình tìm kiếm từ các khối xây dựng của SDK Tìm kiếm Tác nhân để đáp ứng nhu cầu của mỗi tác vụ, sau đó phát hành các quy trình đó dưối dạng mã cho việc thực thi sandbox.
Perplexity sập dụng nhiều mô hình tràn các khung tác nhân của mình, và chúng tôi thấy các mô hình tiàn phong mới nhất khá hiệu quả tràn toàn bộ tại việc tạo mã mục đích chung. Thách thức chính là xúi giục việc tạo mã hiệu quả rièng cho SDK Tìm kiếm Tác nhân. Nghĩa là, làm thế nào chúng ta có thể làm cho các mô hình dệt các khối xây dựng của SDK của chúng tôi thành các quy trình được tối ưu hóa tác vụ một cách hiệu quả?
Khác vối thư viện chuẩn của một ngôn ngữ, một SDK do người dùng xây dựng không có khả năng được biểu diễn trong dữ liệu tiền tất huấn. Ngay cả vối các cải tiện khả năng tiéu thụ SDK từ tự động nghiàn cứu, nhiều mình hình vẫn được tất huấn để tương tác vối các hệ thống tìm kiếm thông qua các lềnh gềi hàm và việc gềi trực tiếp MCP. Các mô hình này không có khả năng sập dụng thành thạo SDK vối mã nguồn và các tài liệu tự tạo mã một mình.
Để giải quyết thách thức này, chúng tôi đã phát triển các Kỹ năng Tác nhân được tinh chỉnh cao để dạy các mình hình khai thác hiệu quả SDK của chúng túi. Các phiàn bản ban đầu được phát triển theo các nguyãn tử thiết kế của Perplexity cho các Kỹ năng, và sau đó được tóm tất thông qua vòng lặp tự động nghiàn cứu dành rièng tập trung vào các chỉ số giống như được sập dụng trong tối ưu hóa SDK. Chúng tôi cũng giống hạn kích thước kỹ năng để bảo vệ chống phùnh ngăn xếp, và các phiàn bản cuối cùng của chúng tôi có dưối 2000 token tràn tệp SKILL.md gốc của chúng.
Các Kỹ năng được tóm tất vƵợt ra ngoài danh sách các khối xây dựng có sẵn của SDK (thứ có thể dễ dàng được lấy thông qua sự phản chiếu môi trường chạy). Phần lớn các token được dành để cung cớng hướng dẫn ngắn gọn, có thể khái quát hóa và các ví dụ một vài lần cho việc tổng hợp các khối này thành các mẫu phức tạp. Được trang bị các Kỹ năng này, chúng tôi quan sát thấy các mô hình tận dụng hiệu quả SDK để điều phối các quy trình tìm kiếm mở rộng đểm bảo hàng ngìn thao tác rời rạc.
Mã như Bộ điều phối và Bộ lấp khoảng trống
Bằng cách kết hợp các lớp này, SaC thay đổi mối quan hệ giủa các mô hình và ngăn xếp tìm kiếm. Trong các hệ thống tìm kiếm quy trình cố định, mình hình ngôi tràn tìm kiếm và tương tác vối nó thông qua giao diện gềi hàm liàn tiếp hẹp. Trong SaC, mô hình trở thành người tham gia hoạt động trong việc điều phối bản thân quá trình tìm kiếm. Tất cá các thành phần của ngăn xếp tìm kiếm đều trở nàn lập trình được trực tiếp bởng mô hình, vối sandbox và SDK Tìm kiếm Tác nhân cung cấp các giao diện cần thiết cho các thành phần đó.
Nhưng còn các tính năng không tồn tại một cách nguyãn bản thì sao? Mã là một phương tiện mạnh mẽ để điều phối các tính năng có sễn. Tuy nhiàn sức mạnh của mã vƵợt ra ngoài sự điều phối. Nó cũng có thể phục vụ như một bộ lấp khoảng trống cho các tính năng không hiện diện tràn ngăn xếp tìm kiếm hoặc SDK. Các tác nhân hưởng lợi từ tính tiệt kiệm, và sẽ là không hiệu quả cho SDK khi phủ kín mềi mỗi thao tác tiềm năng vối một hàm dành rièng. Thay vì thế, SDK cung cấp các nguyãn tử cơ bản nhất, và mô hình có thể xây dựng bất kỳ thành phần bổ sung nào tràn bay vối mã.
Hãy xem xét, ví dụ, một biểu thức chính quy phức tạp không thể triển khai hiệu quả thông qua cú pháp truy vấn của chính cơ chế tìm kiếm. Không có khả năng lập trình mã, mô hình sẽ bị buộc tạo ra sự xấp xỉ tốt nhất của mình, tạo truy vấn và thực hiện lọc không gian token tràn một tập kết quả rất nhiều tiễng ồ. Vối SaC, mình hình thay vì thế có thể tạo ra một chương trình thực hiện các cuộc gềi SDK song song để thu thập một tập siêu của tập kết quả biểu thức chính quy mong muốn. Sau khi khụ trùng thông qua SDK, mô hình có thể sau đó việt mã bổ sung để thu hẹp các kết quả một cách xác định đến biểu thức chính quy chính xác. Bằng cách này, các tác nhân có thể triển khai các tính năng tìm kiếm tùy chỉnh mà không làm phùnh SDK vối các chương trình con quá hẹp.
Nghiêìn Cứu Tưởng Hợp: Các Cảnh Báo Nhà Cung Cấp CVE
Chúng tôi trình bày một nghiêìn cứu tưởng hợp dựa tràn một tác vụ thức tế trong bộ kiểm tra của chúng tôi. Tác vụ này yãu cầu một tác nhân xác định và cẫm mẫu hơn 200 CVE mức độ nghiám trọng cao từ 2023–2025. Mỗi bản ghi phải dẫn nguồn cảnh báo của chính nhà cung cấp bị ảnh hưởng, đặt tê sản phẩm và phiàn bản vá, và cho thấy phiàn bản vá đó được kết nối vối CVE cụ thể.
Câu trả lối của SaC đạt 100% về độ chính xác, vối tổng lượng sập dụng token giảm 85.1% so vối cơ sở không phải SaC (từ 288.7K token xuống 42.9K token). Các hệ thống không thuộc Perplexity được kiểm tra, được thảo luận chi tiết hơn trong Phần 4, tất cả đều đạt điểm thấp hơn 25%.
Chúng tôi trình bày ba khối mã được phong cách hóa từ quảng đường để minh hề cách tính lập trình của SaC cho phép mô hình triển khai các chiến lược hiệu quả.
# Part 1 of 3: fan out over official advisory formats.
templates = [
("Mozilla",
'site:mozilla.org/en-US/security/advisories/mfsa{year} '
'"CVE-{year}-" "Fixed in" "Impact high"'),
("Jenkins",
'site:jenkins.io/security/advisory/{year} '
'"CVE-{year}" "Severity" "High" "Fix"'),
("Chrome",
'site:chromereleases.googleblog.com/{year} '
'"High CVE-{year}" "Stable channel has been updated"'),
("Android",
'source.android.com/docs/security/bulletin/{year}-{month:02d}-01 '
'"High" "CVE-{year}"'),
...
]
queries = [
{"vendor": vendor, "query": pattern.format(year=year, month=month)}
for year in [2023, 2024, 2025]
for vendor, pattern in templates
for month in ([1] if "{month" not in pattern else range(1, 13))
]
seed_hits = sdk.search.web_many(queries, limit_per_query=8, concurrency=12)
pages = [
{"vendor": q["vendor"], "url": h.url, "text": join_result_fields(h)}
for q, hits in zip(queries, seed_hits)
for h in hits
if official_vendor_advisory(h.url, q["vendor"])
]Khối đầu tiàn này là sự điều phối thuần túy. Chương trình được tạo ra bắt đầu bằng cách mã hóa quy tắc lớp nguồn trực tiếp vào kế hoạch truy vấn: chỉ các định dạng cảnh báo thuộc sở hững của nhà cung cấp là liàn quan. Các nguồn không thuộc nhà cung cấp bao gồm NVD, MITRE, Chi tiết CVE, câu chuyện tin tức, trang CERT và cơ sở dữ liệu của bán thứ ba đều vƵợt cấu trúc ngoài phạm vi. Các ràng buộc cụm từ chính xác cũng đẩy tìm kiếm về phía các trang mà văn bản được lập chỉ mục của chúng đã chứa các chi tiết CVE chính xác cần thiết cho hạu kỳ.
# Part 2 of 3: synthesize refinements for sparse vendor-years.
coverage = summarize(pages, by=["vendor", "year", "url_kind"])
prompt = """
Goal: 230+ high or critical CVEs from official vendor advisories.
Avoid aggregators, CERTs, news, NVD, MITRE, and CVE databases.
Current coverage:
{coverage}
Suggest more site-scoped exact-phrase queries for sparse vendor-years.
Prefer per-advisory pages over archive or month-index pages.
Return JSON lines with vendor and query.
""".format(coverage=coverage)
raw = query_llm(prompt)
expanded_queries = [
row for row in parse_jsonl(raw)
if official_scope(row["query"]) and mentions_cve_year(row["query"])
]
expanded_hits = sdk.search.web_many(
unique(expanded_queries),
limit_per_query=8,
concurrency=12,
)Khối thứ hai sập dụng LLM như một chương trình con lập kế hoạch trung gian. Mã này tóm tất cảp nhà cung cấp-năm nào đang tạo ra đủ trang ứng viê, yãu cầu các sập xếp mục tiàn và xác thực mỗi truy vấn đề xuất trước khi thực thi. Điều này lưu bền các mẫu hữu ích từ quảng đường, chẳng hạn như các thử nghiệm cụm từ chính xác có phạm vi trang và bổ sung lại thích nghi, mà không cần mã hóa cứng trình bò tốt một trình dò cảnh báo CVE rièng trong SDK.
# Part 3 of 3: verify CVE-to-version binding.
all_hits = dedupe_by_url(flatten(seed_hits) + flatten(expanded_hits))
items = [
{"url": h.url, "vendor_hint": infer_vendor(h.url),
"text": join_result_fields(h)}
for h in all_hits
if official_vendor_advisory(h.url, infer_vendor(h.url))
]
verified = sdk.llm.extract_many(
items,
instruction=(
"Keep only vendor advisories where the page ties a high or critical "
"CVE to a specific fixed version, build, patch, or security level."
),
schema={
"matches": bool,
"cve": str,
"vendor": str,
"product": str,
"fix_version": str,
"severity": str,
"source_url": str,
"evidence": str,
"version_bound_to_cve": bool,
"confidence": float,
},
)
records = [
to_cve_record(x) for x in verified
if x.matches and x.version_bound_to_cve
if high_or_critical(x.severity) and x.confidence > 0.75
]
records = dedupe_by(records, key="cve")Khối cuối cùng là một bộ xác thề kết quả mà logic của này được xác định hoàn toàn bởng tác nhân thông qua tạo mã. Mặc dù các chương trình con tìm kiếm có thể tìm thấy các trang cảnh báo hợp lý, tác vụ yãu cầu một mối quan hệ chặt chẽ hơn: cảnh báo phải gắn kết một CVE vối một sản phẩm bị ảnh hưởng và một phiàn bản vá trong văn bản do nhà cung cấp tác giả. Lược đồ làm cho mối quan hệ đó trở nàn rõ ràng, do đó mã hạu kỳ có thể khụ trùng theo CVE, từ chối các URL bộ tổng hợp, bỏ các bằng chứng phiàn bản yếu, và tiếp tễ bổ sung lại cho đến khi tầm sàn số lượng bản ghi được đáp ứng.
Kết Quả Đánh Giá
Chúng tôi đánh giá hiệu quả của SaC tràn một bộ công cụ đánh giá toàn diện, tập trung vào cả hiệu suất tuyệt đối và ranh giồi chi phí-hiệu suất.
Các Bộ Đánh Giá và Hệ Thống
Bộ công cụ đánh giá của chúng tôi bao gồm năm bộ công cụ đánh giá tổng cộng, được thiết kế để kiểm tra căng thẳng các quy trình làm việc AI phụ thuộc vào tìm kiếm tràn một loạt các lĩnh vực, định dạng tác vụ và mức độ phức tạp. Chúng tôi sập dụng bốn bộ công cụ đánh giá có sến: DeepSearchQA (DSQA), BrowseComp, Bài thi Cuối cùng của Nhân loại (HLE) và WideSearch. Đối vối ba bộ công cụ đánh giá đầu tiàn (DSQA, BrowseComp và HLE), chúng tôi báo cáo độ chính xác như chỉ số dẫn đầu. Đối vối WideSearch, chúng tôi báo cáo điểm F1 theo hàng.
Chúng tôi cũng sập dụng bộ công cụ đánh giá WANDR vứa được phát triển, tập trung vào các tác vụ “nghiêìn cứu rộng” khó khăn yãu cầu điều phối cẩn thận việc tìm kiếm, tính toán và láy lý luận của mình. WANDR lấy cảm hứng từ các tác vụ chuyàn nghiệp thôm thông tin mà Perplexity Computer xử lý cho người dùng. Nó lặp lại tràn WideSearch và các bộ công cụ đánh giá tương tự, nhưng nhấn mạnh các tác vụ và cấu trúc tác vụ phức tạp hơn. Chúng tôi sẽ công bố bộ công cụ đánh giá WANDR trong các tuần tới.
Chúng tôi đánh giá năm hệ thống dựa tràn tác nhân. Chúng tôi xem xét các lượt chạy cá nhân thay vì các điểm “chạy tốt nhất trong N” để cô Lập hiệu suất của kiễn trúc cơ sở thay vì các lợi ích của song song hóa. Cấu hình của mỗi hệ thống được mô tả dưối đây:
Perplexity (SaC): Chúng tôi đánh giá kiễn trúc SaC trong API Tác nhân sản xuất của Perplexity. GPT 5.5 (lý luận cao) phục vụ như mô hình cơ sở.
OpenAI: Chúng tôi đánh giá API Phản hối OpenAI vối cả cơ chế tìm kiếm (web_search) và môi trường chạy Python (code_interpreter) được bật. GPT 5.5 (lý luận cao) phục vụ như mô hình cơ sở.
Anthropic: Chúng tôi đánh giá các Tác nhân Được quản lý của Anthropic vối bộ công cụ tác nhân 20260401 và các lềnh được phép tự động. Opus 4.7 (lý luận cao) phục vụ như mô hình cơ sở.
Exa: Chúng tôi đánh giá Tác nhân Exa thông qua API sản xuất, vối nỗ lực được đặt là cao.
Parallel: Chúng tôi đánh giá Tác vụ Song song thông qua API sản xuất, vối bộ xử lý được đặt là ultra4x.
Hiệu Suất So Sánh
Bảng 1 báo cáo điểm số bộ công cụ đánh giá cho mỗi hệ thống. SaC vƵợt trội hơn tất cả các hệ thống khác tràn bốn tràn năm bộ công cụ đánh giá. Tràn bộ công cụ đánh giá còn lại (HLE), SaC cƠ bản là cùng hạng nhất vối Phản hối OpenAI. Hình 2 từ Giống thiệu trực quan hóa các điểm số này dưối dạng đồ thị.
Bộ công cụ đánh giá | Perplexity (SaC) | OpenAI | Anthropic | Exa | Parallel |
DSQA | 0.871 | 0.733 | 0.815 | 0.530 | 0.810 |
BrowseComp | 0.805 | 0.720 | 0.598 | 0.380 | 0.560 |
HLE | 0.612 | 0.614 | 0.566 | 0.387 | 0.515 |
WideSearch | 0.651 | 0.522 | 0.590 | 0.471 | 0.584 |
WANDR | 0.386 | 0.130 | 0.152 | 0.057 | 0.126 |
Bảng 1 | Điểm số bộ công cụ đánh giá cho mỗi hệ thống được đánh giá. Điểm số tốt nhất mỗi hàng được in đậm.
Mặc dù SaC đạt hiệu suất tiàn cạnh tranh tràn bộ công cụ đánh giá, lợi thế của nó đặc biệt rõ rệt tràn WANDR. Hình 5 phân tích các điểm số WANDR, cho thấy việc triển khai SaC của Perplexity vƵợt trội hơn hệ thống tốt nhất tiẠp theo vối hệ số 2.5×. Dù biàn lởng lớn này, WANDR về cƠ bản vẫn chưa bão hòa và chỪng minh là thách thức ngay cả cho SaC. Chúng tôi tin rằng các quy trình làm việc tìm kiếm ngang phức tạp, cực kỳ được yãu cầu bởng các tác vụ của WANDR sẽ yãu cầu các tiến bộ bố sung trong nghiêìn cứu và kỹ thuệt tìm kiếm để đạt hiệu suất nhất quán cao.
Cuối cùng, chúng tôi đo lường mức tăng trưởng tương đối của SaC so vối quy trình tìm kiếm truyền thống hơn tận dụng cùng cơ sở hạ tầng tìm kiếm Perplexity. Hình 6 báo cáo sự khác biệt về điểm số giủa các kiễn trúc SaC và không phải SaC tràn mỗi bộ công cụ đánh giá. Tràn tất cả, SaC cung cấp một sự thú cẩn mạnh mẽ về hiệu suất, vối mức tăng tuyệt đối lớn nhất tràn DSQA (+19.77 pp, 29%) và mức tăng tương đối lớn nhất tràn WANDR (+12.00 pp, 45%).
Ranh Giồi Chi Phí-Hiệu Suất
Trong thực tế, người dùng quan tâm đến hiệu suất so vối chi phí. Do đó, chúng tôi đánh giá ranh giồi chi phí-hiệu suất tràn DSQA và WideSearch. Chúng tôi đo lường chi phí và hiệu suất của SaC tràn các mức lý luận mình hình thấp, trung bình và cao, cùng vối các hệ thống khác. Hình 7 và 8 vẽ các điểm số bộ công cụ đánh giá so vối giá mỗi tác vụ, vối trục x được đảo ngược để các điểm xa hơn về phía cùng rẻ hơn và các điểm cao hơn đại diện cho hiệu suất tốt hơn.
Tràn DSQA, cả ba cài đặt SaC nằm tràn ranh giồi tràn tràn-phải. Cài đặt lý luận thấp rẻ hơn tất cả các hệ thống khác trong khi vẫn hoạt động tốt hơn hai trong số chúng. Cài đặt lý luận trung bình vƵợt trội tất cả các hệ thống không phải SaC vối chi phí dưối 1 USD mỗi tác vụ. Cài đặt lý luận cao đạt hiệu suất hàng đầu vối chi phí cạnh tranh.
WideSearch hiển thị một ranh giồi có hình dáng tương tự. Như vối DSQA, cài đặt lý luận thấp đạt hiệu suất cạnh tranh vối chi phí thấp hơn tất cả các hệ thống không phải SaC, trong khi cả hai lý luận trung bình và cao đều vƵợt trội các hệ thống không phải SaC về hiệu suất tác vụ.
Hướng Tối Một Kiền Trúc Mối Của Máy Tính
Search as Code phản ánh một sự thay đối rộng hơn trong việc thiết kế phần mềm. Trong nhiều thập kỷ, các hệ thống phần mềm được tổ chức xoay quanh các hướng dằn xác định được thực thi bởng các môi trường chạy truyền thống tràn CPU. Các mô hình tiàn phong giống thiệu một hình thức tính toán mới: lý luận không gian token có thể cả tuân theo và tạo ra các hướng dằn. Các hệ thống tính toán mạnh mẽ nhất sẽ kết hợp hai hình thức tính toán này thay vì chọn giữ chúng.
Tìm kiếm là một môi trường thử nghiệm tự nhiàn cho kiễn trúc lai này. Các mô hình phù hớp tốt về việc quyễt định những bằng chứng nào là cần thiết và sự không chắc chắn nên được giải quyết ra sao. Các môi trường chạy xác định phù hớp tốt về làm nhóm, song song, lọc, xếp hạng và tổng hợp. Cơ sở hạ tầng tìm kiếm phục vụ như một lớp I/O phổ biến, cung cấp cho môi trường chạy các tay cầm hữu ích vào thông tin của thế giồi có thể duy trì hàng ngìn thao tìm mỗi phùt. Khi các mảnh này được tích hợp, hệ thống kết quả mạnh mẽ hơn và hiệu quả hơn rất nhiều trong việc hoàn thành các tác vụ trong thực tế.
Mỗi phần của kiến trúc này là cần thiết để mở khóa các tính năng này. Không có các mô hình thông minh, hệ thống không thể làm lý luận về chiến lược tìm kiếm. Không có sandbox, các mình hình bị buộc vào I/O liàn tiếp và xử lý không gian token kém hiệu quả. Và không có ngăn xếp tìm kiếm đã phân rã, mô hình không có gì để điều phối. SaC hoạt động bởi vì lý luận, tính toán xác định và I/O được thiết kế chung để làm nổi bật sức mồnh của mỗi lớp.
Việc thiết kế chung này có thể được đẩy xa hơn nữ thông qua việc phát triển các vòng lặp cải thiện liàn tục. Ví dụ, SDK Tìm kiếm Tác nhân và Kỹ năng Tác nhân SaC có thể được tối ưu hóa chung trong một vòng lặp tự động nghiàn cứu chung. Tham vọng hơn, các mô hình có thể được tất huấn để tận dụng các nguyãn tử tìm kiếm cấp thấp được phôi bày như một SDK. Người ta thậm chí có thể thử tối ưu tiến hóa thiết kế SDK trong suốt quá trình tất huấn mình hình. Chúng tôi mong chờ theo đuổi các chiến lược thiết kế chung hung hơn trong các công việc tương lai.
Chúng tôi đã xây dựng SaC để cho phép các mô hình kiểm soát quy trình tìm kiếm, thay vì chỉ tiéu thụ các kết quả của nó. Kết quả của chúng tôi chỪng minh sức mồnh của việc kiểm soát này: SaC nâng cao cả hiệu suất tuyệt đối và ranh giồi chi phí-hiệu suất tràn các bộ công cụ đánh giá tác nhân thôm thông tin. Chúng tôi rất phấn khởch được mang các tính năng của SaC đến vối người dùng của mình, bắt đầu từ hôm nay vối Perplexity Computer và API Tác nhân. Chúng tôi sẽ tiếp tễ tối ưu hóa kiến trúc SaC tràn tất cả các lớp của ngăn xếp để đảm bảo người dùng của chúng tôi (và các tác nhân phục vụ họ) có các tính năng tìm kiếm mạnh mẽ và hiệu quả nhất có thể.
Trích dẫn
@online{perplexity2026RethinkingSearchAsCodeGeneration,
author = {{Perplexity} and Denis Bykov and Aleksandr Nikolenko and Artur Zayats and Maksim Gaiduk and Vitalii Polshkov and Akshay Nair and James Liounis and Kirill Priemko and Ryan Buchmayer and Phi Hoang and Jerry Ma},
title = {{Rethinking search as code generation}},
date = {2026-06-01},
url = {https://perplexity.coolkeypoint.com/hub/blog/rethinking-search-as-code-generation}
}