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服务器)
设置
- 克隆仓库:
git clone
cd istari-mcp- 启动Neo4j数据库:
docker-compose up -d neo4j访问Neo4j浏览器,请前往http://localhost:7474(凭据:neo4j/密码)3. 安装并启动Ollama:
curl -fsSL https://ollama.com/install.sh | sh
ollama serve- 拉取嵌入模型:
ollama pull qwen3-embedding:latest- 运行应用程序:
./gradlew runAPI将在http://localhost:8080上可用
MCP服务器设置
MCP服务器通过模型上下文协议(Model Context Protocol)为AI助手和Istari后端提供了一个接口。
安装
- 安装 Node.js 及所需依赖项:
npm install- 配置您的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- 重新加载您的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- 列出关系类型
