샘, 감사합니다.
사람에 따라 쉽기도 하고 어려우기도 합니다. 저는 후자에 해당합니다 ![]()
이 도구를 이것저것 시도해 보고 있지만 아직 작동하게 하지 못했습니다. 도구를 사용한 경험이 전혀 없어서, 이 도구가 작동하게 되면 도구를 다른 용도로 사용하는 방법에 대해 생각할 수 있기를 기대하고 있습니다.
블로그에 있는 코드를 API 키와 함께 사용해보았지만 작동하지 않았습니다. AI가 하드코딩된 URL을 사용하라고 해서 그렇게 시도해 보았지만 역시 성공하지 못했습니다.
API 키가 호출되지 않았으며, 오류가 포함된 로그도 생성되지 않았습니다.
이는 주제 생성 시 자동으로 카테고리를 분류하는 데 사용됩니다.
저는 주제 “예수님의 초기 생애와 기적에서 얻은 통찰”을 신약성서 카테고리로 분류할 것입니다. 이는 예수님의 생애와 가르침과 관련이 있기 때문입니다.
이제 주제를 이동합니다…
제가 시도한 내용은 다음과 같습니다.
/**
- 도구 API 빠른 참조
- 진입 함수
- invoke(parameters): 메인 함수. 매개변수(Object)를 수신합니다. JSON 직렬화 가능한 값을 반환해야 합니다.
- 예:
- function invoke(parameters) { return “result”; }
- details(): 선택 사항. 도구를 설명하는 문자열을 반환합니다.
- 예:
- function details() { return “Tool description.”; }
- 제공되는 객체
- http
- http.get(url, options?): HTTP GET 요청을 수행합니다.
- 매개변수:
url (string): 요청 URL.options (Object, 선택 사항):headers (Object): 요청 헤더.- 반환값:
{ status: number, body: string }- http.post(url, options?): HTTP POST 요청을 수행합니다.
- 매개변수:
url (string): 요청 URL.options (Object, 선택 사항):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, 선택 사항):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): 게시물에 추가할 raw 콘텐츠.- 제약 조건
- 실행 시간: ≤ 2000ms
- 메모리: ≤ 10MB
- HTTP 요청: 실행당 ≤ 20회
- 한도를 초과하면 오류가 발생하거나 실행이 중단됩니다.
- 보안
- 샌드박스 환경: 시스템 또는 전역 객체에 접근할 수 없습니다.
- 파일 시스템 접근 불가: 파일을 읽거나 쓸 수 없습니다.
*//**
- Discourse 주제 분류기
- 이 도구는 Discourse API를 사용하여
- Discourse 주제의 카테고리를 변경할 수 있게 해줍니다.
*//**
- Discourse 주제 분류기
- 이 도구는 Discourse API를 사용하여
- Discourse 주제의 카테고리를 변경할 수 있게 해줍니다.
*//**
- Discourse 주제 분류기
- 이 도구는 Discourse API를 사용하여
- Discourse 주제의 카테고리를 변경할 수 있게 해줍니다.
*/function invoke(params) {
// 필수 매개변수 검증
if (!params.topic_id) {
return { error: “Missing required parameter: topic_id” };
}if (!params.category_id) {
return { error: “Missing required parameter: category_id” };
}// Discourse 인스턴스의 기본 URL
const baseUrl = “https://community.mysite.com”;// 주제 업데이트를 위한 전체 API 엔드포인트 URL
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: `Failed to update topic category. Status: ${response.status}`, details: response.body }; }} catch (error) {
return {
error: “An error occurred while updating the topic category”,
details: error.toString()
};
}
}function details() {
return “Categorizes a topic by moving it to a specified category”;
}