Внешние API
Они должны возвращать список словарей с ключами «name» и «value», которые будут использоваться во внешнем интерфейсе. Значения словаря могут быть произвольно вложенными с дополнительными словарями «имя-значение».
Значения ошибок должны содержать верхний уровень с ключом «error».
compare_numbers/compare_numbers_provider.py
class CompareNumbersProvider():
def compare(self, num1, num2):
try:
num1 = float(num1)
num2 = float(num2)
except ValueError:
raise ValueError('numbers must be parsable by python `float`')
if num1 == num2:
result = "equal to"
elif num1 > num2:
result = "greater than"
else:
result = "less than"
return [{'name': 'comparison', 'value': result}]
def end_dialog(self):
return []
def __repr__(self) -> str:
'''Return an executable initialization for this class for executable logs'''
return 'CompareNumbersProvider()'
## Реализовать интерфейсы для обработки параметров
Интерфейсы обрабатывают запросы внешнего интерфейса для провайдеров. Они должны быть достаточно прозрачными, но должны реализовывать логирование и управление переменными.
Декоратор `@route` назначает HTTP-конечные точки вашим API.
Помощник `api_call` оборачивает вызов логированием и сохранением состояния переменных.
[compare_numbers/compare_numbers_interface.py](./compare_numbers/compare_numbers_interface.py)
```python
from apis.compare_numbers.compare_numbers_provider import CompareNumbersProvider
from apis.base import BaseInterface
from apis.utils import load_parameter, route, completes_dialog
class CompareNumbersInterface(BaseInterface):
def __init__(self, *args, **kwargs):
super().__init__()
self.provider = CompareNumbersProvider()
# bind an HTTP endpoint to this function
@route('/compare_numbers/compare', methods=['POST'])
def compare(self, request_params):
number1 = load_parameter(request_params, "number1")
number2 = load_parameter(request_params, "number2")
return self.api_call(self.provider.compare,
request_params, number1, number2)
@route('/end_dialog', methods=['POST'])
@completes_dialog(success=True, confirmation_type='rate_satisfaction')
def end_dialog(self, request_params):
return self.api_call(self.provider.end_dialog, request_params)
## Создание остальной части домена
Создайте новую папку в ../gui/backend/domains с именем вашего домена, например,
[../gui/backend/domains/compare_numbers](../gui/backend/domains/compare_numbers) и файл [`config.py`](../gui/backend/domains/compare_numbers/config.py)
```python
# Config file for the compare_numbers domain
import os
import sys
from keys import keys
from domains.domain import Domain
sys.path.append(
os.path.dirname(
os.path.dirname(
os.path.dirname(
os.path.dirname(
os.path.dirname(
os.path.abspath(__file__))))))) # for loading apis
from apis.compare_numbers.compare_numbers_interface import CompareNumbersInterface
# Initialize interfaces
interfaces = [
CompareNumbersInterface(),
]
# Create a Domain object, which will be used from this file
domain_dir = os.path.dirname(os.path.abspath(__file__))
compare_numbers_domain = Domain(
'compare_numbers',
interfaces,
initialization=domain_dir + '/initialization.json',
apis=domain_dir + '/apis.json',
agent_templates=domain_dir + '/agent_templates.txt',
)
Этот конфигурационный файл должен инициализировать интерфейсы с любыми необходимыми ключами и указателями на следующие файлы:
{num1} is {comparator} {num2}
Для включения исполняемых журналов и новых тестовых случаев требуется немного больше настроек.
Добавьте любых новых провайдеров в apis/__init__.py
from apis.compare_numbers.compare_numbers_provider import CompareNumbersProvider
Добавьте вашу конфигурацию в test.py
from domains.compare_numbers.config import compare_numbers_domain
Перезапустите серверную часть с помощью команды --domain=$NAME
cd ../gui/backend
python main.py --port=8081 --domain=compare_numbers --num_rooms=1 --log_dir=logs/tutorial
Перезагрузите интерфейс (важно!)
cd ../gui/frontend
./run.sh 8081 8082
Обновите URL-адреса интерфейса. Теперь ваш новый API должен быть виден, и вы можете начать сбор данных между людьми.
Вы можете захотеть взаимодействовать с автоматическим чат-ботом вместо человеческого агента. Вы можете реализовать своего собственного пользовательского агента, следуя agents/README.md. Существует пример простой реализации на основе правил, которая использует эти интерфейсы в compare_numbers_agent.py.
Чтобы запустить этого агента, перезапустите серверную часть с этой командой:
cd ../gui/backend
python main.py --port=8081 --domain=compare_numbers --num_rooms=1 --log_dir=logs/tutorial \
--agent_class_name=agents.compare_numbers_agent.CompareNumbersAgent
интерфейс - провайдер
/
менеджер провайдер
\ /
интерфейс
\ провайдер
Менеджер управляет всеми службами API. Он поддерживает:
Интерфейсы абстрагируют доступ к API и могут использоваться для абстрагирования различий между внешними службами API, такими как GoogleMaps и MicroworldMaps. Каждый должен наследовать от BaseInterface и вызывать api_call
. Интерфейсы выполняют следующие действия:
Провайдеры фактически реализуют логику API. Это может включать вызов внешних служб, запрос к базе данных и другую сложную логику.
Пример:
CompareNumbersInterface - CompareNumbersProvider
/
менеджер
\ GMapsProvider
\ /
MapsInterface
\
MicroworldMapProvider
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )