Я хочу сохранить контекст между сообщениями пользователя, а это означает, что агент должен запоминать предыдущие разговоры, когда я вызываю его с новыми подсказками (т. е. имея историю чата для каждого потока).
Вот мой текущий код настройка:
Код: Выделить всё
import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
import { ChatGoogleGenerativeAI } from "@langchain/google-genai";
import {
MemorySaver,
} from "@langchain/langgraph";
import {
createReactAgent,
} from "@langchain/langgraph/prebuilt";
import type { Tool } from "langchain/tools";
interface AgentInfo{
id: string,
name: string,
job: string,
sex: 'male' | 'female',
}
class Agent {
private model: BaseChatModel;
private tools: Tool[];
private agent: any;
private checkpointer: MemorySaver;
public info: AgentInfo;
constructor(model: BaseChatModel, tools: Tool[], info: AgentInfo) {
const checkpointer = new MemorySaver();
this.model = model;
this.tools = tools;
this.checkpointer = checkpointer
this.info = info;
const agent = createReactAgent({
llm: model,
tools: tools,
checkpointSaver: this.checkpointer,
});
this.agent = agent;
}
public getId(){
return this.info.id
}
public async invoke(prompt: string, thread_id?: string) {
const message = await this.agent.invoke(
{
messages: [{ role: "user", content: prompt }],
},
{
configurable: {
thread_id: thread_id,
},
}
);
return message.messages[message.messages.length - 1].content
}
}
const geminiModel = new ChatGoogleGenerativeAI({
model: "gemini-1.5-flash-8b",
});
const agent = new Agent(geminiModel, [], {id: '1', name:'josh', job: 'developer', sex: 'male'});
console.log(await agent.invoke('My name is test', 'test'));
console.log(await agent.invoke('What is my name', 'test'));
Я ожидаю, что агент запомнит контекст между вызовами (т. е. фразу «Меня зовут Джон» следует сохранить и использовать для ответа на вопрос «Как меня зовут? ").
Однако кажется, что память не сохраняется при вызовах, и агент не отвечает в ожидаемом контексте.
Что я пробовал:
Убедился, что MemorySaver работает сохранение и загрузка памяти правильно использовать checkpointer.load() и checkpointer.save().
Передал загруженную память вызову агента, надеясь, что он сохранит контекст.
Подробнее здесь: https://stackoverflow.com/questions/793 ... versations
Мобильная версия