将 json 数据转换为向量以获得更好的 langchain 聊天机器人结果

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

我正在为我的大学网站创建一个聊天机器人作为一个项目。 在过去的三天里,我一直在互联网上搜索如何将

Langchain
与 json 数据一起使用,以便我的聊天机器人速度很快。我想出了这个:

from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.agents import create_json_agent
from langchain.agents.agent_toolkits import JsonToolkit
from langchain.tools.json.tool import JsonSpec
import json
with open(r'...formation_initial.json','r') as f:
    data = json.load(f)
    f.close()
spec = JsonSpec(dict_=data,max_value_length = 4000)
toolkit = JsonToolkit(spec = spec)
agent = create_json_agent(llm=llm,toolkit=toolkit,verbose=True)
print(agent.run('quelle sont les modules de master intelligence artificielle et sciences de donnees semestre 1'))

它正在工作,并且给出了正确的答案,但唯一的问题是速度不快,因为它每次都必须探索 json 文件的每个级别。 经过进一步的研究,我发现为了获得所需的速度答案,我需要有一个矢量数据库,但是没有明确的方法将 json 转换为矢量数据库,特别是如果它是一个复杂的 json。 这是 json 文件的一个片段,它基本上代表了我大学中可以找到的外交官:

        {"DEUST": {
    "Analytique des donn\u00e9es": {
    "objectif": "La Licence Science et Techniques en analytique des donn\u00e9es permet aux \u00e9tudiants de doter de comp\u00e9tences en mati\u00e8re d'outils informatiques, destechniques et des m\u00e9thodes statistiques pour permettre d\u2019organiser, de synth\u00e9tiser et de traduire efficacement les donn\u00e9es m\u00e9tier d\u2019uneorganisation. L'\u00e9tudiant doit \u00eatre en mesure d'apporter un appui analytique \u00e0 la conduite d'exploration et \u00e0 l'analyse complexe de donn\u00e9es. ", 
    "COMPETENCES VISEES ET DEBOUCHES": "Masters en sciences de donn\u00e9es: fouille de donn\u00e9es, business analytiques, blockchain,Masters orient\u00e9s e-Technologies: e-Business, e-Administration et e-LogistiqueFormations d\u2019Ing\u00e9nieurs dans une \u00e9cole d\u2019ing\u00e9nieurs \u00e0 l\u2019issue de la deuxi\u00e8me ou de la troisi\u00e8me ann\u00e9e de licenceData scientistTechnicien sup\u00e9rieur en SGBD R : installation, configuration et administration des SGBDWebMaster et d\u00e9veloppeur de sites web dynamiquesInt\u00e9gration du monde du travail dans les entreprises et les bureaux d\u2019\u00e9tudes ", "coordinateur": {"nom": "Pr.BAIDA Ouafae", "email": "[email protected]"},
     "semesters": [
    {"Semestre 5": 
    [" Math\u00e9matiques pour la science des donn\u00e9es", " Structures des donn\u00e9es avanc\u00e9es et th\u00e9orie des graphes", " Fondamentaux des bases de donn\u00e9es", " Algorithmique avanc\u00e9e et programmation", " D\u00e9veloppement WEB", " D\u00e9veloppement personnel et intelligence \u00e9motionnelle (Soft skills)"]}, 

{"Semestre 6": 
    [" Analyse et fouille de donn\u00e9es", " Syst\u00e8mes et r\u00e9seaux", " Ing\u00e9nierie des donn\u00e9es ", " PFE"]}]}
python json nlp langchain large-language-model
1个回答
0
投票

首先,您可以使用

json
Document
格式化数据作为
LangChain
对象列表加载,如下所示:

import json
from langchain.schema import Document


def load_json(json_file):
    with open(json_file, "r", encoding="utf-8") as fh:
        return json.load(fh)


data_list = load_json('./path/to/json')
docs = [Document(page_content=item["content"],
                 metadata={"source": item["source"]})
        for item in data_list]

然后,您可以将

docs
转换并保存到矢量存储数据库中,例如
Chroma
,如下所示:

from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

embedding = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore_db = Chroma.from_documents(documents=docs,
                                       embedding=embedding,
                                       persist_directory="./db")
vectorstore_db.persist()

因此,您的文档存储在

./db
的矢量存储数据库中,您可以在其中快速地反复加载。请注意,这是一次性操作,您不需要在每次运行应用程序时转换文档并将它们保存在矢量存储数据库中。

此外,正如您可能注意到的,我使用

OpenAIEmbeddings()
作为嵌入模型,您可以使用您选择的任何其他嵌入模型。

我希望这就是您正在寻找的内容并且对您有用。

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