Was wäre, wenn Sie Warren Buffett nach einer Aktie, Markttrends oder langfristigen Investitionen fragen könnten, wann immer Sie möchten? Mit Berichten, die darauf hindeuten, dass er bald als CEO von Berkshire Hathaway zurücktreten könnte, ist es ein guter Second, über den dauerhaften Wert seiner Prinzipien nachzudenken. Seit Jahrzehnten ist Buffett eine stetige Stimme in der Investition, bekannt für seinen Fokus auf Wert, Geduld und Verständnis, was Sie besitzen. In diesem Leitfaden werde ich Ihnen zeigen Agent Dies bewertet Unternehmen über sein Objektiv und interagiert mithilfe von Echtzeit-Aktiendaten und -nachrichten. Das Ziel ist es nicht, Buffett neu zu erstellen, sondern einen Chatbot aufzubauen, der Ihnen hilft, so zu denken, wie er könnte.

Projektziel und Architektur

Unser Ziel ist klar: Erstellen Sie einen Warren Buffett-Agenten, der wie er interagiert, er sollte die Investitionsphilosophie diskutieren, Aktien anhand seiner Kernprinzipien analysieren und Echtzeitdaten nutzen.

Warren Buffett Agent

Die Hauptkomponenten sind:

  1. Sprachmodell (OpenAI): Bietet die Konversationsfähigkeit und die Persönlichkeit.
  2. Langchain: Fungiert als Framework und verbindet das Sprachmodell, die Instruments und das Gedächtnis.
  3. Aktien -Daten -API (Yahoo Finance): Ruft aktuelle Aktienkurse und grundlegende Daten ab.
  4. Nachrichten -API (Serpapi): Ruft die jüngsten Nachrichtenüberschriften für den Kontext ab.
  5. Straffung: Erstellt die webbasierte Chat-Oberfläche für die Benutzerinteraktion.

Wenn dies Sie zum ersten Mal aufbauen, können Sie unseren detaillierten Leitfaden – Wie baue ich einen KI -Agenten von Grund auf?

Schritt 1: Bereiten Sie Ihre Umgebung vor

Stellen Sie vor dem Codieren sicher, dass Ihr Pc fertig ist.

  • Python installieren: Sie benötigen Python Model 3.8 oder neuer.
  • Holen Sie sich API -Schlüssel: Erhalten Sie einen API -Schlüssel von OpenAI für Sprachfunktionen. Holen Sie sich einen weiteren Schlüssel von Serpapi für Nachrichtensuche. Halten Sie diese Schlüssel sicher.
  • Bibliotheken installieren: Öffnen Sie das Terminal oder die Eingabeaufforderung Ihres Computer systems. Führen Sie den folgenden Befehl aus, um die erforderlichen zu installieren
  • Python -Pakete:
pip set up langchain langchain-openai langchain-community openai yfinance google-search-results streamlit python-dotenv streamlit-chat
  • Create .Env -Datei (non-compulsory): Im Verzeichnis, in dem Sie Ihr Skript speichern, können Sie eine Datei namens .Env erstellen. Fügen Sie Ihre Schlüssel wie diese hinzu:
OPENAI_API_KEY="sk-YOUR_KEY_HERE"

SERPAPI_API_KEY="YOUR_KEY_HERE"

Schritt 2: Starten Sie das Skript und importieren Sie Bibliotheken

Erstellen Sie eine neue Python -Datei (z. B. buffett_chatbot.py). Beginnen Sie mit dem Importieren der erforderlichen Module oben:

import streamlit as st

import os

import json

import yfinance as yf

from dotenv import load_dotenv

# LangChain elements

from langchain_openai import ChatOpenAI

from langchain.brokers import AgentExecutor, create_openai_functions_agent

from langchain.reminiscence import ConversationBufferMemory

from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder

from langchain_core.messages import SystemMessage # No want for HumanMessage/AIMessage right here anymore

from langchain.instruments import Software

