В этом руководстве мы рассмотрим, как создать полностью функциональный агентский рабочий процесс для сбора медицинских доказательств и подачи заявки на предварительное разрешение с использованием модели Gemini. Мы подробно разберём каждый компонент, от настройки модели до создания внешних инструментов и построения цикла работы интеллектуального агента.
Настройка окружения
1. Импорт библиотек:
«`python
import google.generativeai as genai
from google.colab import userdata
import os
import getpass
import json
import time
«`
2. Получение ключа API:
«`python
try:
GOOGLEAPIKEY = userdata.get(‘GOOGLEAPIKEY’)
except:
print(«Пожалуйста, введите ваш ключ API Google:»)
GOOGLEAPIKEY = getpass.getpass(«API Key: «)
genai.configure(apikey=GOOGLEAPI_KEY)
«`
3. Выбор модели:
«`python
print(«\n Сканирование доступных моделей…»)
availablemodels = [m.name for m in genai.listmodels()]
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.getmodel(m).supportedgeneration_methods:
target_model = m
break
if not target_model:
raise ValueError(«No models found for this API key.»)
print(f»Выбранная модель: {target_model}»)
model = genai.GenerativeModel(target_model)
«`
Определение медицинских инструментов
«`python
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):
print(f»[Инструмент] Поиск в EHR по запросу: ‘{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 submitpriorauth(self, drug_name, justification):
print(f»[Инструмент] Отправка заявки на предварительное разрешение для {drug_name}…»)
justification_lower = justification.lower()
if «metformin» in justificationlower and («discontinued» in justificationlower or «intolerance» in justification_lower):
if «bmi» in justificationlower and «32» in justificationlower:
return «УСПЕХ: Разрешение одобрено. ID авторизации: #998877»
return «ОТКАЗ: Политика требует подтверждения (1) неэффективности метформина и (2) ИМТ > 30.»
«`
Инициализация агентской системы
«`python
class AgenticSystem:
def init(self, model, tools):
self.model = model
self.tools = tools
self.history = []
self.max_steps = 6
self.system_prompt = «»»
Вы — эксперт по предварительной авторизации медицинских процедур/препаратов.
Ваша цель — получить одобрение на медицинскую процедуру/препарат.
У вас есть доступ к следующим инструментам:
1. search_ehr(query)
2. submitpriorauth(drug_name, justification)
ПРАВИЛА:
1. ВСЕГДА думайте, прежде чем действовать.
2. Вы ДОЛЖНЫ выводить свой ответ в СТРОГОМ формате JSON:
{
«thought»: «Ваши рассуждения здесь»,
«action»: «nameoftoolorfinish»,
«actioninput»: «строкааргументаилисловарь»
}
3. Не угадывайте данные пациента. Используйте search_ehr.
4. Если у вас есть доказательства, используйте submitpriorauth.
5. Если задача выполнена, используйте действие «finish».
«»»
«`
Выполнение рабочего процесса
«`python
def executetool(self, actionname, action_input):
if actionname == «searchehr»:
return self.tools.searchehr(actioninput)
elif actionname == «submitprior_auth»:
if isinstance(action_input, str):
return «Ошибка: для submitpriorauth требуется словарь.»
return self.tools.submitpriorauth(action_input)
else:
return «Ошибка: неизвестный инструмент.»
def run(self, objective):
print(f»АГЕНТ НАЧИНАЕТ. Цель: {objective}\n» + «-«*50)
self.history.append(f»Пользователь: {objective}»)
for i in range(self.max_steps):
print(f»\n ШАГ {i+1}»)
prompt = self.system_prompt + «\n\nИстория:\n» + «\n».join(self.history) + «\n\nСледующий JSON:»
try:
response = self.model.generate_content(prompt)
text_response = response.text.strip().replace(««`json», «»).replace(««`», «»)
agentdecision = json.loads(textresponse)
except Exception as e:
print(f» Ошибка при разборе ответа ИИ. Повторная попытка… ({e})»)
continue
print(f» МЫСЛЬ: {agent_decision[‘thought’]}»)
print(f» ДЕЙСТВИЕ: {agent_decision[‘action’]}»)
if agent_decision[‘action’] == «finish»:
print(f»\n ЗАДАЧА ВЫПОЛНЕНА: {agentdecision[‘actioninput’]}»)
break
toolresult = self.executetool(agentdecision[‘action’], agentdecision[‘action_input’])
print(f» НАБЛЮДЕНИЕ: {tool_result}»)
self.history.append(f»Помощник: {text_response}»)
self.history.append(f»Система: {tool_result}»)
if «SUCCESS» in str(tool_result):
print(«\n УСПЕХ! Агент успешно прошёл через портал страхования.»)
break
«`
Запуск системы
«`python
tools_instance = MedicalTools()
agent = AgenticSystem(model, tools_instance)
agent.run(«Пожалуйста, получите предварительное разрешение на приём Оземпик для пациента Джона Доу.»)
«`
Мы создаём экземпляр инструментов и агента, а затем запускаем всю систему с реальной целью. Мы видим, как агент проходит через медицинскую историю, проверяет доказательства и пытается получить предварительное разрешение. Этот финальный фрагмент демонстрирует, как система работает бесперебойно.
В заключение отметим, что эта компактная, но мощная структура позволяет нам разрабатывать агентское поведение в реальных условиях, выходящее за рамки простых текстовых ответов. Мы наблюдаем, как наш агент планирует, консультируется с инструментами, собирает доказательства и выполняет структурированную задачу по авторизации страховки.
1. Какие шаги необходимо выполнить для настройки окружения при работе с моделью Gemini для автоматизированного сбора медицинских доказательств?
Ответ: для настройки окружения при работе с моделью Gemini необходимо выполнить следующие шаги:
* Импортировать необходимые библиотеки.
* Получить ключ API.
* Выбрать модель для работы.
2. Какие классы и функции используются для определения медицинских инструментов в данном руководстве?
Ответ: в данном руководстве для определения медицинских инструментов используется класс `MedicalTools` и следующие функции:
* `search_ehr(query)` — поиск в электронных медицинских записях по запросу.
* `submitpriorauth(drug_name, justification)` — отправка заявки на предварительное разрешение для лекарственного препарата.
3. Какие компоненты включает в себя инициализация агентской системы в данном руководстве?
Ответ: инициализация агентской системы включает в себя следующие компоненты:
* Модель для работы (`model`).
* Инструменты (`tools`).
* История действий (`history`).
* Максимальное количество шагов (`max_steps`).
* Системный запрос (`system_prompt`).
4. Какие действия выполняет агент в процессе выполнения рабочего процесса?
Ответ: в процессе выполнения рабочего процесса агент выполняет следующие действия:
* Использует системный запрос для определения своих действий.
* Генерирует ответ на основе модели.
* Выполняет выбранное действие с помощью инструментов.
* Записывает результаты в историю.
* Повторяет процесс до достижения цели или завершения максимального количества шагов.
5. Какие инструменты доступны агенту для выполнения рабочего процесса в данном руководстве?
Ответ: агенту доступны следующие инструменты:
* `search_ehr(query)` — для поиска в электронных медицинских записях.
* `submitpriorauth(drug_name, justification)` — для отправки заявки на предварительное разрешение.