Сервіс відгуків про товари
Цей сервіс відповідає за видачу відгуків про товари та відповіді на запитання про конкретний товар на основі опису товару та відгуків.
Він використовує LLM, сумісний з OpenAI, для відповіді на запитання користувачів про конкретний товар.
Відгуки про товари зберігаються в базі даних (PostgreSQL).
Сирці сервісу відгуків про товари
Конфігурація LLM
Стандартно цей сервіс використовує імітацію LLM, яка відповідає формату API OpenAI. Її можна замінити на справжній OpenAI LLM, заповнивши наступні змінні середовища у файлі .env.override:
LLM_BASE_URL=https://api.openai.com/v1
LLM_MODEL=gpt-4o-mini
OPENAI_API_KEY=<replace with API key>
Автоматичне інструментування
Цей сервіс на базі Python використовує автоматичне інструментування OpenTelemetry для Python, що здійснюється за допомогою Python-обгортки opentelemetry-instrument для запуску скриптів. Це можна зробити в команді ENTRYPOINT для Dockerfile сервісу.
ENTRYPOINT [ "opentelemetry-instrument", "python", "product_reviews_server.py" ]
Трейси
Ініціалізація трасування
SDK OpenTelemetry ініціалізується в блоці коду __main__. Цей код створить провайдера трасування та встановить процесор Span для використання. Експортування точок доступу виходу, атрибутів ресурсів та назви сервісу автоматично встановлюються за допомогою автоматичного інструментування OpenTelemetry на основі змінних середовища.
tracer = trace.get_tracer_provider().get_tracer("product-reviews")
Додавання атрибутів до автоматично інструментованих відрізків
Під час виконання автоматично інструментованого коду ви можете отримати поточний відрізок з контексту.
span = trace.get_current_span()
Додавання атрибутів до відрізка здійснюється за допомогою функції set_attribute обʼєкта відрізка. У функції get_product_reviews до відрізка додається атрибут для фіксації ідентифікатора товару, який був переданий у запиті:
span.set_attribute("app.product.id", request_product_id)
Створення нових відрізків
Нові відрізки можна створювати та розміщувати в активному контексті за допомогою start_as_current_span обʼєкта OpenTelemetry Tracer. При використанні разом із блоком with відрізок автоматично закінчується, коли блок завершує виконання. Це робиться у функції get_product_reviews.
with tracer.start_as_current_span("get_product_reviews") as span:
Метрики
Ініціалізація метрик
SDK OpenTelemetry ініціалізується в блоці коду __main__. Цей код створить провайдера вимірювання. Експорт точок доступу, атрибути ресурсів та назва сервісу автоматично встановлюються за допомогою інструменту автоматичного інструментування OpenTelemetry на основі змінних середовища.
meter = metrics.get_meter_provider().get_meter("product-reviews")
Власні метрики
Наразі доступні такі власні метрики:
app_product_review_counter: сукупна кількість відгуків про товар, повернута сервісомapp_ai_assistant_counter: сукупна кількість запитань, надісланих до AI-асистента товару
Автоматично інструментовані метрики
Наступні метрики доступні завдяки автоматичній інструментації, наданій opentelemetry-instrumentation-system-metrics, яка встановлюється як частина opentelemetry-bootstrap під час створення образу Docker для сервісу оглядів товарів:
runtime.cpython.cpu_timeruntime.cpython.memoryruntime.cpython.gc_count
Логи
Ініціалізація логів
SDK OpenTelemetry ініціалізується в блоці коду __main__. Наступний код створює провайдера логів із пакетним процесором, експортером логів OTLP та обробником логів. Насамкінець він створює логгер для використання в усьому застосунку.
logger_provider = LoggerProvider(
resource=Resource.create(
{
'service.name': service_name,
}
),
)
set_logger_provider(logger_provider)
log_exporter = OTLPLogExporter(insecure=True)
logger_provider.add_log_record_processor(BatchLogRecordProcessor(log_exporter))
handler = LoggingHandler(level=logging.NOTSET, logger_provider=logger_provider)
logger = logging.getLogger('main')
logger.addHandler(handler)
Створення записів логів
Створіть логи за допомогою логгера. Приклади можна знайти у функції get_ai_assistant_response.
logger.info(f"Model wants to call {len(tool_calls)} tool(s)")
Як бачите, після ініціалізації записи логів можна створювати так само, як і в стандартному Python. Бібліотеки OpenTelemetry автоматично додають ідентифікатор трасування та ідентифікатор відрізка для кожного запису логу, що дозволяє виконувати зіставлення логів і трасувань.
Примітки
Логи для Python все ще перебувають в експериментальному стані, тому можливі деякі зміни. Реалізація в цьому сервісі відповідає прикладу логу Python.
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!