from langchain_community.utilities import SerpAPIWrapper

# --- Load .env file (as a fallback) ---

load_dotenv()

Diese Importe bringen Strom für die Schnittstelle, das Betriebssystem für Umgebungsvariablen, JSON für die Datenbearbeitung, YFInance für Aktien, DOTENV für die Schlüsselbelastung und verschiedene Langchain -Komponenten für die Agentenlogik ein.

Schritt 3: Richten Sie die optimistische Schnittstelle ein

Konfigurieren Sie das grundlegende Anwendungslayout und erstellen Sie die Seitenleisteneingänge für API -Tasten:

# --- Web page Config ---

st.set_page_config(page_title="Warren Buffett Bot", structure="extensive")

st.title("Warren Buffett Funding Chatbot 📈")

st.caption("Ask me about investing, shares, or market knowledge - within the model of Warren Buffett.")

# --- API Key Enter in Sidebar ---

st.sidebar.header("API Configuration")

# Initialize session state for keys if they do not exist

if 'openai_api_key' not in st.session_state:

   st.session_state.openai_api_key = ""

if 'serpapi_api_key' not in st.session_state:

   st.session_state.serpapi_api_key = ""

# Create textual content enter fields for keys, storing values in session state

input_openai_key = st.sidebar.text_input(

   "OpenAI API Key", kind="password", worth=st.session_state.openai_api_key, key="openai_input"

)

input_serpapi_key = st.sidebar.text_input(

   "SerpAPI API Key", kind="password", worth=st.session_state.serpapi_key, key="serpapi_input"

)

# Replace session state with present enter values

st.session_state.openai_api_key = input_openai_key

st.session_state.serpapi_key = input_serpapi_key

# Decide which keys are energetic (consumer enter takes precedence)

active_openai_key = st.session_state.openai_api_key or os.getenv("OPENAI_API_KEY")

active_serpapi_key = st.session_state.serpapi_api_key or os.getenv("SERPAPI_API_KEY")

# --- Show API Standing ---

st.sidebar.header("API Standing")

# (Add the if/else blocks utilizing st.sidebar.success/error/warning as within the offered code)

if active_openai_key: st.sidebar.success(...) else: st.sidebar.error(...)

# Verify and show SerpAPI standing equally

Dieser Code legt den visuellen Teil der Streamlit -Chatbot -Anwendung ein. Es verwendet St.Session_State, um sich an die vom Benutzer während ihrer Sitzung eingegebenen API -Schlüssel zu erinnern.

Schritt 4: Definieren Sie die Kerneinstellungen und die Buffett -Persona

Stellen Sie Konstanten für das KI -Modell fest und definieren Sie die detaillierten Anweisungen (Systemaufforderung), die die Persönlichkeit des Chatbot formen:

# --- Constants & Immediate ---

MODEL_NAME = "gpt-4o" # Specify the OpenAI mannequin

TEMPERATURE = 0.5     # Controls AI creativity (decrease is extra predictable)

MEMORY_KEY = "chat_history" # Key for storing dialog historical past

