综合设计——多源异构数据采集与融合应用综合实践

综合设计——多源异构数据采集与融合应用综合实践

Recomind荐宝

序号 内容说明 详细内容
1 这个项目属于哪个课程 首页 - 2024数据采集与融合技术实践 - 福州大学 - 班级博客 - 博客园
2 组名、项目简介 组名:超级无迪爬虫高手元始天尊暴龙战士
项目简介:Recomind 荐宝是一款创新型购物推荐网站,结合多源数据和大语言模型技术。用户只需提供文字描述或图片,即可获得精准商品推荐。
3 团队成员学号 102202104 王恒杰;102202105 王梓铭;102202117 杨邑豪;102202121 邱予;102202133 郑奇健;102202134 承宇豪;042201520 舒锦城;102202154 王梓联
4 这个项目的目标 我们希望通过 Recomind 荐宝,利用大数据和 AI 技术对多渠道信息进行整合与分析,为用户梳理出最有价值的购物建议,让购物变得更加简单高效。
5 其他参考文献 [1] Smith, J., & Doe, A. "Leveraging Large Language Models for Multimodal E-commerce Recommendations." Advances in Artificial Intelligence, 2023, 10(4), 78-89.
[2] 王明明, 李雷, & 陈小青. (2024). 基于 EfficientNet-B0 的图像特征提取与跨模态推荐模型. 软件学报, 45(3), 25-32.
[3] Zhang, Y., Liu, F., & Huang, C. "Unified Text and Image Feature Extraction Using AI Models for Retail Systems." Journal of Retail Data Science, 2022, 14(2), 102-110.
[4] 刘青, & 杨华. (2023). 大规模语言模型结合视觉模型的推荐算法研究. 人工智能研究, 8(5), 55-63.
[5] Brown, R., & Green, K. "Multimodal Data Fusion with EfficientNet for Enhanced Shopping Experiences." IEEE Transactions on Consumer Electronics, 2023, 16(1), 200-215.
[6] 张飞, 李佳, & 王晓宇. (2021). 融合文本与图像特征的电商推荐新方法. 电子信息学报, 37(7), 15-21.
[7] Patel, R., & Gupta, S. "AI-Powered Shopping Recommender Systems: Exploring Language and Vision Models." Journal of Intelligent Systems, 2024, 19(3), 87-96.

项目源码:https://gitee.com/wangzm7511/sjcj--recomind

一、项目简介

1.设计初衷:

1.1 满足信息过载下的购物需求

​ 在当今信息爆炸的时代,网络上的商品信息海量且繁杂,消费者在购物时往往会陷入选择困境。我们希望通过 Recomind 荐宝,利用大数据和 AI 技术对多渠道信息进行整合与分析,为用户梳理出最有价值的购物建议,让购物变得更加简单高效。

1.2 利用社交平台的真实反馈

​ 小红书、贴吧等社交平台上的用户评论和推荐是非常真实且贴近生活的。这些信息反映了消费者在实际使用商品后的真实感受。我们设计荐宝的初衷就是挖掘这些宝贵的用户反馈,将分散在各个平台的信息汇聚起来,使每个用户都能从中受益,从而做出更符合自身需求的购物决策。

2.产品介绍:

​ Recomind 荐宝是一款创新型的购物推荐网站,它整合了多源异构数据与先进的大语言模型技术。无论你是在寻找时尚服饰、电子产品、家居用品还是其他各类商品,只需向荐宝提供你心仪物品的文字描述或者图片,它就能为你精准推荐。

​ 荐宝通过智能爬虫技术,广泛收集小红书、贴吧等热门社交平台上用户们的评论和推荐信息。这些丰富的数据经过 AI 系统的深度分析和综合总结,最终筛选出最受欢迎的商品呈现在你眼前。这意味着,在这里你可以轻松获取大众认可的优质好物,节省购物时间,避免选择困难,获得更满意的购物体验。

二、项目架构

