第四单元——第十二课:让上一课的“用户偏好”在关闭程序后仍保留
让上一课的“用户偏好”在关闭程序后仍保留。这次只练 Store不调用模型也不保存聊天记录。如果之前没安装 SQLite 扩展在.venv中运行python -m pip install langgraph-checkpoint-sqlite新建unit4_lesson12_disk_store.pyimport sys from dataclasses import dataclass from pathlib import Path from typing import NotRequired, TypedDict from langgraph.graph import START, END, StateGraph from langgraph.runtime import Runtime from langgraph.store.sqlite import SqliteStore dataclass class Context: user_id: str class BookstoreState(TypedDict): message: str reply: NotRequired[str] def respond(state: BookstoreState, runtime: Runtime[Context]) - dict[str, str]: namespace (bookstore_users, runtime.context.user_id) message state[message] if message.startswith(记住我喜欢): genre message.removeprefix(记住我喜欢).strip( 。) runtime.store.put(namespace, favorite_genre, {genre: genre}) return {reply: f已保存你喜欢{genre}。} saved runtime.store.get(namespace, favorite_genre) if saved: return {reply: f我记得你喜欢{saved.value[genre]}。} return {reply: 我还不知道你喜欢什么书。} builder StateGraph(BookstoreState, context_schemaContext) builder.add_node(respond, respond) builder.add_edge(START, respond) builder.add_edge(respond, END) if len(sys.argv) ! 2 or sys.argv[1] not in (remember, ask): print(用法python unit4_lesson12_disk_store.py remember 或 ask) sys.exit(1) message ( 记住我喜欢科幻小说。 if sys.argv[1] remember else 我喜欢什么书 ) db_path Path(__file__).with_name(bookstore_preferences.sqlite) with SqliteStore.from_conn_string(str(db_path)) as store: store.setup() graph builder.compile(storestore) result graph.invoke( {message: message}, contextContext(user_idA), ) print(问题, message) print(回答, result[reply])分两次运行python unit4_lesson12_disk_store.py remember python unit4_lesson12_disk_store.py ask第二次是新的 Python 进程却仍能读出“科幻小说”因为偏好已保存在脚本旁的bookstore_preferences.sqlite中。SqliteStore保存的是按user_id查找的用户资料之前的SqliteSaver保存的则是按thread_id查找的图状态。这是两种不同的记忆。LangGraph 记忆说明 · SQLite Store 用法