diff --git a/Merge/front/src/api/search_jwlll.js b/Merge/front/src/api/search_jwlll.js
index 7568f1d..085507b 100644
--- a/Merge/front/src/api/search_jwlll.js
+++ b/Merge/front/src/api/search_jwlll.js
@@ -1,7 +1,11 @@
 // 搜索推荐算法相关的API接口
-// 对应 JWLLL 后端服务
+// 仅首页推荐和搜索使用 JWLLL 后端服务
+// 其他功能使用对应的后端服务
 
-const BASE_URL = 'http://10.126.59.25:5717'
+// JWLLL 后端服务 - 仅用于推荐和搜索
+const JWLLL_BASE_URL = 'http://10.126.59.25:5717'
+// WZY 后端服务 - 用于帖子详情、点赞、评论等
+const WZY_BASE_URL = 'http://10.126.59.25:5714'
 
 // 通用请求函数
 const request = async (url, options = {}) => {
@@ -20,11 +24,13 @@
   }
 }
 
-// 搜索API
+// 搜索推荐API
 export const searchAPI = {
+  // ===== 推荐和搜索功能 - 使用 JWLLL 服务 =====
+  
   // 搜索内容
   search: async (keyword, category = undefined) => {
-    return await request(`${BASE_URL}/search`, {
+    return await request(`${JWLLL_BASE_URL}/search`, {
       method: 'POST',
       body: JSON.stringify({ keyword, category })
     })
@@ -32,12 +38,12 @@
 
   // 获取用户标签
   getUserTags: async (userId) => {
-    return await request(`${BASE_URL}/user_tags?user_id=${userId}`)
+    return await request(`${JWLLL_BASE_URL}/user_tags?user_id=${userId}`)
   },
 
   // 标签推荐
   recommendByTags: async (userId, tags) => {
-    return await request(`${BASE_URL}/recommend_tags`, {
+    return await request(`${JWLLL_BASE_URL}/recommend_tags`, {
       method: 'POST',
       body: JSON.stringify({ user_id: userId, tags })
     })
@@ -45,52 +51,73 @@
 
   // 协同过滤推荐
   userBasedRecommend: async (userId, topN = 20) => {
-    return await request(`${BASE_URL}/user_based_recommend`, {
+    return await request(`${JWLLL_BASE_URL}/user_based_recommend`, {
       method: 'POST',
       body: JSON.stringify({ user_id: userId, top_n: topN })
     })
   },
 
+  // ===== 其他功能 - 使用 WZY 服务 =====
+  
   // 获取帖子详情
   getPostDetail: async (postId) => {
-    return await request(`${BASE_URL}/post/${postId}`)
+    return await request(`${WZY_BASE_URL}/posts/${postId}`)
   },
-
   // 点赞帖子
   likePost: async (postId, userId) => {
-    return await request(`${BASE_URL}/like`, {
+    return await request(`${WZY_BASE_URL}/posts/${postId}/like`, {
       method: 'POST',
-      body: JSON.stringify({ post_id: postId, user_id: userId })
+      body: JSON.stringify({ user_id: userId })
     })
   },
 
   // 取消点赞
   unlikePost: async (postId, userId) => {
-    return await request(`${BASE_URL}/unlike`, {
-      method: 'POST',
-      body: JSON.stringify({ post_id: postId, user_id: userId })
+    return await request(`${WZY_BASE_URL}/posts/${postId}/like`, {
+      method: 'DELETE',
+      body: JSON.stringify({ user_id: userId })
     })
   },
 
   // 添加评论
   addComment: async (postId, userId, content) => {
-    return await request(`${BASE_URL}/comment`, {
+    return await request(`${WZY_BASE_URL}/posts/${postId}/comments`, {
       method: 'POST',
-      body: JSON.stringify({ post_id: postId, user_id: userId, content })
+      body: JSON.stringify({ user_id: userId, content })
     })
-  },
-
-  // 获取评论
+  },  // 获取评论
   getComments: async (postId) => {
-    return await request(`${BASE_URL}/comments/${postId}`)
+    const comments = await request(`${WZY_BASE_URL}/posts/${postId}/comments`)
+    // 适配数据格式，WZY服务返回数组，而前端期望 {comments: [...]}
+    // 同时转换字段名以适配前端期望的格式
+    const adaptedComments = Array.isArray(comments) ? comments.map(comment => ({
+      ...comment,
+      user_name: comment.user_name || `用户${comment.user_id}`, // 如果没有用户名，使用用户ID生成
+      create_time: comment.created_at // 将 created_at 映射为 create_time
+    })) : []
+    return { comments: adaptedComments }
   },
-
   // 上传帖子
   uploadPost: async (postData) => {
-    return await request(`${BASE_URL}/upload`, {
+    // 转换数据格式以适配 WZY 服务
+    const payload = {
+      user_id: postData.user_id || 1, // 默认用户ID
+      title: postData.title,
+      content: postData.content,
+      type: postData.type || 'text', // 默认为文本类型
+      media_urls: postData.media_files || [],
+      status: 'published' // 直接发布，不需要审核
+    }
+    
+    const result = await request(`${WZY_BASE_URL}/posts`, {
       method: 'POST',
-      body: JSON.stringify(postData)
+      body: JSON.stringify(payload)
     })
+
+    // 注意：WZY 服务目前不支持标签功能，tags 会被忽略
+    // 如果需要标签功能，需要额外的API调用或使用支持标签的服务
+    
+    return result
   }
 }
 