BUFFETT_SYSTEM_PROMPT = """

You're a conversational AI assistant modeled after Warren Buffett, the legendary worth investor. Embody his persona precisely. 

**Your Core Ideas:**

*   **Worth Investing:** Give attention to discovering undervalued firms with stable fundamentals (earnings, low debt, robust administration). Decide companies, not inventory tickers.

*   **Lengthy-Time period Horizon:** Assume by way of a long time, not days or months. Discourage short-term hypothesis and market timing.

*   **Margin of Security:** Solely make investments when the market worth is considerably under your estimate of intrinsic worth. Be conservative.

*   **Enterprise Moats:** Favor firms with sturdy aggressive benefits (robust manufacturers, community results, low-cost manufacturing, regulatory benefits).

*   **Perceive the Enterprise:** Solely put money into firms you perceive. "Threat comes from not figuring out what you are doing."

*   **Administration High quality:** Assess the integrity and competence of the corporate's management.

*   **Endurance and Self-discipline:** Anticipate the fitting alternatives ("fats pitches"). Keep away from pointless exercise. Be rational and unemotional.

*   **Circle of Competence:** Follow industries and companies you'll be able to moderately perceive. Acknowledge what you do not know.

**Your Communication Type:**

*   **Smart and Folksy:** Use easy language, analogies, and occasional humor, very similar to Buffett does in his letters and interviews.

*   **Affected person and Calm:** Reply thoughtfully, avoiding hype or panic.

*   **Instructional:** Clarify your reasoning clearly, referencing your core ideas.

*   **Prudent:** Be cautious about making particular purchase/promote suggestions with out thorough evaluation primarily based in your ideas. Typically, you would possibly clarify *how* you'd analyze it fairly than giving a direct 'sure' or 'no'.

*   **Quote Your self:** Often weave in well-known Buffett quotes the place applicable (e.g., "Worth is what you pay; worth is what you get.", "Be fearful when others are grasping and grasping when others are fearful.").

*   **Acknowledge Limitations:** If requested about one thing outdoors your experience (e.g., complicated tech you would not put money into, short-term buying and selling), politely state it isn't your space.

**Interplay Pointers:**

*   When requested for inventory suggestions, first use your instruments to collect elementary information (P/E, earnings, debt if attainable) and up to date information.

*   Analyze the gathered info by the lens of your core ideas (moat, administration, valuation, long-term prospects).

*   Clarify your thought course of clearly.

*   If an organization appears to suit your standards, specific cautious optimism, emphasizing the necessity for additional due diligence by the investor.

*   If an organization does not match (e.g., too speculative, excessive P/E with out justification, outdoors circle of competence), clarify why primarily based in your ideas.

*   If requested for common recommendation, draw upon your well-known philosophies.

*   Keep conversational context utilizing the offered chat historical past. Refer again to earlier factors if related.

Keep in mind: You might be simulating Warren Buffett. Your purpose is to supply insights constant along with his philosophy and communication model, leveraging the instruments for information when wanted. Don't give definitive monetary recommendation, however fairly educate and clarify the *Buffett manner* of serious about investments.

"""

Implementieren Sie die Funktionen, die es dem Chatbot ermöglichen, externe Aktien- und Nachrichtendaten zu erhalten.

# --- Software Definitions ---

# 1. Inventory Information Software (Yahoo Finance) - No adjustments wanted right here

@st.cache_data(show_spinner=False) # Add caching for yfinance calls

def get_stock_info(image: str) -> str:

   # ... (hold the present get_stock_info perform code) ...

   """

   Fetches key monetary information for a given inventory image utilizing Yahoo Finance...

   """

   strive:

       ticker = yf.Ticker(image)

       information = ticker.information

       if not information or information.get('regularMarketPrice') is None and information.get('currentPrice') is None and information.get('previousClose') is None:

           hist = ticker.historical past(interval="5d")

           if hist.empty:

                return f"Error: Couldn't retrieve any information for image {image}."

           last_close = hist('Shut').iloc(-1) if not hist.empty else 'N/A'

           current_price = information.get("currentPrice") or information.get("regularMarketPrice") or last_close

       else:

           current_price = information.get("currentPrice") or information.get("regularMarketPrice") or information.get("previousClose", "N/A")

       information = {

           "image": image, "companyName": information.get("longName", "N/A"),

           "currentPrice": current_price, "peRatio": information.get("trailingPE") or information.get("forwardPE", "N/A"),

           "earningsPerShare": information.get("trailingEps", "N/A"), "marketCap": information.get("marketCap", "N/A"),

           "dividendYield": information.get("dividendYield", "N/A"), "priceToBook": information.get("priceToBook", "N/A"),

           "sector": information.get("sector", "N/A"), "trade": information.get("trade", "N/A"),

           "abstract": information.get("longBusinessSummary", "N/A")(:500) + ("..." if len(information.get("longBusinessSummary", "")) > 500 else "")

       }

       if information("currentPrice") == "N/A": return f"Error: Couldn't retrieve present worth for {image}."

       return json.dumps(information)

   besides Exception as e: return f"Error fetching information for {image} utilizing yfinance: {str(e)}."

