O DiffMem é um backend de memória leve projetado para inteligências de IA e sistemas de conversação. De forma inovadora, ele usa o Git como o núcleo do armazenamento de memória, salvando memórias de IA como arquivos Markdown legíveis por humanos. O histórico de commits do Git é usado para rastrear a evolução das memórias ao longo do tempo, enquanto o sistema emprega um índice BM25 na memória para recuperação rápida e interpretável de informações. Esse projeto é atualmente uma Prova de Conceito (PoC) para explorar como um sistema de controle de versão pode ser usado para criar uma base de memória eficiente e dimensionável para aplicativos de IA. O DiffMem trata a memória como uma base de conhecimento versionada: o "estado atual" do conhecimento é armazenado em arquivos editáveis, enquanto as alterações históricas são armazenadas em gráficos de confirmação do Git. Esse design permite que as inteligências consultem em um nível compacto e atualizado de conhecimento e, ao mesmo tempo, sejam capazes de se aprofundar na evolução das memórias quando necessário.
Lista de funções
- Armazenamento de memória orientado por GitUse os recursos de controle de versão do Git para gerenciar e acompanhar a evolução das memórias de IA, com cada atualização de memória correspondendo a um commit do Git.
- Formato legível por humanosMemórias: as memórias são armazenadas como arquivos Markdown simples para que os desenvolvedores possam ler, editar e gerenciar diretamente.
- Foco no estado atualPor padrão, apenas o "estado atual" dos documentos de conhecimento é indexado e pesquisado, o que reduz o escopo das consultas e melhora a eficiência da recuperação e a economia de tokens no contexto de modelos de linguagem grandes (LLMs).
- Rastreamento de evolução diferencial: através de
git diffe outros comandos, o corpo inteligente pode consultar com eficiência informações específicas ao longo do tempo sem precisar carregar um histórico completo. - Pesquisa rápida de textoUm índice BM25 na memória é incorporado para fornecer respostas rápidas em milissegundos para pesquisas de palavras-chave.
- componente modularO sistema consiste em vários módulos principais, incluindo o responsável pela análise dos diálogos e pelo envio de atualizações
写入智能体responsável por integrar o contexto de consulta do上下文管理器bem como os responsáveis pela realização da pesquisa搜索智能体. - Leve e fácil de integrarDependências de projeto reduzidas, sem necessidade de implantar um servidor separado, e pode ser integrado diretamente a projetos existentes como um módulo Python.
Usando a Ajuda
O DiffMem foi projetado para que possa ser importado como um módulo Python simples, sem necessidade de implantação complexa no servidor. Veja abaixo um procedimento detalhado de instalação e uso.
Preparação e instalação do ambiente
- Clonagem da base de código
Primeiro, ele precisa ser clonado do GitHubDiffMemo repositório de código-fonte em seu computador local. Abra um terminal ou uma ferramenta de linha de comando e digite o seguinte comando:git clone https://github.com/Growth-Kinetics/DiffMem.gitApós a execução, o download da base de código será feito em um arquivo no diretório atual chamado
DiffMemna pasta do - Vá para o diretório do projeto
fazer uso decdna pasta do projeto:cd DiffMem - Instalação de dependências
O DiffMem depende de várias bibliotecas Python para ser executado, e essas dependências estão documentadas no arquivorequirements.txtno arquivo. Você pode usar opippara instalá-los:pip install -r requirements.txt ``` 这个命令会自动下载并安装`gitpython`、`rank-bm25`和`sentence-transformers`等必要的库。 - Configuração da chave da API
O DiffMem requer o uso de LLMs (Large Language Models) para trabalhar em conjunto, por exemplo, para analisar o conteúdo das conversas. O projeto usa o OpenRouter para gerenciar as chamadas de LLM. Você precisa definir sua chave de API em uma variável de ambiente.
Para sistemas Linux ou macOS, use o comandoexportComando:export OPENROUTER_API_KEY='你的密钥'Para sistemas Windows, use o
setComando:set OPENROUTER_API_KEY='你的密钥'favor incluir
你的密钥Substitua-o por sua própria chave de API válida.
Operação da função principal
A principal funcionalidade do DiffMem é fornecida por meio da funçãoDiffMemoryé exposta ao usuário. Você pode inicializar essa classe e, em seguida, chamar seus métodos para ler, gravar e consultar a memória.
- Inicialização do banco de memória
Primeiro, você precisa importar o arquivoDiffMemorye a inicializa com um caminho local. Esse caminho servirá como o repositório Git onde a memória será armazenada.from src.diffmem import DiffMemory # 初始化记忆库,指定仓库路径、用户名和API密钥 # 如果路径不存在,系统会自动创建一个新的Git仓库 memory = DiffMemory( repo_path="/path/to/your/memory_repo", user_name="alex", api_key="你的OpenRouter密钥" )No código acima, o
/path/to/your/memory_repoSubstitua-o pelo caminho para a pasta onde você deseja armazenar suas memórias. - Processamento e envio de memórias
Você pode passar uma parte do diálogo ou do conteúdo da sessão para oprocess_and_commit_sessionas inteligências de gravação do DiffMem analisarão automaticamente o texto para extrair ou atualizar as informações da entidade e, em seguida, salvarão essas alterações como um único commit do Git.# 假设你有一段新的对话内容 conversation_text = "今天和妈妈一起喝了咖啡,她提到下周要去旅行。" session_id = "session-12345" # 为这次会话指定一个唯一的ID # 处理并提交这次会话的记忆 memory.process_and_commit_session(conversation_text, session_id) print("记忆已成功处理并提交。")Após a execução, o conhecimento relevante é atualizado no arquivo Markdown e um novo registro de commit do Git é gerado, e a mensagem de commit conterá o ID da sessão.
- Obter contexto
Quando chegar a hora de interagir com a IA, você poderá usar a funçãoget_contextpara obter informações relevantes sobre o histórico do diálogo atual. Esse método suporta diferentes parâmetros de "profundidade" para controlar o nível de detalhes retornados.depth="basic"Acesso a blocos de informações essenciais.depth="wide"Pesquisa semântica: Realize pesquisas semânticas para retornar informações relevantes de forma mais ampla.depth="deep"Arquivo de consulta: retorna o conteúdo completo do arquivo associado à consulta.depth="temporal"Git: Retorna informações temporais que contêm o histórico do Git.
# 假设当前的对话是关于“妈妈的旅行计划” current_conversation = "妈妈的旅行计划定了吗?" # 获取深度上下文 context = memory.get_context(current_conversation, depth="deep") # 将获取到的上下文信息打印出来 print("获取到的相关上下文:") print(context)Esse contexto pode ser inserido no LLM para gerar respostas mais precisas e contextualizadas.
- Execução direta de pesquisas
Você também pode usar apenas osearchpara recuperar informações do banco de memória.query = "关于妈妈的信息" search_results = memory.search(query) print(f"关于 '{query}' 的搜索结果:") for result in search_results: print(f"- {result}")
Exemplo de código a ser executado
No projetoexamples/Um arquivo de demonstração de uso completo é fornecido no diretóriousage.py. Você pode executá-lo diretamente para observar o fluxo de trabalho completo do DiffMem.
Execute o seguinte comando no terminal:
python examples/usage.py
Esse script demonstrará como inicializar o banco de memória, confirmar novas memórias e recuperar o contexto com base no novo conteúdo do diálogo, mostrando toda a cadeia do DiffMem, desde a entrada até a saída da mensagem.
cenário do aplicativo
- Assistente pessoal de IA
Os recursos de memória de longo prazo podem ser fornecidos aos assistentes pessoais de IA. Os assistentes podem lembrar as preferências do usuário, conversas anteriores, datas e eventos importantes. À medida que as memórias evoluem ao longo do tempo, o assistente pode lembrar com precisão "o que conversamos na semana passada" ou "qual é a idade da minha filha agora" porque ele se concentra apenas no estado mais recente das informações, mantendo um registro histórico. - Sistemas de IA que exigem aprendizado contínuo
Em áreas como atendimento ao cliente e suporte técnico, as inteligências de IA precisam aprender constantemente novos conhecimentos sobre produtos e processos de negócios. Quando um guia operacional é atualizado, o sistema salva a nova versão e também registra as alterações por meio do histórico do Git, garantindo que a IA sempre forneça as informações mais precisas e possa rastrear a versão histórica de qualquer ponto de conhecimento. - colaboração de inteligência múltipla
Em um sistema com várias inteligências, diferentes inteligências podem compartilhar a mesma memória DiffMem. Por meio dos mecanismos de ramificação e solicitação de mesclagem do Git, as inteligências podem colaborar para atualizar o conhecimento compartilhado e resolver possíveis "conflitos de memória" para formar uma memória de equipe consistente e com versão. - Interpretabilidade e depuração
Às vezes, a IA pode se comportar como uma "caixa preta" para os desenvolvedores, e o DiffMem aprimora muito a interpretabilidade das memórias de IA, armazenando-as como texto legível por humanos e histórico de commits do Git. Os desenvolvedores podem revisar o código como se ele fossegit logresponder cantandogit diffVer o que a IA "aprendeu" e "como o conhecimento mudou" é muito útil para depurar o comportamento e o processo de tomada de decisão da IA.
QA
- Qual é a diferença entre o DiffMem e os bancos de dados vetoriais tradicionais?
Os bancos de dados vetoriais são usados principalmente para a pesquisa de similaridade de dados de alta dimensão, em que as informações (por exemplo, texto) são convertidas em vetores e armazenadas e, em seguida, o conteúdo similar é encontrado calculando-se as distâncias entre os vetores. O DiffMem, por outro lado, adota uma ideia completamente diferente, que não se baseia em vetores incorporados, mas gerencia memórias como documentos de texto com versões. Sua principal vantagem é que ele lida com informações ao longo do tempo, rastreando claramente as alterações em um fato (por exemplo, a idade de uma pessoa que muda de 9 para 10 anos), enquanto os bancos de dados vetoriais podem reter informações desatualizadas e com ruído ao lidar com esses tipos de "atualizações factuais". - Por que escolher o Git como sua tecnologia de back-end?
O Git foi escolhido porque oferece uma solução madura e avançada para o gerenciamento de documentos com controle de versão. Os benefícios do Git se encaixam bem nas necessidades da memória de IA: ele suporta naturalmente o rastreamento de alterações (diff), histórico de registros (log), de volta a qualquer ponto no tempo (checkout) e gerenciamento de filiais (branch). Além disso, o Git é distribuído e os dados são armazenados em arquivos simples, o que torna o repositório altamente portátil e persistente, e não depende de nenhum formato proprietário. - O DiffMem é adequado para ambientes de produção?
Atualmente, o DiffMem é um projeto de prova de conceito (PoC), e seus autores deixaram claro que ele ainda não foi reforçado para ambientes de produção. Ele tem algumas limitações, como a necessidade de executar manualmente a sincronização remota do Git (push/pull), o mecanismo de tratamento de erros é relativamente básico e não há mecanismo de bloqueio projetado para acesso simultâneo de vários usuários. Portanto, é necessário mais desenvolvimento e testes antes do uso direto em aplicativos comerciais de larga escala. - Quais são as principais dependências de software necessárias para executar o DiffMem?
O DiffMem é um projeto leve com as principais dependências, incluindoGitPython(para manipular repositórios Git em Python),rank-bm25(para implementar algoritmos eficientes de recuperação de texto) e a bibliotecasentence-transformers(usado para dar suporte a funções de pesquisa semanticamente relacionadas).
