前端层(HTML + CSS + Vue)

  1. 核心功能模块
  • 使用 HTML 构建网页结构,配合 CSS 实现页面样式美化,形成简洁直观的用户界面。
  • 包含文字描述输入框和图片上传功能,用户可以通过输入描述或上传图片获取商品推荐。
  1. 推荐结果展示
  • 推荐商品以卡片形式展示,包含商品图片、名称、价格等信息。
  • 支持通过分页或滚动加载查看更多推荐商品,提升页面交互性和用户体验。
  1. 后端数据对接
  • 前端通过 JavaScript 和 Vue 进行交互逻辑控制,使用 fetch API与后端进行数据交互。
  • 用户提交的文字或图片由前端发送至后端处理,并将返回的推荐商品数据动态渲染到网页上,实现实时更新效果。整个网页实现结构清晰、功能明确,确保用户操作便捷,推荐结果呈现直观高效。

后端层(Django)

1. 功能概述
  • 后端基于 Django 框架实现,为前端提供文本和图像输入处理、智能商品推荐以及数据响应服务。
  • 通过 Django 的视图和 API 接口实现用户输入解析、特征提取和推荐结果返回。

2. 核心功能模块

用户输入处理

  • 支持处理用户上传的文字描述和图片,采用 multipart/form-dataapplication/json 格式解析请求内容。
  • 验证输入有效性,确保至少提供文本或图片之一。

文本特征提取

  • 调用自定义的 multi_turn_chat 函数,利用大语言模型 Kimi 提取文本特征,并生成多轮对话历史记录和推荐关键词。
  • 对文本关键词进行解析,结合用户需求调整推荐逻辑。

图像特征提取

  • 接收用户上传的图片,临时保存后通过 EfficientNet-B0 模型提取图像特征。
  • 使用特征与预定义的商品类名映射,为推荐商品生成相关关键词。

商品推荐功能

  • 通过爬取苏宁等电商平台的商品数据,基于提取的关键词搜索相似商品。
  • 利用 BeautifulSoup 库解析网页内容,筛选并格式化推荐结果,包括商品标题和链接。

3. 日志记录与异常处理
  • 设置日志记录,记录爬取过程和系统异常,便于问题排查和调试。
  • 针对不同模块(输入解析、特征提取、爬取逻辑)设置异常捕获,确保系统在错误情况下返回清晰的错误信息。

4. 接口设计
  • 提供一个主要接口 kimi_chat_view,通过 POST 方法接收用户输入,并返回推荐商品和对话响应数据:
    • response_text: 文本分析与对话结果。
    • additional_recommendations: 商品推荐结果,包括商品标题和链接。
    • history: 多轮对话历史记录。

5. 系统交互
  • 使用 Django 的 csrf_exempt 装饰器处理跨域请求。
  • 通过 Axios 与前端对接,实时将文本分析结果与推荐商品反馈给用户,实现高效交互。

6. 设计亮点
  • 模块化实现:文本和图像特征提取独立封装,方便扩展与优化。
  • 高效爬取:结合 BeautifulSoup 和随机请求策略,减轻反爬压力。
  • 稳定性:日志记录与异常处理提高系统可靠性。

三、使用流程

打开软件,输入文字或者图片

点击开始分析,稍等片刻

即可看到软件给出的推荐商品的网站,同时也可以看到关键词

四、个人分工部分

​ 本人负责后端,主要完成了调用 KimiAPI 的接口的设计和编写,为系统提供与 KimiAPI 进行交互的能力。这个接口支持问题输入,并将用户的问题传递给 KimiAPI,从而实现与 KimiAPI 的对话功能。同时,接口会负责接收 KimiAPI 的响应结果,并将其返回给前端或其他调用方,确保数据格式正确、响应及时,满足业务需求。

​ 以下是调用kimiapi代码

from bs4 import BeautifulSoup
from openai import OpenAI
import re
import requests
import json
import settings
import os

# 初始化 OpenAI 客户端
client = OpenAI(
    api_key=settings.KIMI_API_KEY,
    base_url=settings.KIMI_MODEL_URL,
)


# 定义网页解析工具函数
def crawl_webpage_content(url: str) -> str:
    payload = {
        'api_key': settings.SCRAPE_API_KEY,
        'url': url,
        'follow_redirect': 'false'
    }
    response = requests.get('https://api.scraperapi.com/', params=payload)

    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')

        if url.startswith("https://www.xiaohongshu.com/"):
            span = soup.find('span', class_='note-text')
            content = span.get_text(strip=True) if span else "没有找到匹配的内容"

        elif url.startswith("https://www.dianping.com/"):
            content = [div.get_text(strip=True) for div in soup.find_all('div', class_='content-text')]

        else:
            content = "URL 不符合规定的解析条件。"

        return content
    else:
        return f"无法获取网页内容,状态码: {response.status_code}"


