使用 LLM 进行对话式产品搜索

问题描述 投票:0回答:1

我们想要的是,当用户提出某种要求时,在我们的数据库中搜索数百万数据的产品,显示结果,然后要求用户提供更多详细信息,然后显示更多相关产品等。聊天延续只是其中的一部分它

有什么办法可以让GPT看数据而不需要太多成本消耗 或者我们应该使用向量进行语义搜索?

database search large-language-model chatgpt-api vector-search
1个回答
0
投票

为了节省成本,您始终可以将 HuggingFace 视为 OpenAI 的替代品。我使用 NASA 宇航员数据作为知识库构建了一个会话聊天机器人。您也许可以对您的产品数据执行相同的操作。

是的,我绝对会使用矢量存储来支持本地化上下文。在下面的示例中,我使用 Astra DB 作为矢量数据库来存储上下文。

现在,由于您还没有发布任何代码,我将做出一些假设。本质上,您可以使用

OpenAIEmbeddings
并指定一个开源模型,如
all-MiniLM-L6-v2
,而不是使用 HuggingFaceEmbeddings。然后,如果您使用 LangChain,您可以在向量存储定义中指定
embeddings
模型,并像使用 OpenAI 一样构建您的
chain

llm = HuggingFaceHub(
    repo_id="HuggingFaceH4/zephyr-7b-beta",
    task="text-generation",
    model_kwargs={
        "max_new_tokens": 512,
        "top_k": 30,
        "temperature": 0.01,
        "repetition_penalty": 1.03,
    },
)
# init LLM and embeddings model
embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-MiniLM-L6-v2",
    model_kwargs={'device': 'cpu'},
    encode_kwargs={'normalize_embeddings': False},
)

astronaut_prompt = ChatPromptTemplate.from_template(astronaut_template)
vectorstore = AstraDBVectorStore(
    embedding=embeddings,
    collection_name=TABLE_NAME,
    api_endpoint=ASTRA_DB_API_ENDPOINT,
    token=ASTRA_DB_TOKEN,
    namespace=ASTRA_DB_KEYSPACE,
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | astronaut_prompt
    | llm
    | StrOutputParser()
)

userInput = "which three astronauts flew on Apollo 11?"
print(chain.invoke(userInput))

有时您可能会受到 HuggingFace 的速率限制,但您可以使用免费帐户中的 API 密钥来缓解这种情况。请查看我的 astronautRAG Git 存储库以了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.