Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions backend/graph/giga_agent/agents/lean_canvas/__init__.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import os

from langchain_core.tools import tool
from langchain_core.output_parsers import StrOutputParser
from langchain.prompts import ChatPromptTemplate
from langgraph.types import interrupt
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables.config import RunnableConfig
from langchain_core.tools import tool
from langgraph.graph import END, START, StateGraph
from langgraph.graph.ui import push_ui_message
from langgraph.types import interrupt
from langgraph_sdk import get_client
from typing_extensions import TypedDict, Annotated
from typing_extensions import Annotated, TypedDict

from giga_agent.utils.lang import LANG
from giga_agent.utils.llm import load_llm
Expand Down Expand Up @@ -153,11 +153,11 @@ async def unfair_advantage(state: LeanGraphState, config: RunnableConfig):
}


from typing_extensions import Literal
from langgraph.types import Command
from pydantic import BaseModel, Field
from langchain_core.output_parsers import PydanticOutputParser
from langchain_tavily import TavilySearch
from langgraph.types import Command
from pydantic import BaseModel, Field
from typing_extensions import Literal


class CompetitorsAnalysisResult(BaseModel):
Expand Down
34 changes: 23 additions & 11 deletions backend/graph/giga_agent/agents/researcher/graph.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
import asyncio
import os
from typing import Annotated, Literal

from deepagents import create_deep_agent
from deepagents import async_create_deep_agent
from langchain_core.tools import tool
from langchain_tavily import TavilySearch
from langgraph.graph.ui import push_ui_message
from langgraph.prebuilt import InjectedState
from langgraph_sdk import get_client
from langchain_tavily import TavilySearch

from giga_agent.utils.llm import load_llm
from giga_agent.utils.messages import filter_tool_calls

llm = load_llm().with_config(tags=["nostream"])
llm = load_llm().bind(timeout=600).with_config(tags=["nostream"])


async def internet_search(
query: str,
max_results: int = 5,
max_results: int = 10,
topic: Literal["general", "news", "finance"] = "general",
include_raw_content: bool = False,
):
Expand All @@ -33,6 +34,7 @@ async def internet_search(
sub_research_prompt = """Вы — преданный своему делу исследователь. Ваша задача — проводить исследования, основанные на вопросах пользователей.

Проведите тщательное исследование и дайте пользователю подробный ответ на его вопрос.
Используй поиск, чтобы найти информацию и обязательно указывай источники со ссылками, найденными с использованием поиска!

Пользователю будет передан только ваш ОКОНЧАТЕЛЬНЫЙ ответ. Он не будет знать ничего, кроме вашего заключительного сообщения, поэтому ваш заключительный отчёт должен быть вашим заключительным сообщением!"""

Expand Down Expand Up @@ -60,7 +62,8 @@ async def internet_search(
— Убедитесь, что отчёт охватывает ключевые области отрасли, обеспечивает общее понимание и не упускает важные моменты.
— Убедитесь, что отчёт глубоко анализирует причины, последствия и тенденции, предоставляя ценную информацию.
— Убедитесь, что отчёт точно соответствует теме исследования и отвечает на вопросы напрямую.
— Убедитесь, что отчёт имеет четкую структуру, написан понятным языком и легко читается."""
— Убедитесь, что отчёт имеет четкую структуру, написан понятным языком и легко читается.
- Убедитесь, что отчёт имеет источники в соответствующем разделе со ссылками, найденными с использованием поиска!"""

critique_sub_agent = {
"name": "critique-agent",
Expand All @@ -77,6 +80,7 @@ async def internet_search(
Используйте research-agent для проведения глубокого исследования. Он предоставит подробные ответы на ваши вопросы/темы.

Когда вы сочтёте, что у вас достаточно информации для написания финального отчёта, запишите её в файл `final_report.md`.
При написании финального отчёта указывайте источники со ссылками, найденными с использованием поиска!

Вы можете вызвать critique-agent, чтобы получить критику финального отчёта. После этого (при необходимости) вы можете продолжить исследование и отредактировать файл `final_report.md`. Вы можете делать это столько раз, сколько захотите, пока не будете удовлетворены результатом.

Expand Down Expand Up @@ -137,6 +141,8 @@ async def internet_search(

Оформите отчёт в понятной разметке Markdown с правильной структурой и включите ссылки на источники, где это необходимо.

Обязательно указывай в отчёте источники со ссылками, найденными с использованием поиска!

<Правила цитирования>
- Присвойте каждому уникальному URL-адресу отдельный номер ссылки в тексте.
- Заканчивайте текст тегом ###. Источники перечисляются с соответствующими номерами.
Expand All @@ -157,7 +163,7 @@ async def internet_search(
"""

# Create the agent
agent = create_deep_agent(
agent = async_create_deep_agent(
tools=[internet_search],
instructions=research_instructions,
subagents=[critique_sub_agent, research_sub_agent],
Expand Down Expand Up @@ -215,19 +221,25 @@ async def researcher_agent(
"node": list(chunk.data.keys())[0],
},
)

final_report = "Отчет не был создан. Нужно попробовать еще раз."
if "files" in result_state:
if "final_report.md" in result_state["files"]:
final_report = result_state["files"]["final_report.md"]
else:
final_report = result_state["messages"][-1].content
else:
final_report = result_state["messages"][-1].content

return {
"text": final_report,
"message": f'В результате выполнения был получен следующий отчёт: {final_report}. Покажи его пользователю.',
"message": f'В результате выполнения был получен следующий отчёт: {final_report}. Покажи его пользователю целиком, не сокращая. Обязательно возьми из отчета источники и добавь их в свой ответ! Оставляй формат источников [Title](URL). Если отчёта нет, попробуй вызвать агента ещё раз.',
}


async def chat_with_agent(message):
async for s in agent.astream({"messages": [{"role": "user", "content": message}]}):
print(s)

if __name__ == "__main__":
message = "что такое gigachain"
for s in agent.stream({"messages": [{"role": "user", "content": message}]}):
print(s)
# message = "чем LangChain отличается от GigaChain"
asyncio.run(chat_with_agent(message))
2 changes: 1 addition & 1 deletion backend/graph/giga_agent/prompts/main_prompt.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@
- Внося изменения, думай о контексте использования кода, чтобы твои правки оставались совместимыми с остальной частью проекта и не нарушали стандарты программирования.
- Не проси у пользователя больше информации, чем необходимо. Используй имеющиеся инструменты, чтобы эффективно и точно решить задачу.
- Тебе запрещено начинать сообщения со слов “Отлично”, “Точно”, “Ладно”, “Конечно”. И не нужно вести беседу в привычном разговорном стиле. Говори кратко и по существу, например: “Я поправил ошибку”, без “Отлично, я поправил ошибку”.
- При формирования ответа, старайся прикладывать ссылки на то откуда ты взял информацию к своим ответам
- При формирования ответа, старайся прикладывать ссылки на то откуда ты взял информацию к своим ответам. Если инструмент вернул тебе ссылки, укажи их и в ответе тоже!

====

Expand Down
3 changes: 2 additions & 1 deletion backend/graph/giga_agent/utils/llm.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import os
from typing import Dict, Optional
from langchain_gigachat import GigaChat, GigaChatEmbeddings

from langchain.chat_models import init_chat_model
from langchain.embeddings import init_embeddings
from langchain_gigachat import GigaChat, GigaChatEmbeddings

from giga_agent.utils.env import load_project_env

Expand Down