Spaces:
Runtime error
Runtime error
| from langchain_core.documents import Document | |
| from langchain_core.messages import HumanMessage, AIMessage | |
| from typing import Dict, List | |
| from langchain_chroma import Chroma | |
| from langchain_google_genai import GoogleGenerativeAIEmbeddings | |
| import chromadb | |
| import os | |
| from langchain.tools import Tool | |
| from langgraph.prebuilt import create_react_agent | |
| from langchain.chat_models import init_chat_model | |
| # 🤖 Web-Agent mit Gemini 2.0 Flash | |
| gemini_model = init_chat_model("gemini-2.0-flash", model_provider="google_genai") | |
| persistent_client = chromadb.PersistentClient(path="chroma/") | |
| embeddings = GoogleGenerativeAIEmbeddings(model="models/text-embedding-004", google_api_key=os.getenv("GOOGLE_API_KEY")) | |
| vector_store = Chroma( | |
| client=persistent_client, | |
| collection_name="big_tech_financial_reports", | |
| embedding_function=embeddings, | |
| ) | |
| # Функция: отвечает на финансовый запрос с цитированием источников | |
| def answer_financial_query(query: str) -> str: | |
| # Используем глобальные vector_store и llm | |
| global vector_store, gemini_model | |
| query_embedding = embeddings.embed_query(query) | |
| retrieved_docs = vector_store.similarity_search_by_vector(query_embedding, k=5) | |
| context = "\n\n".join([ | |
| f"[{doc.metadata['company']}, {doc.metadata['year']}, {doc.metadata['type']}, {doc.metadata['source']}]:\n{doc.page_content}" | |
| for doc in retrieved_docs | |
| ]) | |
| prompt = f""" | |
| You are a financial assistant. Based only on the following financial report excerpts, answer the user's query. | |
| Use a clear and concise tone and cite the company, year, document type, and source for any fact. | |
| User Query: {query} | |
| Documents: | |
| {context} | |
| Answer: | |
| """ | |
| response = gemini_model([HumanMessage(content=prompt)]) | |
| return response.content | |
| financial_rag_tool = Tool( | |
| name="analyze_financial_report", | |
| func=answer_financial_query, | |
| description=( | |
| "Beantworte Fragen zu Finanzberichten, Bilanzen, Quartalszahlen und Jahresabschlüssen " | |
| "von Apple, Microsoft, Google, NVIDIA und Meta in den letzten fünf Jahren. " | |
| "Die Antworten enthalten genaue Quellenangaben zum Bericht." | |
| ) | |
| ) | |
| financial_rag_agent = create_react_agent( | |
| model=gemini_model, | |
| tools=[financial_rag_tool], | |
| name="financial_rag_agent", | |
| prompt=( | |
| "Du bist ein spezialisierter Finanzassistent.\n" | |
| "Du beantwortest ausschließlich Fragen zu den Finanzberichten von Apple, Microsoft, Google, NVIDIA und Meta.\n" | |
| "Nutze ausschließlich das Tool 'analyze_financial_report', um Informationen aus diesen Quellen zu beziehen.\n" | |
| "Gib stets eine präzise Antwort mit Angabe der Quelle (Unternehmen, Jahr, Berichtstyp, Dateiname)." | |
| ) | |
| ) | |