# Инструмент Web Search
## Описание
Инструмент `web_search` — это gRPC-сервис на Go, который выполняет веб-поиск с использованием поисковой системы **Tavily AI**. Он предназначен для получения актуальной информации, фактов и новостей путем возврата списка релевантных результатов поиска.
## Параметры
Инструмент принимает следующие аргументы в виде JSON-объекта:
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---------------|----------|--------------|--------------|------------------------------------------------------|
| `query` | `string` | **Да** | | Поисковый запрос или вопрос. |
| `max_results` | `number` | Нет | `5` | Максимальное количество результатов поиска для возврата. |
## Ответ
* **Успешный поиск:** Если поиск успешен, инструмент возвращает JSON-массив объектов, где каждый объект представляет собой результат поиска от Tavily API. Каждый результат обычно содержит `title`, `url`, `content` (фрагмент) и `score`.
* **Ошибка:** Если API-ключ Tavily не настроен, отсутствует запрос или API возвращает ошибку, инструмент возвращает сообщение об ошибке.
## Пример использования
Вот пример использования инструмента `web_search` для поиска информации о языке программирования Go.
**Запрос:**
```bash
curl -X POST http://localhost:8002/v1/tools:run \
-d '{
"name": "web_search",
"arguments": {
"query": "Что такое язык программирования Go?",
"max_results": 2
}
}'
```
**Успешный ответ:**
```json
{
"result": {
"listValue": {
"values": [
{
"structValue": {
"fields": {
"title": { "stringValue": "The Go Programming Language" },
"url": { "stringValue": "https://go.dev/" },
"content": { "stringValue": "Go — это язык программирования с открытым исходным кодом, который позволяет легко создавать простое, надежное и эффективное программное обеспечение." },
"score": { "numberValue": 0.98 }
}
}
},
{
"structValue": {
"fields": {
"title": { "stringValue": "Go (язык программирования) — Википедия" },
"url": { "stringValue": "https://ru.wikipedia.org/wiki/Go_(язык_программирования)" },
"content": { "stringValue": "Go — это статически типизированный, компилируемый язык программирования, разработанный в Google Робертом Гриземером, Робом Пайком и Кеном Томпсоном..." },
"score": { "numberValue": 0.97 }
}
}
}
]
}
}
}
```
## Конфигурация
Инструменту требуется файл `config.json` с портом и вашим API-ключом от Tavily.
**Пример `config.json`:**
```json
{
"port": 50060,
"command": ["go", "run", "."],
"tavily_api": {
"api_key": "your-tavily-api-key"
}
}
```
* `port`: Порт, на котором будет слушать gRPC-сервер инструмента.
* `command`: Команда и аргументы для запуска инструмента.
* `tavily_api`: Ваш API-ключ для сервиса поиска Tavily.
## Проверки состояния и логирование
* **Проверки состояния:** Реализует стандартный протокол gRPC Health Checking Protocol.
* **Логирование:** Использует структурированный JSON-логгер (`slog`) для наблюдаемости.
## Тестирование
Для тестирования инструмента вы можете запустить предоставленные интеграционные тесты. Перейдите в директорию инструмента и выполните:
```bash
go test ./...
```