Создание интеллектуального медицинского рабочего процесса с 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