server.js•3.41 kB
// server.js
import express from 'express';
import { ChatOllama } from "@langchain/community/chat_models/ollama";
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
import { PortfolioFetchingTool } from './tools.js';
// --- Kurulum ---
const app = express();
app.use(express.json());
// cors ayarları
import cors from 'cors';
app.use(cors({
origin: [
"http://localhost:3000", // React uygulamanızın çalıştığı port
"http://localhost:3001", // Eğer başka bir port kullanıyorsanız bur
"http://localhost:8001", // Eğer başka bir port kullanıyorsanız buraya ekleyin
"http://localhost:8000" // Eğer başka bir port kullanıyorsanız
],
credentials: true // Cookie-based authentication için gerekli
}));
const PORT = 8001; // Python sunucusuyla aynı port
// Lokal LLM'i başlatma
const llm = new ChatOllama({
model: "gemma3:4b",
baseUrl: "http://127.0.0.1:11434", // Ollama sunucu adresi
});
// --- API Endpoint ---
app.post('/analyze-portfolio', async (req, res) => {
const { oid } = req.body;
if (!oid) {
return res.status(400).json({ error: "Kullanıcı OID'si (oid) eksik." });
}
console.log(`--- Yeni analiz isteği alındı | Kullanıcı OID: ${oid} ---`);
try {
// --- AJAN ORKESTRASYONU (MANUEL) ---
// Adım 1: Portföy Verisini Al (Agent 1'in Görevi)
console.log("Adım 1: Portföy verisi alınıyor...");
const portfolioTool = new PortfolioFetchingTool();
const portfolioSummary = await portfolioTool.call(oid);
console.log("Portföy Özeti:\n", portfolioSummary);
// Adım 2: Piyasayı Analiz Et (Agent 2'nin Görevi)
console.log("Adım 2: Piyasa analizi yapılıyor...");
const marketAnalysisResponse = await llm.invoke([
new SystemMessage("Sen bir Finansal Piyasa Analistisin. Sana verilen portföy özetine dayanarak piyasa hakkında kısa bir analiz ve risk değerlendirmesi yap."),
new HumanMessage(`Lütfen bu portföyü analiz et:\n\n${portfolioSummary}`)
]);
const marketAnalysis = marketAnalysisResponse.content;
console.log("Piyasa Analizi:\n", marketAnalysis);
// Adım 3: Strateji Geliştir (Agent 3'ün Görevi)
console.log("Adım 3: Yatırım stratejisi geliştiriliyor...");
const strategyResponse = await llm.invoke([
new SystemMessage("Sen bir Yatırım Stratejisi Danışmanısın. Sana verilen portföy özeti ve piyasa analizine dayanarak müşteriye 3 adet net ve uygulanabilir tavsiye sun."),
new HumanMessage(`Portföy Özeti:\n${portfolioSummary}\n\nPiyasa Analizi:\n${marketAnalysis}\n\nLütfen stratejini oluştur.`)
]);
const finalStrategy = strategyResponse.content;
console.log("Nihai Strateji:\n", finalStrategy);
// --- Sonuç ---
res.json({
portfolio_summary: portfolioSummary,
market_analysis: marketAnalysis,
final_strategy: finalStrategy
});
} catch (error) {
console.error("Analiz sırasında bir hata oluştu:", error);
res.status(500).json({ error: "Analiz sırasında bir sunucu hatası oluştu.", details: error.message });
}
});
app.listen(PORT, () => {
console.log(`Node.js MCP Sunucusu http://127.0.0.1:${PORT} adresinde çalışıyor.`);
});