1. 写在开头

想象一下这样的场景:

患者 张三 第一次咨询医疗机器人:"我最近几天一直头痛。"

机器人给出了建议,对话结束。

一周后,张三 再次咨询:"我的头痛怎么样了?"

传统 AI 机器人:"抱歉,我没有您之前的头痛记录信息。"

集成 PowerMem 的机器人:"根据您之前的记录,您提到头痛通常在下午发生,强度为中等。您目前正在服用布洛芬 200mg,每天两次。头痛情况有改善吗?"

这就是 PowerMem 带来的改变——让 AI 应用拥有真正的"记忆"。

2. 为什么需要 PowerMem?

如果你正在使用 LangChain 构建 AI 应用,遇到过这些问题:

  • ❌ 对话历史丢失:每次重启应用,之前的对话都消失了
  • ❌ 无法理解语义:搜索"头痛"找不到"头部疼痛"或"headache"
  • ❌ 缺乏个性化:无法根据用户历史提供个性化建议
  • ❌ 手动提取信息:需要编写复杂的代码来提取关键信息
  • ❌ 数据混在一起:多个用户的数据无法有效隔离

PowerMem 就是为了解决这些问题而生的。它是一个智能记忆管理SDK,可以轻松集成到 LangChain 应用中,让你的 AI 助手变得"有记忆"。

3. PowerMem 的五大核心能力

3.1 智能事实提取:让 AI 自动"做笔记"

传统方式:只能存储原始对话文本,需要手动编写复杂的代码来提取关键信息。

# 传统方式:只能存储原始文本
conversation_history = [
    {"role": "user", "content": "我最近几天一直头痛"},
    {"role": "assistant", "content": "头痛可能由多种原因引起..."}
]
# 需要手动编写代码提取症状、药物等信息

使用 PowerMem:只需一行代码,自动提取结构化信息。

# 使用 PowerMem:自动提取关键信息
self.powermem.add(
    messages=messages,
    user_id=self.user_id,
    infer=True  # 自动启用智能事实提取
)

实际效果

  • ✅ 自动识别并提取症状(头痛、疼痛、不适等)
  • ✅ 自动提取药物信息(药物名称、剂量、频率)
  • ✅ 自动提取医疗历史(既往病史、诊断等)
  • ✅ 零代码成本,开箱即用

就像给 AI 配了一个智能秘书,自动帮你整理和记录重要信息!

3.2 语义搜索:理解你的真实意图

传统方式:进行简单的关键词匹配,搜索"头痛"找不到"头部疼痛"。

# 传统方式:关键词匹配
def search_history(keyword):
    results = []
    for msg in conversation_history:
        if keyword in msg["content"]:  # 只能精确匹配
            results.append(msg)
    return results
# 问题:搜索"头痛"找不到"头部疼痛"或"headache"

使用 PowerMem:基于向量嵌入的语义搜索和全文检索,理解查询的真实意图。

# 使用 PowerMem:语义搜索和全文检索
results = self.powermem.search(
    query="头痛相关问题", 
    user_id=self.user_id,
    limit=5
)

实际效果

  • ✅ 搜索"头痛"可以找到"头部疼痛"、"headache"、"偏头痛"等相关内容
  • ✅ 搜索"药物"可以找到"medication"、"prescription"、"用药"等
  • ✅ 多路召回,自动按相关性排序,返回最相关的记忆
  • ✅ 结合用户历史,提供个性化搜索结果

3.3 持久化存储:记忆持久化

传统方式:对话历史只存在于内存中,进程重启后全部丢失。

# 传统方式:内存存储
class SimpleMemory:
    def __init__(self):
        self.messages = []  # 进程重启后丢失

使用 PowerMem:使用 OceanBase seekdb 等数据库,数据持久化。

# 使用 PowerMem:持久化存储
self.memory = create_memory(config=config)
# 所有记忆自动持久化到数据库 ✅

实际效果

  • ✅ 数据持久化,不会因为重启而丢失
  • ✅ 跨会话记忆:用户下次对话时,可以访问之前的所有历史
  • ✅ 支持大规模数据存储,适合企业级应用

就像把记忆写在了"笔记本"上,随时可以翻阅!

3.4 上下文感知:让对话更连贯、更贴心

传统方式:每次对话都是独立的,无法利用历史信息。

# 传统方式:无上下文
def chat(user_input):
    response = llm.generate(user_input)  # 没有历史上下文
    return response

使用 PowerMem:自动检索相关历史,注入到对话中。

# 使用 PowerMem:上下文感知
patient_context = self.langchain_memory.get_patient_context(user_input)
# 自动将历史上下文注入到提示中

实际效果

场景 1:个性化建议

患者:我最近几天一直头痛
机器人:[基于患者历史] 根据您之前的记录,您有偏头痛病史。
        这次的头痛与之前的偏头痛感觉不同吗?

场景 2:记住用药信息

患者:我目前正在服用布洛芬 200mg,每天两次
机器人:[记住药物信息] 您正在使用布洛芬来控制疼痛。
        请确保按照推荐剂量服用,并注意观察效果。

就像和一个真正了解你的朋友聊天,而不是每次都重新认识!

3.5 隐私保护:数据隔离,安全合规

