Спасибо, Сэм,
Кому-то проще, кому-то сложнее. Я отношусь к последней категории 
Я пытаюсь разобраться с этим, но у меня пока не получается. У меня нет опыта работы с инструментами, поэтому я с нетерпением жду, когда у меня всё заработает, чтобы подумать о других способах их использования.
Я пробовал использовать код из вашего блога с API-ключом, но это не сработало. ИИ предложил мне использовать жёстко заданный URL, я попробовал, но тоже без успеха.
API-ключ не вызывался, и не было создано никаких логов с ошибками.
Это используется для автоматической категоризации тем при создании
Я классифицирую тему «Уроки из ранних лет Иисуса и его чудеса» в категорию Новый Завет, так как она связана с жизнью и учением Иисуса.
Перемещаю тему сейчас…
Вот что я пробовал.
/**
- Справочник по API инструментов
- Входные функции
- invoke(parameters): Основная функция. Принимает параметры (Объект). Должна возвращать значение, сериализуемое в JSON.
- Пример:
- function invoke(parameters) { return “result”; }
- details(): Опционально. Возвращает строку с описанием инструмента.
- Пример:
- function details() { return “Описание инструмента.”; }
- Предоставляемые объекты
-
- http
- http.get(url, options?): Выполняет HTTP GET-запрос.
- Параметры:
-
url (string): URL запроса.
-
options (Object, optional):
-
headers (Object): Заголовки запроса.
- Возвращает:
-
{ status: number, body: string }
- http.post(url, options?): Выполняет HTTP POST-запрос.
- Параметры:
-
url (string): URL запроса.
-
options (Object, optional):
-
headers (Object): Заголовки запроса.
-
body (string): Тело запроса.
- Возвращает:
-
{ status: number, body: string }
- (также доступны: http.put, http.patch, http.delete)
- Примечание: Максимум 20 HTTP-запросов за одно выполнение.
-
- llm
- llm.truncate(text, length): Обрезает текст до указанной длины в токенах.
- Параметры:
-
text (string): Текст для обрезки.
-
length (number): Максимальное количество токенов.
- Возвращает:
-
Обрезанную строку.
-
- index
- index.search(query, options?): Ищет в индексированных документах.
- Параметры:
-
query (string): Запрос поиска.
-
options (Object, optional):
-
filenames (Array): Ограничить поиск конкретными файлами.
-
limit (number): Максимальное количество фрагментов (до 200).
- Возвращает:
-
Массив объектов { fragment: string, metadata: string }
-
- upload
- upload.create(filename, base_64_content): Загружает файл.
- Параметры:
-
filename (string): Имя файла.
-
base_64_content (string): Контент файла в кодировке Base64.
- Возвращает:
-
{ id: number, short_url: string }
-
- chain
- chain.setCustomRaw(raw): Устанавливает тело сообщения и завершает цепочку.
- Параметры:
-
raw (string): Сырой контент для добавления в сообщение.
- Ограничения
- Время выполнения: ≤ 2000 мс
- Память: ≤ 10 МБ
- HTTP-запросы: ≤ 20 за одно выполнение
- Превышение ограничений приведёт к ошибкам или завершению работы.
- Безопасность
- Песочница: Нет доступа к системным или глобальным объектам.
- Нет доступа к файловой системе: Нельзя читать или записывать файлы.
*/
/**
- Категоризатор тем Discourse
- Этот инструмент позволяет изменить категорию темы Discourse
- с помощью API Discourse.
*/
/**
- Категоризатор тем Discourse
- Этот инструмент позволяет изменить категорию темы Discourse
- с помощью API Discourse.
*/
/**
- Категоризатор тем Discourse
- Этот инструмент позволяет изменить категорию темы Discourse
- с помощью API Discourse.
*/
function invoke(params) {
// Проверка обязательных параметров
if (!params.topic_id) {
return { error: “Отсутствует обязательный параметр: topic_id” };
}
if (!params.category_id) {
return { error: “Отсутствует обязательный параметр: category_id” };
}
// Базовый URL вашего экземпляра Discourse
const baseUrl = “https://community.mysite.com”;
// Полный URL API для обновления темы
const apiUrl = ${baseUrl}/t/${params.topic_id}.json;
// Подготовка тела запроса
const requestBody = {
category_id: params.category_id
};
// Опциональный параметр: обновить заголовок, если он указан
if (params.title) {
requestBody.title = params.title;
}
// Используйте ваш API-ключ
const apiKey = “Discourse-API-Key”;
try {
// Выполнение PUT-запроса для обновления темы
const response = http.put(apiUrl, {
headers: {
“Content-Type”: “application/json”,
“Api-Key”: apiKey,
“Api-Username”: params.api_username || “system”
},
body: JSON.stringify(requestBody)
});
if (response.status >= 200 && response.status < 300) {
return {
success: true,
topic_id: params.topic_id,
category_id: params.category_id,
response: JSON.parse(response.body)
};
} else {
return {
error: `Не удалось обновить категорию темы. Статус: ${response.status}`,
details: response.body
};
}
} catch (error) {
return {
error: “Произошла ошибка при обновлении категории темы”,
details: error.toString()
};
}
}
function details() {
return “Классифицирует тему, перемещая её в указанную категорию”;
}