Попытка создать цепочку LangChain в сочетании с локальной системой чат-ботов.
По сути, я создал автономную систему чата с искусственным интеллектом и сейчас нахожусь в процессе привязки этой системы чата к LangChain. До сих пор я добился хороших успехов, но столкнулся с проблемой, когда дело касалось цепей.
# AI Server
from flask import Flask, request, jsonify
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
import torch
#import os
#os.environ["CUDA_VISIBLE_DEVICES"]="1,2"
app = Flask(__name__)
model_id = "h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
trust_remote_code=True,
device_map={"": 0},
)
pipeline = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
)
@app.route('/generate', methods=['POST'])
def generate():
content = request.json
inp = content.get("text", "")
sequences = pipeline(
inp,
max_length=1024,
do_sample=True,
top_k=10,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
)
decoded = sequences[0]['generated_text']
print("===================================================")
print(f"Input: {inp}")
print(f"Output: {decoded}")
print("===================================================")
return jsonify({'generated_text': decoded})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000) # Set the host to '0.0.0.0' to make it accessible from your local network
# AI Client
import requests
import json
import colorama
class AIChat():
SERVER_IP = "127.0.0.1" # replace with local or public IP of your server.
URL = f"http://{SERVER_IP}:5000/generate"
USERTOKEN = "USER:\n"
ENDTOKEN = "<|endoftext|>"
ASSISTANTTOKEN = "\nASSISTANT:\n"
history = ""
def __call__(self, text):
context = self.history + self.USERTOKEN + text + self.ASSISTANTTOKEN
output = self.prompt(context)
history = output+'\n'
just_latest_asst_output = output.split(context)[1].split(self.USERTOKEN)[0]
return just_latest_asst_output
def prompt(self, inp):
data = {"text": inp}
headers = {'Content-type': 'application/json'}
response = requests.post(self.URL, data=json.dumps(data), headers=headers)
if response.status_code == 200:
return response.json()["generated_text"]
else:
return "Error:", response.status_code
# Tying code together with Langchain
import os
from langchain.llms import HuggingFacePipeline
from langchain.llms import HuggingFaceHub
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.prompts import PromptTemplate
from langchain import LLMChain
from ai_client import AIChat
# Create Chat Object
llm = AIChat()
# Print Text
print("=============================================== Header 1")
text = "List 5 vacation destinations for someone who likes to eat pasta?"
print(llm(text))
print()
# Prompt Template
print("=============================================== Header 2")
prompt = PromptTemplate(
input_variables=["food"],
template="List 5 vacation destinations for someone who likes to eat {food}?",
)
print(prompt.format(food="dessert"))
print(llm(prompt.format(food="dessert")))
print()
# Chaining
print("=============================================== Header 3")
prompt = PromptTemplate(
input_variables=["food"],
template="List 5 vacation destinations for someone who likes to eat {food}?",
)
chain = LLMChain(llm=llm, prompt=prompt)
print(chain)
print(chain.run("fruit"))
print()
Я надеялся, что мой LLM будет работать с LLMChain LLM. К сожалению, когда я добрался до «Заголовка 3», я получил следующую ошибку:
=============================================== Header 3
Traceback (most recent call last):
File "/home/ehall/Desktop/AI_Project/Assistant/example1.py", line 47, in <module>
chain = LLMChain(llm=llm, prompt=prompt)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pydantic/main.py", line 341, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for LLMChain
llm
value is not a valid dict (type=type_error.dict)
[ehall@EndSys Assistant]$
Я попытался отследить проблему, по сути, кажется, что моя переменная LLM должна быть dict, но после просмотра официальной документации, видео и, возможно, альтернативных методов, я все больше запутываюсь в том, как решить эту проблему, чем изначально.
Буду признателен, если кто-нибудь сможет помочь мне решить эту проблему.