资讯动态

第四单元——第十三课:让大模型使用保存的用户偏好

发布时间:2026/10/15 3:12:17 来源:尧图企业网站定制
上一课保存了“用户 A 喜欢科幻小说”。这次程序会读出偏好交给 DeepSeek让它推荐图书再回答你的追问。这会调用两次模型沿用环境变量DEEPSEEK_API_KEY。在原项目文件夹中新建unit4_lesson13_personalized_chat.pyimport os from dataclasses import dataclass from pathlib import Path from typing import Annotated, TypedDict from langchain_core.messages import ( AIMessage, AnyMessage, HumanMessage, SystemMessage, ) from langchain_openai import ChatOpenAI from langgraph.checkpoint.memory import InMemorySaver from langgraph.graph import START, END, StateGraph from langgraph.graph.message import add_messages from langgraph.runtime import Runtime from langgraph.store.sqlite import SqliteStore dataclass class Context: user_id: str class ChatState(TypedDict): messages: Annotated[list[AnyMessage], add_messages] model ChatOpenAI( modeldeepseek-flash, base_urlhttps://api.deepseek.com, api_keyos.environ[DEEPSEEK_API_KEY], ) def chat(state: ChatState, runtime: Runtime[Context]) - dict: # 1. 按用户编号读取长期记忆 namespace (bookstore_users, runtime.context.user_id) saved runtime.store.get(namespace, favorite_genre) if saved is None: return { messages: [AIMessage(content尚未保存偏好请先运行上一课的 remember。)] } genre saved.value[genre] print(读取到的偏好, genre) # 2. 把偏好提供给模型 system_message SystemMessage(content( 你是书店助手请结合用户偏好和当前问题简短回答。 f已记录的阅读偏好{genre}。 推荐图书时写出真实的书名和作者。 )) # 3. 同时提供本段对话历史 response model.invoke([system_message, *state[messages]]) return {messages: [response]} builder StateGraph(ChatState, context_schemaContext) builder.add_node(chat, chat) builder.add_edge(START, chat) builder.add_edge(chat, END) db_path Path(__file__).with_name(bookstore_preferences.sqlite) if not db_path.exists(): raise SystemExit(请先运行上一课的 remember生成偏好数据库。) with SqliteStore.from_conn_string(str(db_path)) as store: store.setup() graph builder.compile( checkpointerInMemorySaver(), storestore, ) config {configurable: {thread_id: recommendation-1}} questions [ 请根据我的阅读偏好推荐两本书。, 你刚才推荐的第一本书适合初学者吗, ] for number, question in enumerate(questions, start1): print(f\n第 {number} 轮问题{question}) result graph.invoke( {messages: [HumanMessage(contentquestion)]}, configconfig, contextContext(user_idA), ) print(回答, result[messages][-1].content)在项目目录运行python unit4_lesson13_personalized_chat.py第一轮应该根据数据库里的“科幻小说”推荐书第二轮能知道“第一本书”指什么因为同一个thread_id保存了上一轮消息。这次最关键的是这一行response model.invoke([system_message, *state[messages]])system_message带上从数据库读出的偏好*state[messages]把历史消息逐条展开到列表中。**模型能使用这些记忆是因为程序读取后把它们放进了本次请求。**这也是 LangGraph 官方示例采用的方式。官方记忆用法程序退出后SQLite 中的偏好仍在这段推荐对话使用的是InMemorySaver重启后会清空。输出如下如果输出如下则执行上课的代码 python unit4_lesson12_disk_store.py remember

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