在 [1]
已复制!
%%capture --no-stderr
%pip install -U langgraph langchain_anthropic langchain_community
%%capture --no-stderr %pip install -U langgraph langchain_anthropic langchain_community
在 [2]
已复制!
import getpass
import os
def _set_env(var: str):
if not os.environ.get(var):
os.environ[var] = getpass.getpass(f"{var}: ")
_set_env("ANTHROPIC_API_KEY")
import getpass import os def _set_env(var: str): if not os.environ.get(var): os.environ[var] = getpass.getpass(f"{var}: ") _set_env("ANTHROPIC_API_KEY")
为了配置重试策略,您必须将 retry
参数传递给 add_node。retry
参数接收一个名为 RetryPolicy
的命名元组对象。下面我们使用默认参数实例化一个 RetryPolicy
对象
在 [3]
已复制!
from langgraph.pregel import RetryPolicy
RetryPolicy()
from langgraph.pregel import RetryPolicy RetryPolicy()
输出 [3]
RetryPolicy(initial_interval=0.5, backoff_factor=2.0, max_interval=128.0, max_attempts=3, jitter=True, retry_on=<function default_retry_on at 0x78b964b89940>)
默认情况下,retry_on
参数使用 default_retry_on
函数,该函数对除以下情况外的任何异常进行重试
ValueError
TypeError
ArithmeticError
ImportError
LookupError
NameError
SyntaxError
RuntimeError
ReferenceError
StopIteration
StopAsyncIteration
OSError
此外,对于来自流行的 http 请求库(如 requests
和 httpx
)的异常,它仅对 5xx 状态代码进行重试。
在 [5]
已复制!
import operator
import sqlite3
from typing import Annotated, Sequence
from typing_extensions import TypedDict
from langchain_anthropic import ChatAnthropic
from langchain_core.messages import BaseMessage
from langgraph.graph import END, StateGraph, START
from langchain_community.utilities import SQLDatabase
from langchain_core.messages import AIMessage
db = SQLDatabase.from_uri("sqlite:///:memory:")
model = ChatAnthropic(model_name="claude-2.1")
class AgentState(TypedDict):
messages: Annotated[Sequence[BaseMessage], operator.add]
def query_database(state):
query_result = db.run("SELECT * FROM Artist LIMIT 10;")
return {"messages": [AIMessage(content=query_result)]}
def call_model(state):
response = model.invoke(state["messages"])
return {"messages": [response]}
# Define a new graph
builder = StateGraph(AgentState)
builder.add_node(
"query_database",
query_database,
retry=RetryPolicy(retry_on=sqlite3.OperationalError),
)
builder.add_node("model", call_model, retry=RetryPolicy(max_attempts=5))
builder.add_edge(START, "model")
builder.add_edge("model", "query_database")
builder.add_edge("query_database", END)
graph = builder.compile()
import operator import sqlite3 from typing import Annotated, Sequence from typing_extensions import TypedDict from langchain_anthropic import ChatAnthropic from langchain_core.messages import BaseMessage from langgraph.graph import END, StateGraph, START from langchain_community.utilities import SQLDatabase from langchain_core.messages import AIMessage db = SQLDatabase.from_uri("sqlite:///:memory:") model = ChatAnthropic(model_name="claude-2.1") class AgentState(TypedDict): messages: Annotated[Sequence[BaseMessage], operator.add] def query_database(state): query_result = db.run("SELECT * FROM Artist LIMIT 10;") return {"messages": [AIMessage(content=query_result)]} def call_model(state): response = model.invoke(state["messages"]) return {"messages": [response]} # 定义一个新的图 builder = StateGraph(AgentState) builder.add_node( "query_database", query_database, retry=RetryPolicy(retry_on=sqlite3.OperationalError), ) builder.add_node("model", call_model, retry=RetryPolicy(max_attempts=5)) builder.add_edge(START, "model") builder.add_edge("model", "query_database") builder.add_edge("query_database", END) graph = builder.compile()