12 Дней (День 9) — Автоматизация обработки чеков с помощью платформы Gradient
🎄 День 9: Извлечение ключевых деталей квитанции с помощью Gradient от DigitalOcean 🎁
Добро пожаловать в День 9 12 Дней DigitalOcean! В последние несколько дней мы разрабатываем службу обработки квитанций по электронной почте. Цель проста: позволить пользователям пересылать квитанции или счета на специальный адрес электронной почты, извлекать ключевые данные, такие как дата, сумма, валюта и поставщик, и хранить их в базе данных или в таблице для удобства последующего просмотра.
Звучит удобно, правда? Теперь подумайте о том, чтобы делать это вручную — просматривать электронные письма, копировать детали по одной и вставлять их в таблицу. Это повторяющаяся, подверженная ошибкам задача и, скажем прямо, пустая трата вашего времени. Вот тут и приходит на помощь ИИ.
Вместо того чтобы писать парсер для каждого формата чека, вы будете использовать платформу Gradient от DigitalOcean для динамической обработки. К концу этого учебника у вас будет приложение Flask, которое принимает неаккуратные электронные письма с чеками, обрабатывает их с помощью ИИ и преобразует в чистый, структурированный JSON.
🤔 Почему стоит использовать Gradient Agent для этого?
Электронные письма не стандартизированы. Каждый поставщик по-разному форматирует квитанции, и написание собственных парсеров для всех этих вариаций непрактично. Искусственный интеллект идеально подходит для этой проблемы. Он отлично распознает шаблоны в неструктурированном тексте и извлекает важную информацию.
С платформой Gradient от DigitalOcean вы получаете доступ к предварительно обученным моделям от Meta, Mistral и Anthropic. Эти модели мощные и гибкие, и вы даже можете дообучить их для конкретных задач, если это необходимо. Для этого урока мы будем использовать предварительно обученную модель, чтобы упростить процесс.
✨ Что вы узнаете
- Как создать и настроить агент Gradient на DigitalOcean.
- Как протестировать вашего агента, чтобы убедиться, что он извлекает правильные детали.
- Как интегрировать агента с уже развернутым приложением Flask.
- Как протестировать весь поток, от электронной почты до вывода в JSON.
🛠 Что вам понадобится
Чтобы извлечь максимум из этого руководства, мы предполагаем следующее:
- Flask-приложение уже развернуто на DigitalOcean: Если вы еще не развернули Flask-приложение, вы можете следовать инструкциям в День 7 — Создание и развертывание процессора квитаций на основе электронной почты.
- Настройка Postmark для тестирования электронной почты: чтобы протестировать процессинг электронной почты в квитанции, вам нужно настроить Postmark для пересылки писем в ваше Flask-приложение. Смотрите День 8 — Подключение Postmark к вашему Flask-приложению для пошагового руководства.
Примечание: Даже если у вас это не настроено, вы все равно научитесь:
- Настройте агент Gradient на DigitalOcean.
- Взаимодействуйте с агентом программно, чтобы выполнять задачи, используя OpenAI Python SDK.
🧑🍳 Пошаговое руководство
Шаг 1: Создайте градиентного агента
Давайте начнем с создания основного компонента этой системы: агента градиента.
-
Войдите в свою учетную запись DigitalOcean и перейдите на платформу Gradient.
-
Нажмите Создать агента и дайте вашему агенту имя, например
receipt-processor-agent. -
Добавьте следующие инструкции для описания задачи агента:
Extract the following details from emails: - Date of transaction - Amount - Currency - Vendor name Ensure the output is in the following JSON format: { "date": "<date>", "amount": "<amount>", "currency": "<currency>", "vendor": "<vendor>" }
-
Выберите модель: Для этого учебника выберите Llama 3.1 Instruct (8B). Она отлично подходит для задач общего назначения, связанных с выполнением инструкций.
Совет: Модели можно обновлять позже, даже после создания агента. Вы также можете оценивать модели в Площадке Моделей перед выбором одной. Для получения полного списка поддерживаемых моделей обратитесь к документации DigitalOcean.
{}
-
Дополнительно: Добавьте Базу Знаний Вы можете улучшить вашего агента, добавив базу знаний. Это позволит ему обучаться на основе конкретных документов или наборов данных, которые вы предоставите. Для простоты мы пропустим этот шаг в данном руководстве.
-
Создайте агента: Прокрутите вниз и нажмите Создать агента, чтобы завершить настройку.
Шаг 2: Протестируйте своего агента
Прежде чем подключить агента к приложению, давайте убедимся, что он работает. Перейдите на вкладку Игровая площадка в настройках агента. Это тестовая зона, где вы можете взаимодействовать с агентом и увидеть, как он реагирует.
- Вставьте этот текст “образец электронного письма” в Площадку:
Thank you for your purchase! Your order #12345 has been processed. Total: $35.99. Date: December 29, 2024. Thank you for shopping at Amazon.com
- Агент должен вернуть:
{ "date": "Dec 29, 2024", "amount": "35.99", "currency": "USD", "vendor": "Amazon" }
-
Если нет, скорректируйте инструкции и протестируйте снова. Этот шаг предназначен для того, чтобы убедиться, что агент понимает, что вы хотите.
Шаг 3: Получите конечную точку и ключ доступа
- Как только ваш агент заработал, пора подключить его к вашему приложению. Перейдите на вкладку Конечная точка в настройках агента и скопируйте URL. Он должен выглядеть примерно так:
https://agent-1234abcd5678efgh1234-abcde.ondigitalocean.app
- Затем перейдите на вкладку Настройки и создайте ключ доступа. Этот ключ позволяет вашему приложению безопасно взаимодействовать с агентом. Сохраните ключ в надежном месте — он вам скоро понадобится.
Шаг 4: Безопасно храните переменные окружения в DigitalOcean
Теперь, когда у нас есть конечная точка агента и ключ безопасного агента, нам нужно безопасно их сохранить, чтобы они были доступны для нашего приложения Flask.
-
Перейдите в настройки приложения: перейдите к вашему приложению в панели управления DigitalOcean и нажмите Настройки.
-
Найдите переменные окружения: Прокрутите до раздела Переменные окружения уровня приложения.
-
Добавьте следующие переменные:
AGENT_BASE_URL: Вставьте базовый URL агента Gradient, например,https://agent-1234abcd5678efgh1234-abcde.ondigitalocean.app.
SECURE_AGENT_KEY: Вставьте сгенерированный ключ безопасного агента в настройках Gradient.-
Сохранить и повторно развернуть: Сохраните изменения, и DigitalOcean автоматически повторно развернет ваше приложение с новыми переменными окружения.
Шаг 5: Обновите ваше приложение Flask с помощью OpenAI SDK
Теперь мы обновим наше приложение Flask, чтобы общаться с агентом Gradient с помощью SDK OpenAI. Вот как мы подойдем к этому:
-
Установите необходимые библиотеки: Запустите эту команду, чтобы убедиться, что у вас есть необходимые библиотеки:
pip install openai flask python-dotenv -
Требования к заморозке: Создайте файл
requirements.txtдля отслеживания ваших зависимостей:pip freeze > requirements.txt -
Настройка SDK OpenAI: В приложении мы инициализируем SDK OpenAI и настраиваем его для использования конечной точки DigitalOcean Gradient. Это отвечает за связь с агентом, которого мы создали ранее.
from openai import OpenAI import os from dotenv import load_dotenv Load environment variables load_dotenv() Secure agent key and endpoint SECURE_AGENT_KEY = os.getenv("SECURE_AGENT_KEY") AGENT_BASE_URL = os.getenv("AGENT_BASE_URL") AGENT_ENDPOINT = f"{AGENT_BASE_URL}/api/v1/" Initialize the OpenAI client client = OpenAI( base_url=AGENT_ENDPOINT, api_key=SECURE_AGENT_KEY ) -
Добавьте функцию для обработки содержания электронной почты: Теперь мы добавим функцию для отправки содержания электронной почты агенту Gradient, обработки его с помощью подсказки и возврата результата. Вот как это работает:
def process_with_ai(email_content): """ Process email content with GenAI. """ prompt = ( "Extract the following details from the email:n" "- Date of transactionn" "- Amountn" "- Currencyn" "- Vendor namenn" f"Email content:n{email_content}nn" "Ensure the output is in JSON format with keys: date, amount, currency, vendor." ) response = client.chat.completions.create( model="your-model-id", # Replace with your GenAI model ID messages=[{"role": "user", "content": prompt}] ) return response.choices[0].message.content -
Обновите конечную точку Flask: Наконец, мы подключим эту функцию к маршруту
/inboundприложения Flask для обработки входящих писем. Вот обновленная конечная точка:@app.route('/inbound', methods=['POST']) def handle_inbound_email(): """ Process inbound emails and return extracted JSON. """ email_content = request.json.get("TextBody", "") if not email_content: return jsonify({"error": "No email content provided"}), 400 extracted_data = process_with_ai(email_content) return jsonify({"extracted_data": extracted_data})
Полное приложение Flask с интеграцией градиента
app.py from flask import Flask, request, jsonify import os from dotenv import load_dotenv from openai import OpenAI import logging Load environment variables load_dotenv() Initialize Flask app app = Flask(__name__) Configure logging logging.basicConfig(level=logging.INFO) Secure agent key and endpoint SECURE_AGENT_KEY = os.getenv("SECURE_AGENT_KEY") AGENT_BASE_URL = os.getenv("AGENT_BASE_URL") AGENT_ENDPOINT = f"{AGENT_BASE_URL}/api/v1/" Initialize the OpenAI client for GenAI client = OpenAI( base_url=AGENT_ENDPOINT, api_key=SECURE_AGENT_KEY ) def process_with_ai(email_content): """ Process email content with GenAI. """ prompt = ( "Extract the following details from the email:n" "- Date of transactionn" "- Amountn" "- Currencyn" "- Vendor namenn" f"Email content:n{email_content}nn" "Ensure the output is in JSON format with keys: date, amount, currency, vendor." ) response = client.chat.completions.create( model="your-model-id", # Replace with your GenAI model ID messages=[{"role": "user", "content": prompt}] ) return response.choices[0].message.content @app.route('/inbound', methods=['POST']) def handle_inbound_email(): """ Process inbound emails and return extracted JSON. """ email_content = request.json.get("TextBody", "") if not email_content: logging.error("No email content provided.") return jsonify({"error": "No email content provided"}), 400 extracted_data = process_with_ai(email_content) logging.info("Extracted Data: %s", extracted_data) # Log the extracted data return jsonify({"extracted_data": extracted_data}) if __name__ == "__main__": app.run(port=5000)
Шаг 6: Развертывание на DigitalOcean
Чтобы развернуть обновлённое приложение Flask, выполните шаги из Дня 7. Вот быстрое резюме:
- Загрузите свой обновленный код на GitHub: После внесения необходимых изменений в ваше Flask-приложение, зафиксируйте и загрузите обновленный код на GitHub. Это запустит автоматическое развертывание на платформе приложений DigitalOcean.
git add . git commit -m "Add GenAI integration for receipt processing" git push origin main
2.Мониторинг развертывания: Вы можете отслеживать процесс в разделе Развертывания на панели управления вашего приложения.
3.Проверьте свою развертку: После завершения развертки перейдите по публичному URL вашего приложения и протестируйте его функциональность. Вы также можете проверить журналы выполнения на панели управления, чтобы подтвердить, что приложение запустилось успешно.
Шаг 7: Протестируйте весь конвейер
-
Отправить примерное письмо: Перешлите пример письма с чеком на адрес Postmark, который вы настроили в День 8.
-
Мониторинг активности Postmark: Войдите в Postmark и подтвердите, что электронное письмо было переслано в ваше приложение. Обратитесь к уроку 8 дня.
-
Проверьте журналы выполнения: На панели управления DigitalOcean App Platform посмотрите журналы выполнения вашего приложения. Вы должны увидеть вывод JSON от приложения Flask.
Ожидаемый результат:
2024-12-31 12:34:56,789 INFO Extracted Data: { "date": "Dec 29, 2024", "amount": "35.99", "currency": "USD", "vendor": "Amazon" }
🎁 Подведение итогов
Вот что мы достигли сегодня:
- Создан и настроен агент Gradient на DigitalOcean для обработки email-уведомлений о чеках.
- Тестировал агента интерактивно и программно, чтобы убедиться, что он извлек правильные данные.
- Обновил приложение Flask для интеграции с агентом Gradient, используя SDK OpenAI.
- Развернули обновленное приложение на DigitalOcean.
- Протестирована вся цепочка, от отправки электронной почты до просмотра извлеченного JSON в логах.
Вот предыдущий учебник из этой серии на день 8: Подключение Postmark к вашему приложению Flask.
Впереди: В следующем уроке вы завершите процесс, сохранив извлеченные данные JSON в базе данных. Это подготовит вашу службу обработки квитанций по электронной почте к реальному использованию. Следите за обновлениями — 10-й день будет посвящен тому, чтобы связать все воедино! 🚀





















Добавить комментарий