知识图谱系统

Istari MCP是一个知识图谱系统,通过模型上下文协议(MCP)使AI助手能够构建和查询持久性记忆,结合图存储和向量搜索功能。

  • by marcelogm
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 marcelogm/istari-mcp

使用说明

Istari MCP(注:这可能是一个特定名称或缩写,根据上下文可能有不同的翻译,但直接翻译为中文可保持原样,若需具体解释需更多上下文)

一个个人研究项目,旨在探索基于图的内存存储和向量搜索功能的模型上下文协议实现。

状态进行中的工作

概述

Istari MCP 是一个知识图谱系统,它使人工智能助手能够通过模型上下文协议(MCP)构建和查询持久性内存。该系统结合了基于图的存储和向量嵌入技术,既提供了结构化的关系查询,又具备了语义搜索能力。

主要特点

  • 基于实体的记忆将知识存储为具有丰富描述的独立实体(人、组织、概念、事件)
  • 图形关系通过类型化的关系(如工作于、认识、拥有、是……的一种等)连接实体
  • 向量嵌入用于语义相似度搜索的自动嵌入生成
  • 观察结果在不修改核心描述的情况下,逐步为实体添加详细信息
  • 语义搜索使用自然语言查询查找相关实体和观测结果

技术栈

  • Java 21
  • Micronaut 4.9.3
  • Neo4j(图数据库)
  • Ollama(嵌入生成)
  • Project Reactor(响应式编程)

先决条件

  • Java 21及以上版本
  • Docker 和 Docker Compose
  • 使用qwen3-embedding模型的Ollama
  • Node.js(用于MCP服务器)

设置

  1. 克隆仓库:
git clone <repository-url>
cd istari-mcp
  1. 启动Neo4j数据库:
docker-compose up -d neo4j

访问Neo4j浏览器,请前往http://localhost:7474(凭据:neo4j/密码)3. 安装并启动Ollama:

curl -fsSL https://ollama.com/install.sh | sh
ollama serve
  1. 拉取嵌入模型:
ollama pull qwen3-embedding:latest
  1. 运行应用程序:
./gradlew run

API将在http://localhost:8080上可用

MCP服务器设置

MCP服务器通过模型上下文协议(Model Context Protocol)为AI助手和Istari后端提供了一个接口。

安装

  1. 安装 Node.js 及所需依赖项:
npm install
  1. 配置您的MCP客户端。对于Continue.dev,请编辑 ~/.continue/config.yaml:
mcpServers:
  - name: istari-mcp
    command: node
    args:
      - /absolute/path/to/istari-mcp/mcp-server.js
    env:
      ISTARI_API_URL: http://localhost:8080
  1. 重新加载您的MCP客户端以加载服务器。

可用的MCP工具

内存管理

  • create_memory - 在知识图谱中创建一个新实体

    • name (必填):唯一标识符(例如,“John Doe”,“ACME Corporation”)
    • description (必填):核心描述,最多1024个字符,用于向量嵌入
    • observations (可选):包含详细信息字符串的数组(每个字符串最多1024个字符)
    • 用例存储任何知识实体——人、组织、概念、事件等。
  • get_memory - 通过确切名称检索特定实体

    • name (必填):精确的实体名称(区分大小写)
    • 退货完整的记忆,包括描述、观察结果及所有关系
  • search_memories - 跨所有实体和观测数据的语义搜索

    • context (必填):自然语言搜索查询
    • 退货带有相似度分数的排名结果
    • 用例无需确切知道实体名称,即可发现相关信息
  • update_memory - 更新实体的核心描述

    • name (必填):要更新的实体名称
    • description (必填):新描述(重新生成向量嵌入)
    • 注要添加新事实,请使用 add_observation 相反
  • delete_memory - 永久删除一个实体

    • name (必填):要删除的实体名称
    • 警告删除实体、观测值、嵌入以及所有关系

观察结果

  • add_observation - 为实体添加详细信息
    • memoryName (必填):目标实体名称
    • observation (必填):详细内容,最多1024个字符
    • 用例逐步构建知识,不修改核心描述
    • 注每个观测数据都被单独嵌入并可搜索

关系

  • create_relationship - 在实体之间创建一条有向边

    • sourceMemoryName (必填):源实体名称
    • targetMemoryName (必填):目标实体名称
    • relationshipType (必填):关系类型(见 list_relationship_types)
    • 用例在知识图谱中建立语义连接
  • list_relationship_types - 列出所有有效的关系类型

    • 退货可用的关系类型(在……工作、认识、拥有、是……的、属于……的一部分等)

使用示例

创建一个带有观测数据的人员

// Create entity
create_memory({
  name: "Alice Johnson",
  description:
    "Senior software engineer specializing in distributed systems and cloud architecture",
  observations: [
    "Prefers asynchronous communication and detailed written documentation",
    "Has 8+ years of experience building scalable microservices",
  ],
});

// Add more observations later
add_observation({
  memoryName: "Alice Johnson",
  observation:
    "Recently led migration of monolithic system to event-driven architecture",
});

建立关系

// Create organization
create_memory({
  name: "TechCorp Inc",
  description: "Technology company focused on cloud infrastructure solutions",
});

// Connect person to organization
create_relationship({
  sourceMemoryName: "Alice Johnson",
  targetMemoryName: "TechCorp Inc",
  relationshipType: "WORKS_AT",
});

语义搜索

// Find relevant entities
search_memories({
  context: "engineers who work with distributed systems",
});
// Returns: Alice Johnson with similarity score

建筑

数据模型

  • 内存节点具有名称、描述和向量嵌入的核心实体
  • 观测节点与记忆相关联的详细信息,每条信息都有其自身的嵌入表示
  • 人际关系连接记忆的类型化有向边
  • 向量索引支持跨描述和观察进行语义相似性搜索

API终端点

  • POST /memories - 创建内存
  • GET /memories?name={name} - 获取内存
  • GET /memories/search?context={query} - 搜索记忆
  • PUT /memories - 更新内存
  • DELETE /memories?name={name} - 删除内存
  • POST /observations - 添加观察
  • POST /relationships - 建立关系
  • GET /relationships - 列出关系类型