传统方式:所有用户的对话混在一起,无法区分。

# 传统方式:数据混合
all_conversations = []  # 无法区分不同用户

使用 PowerMem:通过 user_id 实现数据完全隔离。

# 使用 PowerMem:数据隔离
def __init__(self, powermem_instance, user_id: str):
    self.user_id = user_id  # 可通过 user_id 隔离数据

实际效果

  • ✅ 每个用户只能访问自己的数据
  • ✅ 支持多个用户同时使用,数据互不干扰

就像每个用户都有一个独立的保险箱,数据互不干扰!

4. 完整工作流程对比

4.1 传统 LangChain 应用(无 PowerMem)

用户输入 
    ↓
LangChain 处理 
    ↓
LLM 生成响应 
    ↓
存储到内存列表
    ↓
❌ 下次对话时无法访问历史
❌ 无法提取结构化信息
❌ 无法进行语义搜索

4.2 集成 PowerMem 的 LangChain 应用

用户输入 
    ↓
检索相关历史(语义搜索)
    ↓
注入上下文到提示
    ↓
LangChain 处理 → LLM 生成个性化响应
    ↓
自动提取事实并存储到 PowerMem
    ↓
持久化到数据库(seekdb)
    ↓
✅ 下次对话时可访问完整历史
✅ 智能提取结构化信息
✅ 语义搜索随时可用

5. 实际案例:医疗支持机器人

我们基于 LangChain 和 PowerMem 构建了一个医疗支持机器人,来看看实际效果:

对话示例

第一轮对话:

患者:Hello, I'm Alice. I've been experiencing headaches for the past few days.

机器人:Hello Alice, I'm sorry to hear about your headaches. 
        Can you tell me more about when these headaches typically occur?

第二轮对话:

患者:The headaches usually happen in the afternoon, and they're moderate in intensity.

机器人:Thank you for that information. Afternoon headaches can have various causes.
        Are you experiencing any other symptoms along with the headaches?

第三轮对话:

患者:I'm currently taking ibuprofen 200mg twice daily for the pain.

机器人:I understand you're managing the pain with ibuprofen. 
        It's important to follow the recommended dosage.

一周后:

患者:What are some general tips for managing headaches?

机器人:[基于历史] 根据您之前的记录,您提到头痛通常在下午发生,强度为中等。
        您目前正在服用布洛芬 200mg,每天两次。
        
        以下是一些管理头痛的一般建议:
        1. 保持规律的作息时间
        2. 确保充足的睡眠
        3. 避免长时间使用电子设备
        4. 保持充足的水分摄入
        
        如果头痛持续或加重,建议咨询专业医疗人员。

看到区别了吗? 集成 PowerMem 的机器人能够:

  • ✅ 记住患者的所有历史信息
  • ✅ 基于历史提供个性化建议
  • ✅ 保持对话的连贯性

6. 开发成本对比

6.1 不使用 PowerMem

需要自己开发:

  • 事实提取功能(复杂的 NLP 处理)
  • 语义搜索功能(向量嵌入、相似度计算)
  • 持久化存储(数据库设计、连接管理)
  • 上下文管理(历史检索、注入逻辑)

开发时间:至少 2-3 周维护成本:持续维护复杂的代码逻辑

6.2 使用 PowerMem

只需几行代码集成:

# 1. 初始化 PowerMem
config = auto_config()
memory = Memory(config=config)

# 2. 集成到 LangChain
langchain_memory = HealthcarePowerMemMemory(
    powermem_instance=memory,
    user_id=patient_id
)

# 3. 使用
memory.add(messages=messages, user_id=user_id, infer=True)
context = memory.search(query=query, user_id=user_id)

开发时间:1-2 天

维护成本:PowerMem 团队维护核心功能,你只需关注业务逻辑

节省 90% 的开发时间!

7. 快速开始

7.1 安装 PowerMem

pip install powermem

7.2 配置数据库

from powermem import Memory, auto_config

# 自动加载配置
config = auto_config()
memory = Memory(config=config)

7.3 集成到 LangChain

from langchain_core.messages import HumanMessage, AIMessage

# 创建自定义记忆类
class PowermemLangChainMemory:
    def __init__(self, powermem_instance, user_id: str):
        self.powermem = powermem_instance
        self.user_id = user_id
        self.messages = []
    
    def save_to_powermem(self, user_input: str, assistant_output: str):
        self.powermem.add(
            messages=[
                {"role": "user", "content": user_input},
                {"role": "assistant", "content": assistant_output}
            ],
            user_id=self.user_id,
            infer=True  # 启用智能事实提取
        )
    
    def get_context(self, query: str) -> str:
        results = self.powermem.search(
            query=query,
            user_id=self.user_id,
            limit=5
        )
        # 返回相关上下文
        return "\n".join([mem.get('memory', '') for mem in results.get('results', [])])

7.4 使用

# 保存对话
memory.save_to_powermem(user_input, assistant_output)

# 检索上下文
context = memory.get_context(user_query)

# 注入到 LangChain 提示中
# ...

就这么简单! 几行代码就能让你的 LangChain 应用拥有"记忆"能力。

完整例子参见: https://github.com/oceanbase/powermem/tree/main/examples/langchain

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