@langgraph-js/memory
Version:
A memory management system based on PostgreSQL + pgvector for LangGraph workflows
83 lines (68 loc) • 3.08 kB
text/typescript
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);
}
}