UNPKG

@langgraph-js/memory

Version:

A memory management system based on PostgreSQL + pgvector for LangGraph workflows

83 lines (68 loc) 3.08 kB
import { MemoryDataBase } from '../MemoryDatabase.js'; import { MemoryDatabaseServer } from './server.js'; import { Pool } from 'pg'; import { PostgresVectorStore } from '../vector-store/pg.js'; import { LangChainEmbedder } from '../embedder/langchain.js'; import { ChatOpenAI, OpenAIEmbeddings } from '@langchain/openai'; // import { serveStatic } from 'hono/serve-static'; // import { Context, Env } from 'hono'; // import { Data } from 'hono/dist/types/context'; // import { readFile } from 'fs/promises'; // import { join } from 'path'; // 从环境变量读取配置 const PORT = parseInt(process.env.PORT || '3553'); const DATABASE_URL = process.env.MEMORY_DATABASE_URL; const ORG_ID = process.env.MEMORY_ORG_ID || 'default-org'; const MODEL_NAME = process.env.MEMORY_MODEL_NAME || 'gpt-4o-mini'; const EMBEDDER_MODEL_NAME = process.env.MEMORY_EMBEDDER_MODEL_NAME || 'text-embedding-3-small'; // 初始化依赖 async function initializeDependencies() { if (!DATABASE_URL) { throw new Error('MEMORY_DATABASE_URL environment variable is required'); } const pool = new Pool({ connectionString: DATABASE_URL, }); // 这里需要根据实际的 LLM 和 Embedder 实现进行初始化 // 由于这些依赖较为复杂,这里提供一个示例结构 const llm = new ChatOpenAI({ modelName: MODEL_NAME }); // 需要根据实际实现初始化 const embedder = new LangChainEmbedder(new OpenAIEmbeddings({ modelName: EMBEDDER_MODEL_NAME })); // 需要根据实际实现初始化 // 初始化向量存储 const vectorStore = new PostgresVectorStore({ pool, tableName: 'memory_vectors', dimension: 1536 }); // 初始化记忆数据库 const memoryDb = new MemoryDataBase(ORG_ID, llm, embedder, vectorStore); // 初始化数据库 await memoryDb.setup(); return memoryDb; } // 启动服务器 export async function startServer() { try { console.log('Initializing Memory Database Server...'); const memoryDb = await initializeDependencies(); const server = new MemoryDatabaseServer(memoryDb); const app = server.getApp(); // 添加静态文件服务 // app.use( // '/public/*', // serveStatic({ // root: './', // getContent: function (path: string, c: Context<Env, any, {}>): Promise<Data | Response | null> { // return readFile(join(process.cwd(), path), 'utf-8'); // }, // }), // ); console.log(`Starting server on port ${PORT}...`); console.log(`✅ Memory Database Server is running on http://localhost:${PORT}`); console.log(`📚 API Documentation available at /health`); console.log(`🌐 Static files served from /public http://localhost:${PORT}/dashboard`); return app; // serve({ // fetch: app.fetch, // port: PORT, // }); } catch (error) { console.error('❌ Failed to start server:', error); process.exit(1); } }