change file type and fix agents
This commit is contained in:
@@ -1,56 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.moderationText = void 0;
|
||||
const node_https_1 = require("node:https");
|
||||
const langchain_gigachat_1 = require("langchain-gigachat");
|
||||
const zod_1 = require("zod");
|
||||
const httpsAgent = new node_https_1.Agent({
|
||||
rejectUnauthorized: false,
|
||||
});
|
||||
const llm = new langchain_gigachat_1.GigaChat({
|
||||
credentials: process.env.GIGA_AUTH,
|
||||
temperature: 0.2,
|
||||
model: 'GigaChat-2',
|
||||
httpsAgent,
|
||||
});
|
||||
// возвращаю комментарий + исправленное предложение + булево значение
|
||||
const moderationLlm = llm.withStructuredOutput(zod_1.z.object({
|
||||
comment: zod_1.z.string(),
|
||||
fixedText: zod_1.z.string().optional(),
|
||||
isApproved: zod_1.z.boolean(),
|
||||
}));
|
||||
const moderationText = async (title, body) => {
|
||||
const prompt = `
|
||||
Представь, что ты модерируешь предложения от жильцов многоквартирного дома (это личная инициатива по улучшения,
|
||||
не имеющая отношения к Управляющей компании).
|
||||
|
||||
Заголовок: ${title}
|
||||
Основной текст: ${body}
|
||||
|
||||
Твои задачи:
|
||||
1. Проверь предложение и заголовок на спам.
|
||||
2. Проверь, чтобы заголовок и текст были на одну тему.
|
||||
3. Проверь само предложение пользователя на отсутствие грубой лексики и пошлостей.
|
||||
4. Проверь грамматику.
|
||||
5. Проверь на бессмысленность предложения. Оно не должно содержать только случайные символы.
|
||||
6. Не должно быть рекламы, ссылок и т.д.
|
||||
7. Проверь предложение на информативность, оно не должно быть слишком коротким.
|
||||
8. Предложение должно быть в вежливой форме.
|
||||
|
||||
- Если все правила соблюдены, то предложение принимается!
|
||||
|
||||
Правила написания комментария:
|
||||
- Если предложение отклоняется, верни комментарий со следующей формулировкой:
|
||||
"Предложение отклонено. Причина: (укажи проблему)"
|
||||
Правила написания fixedBody:
|
||||
- Если предложение отклонено, то верни в поле "fixedBody" новый текст, который будет соответствовать правилам.
|
||||
- Если предложение отклонено и содержит запрещённый контент (рекламу, личные данные), удали всю информацию,
|
||||
которая противоречит правилам, и верни в только подходящий фрагмент, сохраняя общий смысл.
|
||||
- Если текст не представляет никакой ценности, возврати в поле "fixedBody" правило,
|
||||
по которому оно не прошло.
|
||||
-Если предложение принимается, то ничего не возвращай в поле fixedBody.
|
||||
`;
|
||||
const result = await moderationLlm.invoke(prompt);
|
||||
return [result.comment, result.fixedText, result.isApproved];
|
||||
};
|
||||
exports.moderationText = moderationText;
|
||||
@@ -35,23 +35,33 @@ export const moderationText = async (title: string, body: string): Promise<[stri
|
||||
4. Проверь грамматику.
|
||||
5. Проверь на бессмысленность предложения. Оно не должно содержать только случайные символы.
|
||||
6. Не должно быть рекламы, ссылок и т.д.
|
||||
7. Проверь предложение на информативность, оно не должно быть слишком коротким.
|
||||
7. Проверь предложение на информативность, предложение не может быть коротким, оно должно ясно отражжать суть инициативы.
|
||||
8. Предложение должно быть в вежливой форме.
|
||||
|
||||
- Если все правила соблюдены, то предложение принимается!
|
||||
|
||||
- Если предложение отклонено, всегда пиши комментарий и fixedText!
|
||||
|
||||
Правила написания комментария:
|
||||
- Если предложение отклоняется, верни комментарий со следующей формулировкой:
|
||||
- Если предложение отклоняется, пиши комментарий со следующей формулировкой:
|
||||
"Предложение отклонено. Причина: (укажи проблему)"
|
||||
Правила написания fixedBody:
|
||||
- Если предложение отклонено, то верни в поле "fixedBody" новый текст, который будет соответствовать правилам.
|
||||
|
||||
Правила написания fixedText:
|
||||
- Если предложение отклонено, то верни в поле "fixedText" измененный текст, который будет соответствовать правилам.
|
||||
- Если предложение отклонено и содержит запрещённый контент (рекламу, личные данные), удали всю информацию,
|
||||
которая противоречит правилам, и верни в только подходящий фрагмент, сохраняя общий смысл.
|
||||
- Если текст не представляет никакой ценности, возврати в поле "fixedBody" правило,
|
||||
- Если текст не представляет никакой ценности, возврати в поле "fixedText" правило,
|
||||
по которому оно не прошло.
|
||||
-Если предложение принимается, то ничего не возвращай в поле fixedBody.
|
||||
-Если предложение принимается, то ничего не возвращай в поле fixedText.
|
||||
`
|
||||
|
||||
const result = await moderationLlm.invoke(prompt);
|
||||
|
||||
console.log(result)
|
||||
// Дополнительная проверка
|
||||
if(!result.isApproved && result.comment.trim() === '' && result.fixedText.trim() === '') {
|
||||
result.comment = 'Предложение отклонено. Причина: несоблюдение требований к оформлению или содержанию.',
|
||||
result.fixedText = body
|
||||
}
|
||||
|
||||
return [result.comment, result.fixedText, result.isApproved];
|
||||
};
|
||||
@@ -1,36 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.generatePicture = exports.llm = void 0;
|
||||
const gigachat_1 = require("gigachat");
|
||||
const node_https_1 = require("node:https");
|
||||
const httpsAgent = new node_https_1.Agent({
|
||||
rejectUnauthorized: false,
|
||||
});
|
||||
exports.llm = new gigachat_1.GigaChat({
|
||||
credentials: process.env.GIGA_AUTH,
|
||||
model: 'GigaChat-2',
|
||||
httpsAgent,
|
||||
});
|
||||
const generatePicture = async (prompt) => {
|
||||
const resp = await exports.llm.chat({
|
||||
messages: [
|
||||
{
|
||||
"role": "system",
|
||||
"content": "Ты — Василий Кандинский для жильцов многоквартирного дома"
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: `Старайся передать атмосферу уюта и безопасности.
|
||||
Нарисуй картинку подходящую для такого события: ${prompt}
|
||||
В картинке не должно быть текста, только изображение.`,
|
||||
},
|
||||
],
|
||||
function_call: 'auto',
|
||||
});
|
||||
// Получение изображения по идентификатору
|
||||
const detectedImage = (0, gigachat_1.detectImage)(resp.choices[0]?.message.content ?? '');
|
||||
const image = await exports.llm.getImage(detectedImage?.uuid ?? '');
|
||||
// Возвращаем содержимое изображения
|
||||
return image.content;
|
||||
};
|
||||
exports.generatePicture = generatePicture;
|
||||
@@ -3,6 +3,7 @@ import { Agent } from 'node:https';
|
||||
|
||||
const httpsAgent = new Agent({
|
||||
rejectUnauthorized: false,
|
||||
timeout: 60000
|
||||
});
|
||||
|
||||
export const llm = new GigaChat({
|
||||
@@ -30,8 +31,19 @@ export const generatePicture = async (prompt: string) => {
|
||||
|
||||
// Получение изображения по идентификатору
|
||||
const detectedImage = detectImage(resp.choices[0]?.message.content ?? '');
|
||||
const image = await llm.getImage(detectedImage?.uuid ?? '');
|
||||
|
||||
if (!detectedImage?.uuid) {
|
||||
throw new Error('Не удалось получить UUID изображения из ответа GigaChat');
|
||||
}
|
||||
|
||||
const image = await llm.getImage(detectedImage.uuid);
|
||||
|
||||
// Возвращаем содержимое изображения
|
||||
return image.content;
|
||||
// Возвращаем содержимое изображения, убеждаясь что это Buffer
|
||||
if (Buffer.isBuffer(image.content)) {
|
||||
return image.content;
|
||||
} else if (typeof image.content === 'string') {
|
||||
return Buffer.from(image.content, 'binary');
|
||||
} else {
|
||||
throw new Error('Unexpected image content type: ' + typeof image.content);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user