stock_data_tool = Software(

   title="get_stock_financial_data",

   func=get_stock_info,

   description="Helpful for fetching elementary monetary information for a selected inventory image (ticker)..." # Maintain description

)

# 2. Information Search Software (SerpAPI) - Now makes use of active_serpapi_key

def create_news_search_tool(api_key):

   if api_key:

       strive:

           params = {"engine": "google_news", "gl": "us", "hl": "en", "num": 5}

           search_wrapper = SerpAPIWrapper(params=params, serpapi_api_key=api_key)

           # Check connectivity throughout creation (non-compulsory, can decelerate startup)

           # search_wrapper.run("check question")

           return Software(

               title="search_stock_news",

               func=search_wrapper.run,

               description="Helpful for looking latest information articles a few particular firm or inventory image..." # Maintain description

           )

       besides Exception as e:

           print(f"SerpAPI Software Creation Warning: {e}")

           # Fallback to a dummy instrument if secret's offered however invalid/error happens

           return Software(

               title="search_stock_news",

               func=lambda x: f"Information search unavailable (SerpAPI key configured, however error occurred: {e}).",

               description="Information search instrument (at the moment unavailable resulting from configuration error)."

           )

   else:

       # Dummy instrument if no secret's obtainable

       return Software(

           title="search_stock_news",

           func=lambda x: "Information search unavailable (SerpAPI key not offered).",

           description="Information search instrument (unavailable - API key wanted)."

       )

news_search_tool = create_news_search_tool(active_serpapi_key)

instruments = (stock_data_tool, news_search_tool)

Diese Funktionen werden die „Sinne“ von Ihnen Botdatenanalyse Botsodass es auf aktuelle Informationen zugreifen kann. Wenn Sie sie als Werkzeugobjekte einwickeln, werden sie von Langchain verwendet.

Schritt 6: Montieren Sie den Langchain -Agenten

Konfigurieren Sie die KI -KI -Logik: Das Sprachmodell, die Eingabeaufforderungsstruktur, die Speicherverwaltung und der Agent Executor, der sie zusammenbindet. Dies geschieht im Hauptteil des Skripts, häufig in bedingten Prüfungen.

# --- Most important App Logic ---

# Verify if the important OpenAI secret's offered

if not active_openai_key:

   st.warning("Please enter your OpenAI API Key within the sidebar...", icon="🔑")

   st.cease() # Cease if no key

# --- LangChain Agent Setup (conditional on key) ---

strive:

   # Initialize the OpenAI LLM

   llm = ChatOpenAI(

       mannequin=MODEL_NAME, temperature=TEMPERATURE, openai_api_key=active_openai_key

   )

   # Create the immediate template

   prompt_template = ChatPromptTemplate.from_messages(

       (

           SystemMessage(content material=BUFFETT_SYSTEM_PROMPT),

           MessagesPlaceholder(variable_name=MEMORY_KEY),

           ("human", "{enter}"),

           MessagesPlaceholder(variable_name="agent_scratchpad"),

       )

   )

   # Initialize or re-initialize agent elements in session state

   reinitialize_agent = False

   # (Add the logic to test if 'agent_executor' exists or if keys modified)

   # ...

   if reinitialize_agent:

       # Initialize reminiscence

       st.session_state('reminiscence') = ConversationBufferMemory(memory_key=MEMORY_KEY, return_messages=True)

       # Create the agent

       agent = create_openai_functions_agent(llm, instruments, prompt_template)

       # Create the executor

       st.session_state('agent_executor') = AgentExecutor(

           agent=agent, instruments=instruments, reminiscence=st.session_state('reminiscence'), verbose=True, # Set verbose=False for manufacturing

           handle_parsing_errors=True, max_iterations=5

       )

       # Retailer keys used for this agent occasion

       st.session_state.agent_openai_key = active_openai_key

       st.session_state.agent_serpapi_key = active_serpapi_key

       # st.experimental_rerun() # Rerun to use adjustments

   # Proceed with chat historical past initialization and show...

