简陋的基于InternVL-1_8b的新闻推荐系统

总体流程

首先将模型部署到本地,其次分割新闻,将新闻向量化并放入Qdrant里。之后根据用户点击具体新闻
得到历史交互字符串,放到LLM里去生成用户画像,之后将用户画像放进qdrant里去寻找和他最相近的向量,返回其新闻内容信息。之后再利用大模型来选取最接近用户喜欢的内容推荐给用户。

部署模型

在这里插入图片描述

首先在本地部署使用该模型:

CUDA_VISIBLE_DEVICES=0 lmdeploy serve api_server /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --server-port 23333 --api-keys internlm2

如果不在可以下载:

from huggingface_hub import login, snapshot_download
import os

os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'

login(token=“your_access_token")

models = ["internlm/internlm2-chat-1_8b"]

for model in models:
    try:
        snapshot_download(repo_id=model,local_dir="langgpt/internlm2-chat-1_8b")
    except Exception as e:
        print(e)
        pass

创建自己的Qdrant服务器

由于internvl自己的模拟机内核不一样,无法安装docker。因此本文直接创建Qdrant Cloud服务器:
如何创建就不展示了,只需要把下面URL和api_Key换成你的就好了,main函数测试你远程服务器是否链接。


from loguru import logger
from qdrant_client import QdrantClient
from qdrant_client.http.models import Distance, VectorParams, Batch
from qdrant_client.http.exceptions import UnexpectedResponse  # 捕获错误信息
import inspect
from qdrant_client.http import models
from config import QDRANT_HOST, QDRANT_PORT, QDRANT_EMBEDDING_DIMS


class Qdrant:
    def __init__(self):
        self.client = QdrantClient(
            url="********",  # Qdrant Cloud 实例的 URL
            api_key="*************" , # 如果启用了 API 密钥认证
            # host=QDRANT_HOST,
            # port=QDRANT_PORT
            )  # 创建客户端实例
        self.size = QDRANT_EMBEDDING_DIMS  # openai embedding 维度 = 1536

    def get_points_count(self, collection_name):
        """
        先检查集合是否存在。
        - 如果集合存在,返回该集合的 points_count (集合中确切的points_count)
        - 如果集合不存在,创建集合。
            - 创建集合成功,则返回 points_count (0: 刚创建完points_count就是0)
            - 创建集合失败,则返回 points_count (-1: 创建失败了,定义points_count为-1)

        Returns:
            points_count

        Raises:
            UnexpectedResponse: 如果在获取集合信息时发生意外的响应。
            ValueError: Collection test_collection not found
        """
        try:
            collection_info = self.get_collection(collection_name)
        except (UnexpectedResponse, ValueError) as e:  # 集合不存在,创建新的集合
            if self.create_collection(collection_name):
                logger.success(
                    f"创建集合成功 | collection_name: {collection_name} points_count: 0")
                return 0
            else:
                logger.error(
                    f"创建集合失败 | collection_name: {collection_name} 错误信息:{e}")
                return -1
        except Exception as e:
            logger.error(
                f"获取集合信息时发生错误 | collection_name: {collection_name} 错误信息:{e}")
            return -1  # 返回错误码或其他适当的值
        else:
            points_count = collection_info.points_count
            logger.success(
                f"库里已有该集合 | collection_name: {collection_name} points_count:{points_count}")
            return points_count

    def list_all_collection_names(self):
        """
        CollectionsResponse类型举例:
        CollectionsResponse(collections=[
            CollectionDescription(name='GreedyAIEmployeeHandbook'),
            CollectionDescription(name='python')
        ])
        CollectionsResponse(collections=[])
        """
        CollectionsResponse = self.client.get_collections()
        collection_names = [
            CollectionDescription.name for CollectionDescription in CollectionsResponse.collections]
        return collection_names

    # 获取集合信息
    def get_collection(self, collection_name):
        """
        获取集合信息。

        Args:
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值