本文详细介绍了agno框架中的Session和Memory机制,用于解决大模型调用无状态问题。Session实现会话级别记忆,可通过session_id区分不同对话;Memory实现用户级别记忆,记录用户信息和偏好。两者均通过db存储实现数据持久化。文章通过代码示例展示了Session的创建、使用和管理,以及会话缓存机制的应用,帮助开发者实现AI Agent的连续对话功能。
编程不只是写代码,更是避坑和积累。
这里记录我一路踩过的坑、解决的难题和实用的方法,希望能帮你少踩点雷,多点灵感。
关注我,一起写出更靠谱的代码 🚀
相关概念
大模型的调用是无状态的,每次调用Agent.run()时,它会创建一个单一的、无状态的交互。代理会响应你的消息,之后代理就“忘记” 这次对话了,再次调用 run 方法时,只会用这次新的消息作为上下文和模型进行对话。
但大多数实际应用需要的是对话,而不仅仅是一次性的交互。这就是会话的作用所在。agno 为了解决 agent 记忆问题,使用 Session 和 Memory 机制。
本文聚焦在 Session 的使用上。
Session 会话
session 是会话级别,同一个用户和 agent 进行对话,比如一开始聊财经相关的内容,聊了很久以后,想换个话题,聊点体育相关的内容,为了不让之前关于财经的内容影响之后聊体育的对话内容,这时可以新建一个会话,相当于强制忘掉之前财经内容。Session 对应于 langgraph 中的短时记忆(short-term memory)。每个会话都有自己的 session_id,如果不提供的话,agno 会自己生成一个。
Memory 记忆
Memory 记忆是针对用户级别的,是帮助 agent 更好的了解用户,当对话中出现相关信息,例如用户的姓名、偏好或习惯时,具备记忆功能的智能体会自动将其存储在数据库中。之后,当这些信息再次变得相关时,智能体会自动检索并将其自然地运用到对话中。这样,智能体就能在与用户的互动中有效地学习每个用户的信息。当对话中涉及到用户信息相关的内容,这时就需要 agent 记住,默认的 Memory instruction 是以下内容(翻译以后的)
记忆功能应记录与当前对话相关的用户个人信息,例如:- 个人信息:姓名、年龄、职业、所在地、兴趣爱好和偏好- 观点和偏好:用户喜欢、不喜欢、享受或感到沮丧的事物- 用户分享的重要人生事件或经历- 与用户当前状况、挑战或目标相关的重要背景信息- 任何其他能够深入了解用户个性、观点或需求的信息当然也可以自定义 Memory instruction,让 agent 记住我们想让它记住的内容。这块内容以后再详细介绍。
db
无论是 Session 会话还是 Memory 记忆,都需要将内容进行存储,而 db 则为会话和以及提供了底层的存储。如果不设置 db,即使有 session_id 和 user_id,agent(以及之后要介绍的 Teams 和 workflow) 也是无法实现记忆的,因为根本就没有将数据存储下来
agno 官方提供了很多常见的存储实现如 postgresql, mongodb, mysql, redis, sqlite 等等,本地测试过程中通常使用 sqlite 或者 InMemoryDb(内存),生产环境需要使用高可用的存储。
Session 实践
agno_agent = Agent( name="Agno Agent", model=OpenAILike( api_key=os.getenv("OPENAI_API_KEY"), id="qwen-max" ), add_history_to_context=True, db=SqliteDb(db_file="agno.db"), debug_mode=True, debug_level=2, markdown=True, ) resp = agno_agent.run("你好,我叫 yyx ,你是谁? ") print(resp.content) resp = agno_agent.run("我叫什么名字?") print(resp.content)这里定义 Agent 时,需要使用add_history_to_context=True, 这样 agent 在每次交互过程中,才会去获取历史消息并添加到本次任务消息中。
上面代码得到的结果是
(第一次调用)DEBUG ======== user ===== DEBUG 你好,我叫 yyx ,你是谁?DEBUG ======== assistant ===== DEBUG 你好,yyx!我是通义千问,是阿里云开发的人工智能助手。很高兴认识你!有什么我可以帮助你的吗?(第二次调用)DEBUG ======== user ===== DEBUG 你好,我叫 yyx ,你是谁? DEBUG ======== assistant ===== DEBUG 你好,yyx!我是通义千问,是阿里云开发的人工智能助手。很高兴认识你!有什么我可以帮助你的吗?DEBUG ======== user ===== DEBUG 我叫什么名字?DEBUG ======== assistant ===== DEBUG 你刚刚告诉我,你的名字叫 yyx。第二次调用时已经将第一次调用的消息带了上去。所以第二次的消息,agent 可以说出我的名字。
session_id 如何产生的?
上面的代码,并没有传如 session_id, agent 在调用 run 方法的时候,会使用 uuid 生成一个 session_id, 在本次脚本运行过程中,会使用相同的 session_id。
但是更加推荐的方式是客户端传入 session_id,这样使用 agno 搭建一个 agent 后端服务,用户的会话就由客户端来控制了,在使用 agentOS 进行 agent 对话时,也是由前端生成 session_id 传给后端。
agno_agent = Agent( name="Agno Agent", model=OpenAILike( api_key=os.getenv("OPENAI_API_KEY"), id="qwen-max" ), db=SqliteDb(db_file="agno.db"), add_history_to_context=True, debug_mode=True, debug_level=2, markdown=True, )resp = agno_agent.run("你好,我叫 yyx ,你是谁? ", session_id="conversion_123") print(resp.content) resp = agno_agent.run("我叫什么名字?", session_id="conversion_123") print(resp.content)# 停止脚本,注释掉# resp = agno_agent.run("你好,我叫 yyx ,你是谁? ")resp = agno_agent.run("我叫什么名字?",session_id="conversion_123")这里调用 agent.run 方法时传入了 session_id 参数,当第一次调用结束以后,注释掉介绍自己的代码,直接问我的名字,此时 agent 可以获取到历史消息。
Session 管理
agent 可以对 session 数据进行管理,包括消息获取,写入,总结等等
agno_agent = Agent( name="Agno Agent", model=OpenAILike( api_key=os.getenv("OPENAI_API_KEY"), id="qwen-max" ), db=SqliteDb(db_file="agno.db"), add_history_to_context=True, debug_mode=True, debug_level=2, markdown=True, ) session = agno_agent.get_session("conversion_123") messages = session.get_messages() for message in messages: print(message.content)使用agent.get_session()可以获得会话中所有运行的所有消息,包括工具调用和系统消息
<additional_information>- Use markdown to format your answers.</additional_information>你好,我叫 yyx ,你是谁? 你好,yyx!我是Qwen,由阿里云开发的超大规模语言模。很高兴认识你!我可以帮助回答问题、提供信息、进行对话等。请问有什么我可以帮到你的吗?我叫什么名字?你刚才告诉我,你的名字是 yyx。如果你有其他昵称或者想用不同的名字称呼你,请告诉我!我叫什么名字?你叫 yyx。如果你有其他名字或者昵称,也可以告诉我!如果要获取仅包含用户和助手消息的更简单的列表,可以使用get_chat_history方法:
messages = agno_agent.get_chat_history(session_id="conversion_123", last_n_runs=5) for message in messages: print(message.content, "|", message.role)get_chat_history 可以传 last_n_runs 来控制获取最近的多少轮会话。
Session Caching 会话缓存
会话缓存会将会话对象存储在内存中以提高性能。cache_session=True会在首次数据库读取后将已填充的会话对象保留在内存中,从而避免后续运行进行额外的查询。
from agno.agent import Agentfrom agno.models.openai import OpenAIChatagno_agent = Agent( name="Agno Agent", model=OpenAILike( api_key=os.getenv("OPENAI_API_KEY"), id="qwen-max" ), db=SqliteDb(db_file="agno.db"), add_history_to_context=True, cache_session=True markdown=True, )# First run loads from database and cachesagent.run("First message")# Subsequent runs use cached session (faster)agent.run("Second message")总结
agno 中通过 session 和 memory 来实现短时记忆和用户信息记忆,session 是会话级别的,memory 是用户级别的。
底层都是通过 db 来实现数据的存储。
AI时代,未来的就业机会在哪里?
答案就藏在大模型的浪潮里。从ChatGPT、DeepSeek等日常工具,到自然语言处理、计算机视觉、多模态等核心领域,技术普惠化、应用垂直化与生态开源化正催生Prompt工程师、自然语言处理、计算机视觉工程师、大模型算法工程师、AI应用产品经理等AI岗位。
掌握大模型技能,就是把握高薪未来。
那么,普通人如何抓住大模型风口?
AI技术的普及对个人能力提出了新的要求,在AI时代,持续学习和适应新技术变得尤为重要。无论是企业还是个人,都需要不断更新知识体系,提升与AI协作的能力,以适应不断变化的工作环境。
因此,这里给大家整理了一份《2026最新大模型全套学习资源》,包括2026最新大模型学习路线、大模型书籍、视频教程、项目实战、最新行业报告、面试题、AI产品经理入门到精通等,带你从零基础入门到精通,快速掌握大模型技术!
由于篇幅有限,有需要的小伙伴可以扫码获取!
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 大模型项目实战
学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
5. 大模型行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
为什么大家都在学AI大模型?
随着AI技术的发展,企业对人才的需求从“单一技术”转向 “AI+行业”双背景。企业对人才的需求从“单一技术”转向 “AI+行业”双背景。金融+AI、制造+AI、医疗+AI等跨界岗位薪资涨幅达30%-50%。
同时很多人面临优化裁员,近期科技巨头英特尔裁员2万人,传统岗位不断缩减,因此转行AI势在必行!
这些资料有用吗?
这份资料由我们和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
大模型全套学习资料已整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费】