Learning from Bing Search

UFO can enhance the AppAgent by searching for information on Bing to obtain up-to-date knowledge for niche tasks or applications beyond the AppAgent's existing knowledge base.

Mechanism

When processing a request, the AppAgent:

  1. Constructs a Bing search query based on the request context
  2. Retrieves top-k search results from Bing
  3. Extracts relevant information from the search results
  4. Generates a plan informed by the retrieved information

This mechanism is particularly useful for: - Tasks requiring current information (e.g., latest software features, current events) - Applications or domains not covered by the agent's training data - Dynamic information that changes frequently

Configuration

To enable Bing search integration:

  1. Obtain Bing API Key: Get your API key from Microsoft Azure Bing Search API

  2. Configure Parameters: Set the following options in config.yaml:

Configuration Option Description Type Default
RAG_ONLINE_SEARCH Enable Bing search integration Boolean False
BING_API_KEY Bing Search API key String ""
RAG_ONLINE_SEARCH_TOPK Number of search results to retrieve Integer 5
RAG_ONLINE_RETRIEVED_TOPK Number of retrieved results to include in prompt Integer 5

For more details on RAG configuration, see the RAG Configuration Guide.

API Reference

Bases: Retriever

Class to create online retrievers.

Create a new OfflineDocRetriever. :query: The query to create an indexer for. :top_k: The number of documents to retrieve.

Source code in rag/retriever.py
168
169
170
171
172
173
174
175
def __init__(self, query: str, top_k: int) -> None:
    """
    Create a new OfflineDocRetriever.
    :query: The query to create an indexer for.
    :top_k: The number of documents to retrieve.
    """
    self.query = query
    self.indexer = self.get_indexer(top_k)

get_indexer(top_k)

Create an online search indexer.

Parameters:
  • top_k (int) –

    The number of documents to retrieve.

Returns:
  • The created indexer.

Source code in rag/retriever.py
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
def get_indexer(self, top_k: int):
    """
    Create an online search indexer.
    :param top_k: The number of documents to retrieve.
    :return: The created indexer.
    """

    bing_retriever = web_search.BingSearchWeb()
    result_list = bing_retriever.search(self.query, top_k=top_k)
    documents = bing_retriever.create_documents(result_list)
    if len(documents) == 0:
        return None
    try:
        indexer = bing_retriever.create_indexer(documents)
        logger.info(
            f"Online indexer created successfully for {len(documents)} searched results."
        )
    except Exception as e:
        logger.warning(f"Failed to create online indexer, error: {e}.")
        return None

    return indexer