伊斯兰金融知识助手

AI驱动的伊斯兰金融问答助手,具备基于RAG的知识检索、多代理协调、MCP利润计算和流式响应功能。

  • by dannycahyo
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 dannycahyo/fin-islam

使用说明

伊斯兰金融知识助理

人工智能聊天机器人用于伊斯兰金融问题。具有基于RAG的知识检索、多代理编排、MCP利润计算和流式响应功能。

特性

  • RAG知识库:使用pgvector(768个dim嵌入)对30多个伊斯兰金融文档进行矢量搜索
  • 多代理系统:路由→ 知识/计算→ 合规剂管道
  • 利润计算器:通过MCP进行Musharakah和Mudharabah计算
  • 流媒体聊天:基于SSE的逐个令牌响应传递
  • 管理员仪表板:支持PDF/DOCX/TXT/MD的文档上传
  • 双LLM配置:云LLM+用于生产的本地嵌入

技术栈

层 技术
前端 React 18.3、React Router v7、TanStack查询、XState、Tailwind、shadcn/ui
后端 Hono 4.6,Drizzle ORM,Langchain 0.3,@Langchain/ollama
数据库 PostgreSQL 16+pgvector
LLM Ollama(Llama 3.1 8B),nomic嵌入文本嵌入
MCP @modelcontextprotocol/sdk 1.0
构建 Vite、TypeScript 5.3、pnpm工作区

项目结构

├── frontend/              # React SPA
│   ├── app/
│   │   ├── routes/        # / (chat), /admin
│   │   ├── components/    # Chat, DocumentUpload
│   │   ├── hooks/         # use-chat-stream (SSE)
│   │   └── reducer/       # Chat state (useReducer)
│   └── vite.config.ts     # Dev server :3000, proxy /api → :3001
│
├── backend/               # Hono API server
│   ├── agents/            # 4-agent system
│   │   ├── agent-orchestrator.ts
│   │   ├── routing-agent.ts      # 6 categories
│   │   ├── knowledge-agent.ts    # RAG pipeline
│   │   ├── calculation-agent.ts  # MCP client
│   │   └── compliance-agent.ts   # Shariah validation
│   ├── services/
│   │   ├── embedding-service.ts  # nomic-embed-text
│   │   ├── document-processor.ts # PDF/DOCX/TXT/MD
│   │   └── chunking-service.ts   # 800 tokens/chunk
│   ├── repositories/
│   │   └── chunk.repository.ts   # Vector search (cosine)
│   └── db/
│       └── schema.ts             # documents, documentChunks
│
├── mcp-server/            # MCP calculation service
│   ├── src/
│   │   ├── index.ts              # McpServer + StdioTransport
│   │   ├── tools/                # calculate_musharakah, calculate_mudharabah
│   │   └── calculators/          # Business logic
│   └── package.json
│
├── shared/                # Shared Zod schemas
│   └── src/schemas/
│
├── docker/                # Docker configs
│   ├── backend.Dockerfile        # Multi-stage, tsx runtime
│   ├── frontend.Dockerfile       # Vite build → nginx
│   ├── nginx.conf                # /api proxy, SPA routing
│   ├── entrypoint.sh             # Migrations + start
│   └── ollama-entrypoint.sh      # Auto-pull embeddings
│
├── docker-compose.yml            # Dev: postgres only
└── docker-compose.prod.yml       # Prod: full stack

先决条件

  • Node.js 20+
  • pnpm 9+
  • 码头工人
  • Ollama(本地开发)

快速启动(开发)

# Install dependencies
pnpm install

# Start PostgreSQL
docker-compose up -d

# Install Ollama + pull models
brew install ollama
ollama serve
pnpm ollama:pull  # llama3.1:8b + nomic-embed-text

# Setup database
pnpm db:generate && pnpm db:migrate

# Start all services
pnpm dev
# Frontend: http://localhost:3000
# Backend:  http://localhost:3001

生产部署

# Configure environment
cp .env.prod.example .env.prod
# Edit: POSTGRES_PASSWORD, OLLAMA_API_KEY, OLLAMA_CLOUD_URL

# Build and start
docker compose -f docker-compose.prod.yml up -d --build

# Access: http://localhost (nginx serves frontend, proxies /api)

生产架构

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   nginx:80  │────▶│ backend:3001│────▶│postgres:5432│
│  (frontend) │     │ + MCP server│     │  (pgvector) │
└─────────────┘     └──────┬──────┘     └─────────────┘
                           │
          ┌────────────────┴────────────────┐
          │                                 │
   ┌──────▼──────┐                  ┌───────▼───────┐
   │ ollama:11434│                  │ Ollama Cloud  │
   │ (embeddings)│                  │ (LLM model)   │
   └─────────────┘                  └───────────────┘

LLM配置

地方(发展)

OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3.1:8b
OLLAMA_EMBEDDING_MODEL=nomic-embed-text

云+本地嵌入(生产)

OLLAMA_CLOUD_URL=https://ollama.com
OLLAMA_MODEL=gpt-oss:120b-cloud
OLLAMA_API_KEY=your-key

OLLAMA_BASE_URL=http://ollama:11434
OLLAMA_EMBEDDING_MODEL=nomic-embed-text

多代理流

User Query
    │
    ▼
┌─────────────────┐
│  Routing Agent  │  → Classifies: principles|products|compliance|
│  (temp: 0.1)    │     comparison|calculation|general
└────────┬────────┘
         │
    ┌────┴────┐
    ▼         ▼
┌────────┐ ┌───────────┐
│Knowledge│ │Calculation│
│ Agent  │ │  Agent    │
│ (RAG)  │ │  (MCP)    │
└────┬───┘ └─────┬─────┘
     │           │
     └─────┬─────┘
           ▼
    ┌────────────┐
    │ Compliance │  → COMPLIANT | FLAGGED
    │   Agent    │
    └────────────┘

关键配置

配置 值 位置
嵌入调光 768 backend/db/schema.ts:27
区块大小 800个代币 backend/services/chunking-service.ts:35
区块重叠 100个代币 backend/services/chunking-service.ts:36
检索限制 5→ 重新排序为3 KNOWLEDGE_RETRIEVAL_LIMIT, KNOWLEDGE_RERANKED_LIMIT
会话超时 30分钟 backend/services/session-store.ts:38
最大文件大小 10 MB backend/services/document-processor.ts:32

脚本

pnpm dev              # Start all services
pnpm build            # Production build
pnpm db:generate      # Generate migrations
pnpm db:migrate       # Run migrations
pnpm db:studio        # Drizzle Studio
pnpm ollama:pull      # Pull required models
pnpm seed             # Seed documents
pnpm test             # Run tests

许可证

麻省理工学院 丹尼·杜伊·卡希诺

作者

Danny-人工智能工程师