В первой части агент сохранял задачу в `tasks.json`. Теперь добавим безопасный инструмент `list_tasks`: модель сможет попросить Python показать этот файл, но не получит произвольный доступ к компьютеру.
1) В `agent.py`, рядом с `save_task`, добавьте функцию:
```python
def list_tasks() -> str:
if not TASKS_FILE.exists():
return "Список задач пока пуст."
tasks = json.loads(TASKS_FILE.read_text(encoding="utf-8"))
if not tasks:
return "Список задач пока пуст."
return "\n".join(f"{i}. {task}" for i, task in enumerate(tasks, start=1))
```
Она читает только `tasks.json` и нумерует строки. Если файл ещё не создан, вернёт понятный ответ.
2) В массив `tools` добавьте описание второй функции:
```python
{
"type": "function",
"name": "list_tasks",
"description": "Показывает все задачи из локального tasks.json.",
"parameters": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": False
},
"strict": True
}
```
Сохраните там же описание `save_task` из первой части.
3) В цикле обработки `response.output` добавьте ветку:
```python
if item.name == "list_tasks":
result = list_tasks()
elif item.name == "save_task":
args = json.loads(item.arguments)
result = save_task(args["title"])
else:
raise RuntimeError(f"Неизвестная функция: {item.name}")
input_items.append({
"type": "function_call_output",
"call_id": item.call_id,
"output": result,
})
```
После цикла передайте `input_items` обратно в Responses API, как в первой части, и выведите `final.output_text`. Проверьте обе команды: «Покажи мои задачи» и «Добавь задачу: проверить список».
Ожидаемый результат: агент вызывает `list_tasks`, Python читает файл и возвращает нумерованный список; модель формулирует ответ. Для пустого файла появится сообщение, что список пуст. Проверьте содержимое `tasks.json` вручную.
Важно: функция доступна только потому, что вы описали её в `tools` и добавили явную ветку в код. Не используйте `eval` и не запускайте полученные от модели команды.
В следующей части добавим отметку задачи как выполненной. Что удобнее: А — номером, Б — текстом задачи? Напишите вариант в комментариях.
Документация по вызову функций: https://developers.openai.com/api/docs/guides/function-calling
Официальный Python SDK: https://github.com/openai/openai-python
#первыйхаб #технологии #ии #python #разработка