70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
import sys
|
|
from langchain_openai import ChatOpenAI
|
|
from langchain.prompts import PromptTemplate
|
|
from langchain.chains import LLMChain
|
|
|
|
# Конфигурация модели OpenAI через LangChain
|
|
llm = ChatOpenAI(
|
|
model_name="gpt-3.5-turbo",
|
|
temperature=0.7,
|
|
)
|
|
|
|
# Шаблон запроса к модели: сохраняем историю диалога в переменной `history`
|
|
prompt_template = PromptTemplate(
|
|
input_variables=["history", "user_input"],
|
|
template="""
|
|
Ты играешь роль ведущего текстовой приключенческой игры.
|
|
Тебе дано текущее состояние истории и последнее сообщение игрока.
|
|
Ответь как будто продолжаешь сюжет, добавляя новые события, описания и диалоги.
|
|
|
|
История:
|
|
{history}
|
|
|
|
Игрок: {user_input}
|
|
|
|
Ответ ведущего:
|
|
""",
|
|
)
|
|
|
|
# Создаём цепочку LangChain
|
|
chain = LLMChain(llm=llm, prompt=prompt_template)
|
|
|
|
def main():
|
|
"""
|
|
Основной цикл игры. Пользователь вводит команды,
|
|
которые передаются модели через LangChain.
|
|
Команда 'exit' завершает игру.
|
|
"""
|
|
history = ""
|
|
print("Добро пожаловать в текстовую приключенческую игру!")
|
|
print("Введите свои действия (или 'exit', чтобы выйти).")
|
|
while True:
|
|
try:
|
|
user_input = input("\nВы: ").strip()
|
|
except EOFError:
|
|
# Обработка Ctrl-D
|
|
print("\nЗавершение игры.")
|
|
break
|
|
|
|
if not user_input:
|
|
continue
|
|
|
|
if user_input.lower() == "exit":
|
|
print("Спасибо за игру! До свидания.")
|
|
break
|
|
|
|
# Формируем запрос к модели и получаем ответ
|
|
try:
|
|
response = chain.run(history=history, user_input=user_input)
|
|
except Exception as e:
|
|
print(f"Ошибка при обращении к модели: {e}")
|
|
continue
|
|
|
|
# Выводим ответ ведущего
|
|
print(f"\nВедущий: {response.strip()}")
|
|
|
|
# Обновляем историю для следующего шага
|
|
history += f"\nИгрок: {user_input}\nВедущий: {response}"
|
|
|
|
if __name__ == "__main__":
|
|
main() |