如何添加节点重试策略¶
在许多用例中,您可能希望您的节点具有自定义的重试策略。一些您可能希望这样做的示例包括调用 API、查询数据库或调用 LLM 等。
为了配置重试策略,您必须将 retryPolicy
参数传递给 addNode
函数。retryPolicy
参数接受一个名为 RetryPolicy
的命名元组对象。下面我们使用默认参数实例化一个 RetryPolicy
对象
如果您想了解有关每个参数作用的更多信息,请务必阅读参考文档。
向节点传递重试策略¶
最后,当调用 addNode
函数时,我们可以传递 RetryPolicy
对象。在下面的示例中,我们为每个节点传递了两个不同的重试策略
import Database from "better-sqlite3"
import { ChatAnthropic } from "@langchain/anthropic"
import { MessagesAnnotation, StateGraph, START, END } from "@langchain/langgraph"
import { AIMessage } from "@langchain/core/messages"
// Create an in-memory database
const db: typeof Database.prototype = new Database(':memory:');
const model = new ChatAnthropic({ model: "claude-3-5-sonnet-20240620" });
const callModel = async (state: typeof MessagesAnnotation.State) => {
const response = await model.invoke(state.messages);
return { messages: [response] };
}
const queryDatabase = async (state: typeof MessagesAnnotation.State) => {
const queryResult: string = JSON.stringify(db.prepare("SELECT * FROM Artist LIMIT 10;").all());
return { messages: [new AIMessage({content: "queryResult"})]};
};
const workflow = new StateGraph(MessagesAnnotation)
// Define the two nodes we will cycle between
.addNode("call_model", callModel, { retryPolicy: {maxAttempts: 5}})
.addNode("query_database", queryDatabase, { retryPolicy: { retryOn: (e: any): boolean => {
if (e instanceof Database.SqliteError) {
// Retry on "SQLITE_BUSY" error
return e.code === 'SQLITE_BUSY';
}
return false; // Don't retry on other errors
}}})
.addEdge(START, "call_model")
.addEdge("call_model", "query_database")
.addEdge("query_database", END);
const graph = workflow.compile();