mem0(让AI不再健忘) 架构学习指南

简介: mem0 架构学习指南 🚀嗨!👋 欢迎来到mem0的学习之旅。我是你的技术教练,接下来我会带你一步步拆解这个优秀的AI记忆层项目。

mem0 架构学习指南 🚀

嗨!👋 欢迎来到mem0的学习之旅。我是你的技术教练,接下来我会带你一步步拆解这个优秀的AI记忆层项目。这不是一份枯燥的文档,而是我作为一个"过来人"分享的实战经验笔记。准备好了吗?让我们开始吧!


第一部分:项目架构深度解析(像架构师一样俯瞰全景)🔍

在我们深入代码之前,让我先用一个生动的类比帮你理解mem0是什么。

1. 项目架构概览 💡

用通俗的类比来说:
想象你在和一位健忘的AI助手对话。每次对话,它都像金鱼一样只有7秒记忆,忘记你之前说过的一切。😅 mem0就像给这位助手配了一个"外接硬盘大脑"——它能记住你喜欢披萨、讨厌西兰花,还记得你上周提过要去巴黎旅行。

核心设计特征:
mem0采用了插件化的分层架构,核心思想是"可插拔、可扩展"。它就像搭积木一样,你可以自由选择不同的组件:

  • LLM层(大脑): 支持19种LLM提供商(OpenAI、Claude、Gemini等),负责理解和提取记忆

  • 嵌入层(翻译器): 支持10种嵌入模型,将文本转换为向量

  • 向量存储层(档案柜): 支持19种向量数据库,高效存储和检索记忆

  • 图存储层(关系网): 可选的4种图数据库,存储实体之间的关系

与同类项目对比:

  • vs. LangChain Memory: mem0更专注于长期记忆,而非短期对话历史

  • vs. OpenAI Assistants API: mem0是开源的,性能更优(+26%准确度,91%更快,90%更少token)

  • vs. 传统数据库: mem0使用语义搜索而非精确匹配,更智能

技术栈核心组件:

┌─────────────────────────────────────────┐
│         用户应用层 (User App)            │
├─────────────────────────────────────────┤
│     Memory API (同步/异步双接口)         │
├─────────────────────────────────────────┤
│  ┌─────────┐  ┌─────────┐  ┌──────────┐│
│  │  LLM    │  │Embedder │  │  Vector  ││
│  │ Factory │  │ Factory │  │  Store   ││
│  └─────────┘  └─────────┘  │  Factory ││
│  ┌─────────────────────────┴──────────┐│
│  │      配置管理 (MemoryConfig)       ││
│  └────────────────────────────────────┘│
├─────────────────────────────────────────┤
│      历史数据库 (SQLite) + 遥测        │
└─────────────────────────────────────────┘

外部系统集成:

  • 必需依赖: Qdrant(默认向量DB)、OpenAI(默认LLM)、Pydantic(配置验证)

  • 可选依赖: Neo4j(图存储)、各种其他LLM和向量DB

  • 配置管理: 通过环境变量或MemoryConfig对象,支持YAML/JSON配置文件

架构流程描述(一次典型的记忆添加):

用户调用 memory.add(messages, user_id="alice")
    ↓
1. 验证参数,构建 metadata 和 filters
    ↓
2. 解析 messages,提取对话内容
    ↓
3. 调用 LLM 提取关键事实(facts)
   例如:"Alice喜欢披萨" → fact
    ↓
4. 为每个 fact 生成向量嵌入
    ↓
5. 在向量数据库中搜索相似的已有记忆
    ↓
6. 将已有记忆和新facts交给LLM,决定操作:
   - ADD: 添加新记忆
   - UPDATE: 更新已有记忆
   - DELETE: 删除过时记忆
   - NONE: 无操作
    ↓
7. 执行相应操作,更新向量数据库
    ↓
8. (可选)如果启用图存储,提取实体和关系
    ↓
9. 记录到历史数据库,返回结果

2. 目录结构与核心流程 📂

目录组织逻辑:
mem0采用按技术层级划分的目录结构,非常清晰:

mem0/
├── memory/              # 核心记忆管理逻辑
│   ├── main.py         # Memory和AsyncMemory主类 ⭐
│   ├── base.py         # 基类定义
│   ├── graph_memory.py # 图记忆实现
│   ├── storage.py      # SQLite历史数据库
│   └── utils.py        # 工具函数
├── configs/             # 配置管理
│   ├── base.py         # MemoryConfig主配置 ⭐
│   ├── llms/           # LLM配置
│   ├── embeddings/     # 嵌入模型配置
│   ├── vector_stores/  # 向量DB配置
│   └── prompts.py      # 提示词模板
├── llms/               # 19个LLM提供商实现
│   ├── openai.py       # OpenAI实现 ⭐
│   ├── anthropic.py    # Claude实现
│   └── ...
├── embeddings/         # 10个嵌入模型实现
│   ├── openai.py       # OpenAI嵌入 ⭐
│   ├── huggingface.py  # HuggingFace实现
│   └── ...
├── vector_stores/      # 19个向量DB实现
│   ├── qdrant.py       # Qdrant实现(默认) ⭐
│   ├── chroma.py       # ChromaDB实现
│   └── ...
├── graphs/             # 4个图DB实现
│   ├── neo4j/          # Neo4j实现
│   └── ...
├── client/             # 客户端SDK(连接托管平台)
│   ├── main.py         # MemoryClient ⭐
│   └── ...
└── utils/              # 工具类
    └── factory.py      # 工厂模式实现 ⭐

关键文件定位(你首先应该阅读的文件):

    1. 第一步: README.md - 了解项目定位和快速开始
    1. 第二步: mem0/memory/main.py - 核心Memory类,理解主流程
    1. 第三步: mem0/configs/base.py - 理解配置系统
    1. 第四步: mem0/utils/factory.py - 理解工厂模式实现
    1. 第五步: 选择一个LLM实现(如mem0/llms/openai.py)深入学习

模块依赖关系分析:

Memory类依赖关系(单向依赖,架构清晰):

