Google Search API integration with serper.dev (wrapper, tests, docs, … (#909)

Adds Google Search integration with [Serper](https://serper.dev) a
low-cost alternative to SerpAPI (10x cheaper + generous free tier).
Includes documentation, tests and examples. Hopefully I am not missing
anything.

Developers can sign up for a free account at
[serper.dev](https://serper.dev) and obtain an api key.

## Usage

```python
from langchain.utilities import GoogleSerperAPIWrapper
from langchain.llms.openai import OpenAI
from langchain.agents import initialize_agent, Tool

import os
os.environ["SERPER_API_KEY"] = ""
os.environ['OPENAI_API_KEY'] = ""

llm = OpenAI(temperature=0)
search = GoogleSerperAPIWrapper()
tools = [
    Tool(
        name="Intermediate Answer",
        func=search.run
    )
]

self_ask_with_search = initialize_agent(tools, llm, agent="self-ask-with-search", verbose=True)
self_ask_with_search.run("What is the hometown of the reigning men's U.S. Open champion?")
```

### Output
```
Entering new AgentExecutor chain...
 Yes.
Follow up: Who is the reigning men's U.S. Open champion?
Intermediate answer: Current champions Carlos Alcaraz, 2022 men's singles champion.
Follow up: Where is Carlos Alcaraz from?
Intermediate answer: El Palmar, Spain
So the final answer is: El Palmar, Spain

> Finished chain.

'El Palmar, Spain'
```
This commit is contained in:
rogerserper
2023-02-16 07:47:17 +01:00
committed by GitHub
parent 52753066ef
commit e46cd3b7db
11 changed files with 497 additions and 55 deletions

View File

@@ -1,7 +1,7 @@
"""Integration test for self ask with search."""
from langchain.agents.self_ask_with_search.base import SelfAskWithSearchChain
from langchain.llms.openai import OpenAI
from langchain.serpapi import SerpAPIWrapper
from langchain.utilities.google_serper import GoogleSerperAPIWrapper
def test_self_ask_with_search() -> None:
@@ -9,7 +9,7 @@ def test_self_ask_with_search() -> None:
question = "What is the hometown of the reigning men's U.S. Open champion?"
chain = SelfAskWithSearchChain(
llm=OpenAI(temperature=0),
search_chain=SerpAPIWrapper(),
search_chain=GoogleSerperAPIWrapper(),
input_key="q",
output_key="a",
)

View File

@@ -0,0 +1,9 @@
"""Integration test for Serper.dev's Google Search API Wrapper."""
from langchain.utilities.google_serper import GoogleSerperAPIWrapper
def test_call() -> None:
"""Test that call gives the correct answer."""
search = GoogleSerperAPIWrapper()
output = search.run("What was Obama's first name?")
assert "Barack Hussein Obama II" in output