add history tool
This commit is contained in:
@@ -3,6 +3,7 @@ import { ChatPromptTemplate, MessagesPlaceholder } from '@langchain/core/prompts
|
||||
import { createReactAgent } from '@langchain/langgraph/prebuilt';
|
||||
import { MemorySaver } from '@langchain/langgraph';
|
||||
import gigachat from './gigachat';
|
||||
import { SupportContextTool } from './support-context-tool';
|
||||
|
||||
export interface SupportAgentConfig {
|
||||
temperature?: number;
|
||||
@@ -22,30 +23,31 @@ export class SupportAgent {
|
||||
private systemPrompt: string;
|
||||
private threadId: string;
|
||||
private isFirstMessage: boolean;
|
||||
private userId: string;
|
||||
|
||||
constructor(config: SupportAgentConfig = {}) {
|
||||
this.systemPrompt = this.getDefaultSystemPrompt();
|
||||
this.threadId = config.threadId || 'default';
|
||||
this.userId = this.threadId;
|
||||
this.memorySaver = new MemorySaver();
|
||||
this.isFirstMessage = true;
|
||||
|
||||
// Настраиваем модель с заданной температурой
|
||||
this.llm = gigachat;
|
||||
if (config.temperature !== undefined) {
|
||||
this.llm.temperature = config.temperature;
|
||||
}
|
||||
|
||||
// Создаем агента без инструментов для простого чата
|
||||
const tools = [
|
||||
new SupportContextTool(this.userId)
|
||||
];
|
||||
|
||||
this.agent = createReactAgent({
|
||||
llm: this.llm,
|
||||
tools: [],
|
||||
tools: tools,
|
||||
checkpointSaver: this.memorySaver
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить системный промпт по умолчанию для агента поддержки
|
||||
*/
|
||||
private getDefaultSystemPrompt(): string {
|
||||
return `Ты - профессиональный агент службы поддержки.
|
||||
|
||||
@@ -56,29 +58,26 @@ export class SupportAgent {
|
||||
- Проявлять эмпатию к проблемам пользователей
|
||||
- Если не знаешь ответ, честно сообщить об этом и предложить альтернативные способы получения помощи
|
||||
|
||||
ВАЖНО: У тебя есть доступ к инструменту get_support_context, который позволяет получить историю предыдущих сообщений пользователя.
|
||||
ВСЕГДА используй этот инструмент ПЕРВЫМ ДЕЛОМ при получении каждого нового сообщения, чтобы понять контекст и предыдущие обращения пользователя.
|
||||
Только после получения контекста отвечай на вопрос пользователя.
|
||||
|
||||
Если в истории есть предыдущие обращения, обязательно ссылайся на них в своем ответе, показывая что помнишь предыдущее общение.
|
||||
|
||||
Всегда отвечай на русском языке и старайся быть максимально полезным.`;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Обработать сообщение пользователя и получить ответ
|
||||
*/
|
||||
public async processMessage(userMessage: string): Promise<SupportResponse> {
|
||||
try {
|
||||
// Создаем массив сообщений
|
||||
const messages: BaseMessage[] = [];
|
||||
|
||||
// Добавляем системный промпт только в первом сообщении
|
||||
if (this.isFirstMessage) {
|
||||
messages.push(new SystemMessage(this.systemPrompt));
|
||||
this.isFirstMessage = false;
|
||||
}
|
||||
|
||||
// Добавляем сообщение пользователя
|
||||
messages.push(new HumanMessage(userMessage));
|
||||
|
||||
// Получаем ответ от агента
|
||||
const response = await this.agent.invoke({
|
||||
messages: messages
|
||||
}, {
|
||||
@@ -87,7 +86,6 @@ export class SupportAgent {
|
||||
}
|
||||
});
|
||||
|
||||
// Извлекаем последнее сообщение от ассистента
|
||||
const lastMessage = response.messages[response.messages.length - 1];
|
||||
|
||||
return {
|
||||
@@ -105,19 +103,19 @@ export class SupportAgent {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Очистить историю диалога
|
||||
*/
|
||||
public async clearHistory(): Promise<void> {
|
||||
this.memorySaver = new MemorySaver();
|
||||
|
||||
const tools = [
|
||||
new SupportContextTool(this.userId)
|
||||
];
|
||||
|
||||
this.agent = createReactAgent({
|
||||
llm: this.llm,
|
||||
tools: [],
|
||||
tools: tools,
|
||||
checkpointSaver: this.memorySaver
|
||||
});
|
||||
// Сбрасываем флаг первого сообщения
|
||||
|
||||
this.isFirstMessage = true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user