<НА ГЛАВНУЮ

Создание умного AI-ассистента с LangChain, Gemini 2.0 и Jina Search для ответов в реальном времени

Узнайте, как создать интеллектуального AI-ассистента с использованием LangChain, Gemini 2.0 и Jina Search для получения актуальных и проверенных ответов на запросы.

Интеграция мощных AI-инструментов для получения информации в реальном времени

В этом руководстве показано, как создать интеллектуального AI-ассистента, объединив фреймворк LangChain, модель Gemini 2.0 Flash и инструмент Jina Search. Ассистент способен предоставлять точную, актуальную информацию, используя большую языковую модель и возможности веб-поиска.

Настройка окружения и API-ключей

Для начала установим необходимые Python-библиотеки, включая LangChain, инструменты сообщества и интеграцию с моделями Google Gemini:

%pip install --quiet -U "langchain-community>=0.2.16" langchain langchain-google-genai

Импортируем модули getpass, os, json и typing для безопасного ввода API-ключей, управления переменными окружения, обработки JSON и типизации.

Если API-ключи для Jina и Google Gemini не заданы, они будут запрошены у пользователя с помощью безопасного ввода:

if not os.environ.get("JINA_API_KEY"):
    os.environ["JINA_API_KEY"] = getpass.getpass("Введите ваш Jina API ключ: ")
 
if not os.environ.get("GOOGLE_API_KEY"):
    os.environ["GOOGLE_API_KEY"] = getpass.getpass("Введите ваш Google/Gemini API ключ: ")

Инициализация инструментов и моделей

Инициализируем инструмент JinaSearch и модель Gemini 2.0 Flash для возможности веб-поиска и генерации ответов:

search_tool = JinaSearch()
 
 
gemini_model = ChatGoogleGenerativeAI(
    model="gemini-2.0-flash",
    temperature=0.1,
    convert_system_message_to_human=True  
)

Эти компоненты позволяют ассистенту динамически получать свежую информацию и создавать ответы, похожие на человеческие.

Определение шаблона подсказок и привязка инструментов

Создаем структурированный шаблон подсказки, который направляет поведение AI, указывая использовать поисковый инструмент для актуальных или специфичных запросов и всегда указывать источники:

detailed_prompt = ChatPromptTemplate.from_messages([
    ("system", """Вы — интеллектуальный ассистент с доступом к веб-поиску.
    При вопросах пользователей используйте Jina Search для поиска актуальной информации.
   
    Инструкции:
    1. Если вопрос требует свежей или специфичной информации, используйте поисковый инструмент
    2. Давайте исчерпывающие ответы с учетом результатов поиска
    3. Всегда указывайте источники при использовании результатов поиска
    4. Будьте полезны и информативны"""),
    ("human", "{user_input}"),
    ("placeholder", "{messages}"),
])
 
 
 
# Привязываем поисковый инструмент к модели Gemini
 
gemini_with_tools = gemini_model.bind_tools([search_tool])
 
main_chain = detailed_prompt | gemini_with_tools

Обработка запросов с динамическим вызовом инструментов

Определяем улучшенную цепочку, которая обрабатывает ввод пользователя, определяет необходимость веб-поиска, выполняет поисковые запросы и интегрирует результаты в ответы AI:

@chain
def enhanced_search_chain(user_input: str, config: RunnableConfig):
    print(f"\n Обработка запроса: '{user_input}'")
   
    input_data = {"user_input": user_input}
   
    print(" Отправка в Gemini...")
    ai_response = main_chain.invoke(input_data, config=config)
   
    if ai_response.tool_calls:
        print(f"  AI запросил {len(ai_response.tool_calls)} вызов(ов) инструментов")
       
        tool_messages = []
        for i, tool_call in enumerate(ai_response.tool_calls):
            print(f"    Выполняется поиск {i+1}: {tool_call['args']['query']}")
           
            tool_result = search_tool.invoke(tool_call)
           
            tool_msg = ToolMessage(
                content=tool_result,
                tool_call_id=tool_call['id']
            )
            tool_messages.append(tool_msg)
       
        print(" Получение окончательного ответа с результатами поиска...")
        final_input = {
            **input_data,
            "messages": [ai_response] + tool_messages
        }
        final_response = main_chain.invoke(final_input, config=config)
       
        return final_response
    else:
        print("  Вызовы инструментов не требуются")
        return ai_response

Тестирование и интерактивное использование

Включена функция тестирования, которая запускает примеры запросов для проверки правильной работы ассистента и использования поискового инструмента:

def test_search_chain():
    test_queries = [
        "что такое langgraph",
        "последние достижения в ИИ за 2024 год",
        "как LangChain работает с разными LLM"
    ]
   
    for query in test_queries:
        response = enhanced_search_chain.invoke(query)
        print(f" Ответ: {response.content[:300]}...")

Интерактивный режим позволяет пользователям задавать вопросы в реальном времени и получать ответы AI с поддержкой поиска. Цикл продолжается, пока пользователь не введет команду выхода.

Расширение возможностей AI-ассистента

Данная реализация демонстрирует гибридный AI-ассистент, который дополняет статические знания LLM информацией из интернета в реальном времени, предоставляя точные, актуальные и ссылающиеся ответы. Это основа для создания более сложных приложений с дополнительными инструментами, настройкой подсказок и развертыванием в различных средах, таких как API или веб-приложения.

🇬🇧

Switch Language

Read this article in English

Switch to English