__call__ не работает корректно с langchain LLMChain

При выполнении вне объекта класса код работает правильно, однако, если я передам ту же функциональность в новый класс, он не сможет обеспечить тот же результат.

Это работает, как и ожидалось:

      from langchain.llms import GPT4All
from langchain import PromptTemplate,  LLMChain

MODEL_PATH="C:/Users/nous-hermes-13b.ggmlv3.q4_0.bin"
template ="""
list the {n} most similar words to the word: {word} ,do not include the word itself.
"""
prompt = PromptTemplate(template=template, input_variables=["n","word"])

#load the llm
gpt4all = GPT4All(model=MODEL_PATH, n_threads=12)

# create the llm chain
llm_chain = LLMChain(prompt=prompt, llm=gpt4all,verbose=False)

# Run
llm_chain.run({"word":"Interesting","n":10})

дает вывод:

      '1. Fascinating, 2. Intriguing, 3. Engaging, 4. Compelling, 5. Enthralling, 6. Riveting, 7. Alluring, 8. Gripping, 9. Catchy, 10. Exciting'

Но когда я использую тот же код и помещаю его в класс, цепочка как функция:

      from langchain.llms import GPT4All
from langchain import PromptTemplate,  LLMChain

class NousHermes:
    def __init__(self, **kwargs):

        self.MODEL_PATH= "C:/Users/weights_of_model.bin"

        for key, value in kwargs.items():
            setattr(self, key, value)
   

        self.template ="""
        list the {n} most similar words to the word: {word} ,do not include the word itself.
        """
        self.prompt = PromptTemplate(template=self.template, input_variables=["n","word"])

        #load the llm
        self.gpt4all = GPT4All(model=self.MODEL_PATH, n_threads=12)

        # create the llm chain
        self.llm_chain = LLMChain(prompt=self.prompt, llm=self.gpt4all,verbose=False)  
    
    def __call__(self,word,n):
        result=self.llm_chain.run({"word":word,"n":n})
        return result

и запустите__call__

      noushermes=NousHermes(MODEL_PATH="C:/Users/nous-hermes-13b.ggmlv3.q4_0.bin")
noushermes("Interesting",10)

у меня другой вывод

      '\n    """\n    \n    from nltk.corpus import wordnet\n    from nltk.stem import WordNetLemmatizer\n    \n    lemmatizer = WordNetLemmatizer()\n    \n    interesting_synonyms = []\n    for syn in wordnet.SYNONYMS(interesting): \n        if syn != \'Interesting\':\n            interesting_synonyms.append(lemmatizer.lemmatize(syn, get_wordnet_pos(syn)))\n    \n    most_similar = max(set([len(wl.words()) for wl in wordnet.WordNetLemmatizer().lemmatize(\'Interesting\', get_wordnet_pos(interesting))]), key=lambda x:x[1])[0] \n    \n    return interesting_synonyms[:most_similar]'
      specs:
python=3.11.4
langchain==0.0.239
matplotlib==3.7.2
networkx==3.1
numpy==1.25.1
pandas==2.0.3
pyvis==0.3.2

Такое ощущение, что текст взят каким-то образом из пакета nltk. Я не устанавливал nltk отдельно в этой среде. Однако у меня есть другая среда, в которой я установил nltk и лемматизировал слова в качестве этапа предварительной обработки llm, это меня смущает, поскольку я не обучал модель дальше и не устанавливал nltk в среду. . И на самом деле этого не должно происходить, или что я упускаю?

Как я могу обойти это? , откуда это? Спасибо

0 ответов

Другие вопросы по тегам