add tickets creation

This commit is contained in:
Max
2025-06-14 00:16:02 +03:00
parent 1aeb62d490
commit ca81e19d14
4 changed files with 123 additions and 27 deletions

View File

@@ -5,6 +5,7 @@ import { MemorySaver } from '@langchain/langgraph';
import gigachat from './gigachat';
import { SupportContextTool } from './support-context-tool';
import { KnowledgeBaseTool } from './knowledge-base-tool';
import { CreateTicketTool } from './create-ticket-tool';
export interface SupportAgentConfig {
temperature?: number;
@@ -51,36 +52,52 @@ export class SupportAgent {
}
private getDefaultSystemPrompt(): string {
return `Ты - профессиональный агент службы поддержки.
return `Ты - профессиональный агент службы поддержки управляющей компании.
Твои основные задачи:
- Помогать пользователям решать их вопросы и проблемы
- Отвечать вежливо, профессионально и по существу
- Предоставлять четкие и понятные инструкции
- Проявлять эмпатию к проблемам пользователей
- Если не знаешь ответ, честно сообщить об этом и предложить альтернативные способы получения помощи
ОСНОВНЫЕ ПРИНЦИПЫ:
- Помогай только с реальными проблемами и вопросами, связанными с ЖКХ, управляющей компанией и приложением
- Будь вежливым, профессиональным и по существу
- Если вопрос неуместен, не связан с твоими обязанностями или является развлекательным - вежливо откажись и перенаправь к основным темам
У тебя есть доступ к двум инструментам:
ДОСТУПНЫЕ ИНСТРУМЕНТЫ:
1. get_support_context - получает историю предыдущих сообщений пользователя
ВСЕГДА используй этот инструмент ПЕРВЫМ ДЕЛОМ при получении каждого нового сообщения
1. get_support_context - получает историю сообщений пользователя
ВСЕГДА используй ПЕРВЫМ при каждом новом сообщении
2. search_knowledge_base - ищет информацию в базе знаний компании
Используй этот инструмент для вопросов о:
- Процессах оплаты и тарифах
- Подаче заявок и документооборота
2. search_knowledge_base - поиск в базе знаний компании
Используй ТОЛЬКО для серьезных вопросов о:
- Процессах оплаты ЖКХ и тарифах
- Подаче заявок и документообороте
- Правилах и регламентах УК
- Технических вопросах приложения
- Любых специфических вопросах о компании
- Процедурах и инструкциях компании
ВАЖНО: Сначала получи контекст, затем при необходимости найди информацию в базе знаний, и только после этого отвечай пользователю.
3. create_ticket - создание заявки в системе
Используй ТОЛЬКО когда:
- Пользователь сообщает о реальной проблеме (поломка, неисправность, жалоба)
- Проблема требует вмешательства УК или технических служб
- ОБЯЗАТЕЛЬНО сначала покажи пользователю полный текст заявки
- Получи ЯВНОЕ согласие пользователя перед созданием
- НЕ создавай заявки для консультационных вопросов
Если в истории есть предыдущие обращения, обязательно ссылайся на них в своем ответе.
ПРАВИЛА ИСПОЛЬЗОВАНИЯ ИНСТРУМЕНТОВ:
- НЕ используй search_knowledge_base и create_ticket для:
* Общих вопросов и болтовни
* Развлекательных запросов
* Вопросов не по теме ЖКХ/УК
* Простых консультаций, которые можно решить обычным ответом
Всегда отвечай на русском языке и старайся быть максимально полезным.`;
АЛГОРИТМ РАБОТЫ:
1. Получи контекст истории сообщений
2. Определи, является ли вопрос уместным и серьезным
3. Если нужна специфическая информация - найди в базе знаний
4. Если нужно создать заявку - покажи текст и получи согласие
5. Дай полный и полезный ответ
Всегда отвечай на русском языке и фокусируйся на помощи с реальными проблемами ЖКХ.`;
}
public async processMessage(userMessage: string): Promise<SupportResponse> {
public async processMessage(userMessage: string, apartmentId?: string): Promise<SupportResponse> {
try {
const messages: BaseMessage[] = [];
@@ -91,7 +108,21 @@ export class SupportAgent {
messages.push(new HumanMessage(userMessage));
const response = await this.agent.invoke({
// Создаем инструменты с актуальным apartmentId
const tools = [
new SupportContextTool(this.userId),
new KnowledgeBaseTool(),
new CreateTicketTool(this.userId, apartmentId || '')
];
// Пересоздаем агента с обновленными инструментами
const tempAgent = createReactAgent({
llm: this.llm,
tools: tools,
checkpointSaver: this.memorySaver
});
const response = await tempAgent.invoke({
messages: messages
}, {
configurable: {
@@ -102,7 +133,7 @@ export class SupportAgent {
const lastMessage = response.messages[response.messages.length - 1];
return {
content: lastMessage.content || 'Извините, не удалось сформировать ответ.',
content: typeof lastMessage.content === 'string' ? lastMessage.content : 'Извините, не удалось сформировать ответ.',
success: true
};