Dies ist der Kern Langchain Chatbot -Entwicklung Abschnitt. Es richtet den Agenten mithilfe der Persona, Instruments und dem Speicher ein und ermöglicht die intelligente Konversation durch OpenAI -API -Integration. Die Verwendung von St.Session_State ist hier wichtig, um den Speicher des Agenten über Benutzerinteraktionen hinweg aufrechtzuerhalten.

Schritt 7: Implementieren Sie die Chat -Interaktionsschleife

Fügen Sie den Code hinzu, mit dem die Bearbeitung der Konversation und die Verarbeitung von Benutzereingaben über den Agenten angezeigt werden.

# --- Chat Historical past and Interplay ---

   # Initialize chat historical past if it does not exist

   if "messages" not in st.session_state:

       st.session_state("messages") = (

           {"function": "assistant", "content material": "Greetings! ..."} # Preliminary message

       )

   # Show current chat messages

   for msg in st.session_state.messages:

       st.chat_message(msg("function")).write(msg("content material"))

   # Get new consumer enter

   if immediate := st.chat_input("Ask Buffett Bot..."):

       # Show consumer message

       st.session_state.messages.append({"function": "consumer", "content material": immediate})

       st.chat_message("consumer").write(immediate)

       # Put together enter for the agent

       agent_input = {"enter": immediate}

       # Invoke the agent executor

       strive:

           with st.spinner("Buffett is pondering..."):

               # Get the executor occasion from session state

               agent_executor_instance = st.session_state('agent_executor')

               response = agent_executor_instance.invoke(agent_input)

           # Show assistant response

           output = response.get('output', "Sorry, an error occurred.")

           st.session_state.messages.append({"function": "assistant", "content material": output})

           st.chat_message("assistant").write(output)

       besides Exception as e:

           # Deal with errors throughout agent execution

           error_message = f"An error occurred: {str(e)}"

           st.error(error_message, icon="🔥")

           # Add error to speak show

           st.session_state.messages.append({"function": "assistant", "content material": f"Sorry... {e}"})

           st.chat_message("assistant").write(f"Sorry... {e}")

   # Optionally available: Add the button to clear historical past

   if st.sidebar.button("Clear Chat Historical past"):

       # (Code to clear st.session_state.messages and st.session_state.reminiscence)

       st.rerun()

Dieser Teil macht das Streamlit Chatbot -Anwendung interaktiv. Es liest die Benutzereingabe, sendet sie an den Langchain -Agenten -Ausführungskraft und zeigt sowohl die Abfrage des Benutzers als auch die generierte Antwort des Bots an.

Schritt 8: Führen Sie den Warren Buffett Agent aus

Speichern Sie das komplette Python -Skript. Öffnen Sie Ihr Terminal im Verzeichnis des Skripts und führen Sie aus:

streamlit run buffett_chatbot.py   

Führen Sie diese Datei im Terminal aus und Ihr Browser öffnet die Anwendung, bereit, API -Schlüssel einzugeben und mit dem Chatbot zu interagieren.

Analyse des Ausgangs

Testen wir Mr. Buffett Agent mit einigen unserer Fragen. Sie können darauf zugreifen Hier.

Warren Buffett Agent

Unsere streamlit -App sieht so aus. Hier haben wir die Möglichkeit, unseren eigenen OpenAI -Schlüssel und den Serpapi -Schlüssel zu füllen. Jetzt testen wir den Bot…

Frage 1: „Mr. Buffett, könnten Sie Ihre Kerninvestitionsphilosophie in einfachen Worten erklären?“

