Gracias Sam,
Más fácil para unos que para otros. Yo pertenezco a esta última categoría 
Estoy trasteando con esto y no he conseguido que funcione. No tengo experiencia con herramientas, así que tengo muchas ganas de que esto funcione para pensar en otras formas de usar las herramientas.
Intenté usar el código de tu blog con una clave de API, lo cual no funcionó. La IA sugirió que usara una URL codificada de forma rígida, así que lo intenté sin éxito.
No se llamó a la clave de API y no se crearon registros con errores.
Esto se utiliza para categorizar automáticamente los temas al crearlos
Clasificaré el tema “Perspectivas de los primeros años y milagros de Jesús” en la categoría Nuevo Testamento, ya que se relaciona con la vida y las enseñanzas de Jesús.
Moviendo el tema ahora…
Esto es lo que intenté.
/**
- Referencia rápida de la API de herramientas
- Funciones de entrada
- invoke(parameters): Función principal. Recibe parámetros (Objeto). Debe devolver un valor serializable en JSON.
- Ejemplo:
- function invoke(parameters) { return “resultado”; }
- details(): Opcional. Devuelve una cadena que describe la herramienta.
- Ejemplo:
- function details() { return “Descripción de la herramienta.”; }
- Objetos proporcionados
-
- http
- http.get(url, options?): Realiza una solicitud HTTP GET.
- Parámetros:
-
url (string): La URL de la solicitud.
-
options (Object, opcional):
-
headers (Object): Encabezados de la solicitud.
- Devuelve:
-
{ status: number, body: string }
- http.post(url, options?): Realiza una solicitud HTTP POST.
- Parámetros:
-
url (string): La URL de la solicitud.
-
options (Object, opcional):
-
headers (Object): Encabezados de la solicitud.
-
body (string): Cuerpo de la solicitud.
- Devuelve:
-
{ status: number, body: string }
- (también disponible: http.put, http.patch, http.delete)
- Nota: Máximo 20 solicitudes HTTP por ejecución.
-
- llm
- llm.truncate(text, length): Trunca el texto a una longitud de tokens especificada.
- Parámetros:
-
text (string): Texto a truncar.
-
length (number): Tokens máximos.
- Devuelve:
-
Cadena truncada.
-
- index
- index.search(query, options?): Busca documentos indexados.
- Parámetros:
-
query (string): Consulta de búsqueda.
-
options (Object, opcional):
-
filenames (Array): Limita la búsqueda a archivos específicos.
-
limit (number): Máximos fragmentos (hasta 200).
- Devuelve:
-
Matriz de { fragment: string, metadata: string }
-
- upload
- upload.create(filename, base_64_content): Sube un archivo.
- Parámetros:
-
filename (string): Nombre del archivo.
-
base_64_content (string): Contenido del archivo codificado en Base64.
- Devuelve:
-
{ id: number, short_url: string }
-
- chain
- chain.setCustomRaw(raw): Establece el cuerpo de la publicación y sale de la cadena.
- Parámetros:
-
raw (string): contenido sin procesar para añadir a la publicación.
- Restricciones
- Tiempo de ejecución: ≤ 2000 ms
- Memoria: ≤ 10 MB
- Solicitudes HTTP: ≤ 20 por ejecución
- Superar los límites provocará errores o la terminación.
- Seguridad
- Entorno aislado: Sin acceso a objetos del sistema o globales.
- Sin acceso al sistema de archivos: No se pueden leer ni escribir archivos.
*/
/**
- Categorizador de temas de Discourse
- Esta herramienta te permite cambiar la categoría de un tema de Discourse
- utilizando la API de Discourse.
*/
/**
- Categorizador de temas de Discourse
- Esta herramienta te permite cambiar la categoría de un tema de Discourse
- utilizando la API de Discourse.
*/
/**
- Categorizador de temas de Discourse
- Esta herramienta te permite cambiar la categoría de un tema de Discourse
- utilizando la API de Discourse.
*/
function invoke(params) {
// Validación de parámetros requeridos
if (!params.topic_id) {
return { error: “Falta el parámetro requerido: topic_id” };
}
if (!params.category_id) {
return { error: “Falta el parámetro requerido: category_id” };
}
// URL base para tu instancia de Discourse
const baseUrl = “https://community.mysite.com”;
// URL completa del punto final de la API para actualizar un tema
const apiUrl = ${baseUrl}/t/${params.topic_id}.json;
// Prepara el cuerpo de la solicitud
const requestBody = {
category_id: params.category_id
};
// Parámetro opcional: actualiza el título si se proporciona
if (params.title) {
requestBody.title = params.title;
}
// Usa tu clave de API proporcionada
const apiKey = “Discourse-API-Key”;
try {
// Realiza la solicitud PUT para actualizar el tema
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: `No se pudo actualizar la categoría del tema. Estado: ${response.status}`,
details: response.body
};
}
} catch (error) {
return {
error: “Ocurrió un error al actualizar la categoría del tema”,
details: error.toString()
};
}
}
function details() {
return “Clasifica un tema moviéndolo a una categoría especificada”;
}