Создание умного 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