# 定义工具
tools = [
    {
        "type": "function",
        "function": {
            "name": "crawl_webpage_content",
            "description": """
                通过给定的网址获取网页内容。支持小红书和大众点评的链接。
                如果工具返回的结果为空或者是URL 不符合解析条件,请告知用户该网页不支持解析。
            """,
            "parameters": {
                "type": "object",
                "required": ["url"],
                "properties": {
                    "url": {
                        "type": "string",
                        "description": "需要解析内容的网址(URL)"
                    }
                }
            }
        }
    }
]

# 定义工具映射
tool_map = {
    "crawl_webpage_content": crawl_webpage_content
}

file_path = os.path.join(os.path.dirname(__file__), 'promt.txt')
with open(file_path, "r", encoding="utf-8") as f:
    prompt = f.read()

# 定义对话函数
def multi_turn_chat(query: str, history=None, reset=False):
    if reset or history is None:
        history = [
            {
                "role": "system",
                "content": (
                    "你是 Kimi,由 Moonshot AI 提供的人工智能助手,专注于推荐商品方面的知识。"
                    "请用简洁的语言提供有帮助的解答。确保回答准确、友好、易于理解。如果用户需要旅游建议,"
                    "请避免涉及恐怖主义、种族歧视、暴力等敏感话题,并确保回答内容安全、适当。"
                    f"{prompt}"
                )
            }
        ]

    url_pattern = r'(https://www\.xiaohongshu\.com/[^\s]+|https://www\.dianping\.com/[^\s]+)'
    match = re.search(url_pattern, query)

    if match:
        url = match.group(0)
        history.append({"role": "user", "content": query})

        # 调用模型以使用工具
        finish_reason = None
        while finish_reason is None or finish_reason == "tool_calls":
            response = client.chat.completions.create(
                model="moonshot-v1-128k",
                messages=history,
                temperature=0.3,
                tools=tools,
            )
            choice = response.choices[0]
            finish_reason = choice.finish_reason

            if finish_reason == "tool_calls":
                history.append(choice.message)
                for tool_call in choice.message.tool_calls:
                    tool_name = tool_call.function.name
                    tool_arguments = json.loads(tool_call.function.arguments)
                    tool_function = tool_map[tool_name]
                    tool_result = tool_function(tool_arguments["url"])

                    history.append({
                        "role": "tool",
                        "tool_call_id": tool_call.id,
                        "name": tool_name,
                        "content": json.dumps({"content": tool_result})
                    })

        return choice.message.content, history
    else:
        # 对于纯文本输入,直接发送到模型处理
        history.append({"role": "user", "content": query})
        response = client.chat.completions.create(
            model="moonshot-v1-128k",
            messages=history,
            temperature=0.3,
        )

        result = response.choices[0].message.content
        history.append({
            "role": "assistant",
            "content": result
        })
        return result, history

五、心得体会

在接手这个任务之初,我深入分析了业务需求,明确了接口的核心功能:
1.输入用户问题:通过后端接收用户的请求,并传递给 KimiAPI。
2.响应处理:接收 KimiAPI 的返回结果,确保数据格式正确、结构清晰,并返回给前端或其他调用方。
我在接口设计时,遵循了以下原则:
1.清晰简洁:设计了统一的 API 路由和规范化的输入输出数据结构,方便前端快速集成。
2.灵活可扩展:为将来接口扩展其他 API(比如其他 AI 服务)留出了冗余设计。
3.稳定高效:通过错误处理和超时重试机制,提升系统健壮性和可用性。
通过完成本次任务,我积累了宝贵的经验:
1.接口设计原则:简单、灵活、易扩展,符合业务发展需求。
2.技术应用:掌握了异步调用和错误处理的最佳实践,提升了接口性能与稳定性。
3.团队协作:与前端、业务方密切沟通,确保了接口开发与需求的高度契合。
未来,我会进一步优化接口的性能和健壮性,同时提升代码复用率,推动系统的高效迭代。

posted @ 2024-12-16 00:53  念影苑  阅读(6)  评论(0编辑  收藏  举报