伊斯兰金融知识助理
人工智能聊天机器人用于伊斯兰金融问题。具有基于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-人工智能工程师