Memory/AsyncMemory (main.py)
    ├─→ MemoryConfig (configs/base.py)
    ├─→ LlmFactory (utils/factory.py)
    │    └─→ 具体LLM实现 (llms/*.py)
    ├─→ EmbedderFactory
    │    └─→ 具体嵌入实现 (embeddings/*.py)
    ├─→ VectorStoreFactory
    │    └─→ 具体向量DB实现 (vector_stores/*.py)
    ├─→ GraphStoreFactory (可选)
    │    └─→ 具体图DB实现 (graphs/*.py)
    └─→ SQLiteManager (memory/storage.py)

优点: 依赖清晰,无循环依赖,符合依赖倒置原则

典型业务流程深度剖析:

让我们跟踪一个实际场景:"用户Alice说她喜欢披萨"

# 第1步:用户调用
memory.add(
    messages=[{"role": "user", "content": "I love pizza"}],
    user_id="alice"
)

# 第2步:在 memory/main.py 的 add() 方法中
# 文件: mem0/memory/main.py, 行: 195-309

# 2.1 构建metadata和filters
processed_metadata = {"user_id": "alice"}
effective_filters = {"user_id": "alice"}

# 2.2 解析messages (memory/utils.py)
parsed_messages = "User: I love pizza"

# 2.3 LLM提取facts (使用fact_extraction_prompt)
# 调用: llms/openai.py 的 generate_response()
llm_response = llm.generate_response([
    {"role": "system", "content": "Extract facts from conversation..."},
    {"role": "user", "content": parsed_messages}
])
# 返回: {"facts": ["User loves pizza"]}

# 2.4 生成嵌入 (embeddings/openai.py)
embeddings = embedding_model.embed("User loves pizza")
# 返回: [0.123, -0.456, 0.789, ...] (1536维向量)

# 2.5 搜索已有记忆 (vector_stores/qdrant.py)
existing_memories = vector_store.search(
    query="User loves pizza",
    vectors=embeddings,
    filters={"user_id": "alice"},
    limit=5
)

# 2.6 LLM决策 (使用update_memory_prompt)
actions = llm.generate_response([
    {"role": "user", "content": f"""
    旧记忆: {existing_memories}
    新事实: ["User loves pizza"]
    决定: ADD/UPDATE/DELETE?
    """}
])
# 返回: {"memory": [{"event": "ADD", "text": "Alice loves pizza"}]}

# 2.7 执行ADD操作
memory_id = self._create_memory(
    data="Alice loves pizza",
    existing_embeddings={...},
    metadata={"user_id": "alice", "created_at": "2025-01-01..."}
)

# 2.8 记录历史 (memory/storage.py)
db.add_history(memory_id, None, "Alice loves pizza", "ADD")

# 返回结果
return {
    "results": [{
        "id": "mem_abc123",
        "memory": "Alice loves pizza",
        "event": "ADD"
    }]
}

实现文件索引:

  • • 参数验证: mem0/memory/main.py:245-250

  • • LLM fact提取: mem0/memory/main.py:349-368

  • • 向量搜索: mem0/memory/main.py:378-386

  • • LLM决策: mem0/memory/main.py:400-424

  • • 创建记忆: mem0/memory/main.py:841-868

3. 代码结构观察 🔬

代码组织模式:

    1. 工厂模式贯穿全局 🏭
      mem0大量使用工厂模式,实现了极佳的可扩展性。看mem0/utils/factory.py:
class LlmFactory:
    provider_to_class = {
        "openai": ("mem0.llms.openai.OpenAILLM", OpenAIConfig),
        "anthropic": ("mem0.llms.anthropic.AnthropicLLM", AnthropicConfig),
        # ... 19个提供商
    }

    @classmethod
    def create(cls, provider_name, config):
        # 动态加载类,创建实例
        # 这样添加新LLM只需要添加一行映射!

学习点: 当你需要支持多种相似但不同的实现时,工厂模式是最佳选择。

    1. 配置驱动设计 ⚙️
      所有行为通过MemoryConfig控制,而非硬编码:
config = MemoryConfig(
    llm={"provider": "openai", "config": {"model": "gpt-4o-mini"}},
    vector_store={"provider": "qdrant", "config": {...}},
    embedder={"provider": "openai", "config": {...}}
)
memory = Memory(config)

优点: 易于测试,易于切换不同实现,符合开闭原则

    1. 同步/异步双实现
      MemoryAsyncMemory提供完全相同的API,但后者使用asyncio:
# 同步版本
result = memory.add(messages, user_id="alice")

# 异步版本
result = await async_memory.add(messages, user_id="alice")

设计模式识别:

  • • ✅ 工厂模式: LlmFactory, EmbedderFactory, VectorStoreFactory

  • • ✅ 策略模式: 不同的LLM/嵌入/向量DB是可互换的策略

  • • ✅ 模板方法模式: MemoryBase定义接口,子类实现细节

  • • ✅ 建造者模式: 配置对象的构建

代码质量观察:

📏 函数长度:

  • Memory.add(): ~114行 (略长,但逻辑清晰)

  • Memory._add_to_vector_store(): ~172行 (偏长⚠️)

  • • 大部分方法: <50行 ✅

🔗 模块耦合度:

  • • ✅ 低耦合:各模块通过工厂和接口交互

  • • ✅ 高内聚:每个模块职责单一

📦 配置复杂度:

  • • ⚠️ 中等:多层嵌套配置,但有默认值

  • • ✅ 文档完善:LLM.md提供详细配置说明

改进方向提示(学习机会):

这些不是批评,而是学习和思考的切入点:

  1. 1. 🤔 长方法拆分机会:
    _add_to_vector_store()方法有172行,包含fact提取、搜索、决策、执行多个阶段。可以考虑拆分为:```
    def _add_to_vector_store(self, messages, metadata, filters, infer):

    if not infer:
        return self._add_raw_memories(messages, metadata)
    
    facts = self._extract_facts(messages)
    existing_memories = self._search_existing_memories(facts, filters)
    actions = self._decide_memory_actions(facts, existing_memories)
    return self._execute_memory_actions(actions, metadata)
    

    ```

  2. 2. 🤔 错误处理探索:
    代码中有多处try-except捕获所有异常:```
    try:

    new_retrieved_facts = json.loads(response)["facts"]
    

    except Exception as e:

    logger.error(f"Error: {e}")
    new_retrieved_facts = []
    

    ```思考:是否应该区分不同类型的异常?网络错误vs JSON解析错误的处理应该相同吗?

  3. 3. 🤔 测试覆盖率提升:
    tests/目录有测试,但可以增加更多edge case测试。

潜在改进点(值得探索的重构机会):

💡 搜索项目中的TODOFIXME:

# 在项目根目录执行
grep -r "TODO\|FIXME" mem0/ --include="*.py"

我发现的一些TODO(截至代码版本0.1.118):

  • mem0/configs/base.py:20: "TODO After prompt changes from platform, update this"

  • • 一些向量DB实现中有性能优化的注释

💡 代码坏味道观察:

  • 魔法数字: limit=5出现在多处,可以提取为配置常量

  • 重复代码: promoted_payload_keys列表在多个方法中重复定义

  • 长参数列表: 一些方法有5+个参数,可以考虑使用参数对象

不过,整体来说,mem0的代码质量相当高! 这些"改进点"更多是帮助你培养架构师的思维方式,而不是说代码有问题。


第二部分:技能需求清单(你的学习弹药库)📚

了解了宏观架构后,让我们盘点一下你需要掌握哪些技能。别慌,我会告诉你哪些是必须的,哪些是可以边学边用的!

1. 基础技能要求 🎯

编程语言:

Python 3.9+ (必需,核心语言)

  • 必须掌握:类和对象、装饰器、类型注解、异步编程(async/await)

  • 推荐掌握:上下文管理器(with语句)、列表推导式

  • 版本要求:Python 3.9-3.12 (来自pyproject.toml)

# 你需要看懂这样的代码
from typing import Optional, Dict, Any
from pydantic import BaseModel

class MemoryConfig(BaseModel):
    llm: LlmConfig = Field(default_factory=LlmConfig)

async def add(self, messages, *, user_id: Optional[str] = None):
    result = await self._add_to_vector_store(messages)
    return result

TypeScript(可选,如果学习TS版本)

  • • mem0-ts/ 目录是TypeScript实现

  • • 如果你只关注Python版本,可以暂时跳过

核心框架和库:

|
库名称

|

版本要求

|

用途

|

重要性

|
| --- | --- | --- | --- |
| pydantic |

>=2.7.3

|

数据验证和配置管理

|

⭐⭐⭐ 必需

|
| openai |

>=1.90.0

|

默认LLM

|

⭐⭐⭐ 必需

|
| qdrant-client |

>=1.9.1

|

默认向量数据库

|

⭐⭐⭐ 必需

|
| sqlalchemy |

>=2.0.31

|

历史数据库

|

⭐⭐ 重要

|
| pytz |

>=2024.1

|

时区处理

|

⭐ 一般

|

💡 小贴士:你不需要精通所有库,但需要理解它们的作用。比如,你不需要成为Pydantic专家,但要知道它用于配置验证。

基础工具:

🔧 包管理:

  • pip基本使用(安装、卸载、查看依赖)

  • • 虚拟环境(venvconda)

  • pyproject.toml文件理解(这是Poetry/Hatch使用的新标准)

🔧 版本控制:

  • • Git基本命令:clone, pull, branch, checkout

  • • 查看提交历史:git log, git diff

🔧 命令行基础:

  • • 文件导航:cd, ls/dir, pwd

  • • 环境变量设置

  • • 基本的shell脚本阅读能力

2. 进阶技能要求 🚀

架构模式:

📐 设计模式(mem0中实际使用的):

    1. 工厂模式 ⭐⭐⭐
      mem0的核心!LlmFactory, EmbedderFactory
    1. 策略模式 ⭐⭐
      不同的LLM/向量DB可以互换
    1. 模板方法模式
      基类定义流程,子类实现细节

📐 SOLID原则(你会看到的实践):

  • Single Responsibility: 每个类职责单一(如SQLiteManager只管历史数据库)

  • Open/Closed: 通过工厂模式实现对扩展开放,对修改封闭

  • Dependency Inversion: 依赖抽象而非具体实现

💡 学习建议:如果你对设计模式不熟悉,建议先快速浏览《Head First设计模式》的工厂模式和策略模式章节,然后回来看mem0的代码,会有"哦,原来如此!"的感觉。

领域特定知识:

🧠 向量嵌入(Vector Embeddings)
这是理解mem0的核心概念!

简单来说:

  • • 文本 → 数字向量(如1536维的列表)

  • • 相似的文本 → 相似的向量

  • • 通过计算向量距离找到相似记忆

# 概念示例
"I love pizza" → [0.123, -0.456, 0.789, ...]
"I like pizza" → [0.125, -0.450, 0.792, ...] # 很接近!
"I hate broccoli" → [-0.678, 0.234, -0.123, ...] # 很远

📚 推荐资源:

  • • OpenAI的"Text Embeddings"文档

  • • Jay Alammar的"The Illustrated Word2vec"博客(图解超棒!)

🔍 向量数据库(Vector Databases)

传统数据库 vs 向量数据库:

  • • MySQL/PostgreSQL: 精确匹配查询("WHERE name = 'Alice'")

  • • Qdrant/Pinecone: 语义相似度查询("找到和这段话最相似的5条记忆")

你需要理解:

  • • 相似度搜索(Similarity Search)

  • • 索引和性能优化

  • • 过滤(Filtering)

🤖 LLM Prompt Engineering

mem0使用LLM来:

  1. 1. 从对话中提取事实(fact extraction)

  2. 2. 决定记忆的添加/更新/删除

你需要理解:

  • • 系统提示词(System Prompt)的作用

  • • JSON结构化输出

  • • Few-shot learning的概念

🔗 异步编程(Async/Await)

AsyncMemory类使用了Python的异步特性:

# 同步:一个一个执行
result1 = do_task1()  # 等待
result2 = do_task2()  # 等待

# 异步:可以并发执行
result1, result2 = await asyncio.gather(
    do_task1(),  # 同时开始
    do_task2()   # 同时开始
)

📚 推荐资源: Real Python的"Async IO in Python"教程

3. 技能掌握程度建议 🎓

根据你的学习目标,这里是我的建议:

🌱 初学者(只想用mem0):

最低要求:

  • • ✅ Python基础语法

  • • ✅ 理解API调用

  • • ✅ 环境变量设置

  • • ⚠️ 不需要理解内部实现

学习重点:

  • • 阅读README.md和快速开始示例

  • • 学会配置MemoryConfig

  • • 尝试不同的LLM和向量DB

预计时间: 1-2天 上手使用

🌿 有经验的开发者(想理解原理):

要求:

  • • ✅ 上述基础技能全部

  • • ✅ 向量嵌入基本概念

  • • ✅ 工厂模式理解

  • • ✅ 阅读源码能力

学习重点:

  • • 跟踪一次完整的add()流程

  • • 理解LLM如何提取和管理记忆

  • • 研究向量搜索的实现

预计时间: 1-2周 深入理解

🌳 意欲贡献代码的进阶者(想参与开发):

要求:

  • • ✅ 所有上述技能

  • • ✅ 单元测试编写(pytest)

  • • ✅ 多种向量DB的使用经验

  • • ✅ 对AI领域有深入理解

学习重点:

  • • 阅读CONTRIBUTING.md

  • • 研究测试用例

  • • 尝试添加新的LLM提供商

  • • 优化性能或修复bug

预计时间: 3-4周 掌握全栈


第三部分:学习路径规划(你的专属教练计划)🎯

现在进入最实用的部分!我会手把手教你如何从零开始,一步步掌握mem0。

1. 项目运行入口定位(快速上手)⚡

目标: 15分钟内让mem0跑起来!

环境准备清单:

# 第1步:确认Python版本
python --version  # 需要 >= 3.9

# 第2步:克隆项目
git clone https://github.com/mem0ai/mem0.git
cd mem0

# 第3步:创建虚拟环境(强烈推荐!)
python -m venv venv

# 激活虚拟环境
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate

# 第4步:安装mem0
pip install mem0ai

# 或者从源码安装(如果你想调试)
pip install -e .

⚠️ 常见配置陷阱及解决方案:

    1. 陷阱1:缺少OpenAI API密钥```

      错误信息:openai.AuthenticationError: No API key provided

    解决:设置环境变量

    Windows:

    set OPENAI_API_KEY=your-key-here

    Linux/Mac:

    export OPENAI_API_KEY=your-key-here
    ```

    1. 陷阱2:Qdrant连接失败```

      mem0默认使用本地内存模式,但如果你配置了远程Qdrant...

    解决:使用默认配置(内存模式)或启动本地Qdrant

    docker run -p 6333:6333 qdrant/qdrant
    ```

    1. 陷阱3:依赖冲突```

      错误:不兼容的包版本

    解决:使用干净的虚拟环境

    pip install --upgrade mem0ai
    ```

一键启动脚本(复制粘贴即用):

# 文件名:quickstart.py
import os
from mem0 import Memory

# 设置API密钥(如果未设置环境变量)
if not os.getenv("OPENAI_API_KEY"):
    os.environ["OPENAI_API_KEY"] = "your-key-here"  # 替换为你的密钥

# 初始化Memory
memory = Memory()

# 添加一条记忆
result = memory.add(
    messages=[{"role": "user", "content": "我叫Alice,喜欢披萨"}],
    user_id="alice"
)
print("添加记忆:", result)

# 搜索记忆
search_result = memory.search("Alice喜欢什么食物?", user_id="alice")
print("搜索结果:", search_result)

# 获取所有记忆
all_memories = memory.get_all(user_id="alice")
print("所有记忆:", all_memories)

print("\n✅ mem0成功运行!")

运行:

python quickstart.py

验证成功的标志:

✅ 你应该看到类似这样的输出:

{
  "results": [
    {
      "id": "mem_abc123",
      "memory": "Alice likes pizza",
      "event": "ADD"
    }
  ]
}

✅ 没有报错!
✅ 搜索能返回刚添加的记忆

🎉 恭喜!如果你看到这个,说明mem0已经在你的机器上跑起来了!

2. 循序渐进学习计划(四阶段法)📈

我为你设计了一个实战导向的学习路径,每个阶段都有明确的目标和可验证的成果。


🎯 阶段一:环境搭建和项目启动(1-2天)

目标: 成功运行项目,能打断点调试

任务清单:

  • • 完成上一节的"一键启动"

  • • 使用IDE(VS Code/PyCharm)打开项目

  • • 在memory/main.pyadd()方法第一行打断点

  • • 调试运行quickstart.py,观察程序流程

实操练习:

# 练习1:尝试不同的消息格式
memory.add("I am a software engineer", user_id="alice")  # 字符串
memory.add([
    {"role": "user", "content": "I love coding"},
    {"role": "assistant", "content": "That's great!"}
], user_id="alice")  # 对话格式

# 练习2:观察metadata
result = memory.add(
    "I work at Google",
    user_id="alice",
    metadata={"source": "linkedin", "confidence": 0.95}
)
print(result)

# 练习3:尝试搜索
search_result = memory.search("Alice的工作", user_id="alice")
print(f"找到 {len(search_result['results'])} 条相关记忆")

验证标准:
✅ 能随时启动和停止项目
✅ 理解add(), search(), get_all()的基本用法
✅ 能在断点处检查变量值


🎯 阶段二:核心流程理解(3-5天)

目标: 追踪一个完整业务流程,画出自己的流程图

学习路线:

Day 1-2: 理解add()流程

  1. 1. 阅读mem0/memory/main.pyadd()方法

  2. 2. 逐行理解每一步在做什么

  3. 3. 跟踪到子方法:_add_to_vector_store(), _create_memory()

# 在这些地方打断点,观察数据变化:
# 1. add() 开始处 - 查看原始输入
# 2. parse_messages() - 查看解析后的消息
# 3. llm.generate_response() - 查看LLM提取的facts
# 4. vector_store.search() - 查看搜索到的已有记忆
# 5. _create_memory() - 查看最终存储的数据

Day 3: 理解search()流程

  1. 1. 阅读search()方法

  2. 2. 理解向量嵌入和相似度搜索

  3. 3. 观察score值的含义

Day 4-5: 绘制流程图

使用Mermaid语法(或任何工具)画出你理解的流程:

VectorStoreEmbedderLLMMemoryUserVectorStoreEmbedderLLMMemoryUseradd(messages, user_id)提取facts["User likes pizza"]生成嵌入[0.123, -0.456, ...]search(similar)existing_memoriesdecide(ADD/UPDATE/DELETE)[{"event": "ADD", ...}]insert(memory)memory_id{"results": [...]}

实操练习:

# 练习1:观察LLM提取的facts
import json
from mem0.memory.utils import get_fact_retrieval_messages, parse_messages

messages = [
    {"role": "user", "content": "My name is Bob, I'm 25 years old, and I love hiking"}
]
parsed = parse_messages(messages)
system_prompt, user_prompt = get_fact_retrieval_messages(parsed)

print("System Prompt:", system_prompt)
print("User Prompt:", user_prompt)

# 然后查看Memory.add()中LLM的返回值
# 应该提取出3个facts: 名字、年龄、爱好

# 练习2:手动计算embedding相似度
from mem0 import Memory
memory = Memory()

text1 = "I love pizza"
text2 = "I like pizza"
text3 = "I hate broccoli"

emb1 = memory.embedding_model.embed(text1)
emb2 = memory.embedding_model.embed(text2)
emb3 = memory.embedding_model.embed(text3)

# 使用numpy计算余弦相似度
import numpy as np
def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

print(f"text1 vs text2: {cosine_similarity(emb1, emb2):.4f}")  # 应该很高
print(f"text1 vs text3: {cosine_similarity(emb1, emb3):.4f}")  # 应该较低

验证标准:
✅ 能清晰描述add()和search()的每一步
✅ 理解LLM在其中的作用
✅ 理解向量嵌入和相似度搜索
✅ 画出了流程图(即使简单也行!)


🎯 阶段三:模块深入和定制开发(1-2周)

目标: 能修改或扩展一个现有功能

学习方向:

方向1: 更换LLM提供商

# 练习:使用Ollama本地模型替代OpenAI

from mem0 import Memory
from mem0.configs.base import MemoryConfig

config = MemoryConfig(
    llm={
        "provider": "ollama",
        "config": {
            "model": "llama3.1:8b",
            "ollama_base_url": "http://localhost:11434"
        }
    },
    embedder={
        "provider": "ollama",
        "config": {"model": "nomic-embed-text"}
    },
    vector_store={
        "provider": "chroma",
        "config": {
            "collection_name": "my_memories",
            "path": "./chroma_db"
        }
    }
)

memory = Memory(config)
# 完全本地运行,无需API密钥!

方向2: 自定义fact extraction提示词

# 练习:修改提示词以提取特定类型的信息

custom_prompt = """
你是一个专注于提取用户**技能和经验**的助手。
从对话中提取:
1. 技能(如编程语言、工具)
2. 工作经验
3. 项目经历

返回JSON格式: {"facts": ["fact1", "fact2", ...]}

对话:
{messages}
"""

config = MemoryConfig(custom_fact_extraction_prompt=custom_prompt)
memory = Memory(config)

# 测试效果
memory.add([
    {"role": "user", "content": "I know Python and JavaScript. I built a web app using React."}
], user_id="developer")

# 查看提取的facts是否符合预期

方向3: 添加新的向量数据库支持

这是一个高级练习,但很有教育意义:

  1. 1. 阅读现有的向量DB实现(如mem0/vector_stores/qdrant.py)

  2. 2. 理解接口:insert(), search(), get(), delete(), list()

  3. 3. 尝试添加一个简单的向量DB(如FAISS)

实操项目建议:

🎯 项目1: 个人知识库

  • • 存储你阅读的文章、笔记

  • • 通过自然语言搜索("我之前看过关于Python装饰器的资料吗?")

🎯 项目2: 聊天机器人增强

  • • 为你的chatbot添加记忆能力

  • • 记住用户的偏好和历史对话

🎯 项目3: 代码助手

  • • 记录你的编程问题和解决方案

  • • 下次遇到类似问题时自动提示

验证标准:
✅ 能成功配置不同的LLM和向量DB
✅ 理解配置系统的工作原理
✅ 完成至少一个小项目


🎯 阶段四:架构理解和贡献指南(2周+)

目标: 能理解技术选型原因,尝试修复一个简单issue

深度学习任务:

Task 1: 理解工厂模式的价值

阅读mem0/utils/factory.py,思考:

  • • 为什么要使用工厂模式?

  • • 如果不用工厂,代码会怎样?

  • • 如何添加新的LLM提供商?

尝试实现:

# 添加一个自定义LLM提供商

# 1. 创建文件 mem0/llms/custom_llm.py
from mem0.llms.base import LLMBase

class CustomLLM(LLMBase):
    def generate_response(self, messages, **kwargs):
        # 你的实现
        return "response"

# 2. 注册到工厂
from mem0.utils.factory import LlmFactory
LlmFactory.register_provider(
    "custom_llm",
    "mem0.llms.custom_llm.CustomLLM"
)

# 3. 使用
config = MemoryConfig(llm={"provider": "custom_llm", "config": {}})
memory = Memory(config)

Task 2: 性能分析

使用cProfile分析mem0的性能瓶颈:

import cProfile
import pstats
from mem0 import Memory

def profile_add():
    memory = Memory()
    for i in range(10):
        memory.add(f"Test message {i}", user_id="test")

cProfile.run('profile_add()', 'mem0_profile.stats')

# 分析结果
p = pstats.Stats('mem0_profile.stats')
p.sort_stats('cumulative')
p.print_stats(20)  # 打印前20个最耗时的函数

思考:

  • • 哪个函数最耗时?

  • • 为什么向量搜索这么慢/快?

  • • 如何优化?

Task 3: 贡献代码

  1. 1. 阅读CONTRIBUTING.md

  2. 2. 在GitHub Issues中寻找good first issue标签

  3. 3. Fork项目,创建分支

  4. 4. 修改代码,编写测试

  5. 5. 提交Pull Request

推荐的first issue类型:

  • • 文档改进

  • • 添加示例代码

  • • 修复typo

  • • 添加类型注解

Task 4: 深入向量搜索算法

阅读Qdrant或FAISS的文档,理解:

  • • HNSW(Hierarchical Navigable Small World)算法

  • • ANN(Approximate Nearest Neighbor)

  • • 索引的权衡(速度vs精度)

验证标准:
✅ 能清晰解释为什么mem0选择这样的架构
✅ 理解至少一种向量搜索算法的原理
✅ 提交了至少一个PR或Issue


3. 学习路径流程图 🗺️

否是否是否是只是使用深入理解想贡献代码否是否是开始学习mem0有Python基础?先学Python 3.9+基础阶段一: 环境搭建1-2天能成功运行quickstart?检查配置查看错误信息阶段二: 核心流程理解3-5天能画出流程图?回头再读一遍代码多打断点调试学习目标?完成!可以开始用了阶段三: 模块深入1-2周完成一个小项目?选择项目方向参考实操建议阶段四: 架构理解2周+理解设计决策?阅读架构文档研究同类项目🎉 恭喜!你已精通mem0持续关注参与社区

第四部分:实践建议和进阶指导(从会用到精通)💡

学习完理论,让我们聊聊实战中的技巧和常见问题。

1. 调试技巧和常见陷阱 🐛

推荐的调试工具:

🔧 VS Code调试配置

创建.vscode/launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: mem0 Debug",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "env": {
                "OPENAI_API_KEY": "your-key-here",
                "PYTHONPATH": "${workspaceFolder}"
            }
        }
    ]
}

🔧 日志配置

import logging

# 启用详细日志
logging.basicConfig(level=logging.DEBUG)

# 只看mem0的日志
logging.getLogger("mem0").setLevel(logging.DEBUG)

新手常见的5大陷阱:

⚠️ 陷阱1: 忘记设置user_id

# ❌ 错误:会抛出异常
memory.add("Test message")

# ✅ 正确:必须提供至少一个ID
memory.add("Test message", user_id="user123")
# 或
memory.add("Test message", agent_id="agent456")
# 或
memory.add("Test message", run_id="run789")

⚠️ 陷阱2: 混淆infer参数

# infer=True(默认): LLM提取facts,智能决策ADD/UPDATE/DELETE
result = memory.add("I love pizza", user_id="alice", infer=True)
# 结果: 可能添加、更新或不操作,取决于已有记忆

# infer=False: 直接存储原始消息,不做智能处理
result = memory.add("I love pizza", user_id="alice", infer=False)
# 结果: 直接添加 "I love pizza"

# 💡 小贴士:如果你想完全控制存储内容,用infer=False

⚠️ 陷阱3: 期望实时更新

memory.add("I'm 25 years old", user_id="alice")
memory.add("I'm 26 years old", user_id="alice")  # 一年后

# 第二次调用时,LLM会决定UPDATE第一条记忆
# 但这取决于向量搜索能否找到相关记忆!

# 💡 调试建议:检查搜索结果
result = memory.search("Alice的年龄", user_id="alice")
print(result)  # 应该只有一条记忆,内容是26岁

⚠️ 陷阱4: API密钥泄露

# ❌ 绝对不要这样做!
config = MemoryConfig(
    llm={"provider": "openai", "config": {"api_key": "sk-xxxxx"}}
)

# ✅ 正确做法:使用环境变量
import os
os.environ["OPENAI_API_KEY"] = "sk-xxxxx"  # 或在shell中设置

config = MemoryConfig(
    llm={"provider": "openai", "config": {}}  # 自动从环境变量读取
)

⚠️ 陷阱5: 向量DB持久化问题

# 使用默认配置时,Qdrant使用内存模式
memory = Memory()  # 数据在程序结束后丢失!

# 💡 解决:配置持久化存储
config = MemoryConfig(
    vector_store={
        "provider": "qdrant",
        "config": {
            "collection_name": "my_memories",
            "path": "./qdrant_storage"  # 持久化到磁盘
        }
    }
)
memory = Memory(config)

根据公开资料总结的常见问题:

Q: 为什么搜索返回的记忆不准确?

A: 可能的原因:

  1. 1. 嵌入模型质量不够(尝试更好的模型)

  2. 2. 阈值(threshold)设置不当

  3. 3. 记忆太少(少于10条时效果不好)

# 调整阈值
results = memory.search(
    "Alice喜欢什么",
    user_id="alice",
    threshold=0.7  # 只返回相似度>0.7的结果
)

Q: 如何加速搜索?

A:

  1. 1. 使用更快的向量DB(如Qdrant, Pinecone)

  2. 2. 减少limit参数

  3. 3. 使用过滤条件缩小搜索范围

Q: 可以存储中文吗?

A: 完全可以!mem0支持多语言,前提是你的嵌入模型支持中文(OpenAI的模型都支持)。

2. 扩展练习建议 🎓

从易到难的练习题:

📝 练习1: 修改响应格式 (难度: ⭐)

# 当前API返回:
{"results": [{"id": "...", "memory": "...", "event": "ADD"}]}

# 任务:写一个wrapper,返回更简洁的格式:
# ["memory1", "memory2", ...]

def get_memories_simple(memory, user_id):
    result = memory.get_all(user_id=user_id)
    return [m["memory"] for m in result["results"]]

# 测试
memories = get_memories_simple(memory, "alice")
print(memories)  # ["Alice likes pizza", "Alice is 25 years old"]

📝 练习2: 记忆去重 (难度: ⭐⭐)

# 任务:找出并删除重复的记忆

def deduplicate_memories(memory, user_id, similarity_threshold=0.95):
    all_memories = memory.get_all(user_id=user_id)["results"]
    to_delete = []

    for i, mem1 in enumerate(all_memories):
        for mem2 in all_memories[i+1:]:
            # 计算相似度
            emb1 = memory.embedding_model.embed(mem1["memory"])
            emb2 = memory.embedding_model.embed(mem2["memory"])
            similarity = cosine_similarity(emb1, emb2)

            if similarity > similarity_threshold:
                to_delete.append(mem2["id"])

    for mem_id in to_delete:
        memory.delete(mem_id)

    print(f"删除了 {len(to_delete)} 条重复记忆")

# 使用
deduplicate_memories(memory, "alice")

📝 练习3: 时间感知记忆 (难度: ⭐⭐⭐)

# 任务:添加时间权重,优先返回最新的记忆

from datetime import datetime, timedelta
import math

def search_with_time_decay(memory, query, user_id, days_decay=30):
    # 搜索记忆
    results = memory.search(query, user_id=user_id, limit=50)

    # 添加时间衰减
    now = datetime.now()
    for mem in results["results"]:
        created_at = datetime.fromisoformat(mem["created_at"])
        days_old = (now - created_at).days

        # 时间衰减因子: e^(-days_old / days_decay)
        time_factor = math.exp(-days_old / days_decay)

        # 调整分数
        mem["score"] = mem["score"] * time_factor

    # 重新排序
    results["results"].sort(key=lambda x: x["score"], reverse=True)

    return results

# 测试:新的记忆会排在前面,即使相似度稍低

📝 练习4: 多用户记忆共享 (难度: ⭐⭐⭐⭐)

# 任务:创建一个团队记忆系统,允许团队成员共享某些记忆

class TeamMemory:
    def __init__(self, memory):
        self.memory = memory

    def add_personal(self, content, user_id):
        """添加个人记忆"""
        return self.memory.add(content, user_id=user_id)

    def add_team(self, content, team_id):
        """添加团队共享记忆"""
        return self.memory.add(
            content,
            agent_id=team_id,
            metadata={"type": "team_memory"}
        )

    def search_all(self, query, user_id, team_id):
        """搜索个人记忆+团队记忆"""
        # 搜索个人记忆
        personal = self.memory.search(query, user_id=user_id)

        # 搜索团队记忆
        team = self.memory.search(
            query,
            agent_id=team_id,
            filters={"metadata.type": "team_memory"}
        )

        # 合并结果
        all_results = personal["results"] + team["results"]
        all_results.sort(key=lambda x: x["score"], reverse=True)

        return {"results": all_results}

# 使用
team_mem = TeamMemory(Memory())
team_mem.add_personal("I prefer Python", user_id="alice")
team_mem.add_team("Our tech stack is Python+React", team_id="dev_team")

results = team_mem.search_all("技术栈", user_id="alice", team_id="dev_team")
# 返回个人和团队的相关记忆

3. 参与贡献的途径 🤝

mem0是一个活跃的开源项目,欢迎贡献!

贡献方式(从易到难):

    1. ⭐ Star和分享: 给项目点星,分享给其他开发者
    1. 📝 文档改进:
  • • 修正typo

  • • 添加示例代码

  • • 翻译文档到其他语言

    1. 🐛 Bug报告:```

      好的Issue模板:

    问题描述

    当我使用Ollama作为LLM时,add()方法报错。

    复现步骤

    1. 配置: config = MemoryConfig(llm={"provider": "ollama", ...})
    2. 调用: memory.add("test", user_id="test")
    3. 错误信息: [粘贴完整的错误栈]

    环境

    • mem0版本: 0.1.118
    • Python版本: 3.10
    • 操作系统: Ubuntu 22.04

    期望行为

    应该成功添加记忆
    ```

    1. 🔧 代码贡献:寻找good first issue:https://github.com/mem0ai/mem0/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22贡献流程:```

      1. Fork项目到你的账号

      2. Clone你的fork

      git clone https://github.com/YOUR_USERNAME/mem0.git
      cd mem0

    3. 创建功能分支

    git checkout -b feature/add-new-llm-provider

    4. 进行修改

    ...编写代码...

    5. 运行测试

    pytest tests/

    6. 提交

    git add .
    git commit -m "feat: add support for Custom LLM provider"

    7. 推送

    git push origin feature/add-new-llm-provider

    8. 在GitHub上创建Pull Request

    # 格式化代码
    ruff format
    
    # 检查代码风格
    ruff check
    
    # 自动修复
    ruff check --fix
    

社区位置:


第五部分:技术栈学习指引(你的知识地图)🌐

最后一部分,我为你精选了高质量的学习资源。

1. 官方文档定位(学习的基石)📚

mem0项目自身文档:

|
文档

|

链接

|

优先级

|

阅读时长

|
| --- | --- | --- | --- |
|

项目README

| README.md |

⭐⭐⭐

|

10分钟

|
|

快速开始

|

https://docs.mem0.ai/quickstart

|

⭐⭐⭐

|

15分钟

|
|

API参考

|

https://docs.mem0.ai/api-reference

|

⭐⭐

|

30分钟

|
|

核心概念

| docs/core-concepts/ |

⭐⭐

|

20分钟

|
|

组件文档

| docs/components/ |

|

1小时

|

💡 阅读顺序: README → 快速开始 → 核心概念 → API参考 → 组件文档

核心技术栈官方文档:

🔹 Python Pydantic

  • • 官方文档: https://docs.pydantic.dev

  • • 必读章节: "Models", "Validation"

  • • 特点: mem0用它做配置验证,学会Pydantic能帮你写更健壮的Python代码

🔹 OpenAI API

  • • 官方文档: https://platform.openai.com/docs

  • • 必读章节: "Text generation", "Embeddings"

  • • 特点: 理解embeddings的概念,mem0的核心依赖

🔹 Qdrant

🔹 SQLAlchemy

  • • 官方文档: https://docs.sqlalchemy.org

  • • 必读章节: "Core" (mem0只用了Core,没用ORM)

  • • 特点: 用于历史数据库管理

权威技术书籍推荐:

📖 《Designing Data-Intensive Applications》 by Martin Kleppmann

  • • 相关章节: "Chapter 3: Storage and Retrieval"

  • • 为什么推荐: 理解向量数据库背后的原理

📖 《Hands-On Large Language Models》 by Jay Alammar & Maarten Grootendorst

  • • 相关章节: "Embeddings", "Retrieval-Augmented Generation"

  • • 为什么推荐: 深入理解embeddings和RAG架构(mem0就是RAG的一部分)

2. 学习路径建议(社区智慧)🎓

技能学习顺序:

第1周: Python基础 + 环境搭建
  ├─ Python 3.9+新特性
  ├─ 虚拟环境和包管理
  └─ 基本的OOP概念

第2周: 向量嵌入基础
  ├─ 什么是embedding?
  ├─ 相似度计算(余弦相似度)
  └─ 使用OpenAI Embeddings API

第3周: LLM基础
  ├─ Prompt Engineering
  ├─ JSON结构化输出
  └─ OpenAI Chat Completions API

第4周: 向量数据库
  ├─ 安装和配置Qdrant
  ├─ 插入、搜索、过滤
  └─ 索引和性能调优

第5-6周: mem0深度学习
  ├─ 跟踪完整流程
  ├─ 理解工厂模式
  └─ 尝试定制开发

第7-8周: 实战项目
  └─ 构建一个实际应用

核心概念优先级:

🔴 高优先级(必须理解):

  1. 1. 向量嵌入(Embeddings) - 核心中的核心!

  2. 2. 相似度搜索(Similarity Search)

  3. 3. LLM Prompt Engineering

  4. 4. 工厂模式

🟡 中优先级(建议理解):

  1. 1. 异步编程(Async/Await)

  2. 2. Pydantic数据验证

  3. 3. 图数据库概念

  4. 4. SOLID原则

🟢 低优先级(进阶可选):

  1. 1. HNSW算法原理

  2. 2. 量化(Quantization)

  3. 3. 分布式向量搜索

  4. 4. RAG评估指标

实践项目推荐:

🎯 入门项目(1-2天):

  • 个人日记助手: 存储日记,通过自然语言搜索过去的记录

  • 学习笔记系统: 记录学习内容,智能回顾

🎯 进阶项目(1周):

  • 客服机器人: 记住用户的历史问题和偏好

  • 代码问答助手: 记录编程问题和解决方案

🎯 高级项目(2周+):

  • 团队知识库: 多用户、权限管理、记忆共享

  • 智能推荐系统: 基于用户记忆的个性化推荐

3. 工具与环境配置指南 🛠️

推荐的开发环境:

🖥️ IDE选择:

    1. VS Code(推荐 ⭐⭐⭐):
  • • 插件: Python, Pylance, Jupyter

  • • 配置: 见前面的.vscode/launch.json

    1. PyCharm:
  • • 专业版或社区版都可以

  • • 优点: 强大的调试和重构功能

    1. Jupyter Notebook(用于实验):
  • • 适合快速原型和数据分析

  • • mem0的examples中有notebook示例

常用工具:

🔧 包管理:

# 推荐使用poetry(项目使用的)
pip install poetry
poetry install  # 安装所有依赖

# 或使用pip
pip install -e ".[dev,graph,vector_stores,llms,extras]"  # 安装所有可选依赖

🔧 Docker(用于向量DB):

# 启动Qdrant
docker run -p 6333:6333 -v $(pwd)/qdrant_storage:/qdrant/storage qdrant/qdrant

# 启动Neo4j(如果使用图存储)
docker run -p 7474:7474 -p 7687:7687 neo4j:latest

🔧 测试工具:

# 运行测试
pytest tests/

# 查看覆盖率
pytest --cov=mem0 tests/

# 只运行某个测试文件
pytest tests/memory/test_main.py

4. 进阶拓展方向 🚀

技术博客与专家观点:

📝 mem0团队博客:

  • • Medium: 搜索"mem0" + "memory layer"

  • • 特点: 了解设计决策和路线图

📝 向量数据库领域:

📝 LLM应用架构:

  • • Jay Alammar的博客: https://jalammar.github.io

  • • 特别推荐: "The Illustrated Transformer", "The Illustrated Word2vec"

  • • 特点: 图解清晰,易于理解

相关技术大会:

🎤 AI工程类:

  • AI Engineer Summit: https://www.ai.engineer

  • NeurIPS: 神经网络和机器学习顶会

  • ICLR: 深度学习顶会

🎤 数据库类:

  • Vector Database Summit: 专门的向量数据库大会

  • VLDB: 数据库顶会

💡 观看建议: YouTube上搜索这些大会的talk录像,很多都免费公开

社区与论坛:

💬 mem0官方社区:

  • • 频道: #general(通用讨论), #help(求助), #showcase(展示项目)
  • GitHub Discussions: 技术深度讨论

  • Twitter/X: @mem0ai (产品更新和新闻)

💬 向量搜索社区:

💬 LLM应用开发:

  • LangChain Discord: 相关技术讨论

  • r/LangChain (Reddit): 案例分享


🎓 结语:你的下一步

恭喜你读到这里!🎉 这份指南涵盖了从零到精通mem0的完整路径。

记住这三点:

    1. 💪 循序渐进: 不要急于求成,先把环境跑起来,再深入理解原理
    1. 🔨 动手实践: 纸上得来终觉浅,一定要自己写代码、做项目
    1. 👥 参与社区: 遇到问题多交流,也可以帮助他人成长

你的下一步行动清单:

  • • 完成"15分钟快速启动"

  • • 跟踪一次完整的add()流程

  • • 画出你理解的架构图

  • • 完成至少一个扩展练习

  • • 加入mem0 Discord社区

  • • (可选) 提交你的第一个PR

需要帮助?

祝你学习愉快!希望这份指南能帮你快速掌握mem0,构建出令人惊艳的AI应用。💡

引用链接

[1] founders@mem0.ai: mailto:founders@mem0.ai

目录
相关文章
|
11天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
9天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
347 130
|
9天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
436 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
3天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
201 138
|
10天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
390 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
3天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
202 136
|
22天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1361 8
|
8天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。