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.

Die Hauptkomponenten sind:
- Sprachmodell (OpenAI): Bietet die Konversationsfähigkeit und die Persönlichkeit.
- Langchain: Fungiert als Framework und verbindet das Sprachmodell, die Instruments und das Gedächtnis.
- Aktien -Daten -API (Yahoo Finance): Ruft aktuelle Aktienkurse und grundlegende Daten ab.
- Nachrichten -API (Serpapi): Ruft die jüngsten Nachrichtenüberschriften für den Kontext ab.
- 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.

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?“

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?“

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
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.
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.
A. Absolut. Ändern Sie den String buffett_system_prompt im Code. Sie können seine Prinzipien, seinen Kommunikationsstil oder sogar spezifische Wissensbereiche hinzufügen.
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.
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.
Melden Sie sich an, um weiter zu lesen und Experten-Kuratinhalte zu genießen.