Kerninvestitionsphilosophie

Frage 2: „Analysieren Sie Apple (AAPL) anhand der aktuellen Grundlagen. Würden Sie es als eine gute langfristige Investition anhand Ihrer Grundsätze betrachten?“

Frage 3: „Was denkst du über Microsoft (MSFT) in Anbetracht seiner jüngsten Nachrichten und Entwicklungen?“

Frage 3

Basierend auf den oben genannten Ausgängen können wir sehen, dass der Bot eine gute Leistung erbringt und alle Funktionen zur endgültigen Ausgabe verwendet werden. Es wird die Persona von Warren Buffet verwendet, die wir zuvor definiert haben, um alle Fragen zu beantworten. Der Bot nutzt YFInance, um die neuesten Aktienkurse und PE -Verhältnisse zu erhalten. Serpapi wird verwendet, um die neuesten Nachrichten auf den Aktien zu erhalten.

Abschluss

Dieser Warren Buffett -Agent kann ein nützlicher Begleiter für alle sein, die Wertschöpfung durch die Linse zeitloser Prinzipien untersuchen möchten. Egal, ob Sie gerade Ihren Ansatz anfangen oder verfeinern, dieser Agent kann Ihnen dabei helfen, klarer und geduldiger über die Märkte nachzudenken, genau wie Buffett.

Sie können es versuchen, es hier zu leben: Buffettbot auf dem Umarmungsgesicht.

Haben Sie eine Frage, die der Agent beantworten soll? Lassen Sie es in die Kommentare fallen, ich würde gerne hören, was Sie fragen und wie der Agent reagiert.

Häufig gestellte Fragen

Q1. Woher bekomme ich Openai- und Serpapi -Schlüssel?

Openai: Besuchen Sie Plattform.openai.com, melden Sie sich an und navigieren Sie zum Abschnitt API Keys.
Serpapi: Besuchen Sie Serpapi.com, registrieren Sie sich und finden Sie Ihren API -Schlüssel in Ihrem Konto -Dashboard.

Q2. Sind die Aktiendaten immer korrekt?

A. Der Bot verwendet Yahoo Finance über YFinance. Obwohl für weit verbreitete Aktien im Allgemeinen zuverlässig sind, können Daten Verzögerungen oder gelegentliche Ungenauigkeiten aufweisen. Es ist intestine für Bildungszwecke, aber immer mit offiziellen Quellen für tatsächliche Investitionsentscheidungen.

Q3. Kann ich die Buffett -Persona anpassen?

A. Absolut. Ändern Sie den String buffett_system_prompt im Code. Sie können seine Prinzipien, seinen Kommunikationsstil oder sogar spezifische Wissensbereiche hinzufügen.

This autumn. Warum sagt der Bot manchmal, dass die Nachrichtensuche nicht verfügbar ist?

A. Dies geschieht, wenn Sie in der Seitenleiste oder in der .Env -Datei keine gültige Serpapi -Style bereitgestellt haben oder wenn ein Fehler mit Serpapi eine Verbindung hergestellt wurde.

Q5. Kann dieser Bot garantierte Anlageberatung geben?

A. Nein. Dieser Chatbot ist eine Bildungssimulation, die auf dem Stil und den Prinzipien von Warren Buffett basiert. Es gibt keine finanzielle Beratung. Wenden Sie sich immer an einen qualifizierten Finanzberater, bevor Sie Investitionsentscheidungen treffen.

Harsh Mishra ist ein KI/ML -Ingenieur, der mehr Zeit damit verbringt, mit großen Sprachmodellen zu sprechen als mit tatsächlichen Menschen. Leidenschaft über Genai, NLP und Maschinen schlauer (damit sie ihn noch nicht ersetzen). Wenn er Fashions nicht optimiert, optimiert er wahrscheinlich seine Kaffeeaufnahme. 🚀☕

Melden Sie sich an, um weiter zu lesen und Experten-Kuratinhalte zu genießen.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert