基于Python实现一个具有记忆功能的AI对话代理

 更新时间:2025年12月01日 08:31:23   作者:东方佑  
在人工智能应用蓬勃发展的今天,如何让AI系统具备记忆能力成为了提升用户体验的关键,本文将深入解析一个基于Python的AI对话代理实现,它能够记住用户的历史对话,从而实现更加连贯和个性化的交流,需要的朋友可以参考下

引言

在人工智能应用蓬勃发展的今天,如何让AI系统具备记忆能力成为了提升用户体验的关键。本文将深入解析一个基于Python的AI对话代理实现,它能够记住用户的历史对话,从而实现更加连贯和个性化的交流。

环境配置与依赖加载

任何Python项目的开始都离不开环境配置和依赖管理。我们首先导入必要的库并加载环境变量:

import os
from dotenv import load_dotenv
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.db.sqlite import SqliteDb

load_dotenv(".env")
user_id = "ava"

这段代码完成了基础的环境设置。dotenv库用于从.env文件加载环境变量,这是一种管理敏感信息(如API密钥)的最佳实践,避免将密钥硬编码在代码中。

数据库配置:记忆的存储基础

AI代理的记忆功能需要持久化存储支持,这里使用了SQLite数据库:

db = SqliteDb(
    db_file="mem.db",
    memory_table="user_memories",  # 为记忆数据指定表名
)

SQLite是一个轻量级的文件型数据库,无需单独部署数据库服务器,非常适合小型项目和个人使用。我们指定了数据库文件名为mem.db,并创建了专门的user_memories表来存储用户记忆数据。

智能体初始化:核心功能实现

下面是AI代理的核心初始化代码:

memory_agent = Agent(
    model=OpenAIChat(
        id="qwen/qwen3-4b-thinking-2507", 
        base_url=os.getenv("BASE_URL"), 
        api_key=os.getenv("OPENAI_API_KEY")
    ),
    db=db,
    enable_agentic_memory=True,
    enable_user_memories=True,
    markdown=True,
)

这里创建了一个Agent实例,并配置了多个重要参数:

  • model:指定使用的AI模型,这里使用的是OpenAI兼容的API接口
  • db:连接前面配置的数据库,实现记忆持久化
  • enable_agentic_memoryenable_user_memories:启用不同类型的记忆功能
  • markdown:支持Markdown格式的输出,提升可读性

记忆管理与对话循环

在开始对话前,我们先清空现有记忆,然后启动对话循环:

db.clear_memories()

while True:
    user_input = input("user:")
    print("agent:")
    memory_agent.print_response(
        user_input,
        user_id=user_id,
        stream=True,
    )

这个简单的循环实现了持续的对话交互。stream=True参数使响应以流式方式输出,模仿人类逐字思考的对话体验,大大提升了交互的自然度。

应用场景与扩展方向

这个具有记忆功能的AI对话代理可以应用于多个场景:

  1. 个性化助手:通过记忆用户偏好和历史对话,提供更加个性化的服务
  2. 教育工具:记住学生的学习进度和薄弱点,实施因材施教
  3. 客户服务:持续跟踪客户问题,提供连贯的支持体验
  4. 心理咨询:建立长期的对话记录,帮助跟踪情绪变化趋势

要进一步扩展此系统,可以考虑以下方向:

  • 实现短期记忆与长期记忆的分层存储
  • 添加记忆重要性评估机制,自动过滤无关信息
  • 引入记忆检索优化,提高相关记忆的召回效率
  • 增加多模态记忆能力,支持图像、音频等格式

总结

本文介绍了一个具有记忆功能的AI对话代理的完整实现。通过结合强大的AI模型和持久化存储技术,我们能够创建更加智能、个性化的对话体验。这种技术不仅可以用于简单的聊天机器人,更是构建真正智能助手的基础。

记忆功能是AI系统从工具向伙伴演进的关键一步。随着技术的不断发展,我们有理由相信,能够理解和记住用户需求的AI将在更多领域发挥重要作用。

代码实现基于agno框架,需要配置相应的API密钥才能正常运行。建议在虚拟环境中部署此项目,以避免依赖冲突。

from agno.workflow import Workflow, Step, Parallel
from agno.agent import Agent

# 1. 定义多个专业化的智能体
web_researcher = Agent(
    name="网络研究员",
    role="从互联网搜索最新信息和新闻",
    # ... 配置工具和指令
)

academic_researcher = Agent(
    name="学术研究员",
    role="从学术数据库查找研究和论文",
    # ... 配置工具和指令
)

social_media_analyst = Agent(
    name="社交媒体分析师",
    role="分析社交媒体平台上的趋势和观点",
    # ... 配置工具和指令
)

# 2. 定义总结智能体
summarizer = Agent(
    name="首席分析官",
    role="整合多来源信息,生成一份全面、结构化的总结报告",
    instructions="综合所有研究员的发现,识别共同点和关键差异,形成权威结论。"
)

# 3. 构建工作流
research_workflow = Workflow(
    name="综合研究工作流",
    steps=[
        Parallel(  # 并行执行以下所有研究步骤

            [
                Step(name="网络研究", agent=web_researcher),
                Step(name="学术研究", agent=academic_researcher),
                Step(name="社媒分析", agent=social_media_analyst),
            ]
        ),
        Step(name="生成总结报告", agent=summarizer)  # 汇总并行结果
    ]
)

# 4. 运行工作流
response = research_workflow.run("关于神经形态计算的最新发展")

到此这篇关于基于Python实现一个具有记忆功能的AI对话代理的文章就介绍到这了,更多相关Python AI对话代理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Python对SQLite数据库操作

    使用Python对SQLite数据库操作

    本文主要介绍了Python对SQLite数据库操作的简单教程。SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在IOS和Android的APP中都可以集成。
    2017-04-04
  • Python游戏开发实例之graphics实现AI五子棋

    Python游戏开发实例之graphics实现AI五子棋

    五子棋是经典的棋牌类游戏,很多人都玩过,那么如何用Python实现五子棋呢,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • python使用Selenium和cookie绕过验证码实现登录示例代码

    python使用Selenium和cookie绕过验证码实现登录示例代码

    文章介绍了如何使用Selenium获取登录过程中的cookie信息,并通过抓包工具获取cookie,通过示例展示了如何在Dsmall和CRM系统中实现免登陆操作,总结了两种方法:一种是在获取到cookie后直接添加到当前会话中,另一种是将cookie存储到本地文件并在后续请求中使用
    2025-01-01
  • Python函数参数定义及传递方式解析

    Python函数参数定义及传递方式解析

    这篇文章主要介绍了Python函数参数定义及传递方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Python高效实现HTML转为Word和PDF

    Python高效实现HTML转为Word和PDF

    在Python日常开发中,经常会遇到将网页中的 HTML 内容保存为 Word 文档,本文将借助第三方库实现将HTML转为Word和PDF,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-09-09
  • pytorch如何获得模型的计算量和参数量

    pytorch如何获得模型的计算量和参数量

    这篇文章主要介绍了pytorch如何获得模型的计算量和参数量操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python数据可视化实现漏斗图过程图解

    Python数据可视化实现漏斗图过程图解

    这篇文章主要介绍了Python数据可视化实现漏斗图过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 详解Python发送email的三种方式

    详解Python发送email的三种方式

    这篇文章主要介绍了详解Python发送email的三种方式,Python发送email的三种方式,分别为使用登录邮件服务器、使用smtp服务、调用sendmail命令来发送三种方法,非常具有实用价值,需要的朋友可以参考下
    2018-10-10
  • Python调用API接口实现人脸识别

    Python调用API接口实现人脸识别

    本文主要介绍了Python调用API接口实现人脸识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python中NumPy数组的维度变换解析

    Python中NumPy数组的维度变换解析

    这篇文章主要介绍了Python中NumPy数组的维度变换解析,就像我们可以通过向 NumPy 提供列表列表来创建 2D 数组一样,我们可以通过创建列表的列表的列表来创建 3D 数组,需要的朋友可以参考下
    2023-09-09

最新评论