__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 в среду. . И на самом деле этого не должно происходить, или что я упускаю?
Как я могу обойти это? , откуда это? Спасибо