diff --git a/README-EN.md b/README-EN.md
index 4b003a63f..0bd144d41 100644
--- a/README-EN.md
+++ b/README-EN.md
@@ -20,7 +20,7 @@
[](https://x.com/mirofish_ai)
[](https://www.instagram.com/mirofish_ai/)
-[English](./README-EN.md) | [中文文档](./README.md)
+[Tiếng Việt](./README-vi.md) | [English](./README-EN.md) | [中文文档](./README.md)
diff --git a/README-vi.md b/README-vi.md
new file mode 100644
index 000000000..95b287ba2
--- /dev/null
+++ b/README-vi.md
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+Công cụ Trí tuệ Bầy đàn Đơn giản và Phổ quát, Dự đoán Mọi thứ
+
+
A Simple and Universal Swarm Intelligence Engine, Predicting Anything
+
+
+
+[](https://github.com/666ghj/MiroFish/stargazers)
+[](https://github.com/666ghj/MiroFish/watchers)
+[](https://github.com/666ghj/MiroFish/network)
+[](https://hub.docker.com/)
+[](https://deepwiki.com/666ghj/MiroFish)
+
+[](http://discord.gg/ePf5aPaHnA)
+[](https://x.com/mirofish_ai)
+[](https://www.instagram.com/mirofish_ai/)
+
+[Tiếng Việt](./README-vi.md) | [English](./README-EN.md) | [中文文档](./README.md)
+
+
+
+## ⚡ Tổng quan dự án
+
+**MiroFish** là một công cụ dự đoán AI thế hệ mới dựa trên công nghệ đa tác vụ (multi-agent). Bằng cách trích xuất thông tin "hạt giống" từ thế giới thực (như tin tức nóng hổi, dự thảo chính sách hoặc tín hiệu tài chính), nó tự động xây dựng một thế giới kỹ thuật số song song với độ trung thực cao. Trong không gian này, hàng ngàn tác nhân thông minh (agent) với tính cách độc lập, trí nhớ dài hạn và logic hành vi tự do tương tác và phát triển xã hội. Bạn có thể tác động đến các biến số từ "góc nhìn của Chúa" để suy luận chính xác các xu hướng tương lai — **diễn tập tương lai trong một hộp cát kỹ thuật số và đưa ra quyết định sau vô số lần mô phỏng**.
+
+> Bạn chỉ cần: Tải lên tài liệu hạt giống (báo cáo phân tích dữ liệu hoặc các câu chuyện thú vị) và mô tả yêu cầu dự đoán bằng ngôn ngữ tự nhiên.
+> MiroFish sẽ trả về: Một báo cáo dự đoán chi tiết và một thế giới kỹ thuật số có độ trung thực cao có thể tương tác sâu.
+
+### Tầm nhìn của chúng tôi
+
+MiroFish tận tâm tạo ra một chiếc gương trí tuệ bầy đàn phản chiếu thực tế bằng cách nắm bắt sự trỗi dậy tập thể được kích hoạt bởi các tương tác cá nhân, chúng tôi phá vỡ các giới hạn của dự đoán truyền thống:
+
+- **Ở cấp độ vĩ mô**: Chúng tôi là một phòng thí nghiệm diễn tập cho những người ra quyết định, cho phép các chính sách và quan hệ công chúng được thử nghiệm với rủi ro bằng không.
+- **Ở cấp độ vi mô**: Chúng tôi là một hộp cát sáng tạo cho người dùng cá nhân — dù là suy luận kết thúc tiểu thuyết hay khám phá các kịch bản tưởng tượng, mọi thứ đều có thể thú vị, vui nhộn và dễ tiếp cận.
+
+Từ những dự đoán nghiêm túc đến những mô phỏng vui chơi, chúng tôi để mọi "nếu như" đều thấy được kết quả, giúp dự đoán mọi thứ trở nên khả thi.
+
+## 🌐 Bản demo trực tuyến
+
+Chào mừng bạn đến thăm môi trường demo trực tuyến của chúng tôi và trải nghiệm mô phỏng dự đoán về các sự kiện dư luận xã hội mà chúng tôi đã chuẩn bị cho bạn: [mirofish-live-demo](https://666ghj.github.io/mirofish-demo/)
+
+## 📸 Ảnh chụp màn hình
+
+
+
+## 🎬 Video Demo
+
+### 1. Mô phỏng dư luận Đại học Vũ Hán + Giới thiệu dự án MiroFish
+
+
+
+
+Nhấp vào ảnh để xem video demo hoàn chỉnh dự đoán bằng cách sử dụng "Báo cáo dư luận Đại học Vũ Hán" do BettaFish tạo ra.
+
+
+### 2. Mô phỏng kết thúc bị mất của Hồng Lâu Mộng
+
+
+
+
+Nhấp vào ảnh để xem dự đoán sâu sắc của MiroFish về kết thúc bị mất dựa trên hàng trăm nghìn chữ từ 80 chương đầu tiên của "Hồng Lâu Mộng".
+
+
+> **Dự đoán tài chính**, **Dự đoán tin tức chính trị** và nhiều ví dụ khác sẽ sớm ra mắt...
+
+## 🔄 Quy trình làm việc
+
+1. **Xây dựng bản đồ tri thức**: Trích xuất hạt giống thực tế & Tiêm trí nhớ cá nhân và tập thể & Xây dựng GraphRAG.
+2. **Thiết lập môi trường**: Trích xuất quan hệ thực thể & Tạo nhân cách & Cấu hình môi trường Agent tiêm tham số mô phỏng.
+3. **Bắt đầu mô phỏng**: Mô phỏng song song trên hai nền tảng & Tự động phân tích yêu cầu dự đoán & Cập nhật trí nhớ thời gian động.
+4. **Tạo báo cáo**: ReportAgent với bộ công cụ phong phú để tương tác sâu với môi trường sau mô phỏng.
+5. **Tương tác sâu**: Trò chuyện với bất kỳ tác nhân nào trong thế giới mô phỏng & Tương tác với ReportAgent.
+
+## 🚀 Bắt đầu nhanh
+
+### Lựa chọn 1: Triển khai từ mã nguồn (Khuyến nghị)
+
+#### Điều kiện tiên quyết
+
+| Công cụ | Phiên bản | Mô tả | Kiểm tra cài đặt |
+|------|---------|-------------|-------------------|
+| **Node.js** | 18+ | Môi trường chạy frontend, bao gồm npm | `node -v` |
+| **Python** | ≥3.11, ≤3.12 | Môi trường chạy backend | `python --version` |
+| **uv** | Mới nhất | Trình quản lý gói Python | `uv --version` |
+
+#### 1. Cấu hình biến môi trường
+
+```bash
+# Sao chép tệp cấu hình ví dụ
+cp .env.example .env
+
+# Chỉnh sửa tệp .env và điền các khóa API cần thiết
+```
+
+**Các biến môi trường bắt buộc:**
+
+```env
+# Cấu hình LLM API (hỗ trợ bất kỳ LLM API nào với định dạng OpenAI SDK)
+# Khuyến nghị: Mô hình Qwen-plus của Alibaba qua nền tảng Bailian: https://bailian.console.aliyun.com/
+# Tiêu thụ cao, hãy thử mô phỏng với ít hơn 40 vòng trước
+LLM_API_KEY=your_api_key
+LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
+LLM_MODEL_NAME=qwen-plus
+
+# Cấu hình Zep Cloud
+# Hạn ngạch miễn phí hàng tháng là đủ cho việc sử dụng đơn giản: https://app.getzep.com/
+ZEP_API_KEY=your_zep_api_key
+```
+
+#### 2. Cài đặt phụ thuộc
+
+```bash
+# Cài đặt một lần cho tất cả các phụ thuộc (root + frontend + backend)
+npm run setup:all
+```
+
+Hoặc cài đặt từng bước:
+
+```bash
+# Cài đặt phụ thuộc Node (root + frontend)
+npm run setup
+
+# Cài đặt phụ thuộc Python (backend, tự động tạo môi trường ảo)
+npm run setup:backend
+```
+
+#### 3. Khởi động dịch vụ
+
+```bash
+# Khởi động cả frontend và backend (chạy từ thư mục gốc của dự án)
+npm run dev
+```
+
+**Địa chỉ dịch vụ:**
+- Frontend: `http://localhost:3000`
+- Backend API: `http://localhost:5001`
+
+**Khởi động riêng lẻ:**
+
+```bash
+npm run backend # Chỉ khởi động backend
+npm run frontend # Chỉ khởi động frontend
+```
+
+### Lựa chọn 2: Triển khai Docker
+
+```bash
+# 1. Cấu hình biến môi trường (giống như triển khai mã nguồn)
+cp .env.example .env
+
+# 2. Kéo image và khởi động
+docker compose up -d
+```
+
+Mặc định sẽ đọc `.env` từ thư mục gốc, ánh xạ các cổng `3000 (frontend) / 5001 (backend)`.
+
+> Địa chỉ mirror để kéo nhanh hơn được cung cấp dưới dạng ghi chú trong `docker-compose.yml`, hãy thay thế nếu cần thiết.
+
+## 📬 Tham gia thảo luận
+
+
+
+
+
+
+
+Đội ngũ MiroFish đang tuyển dụng các vị trí toàn thời gian/thực tập. Nếu bạn quan tâm đến mô phỏng đa tác vụ và ứng dụng LLM, vui lòng gửi CV của bạn đến: **mirofish@shanda.com**
+
+## 📄 Lời cảm ơn
+
+**MiroFish đã nhận được sự hỗ trợ chiến lược và ươm tạo từ Tập đoàn Shanda!**
+
+Công cụ mô phỏng của MiroFish được cung cấp bởi **[OASIS (Open Agent Social Interaction Simulations)](https://github.com/camel-ai/oasis)**, Chúng tôi chân thành cảm ơn đội ngũ CAMEL-AI vì những đóng góp mã nguồn mở của họ!
+
+## 📈 Thống kê dự án
+
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index 4f5cffe74..a68bc67e8 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@
[](https://x.com/mirofish_ai)
[](https://www.instagram.com/mirofish_ai/)
-[English](./README-EN.md) | [中文文档](./README.md)
+[Tiếng Việt](./README-vi.md) | [English](./README-EN.md) | [中文文档](./README.md)
diff --git a/frontend/index.html b/frontend/index.html
index 009c924a4..ea9979978 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -1,5 +1,5 @@
-
+
@@ -7,8 +7,8 @@
-
- MiroFish - 预测万物
+
+ MiroFish
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 8c4fa710d..e29dbb914 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -11,6 +11,7 @@
"axios": "^1.13.2",
"d3": "^7.9.0",
"vue": "^3.5.24",
+ "vue-i18n": "^9.14.5",
"vue-router": "^4.6.3"
},
"devDependencies": {
@@ -506,6 +507,50 @@
"node": ">=18"
}
},
+ "node_modules/@intlify/core-base": {
+ "version": "9.14.5",
+ "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.5.tgz",
+ "integrity": "sha512-5ah5FqZG4pOoHjkvs8mjtv+gPKYU0zCISaYNjBNNqYiaITxW8ZtVih3GS/oTOqN8d9/mDLyrjD46GBApNxmlsA==",
+ "license": "MIT",
+ "dependencies": {
+ "@intlify/message-compiler": "9.14.5",
+ "@intlify/shared": "9.14.5"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ }
+ },
+ "node_modules/@intlify/message-compiler": {
+ "version": "9.14.5",
+ "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.5.tgz",
+ "integrity": "sha512-IHzgEu61/YIpQV5Pc3aRWScDcnFKWvQA9kigcINcCBXN8mbW+vk9SK+lDxA6STzKQsVJxUPg9ACC52pKKo3SVQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@intlify/shared": "9.14.5",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ }
+ },
+ "node_modules/@intlify/shared": {
+ "version": "9.14.5",
+ "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.5.tgz",
+ "integrity": "sha512-9gB+E53BYuAEMhbCAxVgG38EZrk59sxBtv3jSizNL2hEWlgjBjAw1AwpLHtNaeda12pe6W20OGEa0TwuMSRbyQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ }
+ },
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
@@ -1331,7 +1376,6 @@
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
"license": "ISC",
- "peer": true,
"engines": {
"node": ">=12"
}
@@ -1809,7 +1853,6 @@
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12"
},
@@ -1943,7 +1986,6 @@
"integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.5.0",
@@ -2018,7 +2060,6 @@
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz",
"integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@vue/compiler-dom": "3.5.25",
"@vue/compiler-sfc": "3.5.25",
@@ -2035,6 +2076,27 @@
}
}
},
+ "node_modules/vue-i18n": {
+ "version": "9.14.5",
+ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.5.tgz",
+ "integrity": "sha512-0jQ9Em3ymWngyiIkj0+c/k7WgaPO+TNzjKSNq9BvBQaKJECqn9cd9fL4tkDhB5G1QBskGl9YxxbDAhgbFtpe2g==",
+ "deprecated": "v9 and v10 no longer supported. please migrate to v11. about maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html",
+ "license": "MIT",
+ "dependencies": {
+ "@intlify/core-base": "9.14.5",
+ "@intlify/shared": "9.14.5",
+ "@vue/devtools-api": "^6.5.0"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ },
+ "peerDependencies": {
+ "vue": "^3.0.0"
+ }
+ },
"node_modules/vue-router": {
"version": "4.6.3",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.3.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 5af29f761..4d75f8ef0 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -12,6 +12,7 @@
"axios": "1.13.2",
"d3": "^7.9.0",
"vue": "^3.5.24",
+ "vue-i18n": "^9.14.5",
"vue-router": "^4.6.3"
},
"devDependencies": {
diff --git a/frontend/src/api/graph.js b/frontend/src/api/graph.js
index ef90a2b6f..d79e4907f 100644
--- a/frontend/src/api/graph.js
+++ b/frontend/src/api/graph.js
@@ -1,8 +1,8 @@
import service, { requestWithRetry } from './index'
/**
- * 生成本体(上传文档和模拟需求)
- * @param {Object} data - 包含files, simulation_requirement, project_name等
+ * Generate ontology (upload documents and simulation requirements)
+ * @param {Object} formData - contains files, simulation_requirement, project_name, etc.
* @returns {Promise}
*/
export function generateOntology(formData) {
@@ -19,8 +19,8 @@ export function generateOntology(formData) {
}
/**
- * 构建图谱
- * @param {Object} data - 包含project_id, graph_name等
+ * Build graph
+ * @param {Object} data - contains project_id, graph_name, etc.
* @returns {Promise}
*/
export function buildGraph(data) {
@@ -34,8 +34,8 @@ export function buildGraph(data) {
}
/**
- * 查询任务状态
- * @param {String} taskId - 任务ID
+ * Query task status
+ * @param {String} taskId - task ID
* @returns {Promise}
*/
export function getTaskStatus(taskId) {
@@ -46,8 +46,8 @@ export function getTaskStatus(taskId) {
}
/**
- * 获取图谱数据
- * @param {String} graphId - 图谱ID
+ * Get graph data
+ * @param {String} graphId - graph ID
* @returns {Promise}
*/
export function getGraphData(graphId) {
@@ -58,8 +58,8 @@ export function getGraphData(graphId) {
}
/**
- * 获取项目信息
- * @param {String} projectId - 项目ID
+ * Get project information
+ * @param {String} projectId - project ID
* @returns {Promise}
*/
export function getProject(projectId) {
diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js
index e2d9465b2..533e02b15 100644
--- a/frontend/src/api/index.js
+++ b/frontend/src/api/index.js
@@ -1,31 +1,20 @@
import axios from 'axios'
-// 创建axios实例
+// Create axios instance
const service = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:5001',
- timeout: 300000, // 5分钟超时(本体生成可能需要较长时间)
+ timeout: 300000, // 5 min timeout (ontology generation takes time)
headers: {
'Content-Type': 'application/json'
}
})
-// 请求拦截器
-service.interceptors.request.use(
- config => {
- return config
- },
- error => {
- console.error('Request error:', error)
- return Promise.reject(error)
- }
-)
-
-// 响应拦截器(容错重试机制)
+// Response interceptor (error retry mechanism)
service.interceptors.response.use(
response => {
const res = response.data
- // 如果返回的状态码不是success,则抛出错误
+ // If return status is not success, throw error
if (!res.success && res.success !== undefined) {
console.error('API Error:', res.error || res.message || 'Unknown error')
return Promise.reject(new Error(res.error || res.message || 'Error'))
diff --git a/frontend/src/api/report.js b/frontend/src/api/report.js
index c89a67d8c..fb714f987 100644
--- a/frontend/src/api/report.js
+++ b/frontend/src/api/report.js
@@ -1,15 +1,16 @@
import service, { requestWithRetry } from './index'
/**
- * 开始报告生成
- * @param {Object} data - { simulation_id, force_regenerate? }
+ * Create report
+ * @param {Object} data - { simulation_id, outline_only? }
+ * @returns {Promise}
*/
export const generateReport = (data) => {
return requestWithRetry(() => service.post('/api/report/generate', data), 3, 1000)
}
/**
- * 获取报告生成状态
+ * Get report creation status
* @param {string} reportId
*/
export const getReportStatus = (reportId) => {
@@ -17,25 +18,25 @@ export const getReportStatus = (reportId) => {
}
/**
- * 获取 Agent 日志(增量)
+ * Get Agent log (incremental)
* @param {string} reportId
- * @param {number} fromLine - 从第几行开始获取
+ * @param {number} fromLine - Start line
*/
export const getAgentLog = (reportId, fromLine = 0) => {
return service.get(`/api/report/${reportId}/agent-log`, { params: { from_line: fromLine } })
}
/**
- * 获取控制台日志(增量)
+ * Get console log (incremental)
* @param {string} reportId
- * @param {number} fromLine - 从第几行开始获取
+ * @param {number} fromLine - Start line
*/
export const getConsoleLog = (reportId, fromLine = 0) => {
return service.get(`/api/report/${reportId}/console-log`, { params: { from_line: fromLine } })
}
/**
- * 获取报告详情
+ * Get report details
* @param {string} reportId
*/
export const getReport = (reportId) => {
@@ -43,7 +44,7 @@ export const getReport = (reportId) => {
}
/**
- * 与 Report Agent 对话
+ * Chat with Report Agent
* @param {Object} data - { simulation_id, message, chat_history? }
*/
export const chatWithReport = (data) => {
diff --git a/frontend/src/api/simulation.js b/frontend/src/api/simulation.js
index f878586f0..b4aad6c21 100644
--- a/frontend/src/api/simulation.js
+++ b/frontend/src/api/simulation.js
@@ -1,7 +1,7 @@
import service, { requestWithRetry } from './index'
/**
- * 创建模拟
+ * Create simulation
* @param {Object} data - { project_id, graph_id?, enable_twitter?, enable_reddit? }
*/
export const createSimulation = (data) => {
@@ -9,7 +9,7 @@ export const createSimulation = (data) => {
}
/**
- * 准备模拟环境(异步任务)
+ * Prepare simulation environment (async task)
* @param {Object} data - { simulation_id, entity_types?, use_llm_for_profiles?, parallel_profile_count?, force_regenerate? }
*/
export const prepareSimulation = (data) => {
@@ -17,7 +17,7 @@ export const prepareSimulation = (data) => {
}
/**
- * 查询准备任务进度
+ * Query prepare task status
* @param {Object} data - { task_id?, simulation_id? }
*/
export const getPrepareStatus = (data) => {
@@ -25,7 +25,7 @@ export const getPrepareStatus = (data) => {
}
/**
- * 获取模拟状态
+ * Get simulation status
* @param {string} simulationId
*/
export const getSimulation = (simulationId) => {
@@ -33,7 +33,7 @@ export const getSimulation = (simulationId) => {
}
/**
- * 获取模拟的 Agent Profiles
+ * Get simulation Agent Profiles
* @param {string} simulationId
* @param {string} platform - 'reddit' | 'twitter'
*/
@@ -42,7 +42,7 @@ export const getSimulationProfiles = (simulationId, platform = 'reddit') => {
}
/**
- * 实时获取生成中的 Agent Profiles
+ * Get Agent Profiles in realtime
* @param {string} simulationId
* @param {string} platform - 'reddit' | 'twitter'
*/
@@ -51,7 +51,7 @@ export const getSimulationProfilesRealtime = (simulationId, platform = 'reddit')
}
/**
- * 获取模拟配置
+ * Get simulation configuration
* @param {string} simulationId
*/
export const getSimulationConfig = (simulationId) => {
@@ -59,17 +59,17 @@ export const getSimulationConfig = (simulationId) => {
}
/**
- * 实时获取生成中的模拟配置
+ * Get simulation configuration in realtime
* @param {string} simulationId
- * @returns {Promise} 返回配置信息,包含元数据和配置内容
+ * @returns {Promise} Returns configuration info
*/
export const getSimulationConfigRealtime = (simulationId) => {
return service.get(`/api/simulation/${simulationId}/config/realtime`)
}
/**
- * 列出所有模拟
- * @param {string} projectId - 可选,按项目ID过滤
+ * List all simulations
+ * @param {string} projectId - optional filter by project ID
*/
export const listSimulations = (projectId) => {
const params = projectId ? { project_id: projectId } : {}
@@ -77,7 +77,7 @@ export const listSimulations = (projectId) => {
}
/**
- * 启动模拟
+ * Start simulation
* @param {Object} data - { simulation_id, platform?, max_rounds?, enable_graph_memory_update? }
*/
export const startSimulation = (data) => {
@@ -85,7 +85,7 @@ export const startSimulation = (data) => {
}
/**
- * 停止模拟
+ * Stop simulation
* @param {Object} data - { simulation_id }
*/
export const stopSimulation = (data) => {
@@ -93,7 +93,7 @@ export const stopSimulation = (data) => {
}
/**
- * 获取模拟运行实时状态
+ * Get simulation run status in realtime
* @param {string} simulationId
*/
export const getRunStatus = (simulationId) => {
@@ -101,7 +101,7 @@ export const getRunStatus = (simulationId) => {
}
/**
- * 获取模拟运行详细状态(包含最近动作)
+ * Get detailed simulation run status (inc. recent actions)
* @param {string} simulationId
*/
export const getRunStatusDetail = (simulationId) => {
@@ -109,11 +109,11 @@ export const getRunStatusDetail = (simulationId) => {
}
/**
- * 获取模拟中的帖子
+ * Get simulation posts
* @param {string} simulationId
* @param {string} platform - 'reddit' | 'twitter'
- * @param {number} limit - 返回数量
- * @param {number} offset - 偏移量
+ * @param {number} limit - return count
+ * @param {number} offset - offset
*/
export const getSimulationPosts = (simulationId, platform = 'reddit', limit = 50, offset = 0) => {
return service.get(`/api/simulation/${simulationId}/posts`, {
@@ -122,10 +122,10 @@ export const getSimulationPosts = (simulationId, platform = 'reddit', limit = 50
}
/**
- * 获取模拟时间线(按轮次汇总)
+ * Get simulation timeline (summary by rounds)
* @param {string} simulationId
- * @param {number} startRound - 起始轮次
- * @param {number} endRound - 结束轮次
+ * @param {number} startRound - start round
+ * @param {number} endRound - end round
*/
export const getSimulationTimeline = (simulationId, startRound = 0, endRound = null) => {
const params = { start_round: startRound }
@@ -136,7 +136,7 @@ export const getSimulationTimeline = (simulationId, startRound = 0, endRound = n
}
/**
- * 获取Agent统计信息
+ * Get Agent statistical information
* @param {string} simulationId
*/
export const getAgentStats = (simulationId) => {
@@ -144,7 +144,7 @@ export const getAgentStats = (simulationId) => {
}
/**
- * 获取模拟动作历史
+ * Get simulation action history
* @param {string} simulationId
* @param {Object} params - { limit, offset, platform, agent_id, round_num }
*/
@@ -153,7 +153,7 @@ export const getSimulationActions = (simulationId, params = {}) => {
}
/**
- * 关闭模拟环境(优雅退出)
+ * Close simulation environment (graceful exit)
* @param {Object} data - { simulation_id, timeout? }
*/
export const closeSimulationEnv = (data) => {
@@ -161,7 +161,7 @@ export const closeSimulationEnv = (data) => {
}
/**
- * 获取模拟环境状态
+ * Get simulation environment status
* @param {Object} data - { simulation_id }
*/
export const getEnvStatus = (data) => {
@@ -169,7 +169,7 @@ export const getEnvStatus = (data) => {
}
/**
- * 批量采访 Agent
+ * Batch interview Agents
* @param {Object} data - { simulation_id, interviews: [{ agent_id, prompt }] }
*/
export const interviewAgents = (data) => {
@@ -177,9 +177,9 @@ export const interviewAgents = (data) => {
}
/**
- * 获取历史模拟列表(带项目详情)
- * 用于首页历史项目展示
- * @param {number} limit - 返回数量限制
+ * Get historical simulation list (with project details)
+ * Used for home history project display
+ * @param {number} limit - return limit
*/
export const getSimulationHistory = (limit = 20) => {
return service.get('/api/simulation/history', { params: { limit } })
diff --git a/frontend/src/components/GraphPanel.vue b/frontend/src/components/GraphPanel.vue
index 314c966e4..a70b475d7 100644
--- a/frontend/src/components/GraphPanel.vue
+++ b/frontend/src/components/GraphPanel.vue
@@ -1,14 +1,14 @@
- {{ isSimulating ? 'GraphRAG长短期记忆实时更新中' : '实时更新中...' }}
+ {{ isSimulating ? $t('graph.memory_updating') : $t('graph.updating') }}
@@ -39,8 +39,8 @@
- 还有少量内容处理中,建议稍后手动刷新图谱
-
+ {{ $t('graph.finished_hint') }}
+
@@ -51,7 +51,7 @@