<НА ГЛАВНУЮ

Создание интеллектуального медицинского рабочего процесса с Gemini

Узнайте, как создать автоматизированного агента для сбора медицинских данных с помощью Gemini.

Обзор

В этом руководстве мы разработаем полностью функционального агента для предварительной авторизации медицинских услуг с использованием Gemini. Мы шаг за шагом пройдем через каждый компонент, от безопасной настройки модели до создания реалистичных внешних инструментов и, наконец, построения интеллектуального цикла агента, который мыслит, действует и отвечает исключительно в формате структурированного JSON. В процессе мы увидим, как система думает, извлекает доказательства и взаимодействует с имитированными медицинскими системами для завершения сложного рабочего процесса. Посмотрите ПОЛНЫЕ КОДЫ здесь.

Настройка среды

Мы настраиваем среду и автоматически определяем лучшую доступную модель Gemini. Мы безопасно настраиваем ключ API и позволяем системе выбрать наиболее способную модель без хардкода. Это обеспечивает начало с чистой, гибкой и надежной основой.

!pip install -q -U google-generative-ai  
import google.generativeai as genai  
from google.colab import userdata  
import os  
import getpass  
import json  
import time  
 
try:  
   GOOGLE_API_KEY = userdata.get('GOOGLE_API_KEY')  
except:  
   print("Введите свой ключ API Google:")  
   GOOGLE_API_KEY = getpass.getpass("Ключ API: ")  
 
genai.configure(api_key=GOOGLE_API_KEY)  
 
available_models = [m.name for m in genai.list_models()]  
target_model = ""  
 
if 'models/gemini-1.5-flash' in available_models:  
   target_model = 'gemini-1.5-flash'  
elif 'models/gemini-1.5-flash-001' in available_models:  
   target_model = 'gemini-1.5-flash-001'  
elif 'models/gemini-pro' in available_models:  
   target_model = 'gemini-pro'  
else:  
   for m in available_models:  
       if 'generateContent' in genai.get_model(m).supported_generation_methods:  
           target_model = m  
           break  
 
if not target_model:  
   raise ValueError("Не найдены модели генерации текста для этого ключа API.")  
 
print(f"Выбранная модель: {target_model}")  
model = genai.GenerativeModel(target_model)  

Определение медицинских инструментов

Мы определяем медицинские инструменты, которые наш агент может использовать в процессе работы. Мы симулируем поиск в ЭМК и систему подачи предварительной авторизации, чтобы агент имел реальные действия для выполнения. Это позволяет агенту обосновывать свои выводы на взаимодействиях с инструментами, а не просто на генерации текста.

class MedicalTools:  
   def __init__(self):  
       self.ehr_docs = [  
           "Пациент: Джон Доу | Дата рождения: 1980-05-12",  
           "Посещение 2023-01-10: Диагноз: диабет 2 типа. Назначен Метформин.",  
           "Посещение 2023-04-15: Пациент сообщает о серьезных расстройствах ЖКТ с Метформином. Прекращён.",  
           "Посещение 2023-04-20: ИМТ записан на 32.5. A1C равен 8.4%.",  
           "Посещение 2023-05-01: Врач рекомендует начать Оземпик (семаглутид)."  
       ]
 
   def search_ehr(self, query):  
       results = [doc for doc in self.ehr_docs if any(q.lower() in doc.lower() for q in query.split())]  
       if not results:  
           return "Записи не найдены."  
       return "\n".join(results)  
  
   def submit_prior_auth(self, drug_name, justification):  
       justification_lower = justification.lower()  
       if "метформин" in justification_lower and ("прекращён" in justification_lower or "непереносимость" in justification_lower):  
           if "имт" in justification_lower and "32" in justification_lower:  
               return "УСПЕХ: Авторизация одобрена. ID авторизации: #998877"  
       return "ОТКЛОНЕНО: Политика требует доказательства (1) неэффективности Метформина и (2) ИМТ > 30."  

Инициализация агента

Мы инициализируем агента и задаем ему полный системный промпт. Мы определяем правила, формат ответа JSON и ожидание, что агент должен сначала подумать, прежде чем действовать. Это дает нам контролируемую структуру для построения безопасного и прослеживаемого цикла агента.

def execute_tool(self, action_name, action_input):  
       if action_name == "search_ehr":  
           return self.tools.search_ehr(action_input)  
       elif action_name == "submit_prior_auth":  
           if isinstance(action_input, str):  
               return "Ошибка: submit_prior_auth требует словарь."  
           return self.tools.submit_prior_auth(**action_input)  
       else:  
           return "Ошибка: Неизвестный инструмент."  
 
   def run(self, objective):  
       self.history.append(f"Пользователь: {objective}")  
       for i in range(self.max_steps):  
           prompt = self.system_prompt + "\n\nИстория:\n" + "\n".join(self.history) + "\n\nСледующий JSON:"  
           try:  
               response = self.model.generate_content(prompt)  
               agent_decision = json.loads(response.text.strip())  
           except Exception as e:  
               continue  
           tool_result = self.execute_tool(agent_decision['action'], agent_decision['action_input'])  
           self.history.append(f"Ассистент: {response.text}")  
           self.history.append(f"Система: {tool_result}")  
           if "УСПЕХ" in str(tool_result):  
               break  

Запуск агента

Мы создаем экземпляры инструментов и агента, а затем запускаем всю систему от начала до конца. Мы видим, как разворачивается полный рабочий процесс, когда агент идет через медицинскую историю, подтверждает доказательства и пытается получить предварительную авторизацию.

tools_instance = MedicalTools()  
ageant = AgenticSystem(model, tools_instance)  
ageant.run("Пожалуйста, получите предварительную авторизацию для Оземпика для пациента Джона Доу.")  

Итоги

Этот фреймворк позволяет нам разрабатывать реальные агентные поведения, которые выходят за рамки простых текстовых ответов. Он позволяет агенту планировать, консультироваться с инструментами, собирать доказательства и в конечном итоге завершать структурированную задачу по получению авторизации страхования полностью на основе автономного рассуждения.

🇬🇧

Switch Language

Read this article in English

Switch to English