В моем предыдущем посте мы рассмотрели использование нового API ответов Openai с агентами SDK. В этом посте я более внимательно посмотрю на встроенные инструменты-и покажу, как их можно использовать. Я буду держать сценарии маленькими, так как дело состоит в том, чтобы позволить SDK сделать тяжелую работу, хотя (справедливое предупреждение), которое оказалось возможным только для двух из трех инструментов.
Веб -поиск
В предыдущем посте мы настроили наш стек Python с OpenAI, поэтому я начну с первоначального примера запроса для первого встроенного инструмента: веб-поиск. Это использует новый API ответов.
После запроса модели мы можем добавить список инструментов, которые мы хотим использовать запрос. Я добавляю строку «Tool_choice», чтобы заставить запрос использовать веб -поиск — просто размещение ее в списке инструментов просто делает ее доступной для запроса, если он хочет его использовать. Я напишу сценарий в локальный файл web_search.pyПолем
от Openai import openai client = openai () response = client.responses.create (model = «gpt-4o», инструменты =[{«type»: «web_search_preview»}]tool_choice = {«type»: «web_search_preview»}, input = «Что сегодня появилось сегодня новостей Kubernetes?» ) print (response.output_text) 1234567891011 от Openai import openai client = openai () response = client.responses.create (model = «gpt-4o», инструменты =[{«type»: «web_search_preview»}]tool_choice = {«type»: «web_search_preview»}, input = «Что сегодня появилось сегодня новостей Kubernetes?» ) print (response.output_text)
Сценарий только возвращает выходной текст:
Как обычно, я использую терминал Warp, чтобы вы могли видеть время, которое запрос, который потребовал, чтобы завершить наверху. Я положил 10 долларов в свой аккаунт Openai, и я просто использовал 4 цента:
Даже к концу этого глубокого погружения я использовал не более 20 центов. Но для более расширенного использования в более дорогих моделях вам нужно следить за расходами.
Теперь давайте посмотрим на структуру ответа немного внимательно. Я изменил последнюю строку в сценарии Web_Search.py, чтобы сосредоточиться на выводах метаданных:
… Print (response.output) 12… print (response.output)
Это создает следующий выход ответа, при этом текст с полным ответом сокращен для пространства:
[
ResponseFunctionWebSearch(
id=’ws_67e15b3302708190a24bd568fc6cd24a0eb6c2c0a0810e13′,
status=»completed»,
type=»web_search_call»
),
ResponseOutputMessage(
id=’msg_67e15b34af00819081c0bd65e9fb92500eb6c2c0a0810e13′,
content=[
ResponseOutputText(
annotations=[
AnnotationURLCitation(
end_index=314,
start_index=243,
title=»Kubernetes > News > Page #1 — InfoQ»,
type=»url_citation»,
url=»
)
]text = «По состоянию на 24 марта 2025 года, есть ..», type = «output_text»)]role = «Assistant», Status = «завершен», тип = «Сообщение»)]12345678910111213141516171819202122232425227288
[ ResponseFunctionWebSearch( id=’ws_67e15b3302708190a24bd568fc6cd24a0eb6c2c0a0810e13′, status=’completed’, type=’web_search_call’ ), ResponseOutputMessage( id=’msg_67e15b34af00819081c0bd65e9fb92500eb6c2c0a0810e13′, content=[ ResponseOutputText( annotations=[ AnnotationURLCitation( end_index=314, start_index=243, title=’Kubernetes > News > Page #1 — InfoQ’, type=’url_citation’, url=’ of March 24, 2025, there are..’, type=’output_text’ ) ]ROLE = ‘Assistant’, status = ‘завершен’, type = ‘message’)]]
Мы можем увидеть список аннотаций, который в данном случае является лишь тот, который включен в ответ.output_text.
Теперь давайте рассмотрим другой аспект ответа, снова изменив последнюю строку web_search.py:
… Print (response.tools) 12… print (response.tools)
Обратите внимание на значения по умолчанию для местоположения в Web_Search:
[
WebSearchTool(
type=»web_search_preview»,
search_context_size=»medium»,
user_location=UserLocation(
type=»approximate»,
city=None,
country=’US’,
region=None,
timezone=None
)
)
]
12345678910111213
[ WebSearchTool( type=’web_search_preview’, search_context_size=’medium’, user_location=UserLocation( type=’approximate’, city=None, country=’US’, region=None, timezone=None ) )]
Предполагается, что пользователь базируется в сша. Давайте получим для меня больше местных новостей. Я знаю, что Kubecon вскоре будет в Лондоне, поэтому я добавил следующее к запросу:
от Openai import openai client = openai () response = client.responses.create (model = «gpt-4o», tool_choice = {«type»: «web_search_preview»}, инструменты =[ {
«type»: «web_search_preview»,
«user_location»:{
«type»: «approximate»,
«country»: «GB»,
«city»: «London»,
«region»: «London»,
}
}]input = «Какие новости о Kubecon появились на этой неделе?» ) print (response.output_text)> 12345678910111213141516171819 от Openai import openaiClient = openai () response = client.responses.create (model = «gpt-4o», tool_choice = {«type»: «web_pearch_preview»}, инструменты = {«»[ { «type»: «web_search_preview», «user_location»:{ «type»: «approximate», «country»: «GB», «city»: «London», «region»: «London», } }]input = «Какие новости о KubeCon появились на этой неделе?») Print (response.output_text)>
Мы получили немного назад, что было актуально, с встроенной цитатой:
«Заглядывая в будущее, Kubecon + Cloudnativecon Europe 2025 должен пройти в Лондоне с 1 по 4 апреля 2025 года. Это событие объединит усыновленных и технологов из ведущих сообществ с открытым исходным кодом и облачным коренным населением в течение четырех дней сотрудничества, обучения и инноваций.[events.linuxfoundation.org](
Поиск файлов
Как я упоминал в предыдущем посте, перед использованием поиска файлов нам нужно установить базу знаний (то есть векторный хранилище) и загруженные файлы. Vector Store размещен OpenAI, поэтому обратите внимание на ограничения.
Я храню их пример файла: «Deep_Research_blog.pdf«:
Запросы на импорт из io import bytesio из openai import openai client = openai () def create_file (client, file_path): # Загрузите содержимое файла с url response = requests.get (file_path) file_content = bytesio (response.content) file_name = file_path.split («https://thenewntack).[-1]
file_tuple = (file_name, file_content) result = client.files.create (file = file_tuple, packe = «Assistants») print (result.id) return result.id file_id = create_file (client, » # create vector Store vector_store = client.vector_stores.create (name_base_base vector_store = vector_stores.create (name =» natude_base «) vector_store.id # vector.id # vector.id # vector. client.vector_stores.files.create( vector_store_id=vector_store.id, file_id=file_id ) print(vector_store) 12345678910111213141516171819202122232425262728293031323334 import requestsfrom io import BytesIOfrom openai Import openai client = openai () def create_file (client, file_path): # Загрузите содержимое файла с url response = requests.get (file_path) file_content = bytesio (response.content) file_name = file_path.split («https://thenewstack.io/»)[-1] file_tuple = (file_name, file_content) result = client.files.create (file = file_tuple, packe = «Assistants») print (result.id) return result.id file_id = create_file (client, » # create vector storevector_store = client.vector_stores.create (name =» namo_base «) vector_store # vector # vectorstor # vector # vector # vector # vector # vector_stores.create (name =» storeclient.vector_stores.files.create (vector_store_id = vector_store.id, file_id = file_id) print (vector_store)
Этот скрипт потребовался немного больше времени, чтобы написать, поскольку он включает манипуляции с файлами. Мы запускаем его, чтобы проверить, что мы, по крайней мере, создали действительный векторный магазин:
Чтобы проверить, готов ли файл, мы можем просто использовать следующий сценарий позже с данным идентификатором VectorStore:
import requests from io import BytesIO from openai import OpenAI client = OpenAI() result = client.vector_stores.files.list( vector_store_id=’vs_67e1a50090c481918ff6747405d62249′ ) print(result) 12345678910 import requestsfrom io import BytesIOfrom openai import OpenAI client = Openai () result = client.vector_stores.files.list (vector_store_id = ‘vs_67e1a50090c481918ff6747405d622249’) print (result)
Для меня это работало нормально через несколько минут:
Итак, мы поместили файл в векторный магазин. Теперь мы можем найти его, используя идентификатор файла (вы можете получить доступ только к одному магазину прямо сейчас). Я использую пример запроса, приведенный Openai, так как я поместил их документ в магазин. Они используют другую модель для предыдущих примеров:
от Openai import openai client = openai () response = client.responses.create (model = «gpt-4o-mini», input = «Что такое глубокое исследование от Openai?», Инструменты =[{
«type»: «file_search»,
«vector_store_ids»: [«vs_67e1a50090c481918ff6747405d62249»]
}]tool_choice = {«type»: «file_search»},) print (response) 12345678910111213 от Openai import openaiClient = openai () response = client.responses.create (model = «gpt-4o-mini», input = «Что является глубоким исследованием.[{ «type»: «file_search», «vector_store_ids»: [«vs_67e1a50090c481918ff6747405d62249»] }]tool_choice = {«type»: «file_search»},) print (response)
Ответ (примерно через 17 секунд) был всеобъемлющим и в аналогичной форме Web_Search. Выходная часть сообщения выглядит так:
ResponseOutputMessage (id = ‘msg_67e2b7d5cd40819185ba3378c3e550f20d45cba81f4e1d6d’, content =[
ResponseOutputText(
annotations=[
AnnotationFileCitation(
file_id=’file-NM9USSrUDDQaVHD1jkMoWv’,
index=1715, type=»file_citation»,
filename=»deep_research_blog.pdf»
),
AnnotationFileCitation(
file_id=’file-NM9USSrUDDQaVHD1jkMoWv’,
index=1715, type=»file_citation»,
filename=»deep_research_blog.pdf»
)
]text = «Deep Research By OpenAI — это новая возможность ..», type = «output_text»)]role = «Помощник», статус = «завершен», тип = «Сообщение») 123456789101112131415161718192021222324 id = ‘msg_67e2b7d5cd40819185ba3378c3e550f20d45cba81f4e1d6d’, content =[ ResponseOutputText( annotations=[ AnnotationFileCitation( file_id=’file-NM9USSrUDDQaVHD1jkMoWv’, index=1715, type=’file_citation’, filename=’deep_research_blog.pdf’ ), AnnotationFileCitation( file_id=’file-NM9USSrUDDQaVHD1jkMoWv’, index=1715, type=’file_citation’, filename=’deep_research_blog.pdf’ ) ]text = «Deep Research By Openai — это новая возможность ..», type = ‘output_text’)]role = ‘assistant’, status = ‘завершен’, type = ‘message’)
Фактический текст длинный. Обратите внимание, что есть две идентичные цитаты, но я не видел никаких объяснений точного значения.
Использование компьютера
Окончательным встроенным инструментом является использование компьютера, которое превращает ИИ в своего рода «хакеру»: способность притворяться человеческим пользователем заполнять формы и т. Д. Как я уже упоминал ранее, мы приближаемся к миру, где большинство запросов будет разговаривать с API непосредственно без вмешательства человека. В некотором смысле, этот инструмент пытается решить этот вариант использования.
Используя инструменты отладки веб -сайта, такие как Selenium, этот вид инструмента не подходит для случайного использования, так как модели легко разорвать или для подготовки системы. Как веб -разработчик, тестер и разработчик игр сегодня, я знаю, что моделирование экрана требует большого особого внимания.
По сути, вы отправляете сценарий клавиатурных кликов или текст в модель, и система отправляет обратные изображения целевого браузера после этих операций. Только представьте, что вы разговариваете по телефону, помогая члену семьи, который не знаком с Интернетом и пробует онлайн налоговую декларацию. Ни у кого из вас нет полной картины.
Источник изображения: openai
В отличие от двух других инструментов, я буду описать только цикл, потому что он слишком подробный, чтобы полностью сценарий в этом посте. В начале Шаг 1Вам необходимо установить роль «пользователя», чтобы указать, что ИИ — предложить методы для продолжения. Вы определяете размер целевого экрана и даете ему изображение этого экрана. Вывод ответа для Шаг 2 Описывает предложенное действие (например, где нажать на экран). Затем OpenAI становится намного смущающим при автоматизации этих действий — это зависит от того, что у вас есть в целевой среде. Как только вы выполните эти инструкции (Шаг 3), вы можете сделать скриншот результата (Шаг 4) и подайте его обратно в начало петли (шаг 1) и переработку.
Заключение
Я сказал наверху, что буду использовать только короткие сценарии, но инструмент для использования компьютера требует большого количества поддержки. В действительности, OpenAI, вероятно, не имеет опыта в полной мере завершить вариант использования компьютера, и будет либо покупать здесь опыт, либо надеяться, что третья сторона примет вызов. На данный момент, однако, инструменты для поиска и файлов веб-поиска помогут получить ответы LLM с помощью своевременных или пользовательских знаний.
Теперь, когда мы рассмотрели как агентов OpenAI, так и их встроенные инструменты, я могу собрать эти два вместе, чтобы сделать более сложный агент, который использует инструменты для обеспечения более жесткого бизнес-обоснования. Я возьму на это в следующем посте.
Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Дэвид был лондонским профессиональным разработчиком программного обеспечения в Oracle Corp. и British Telecom, а также консультантом, помогающим командам работать более гибким образом. Он написал книгу по дизайну пользовательского интерфейса и с тех пор пишет технические статьи …. Подробнее от Дэвида Истмана