核心内容摘要
OFA视觉问答模型实战:电商商品识别问答全流程演示
LangGraph 拥有一个内置的持久化层是通过 checkpointer 实现的。
当使用 checkpointer 编译 Graph 时checkpointer 会为 thread 在每个 Super-step 后保存一个类型为 StateSnapshot 的 checkpoint记录 thread 级别图的状态可以利用 checkpoint 执行图的重放或更新状态。
线程 Thread线程必须有唯一标识符由 checkpointer 保存到 checkpoint检查点中来标识检查点属于哪一个线程线程信息存放在 RunnableConfig 对象中必须指定 thread_id 属性在 graph 执行时使用。
config: RunnableConfig {configurable: {thread_id: 1}} graph.invoke({foo: , bar:[]}, config)检查点 Checkpoints检查点是 线程级别 的类型为 StateSnapshot在每个 Super-step 后由 checkpointer 保存。
会被持久化可以用来在以后恢复线程的状态。
通过 get_state 函数获取线程的检查点。
# 获取线程最后一个检查点 config {configurable: {thread_id: 1}} graph.get_state(config) # 获取线程某一个检查点需要指定checkpoint_id config {configurable: {thread_id: 1, checkpoint_id: 1ef663ba-28fe-
a559208592c}} graph.get_state(config)通过 get_state_history 获取历史检查点列表。
config {configurable: {thread_id: 1}} list(graph.get_state_history(config))重放(重新执行)某一 检查点之后 的所有步骤检查点之前的步骤不会执行。
config {configurable: {thread_id: 1, checkpoint_id: 0c62ca34-ac
d-bbb
b4984975b2a}} graph.invoke(None, configconfig)通过 update_state 函数编辑状态。
接受 3 个参数分别是 config、values 和as_node。
config必须包含 thread_id 属性如果只有 thread_id 属性编辑的是当前(最终)的状态如果包含 checkpoint_id 属性编辑的是对应检查点的状态。
values用于更新状态的数据。
如果状态中要更新的属性定义了reducer 函数值将会传递给 reducer 函数没有设置 reducer 函数的属性会被覆盖from typing import Annotated from typing_extensions import TypedDict from operator import add class State(TypedDict): foo: int bar: Annotated[list[str], add] # 定义了 reducer 函数 # 当前(最终)状态 {foo: 1, bar: [a]} # 更新最终状态 graph.update_state(config, {foo: 2, bar: [b]}) # 结果为 {foo: 2, bar: [a, b]} foo 属性被覆盖bar属性由 reducer 函数 add 处理as_node如果指定了as_node可以模拟特定节点的输出并根据模拟节点的输出边决定下一个节点是谁# 假设当前图停留在 human_review 节点之后 # 我们想要更新状态并让图认为这是从 agent 节点发出的更新 config {configurable: {thread_id: 1, checkpoint_id: ...}} graph.update_state( config, {messages: [HumanMessage(contentLooks good!)]}, as_nodeagent # 模拟 agent 节点更新了状态 ) # 此时调用 graph.invoke(None, config) # 图会根据 agent 节点的输出边edges来决定下一步去哪里Memory Store由于检查点是线程级别的无法在多个线程中共享数据如果一个用户开启了两个会话线程想在线程间共享数据就需要使用 Store 来存储数据基础用法from langgraph.store.memory import InMemoryStore # 创建store in_memory_store InMemoryStore() # 创建用户的 命名空间 user_id 1 namespace_for_memory (user_id, memories) # 存储数据 memory_id str(uuid.uuid4()) memory {food_preference : I like pizza} in_memory_store.put(namespace_for_memory, memory_id, memory) # 取出数据 memories in_memory_store.search(namespace_for_memory) # 拿到最后一条 memories[-1].dict() #{value: {food_preference: I like pizza}, #key: 07e0caf
b7-b15f-65515d4c1843, #namespace: [1, memories], #created_at:
T13:22:
3
59060208:00, #updated_at:
T13:22:
3
59060508:00}语义搜索需要使用 Embedding 模型在创建 store 时设置 index 属性。
from langchain.embeddings import init_embeddings # 创建 store store InMemoryStore( index{ embed: init_embeddings(openai:text-embedding-3-small), # Embedding 模型 dims: 1024, # Embedding 维度 fields: [food_preference, $] # 需要向量化的字段 } ) # 保存数据 store.put( namespace_for_memory, str(uuid.uuid4()), { food_preference: I love Italian cuisine, context: Discussing dinner plans }, index[food_preference] # 只向量化 food_preference 字段 ) # 搜索 memories store.search( namespace_for_memory, queryWhat does the user like to eat?, limit3 # Return top 3 matches )LangGraph 中使用 store需要在 config 中增加 user_id 属性在节点中使用时需要增加 store: BaseStore 参数。
from langgraph.store.memory import InMemoryStore from langgraph.checkpoint.memory import InMemorySaver checkpointer InMemorySaver() in_memory_store InMemoryStore() graph graph.compile(checkpointercheckpointer, storein_memory_store) # 增加 user_id 属性 user_id 1 config {configurable: {thread_id: 1, user_id: user_id}} # 节点中使用 def call_model(state: MessagesState, config: RunnableConfig, *, store: BaseStore): #
从 config 中获取 user_id user_id config[configurable][user_id] #
组装 namespace namespace (user_id, memories) # 搜索数据 memories store.search( namespace, querystate[messages][-1].content, limit3 ) info \n.join([d.value[memory] for d in memories]) }AI大模型从0到精通全套学习大礼包我在一线互联网企业工作十余年里指导过不少同行后辈。
帮助很多人得到了学习和成长。
只要你是真心想学AI大模型我这份资料就可以无偿共享给你学习。
大模型行业确实也需要更多的有志之士加入进来我也真心希望帮助大家学好这门技术如果日后有什么学习上的问题欢迎找我交流有技术上面的问题我是很愿意去帮助大家的如果你也想通过学大模型技术去帮助就业和转行可以扫描下方链接大模型重磅福利入门进阶全套104G学习资源包免费分享
从入门到精通的全套视频教程包含提示词工程、RAG、Agent等技术点
AI大模型学习路线图还有视频解说全过程AI大模型学习路线
学习电子书籍和技术文档市面上的大模型书籍确实太多了这些是我精选出来的
大模型面试题目详解
这些资料真的有用吗?这份资料由我和鲁为民博士共同整理鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利同时还斩获了吴文俊人工智能科学技术奖。
目前我正在和鲁博士共同进行人工智能的研究。
所有的视频由智泊AI老师录制且资料与智泊AI共享相互补充。
这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。
智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念通过动态追踪大模型开发、数据标注伦理等前沿技术趋势构建起前沿课程智能实训精准就业的高效培养体系。
课堂上不光教理论还带着学员做了十多个真实项目。
学员要亲自上手搞数据清洗、模型调优这些硬核操作把课本知识变成真本事如果说你是以下人群中的其中一类都可以来智泊AI学习人工智能找到高薪工作一次小小的“投资”换来的是终身受益应届毕业生无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。
零基础转型非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界。
业务赋能 突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型。
获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】