You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.1 KiB
38 lines
1.1 KiB
9 months ago
|
import json
|
||
|
import os
|
||
|
|
||
|
import requests
|
||
|
from langchain.tools import tool
|
||
|
|
||
|
|
||
|
class SearchTools():
|
||
|
|
||
|
@tool("Search the internet")
|
||
|
def search_internet(query):
|
||
|
"""Useful to search the internet
|
||
|
about a a given topic and return relevant results"""
|
||
|
top_result_to_return = 4
|
||
|
url = "https://google.serper.dev/search"
|
||
|
payload = json.dumps({"q": query})
|
||
|
headers = {
|
||
|
'X-API-KEY': os.environ['SERPER_API_KEY'],
|
||
|
'content-type': 'application/json'
|
||
|
}
|
||
|
response = requests.request("POST", url, headers=headers, data=payload)
|
||
|
# check if there is an organic key
|
||
|
if 'organic' not in response.json():
|
||
|
return "Sorry, I couldn't find anything about that, there could be an error with you serper api key."
|
||
|
else:
|
||
|
results = response.json()['organic']
|
||
|
string = []
|
||
|
for result in results[:top_result_to_return]:
|
||
|
try:
|
||
|
string.append('\n'.join([
|
||
|
f"Title: {result['title']}", f"Link: {result['link']}",
|
||
|
f"Snippet: {result['snippet']}", "\n-----------------"
|
||
|
]))
|
||
|
except KeyError:
|
||
|
next
|
||
|
|
||
|
return '\n'.join(string)
|