Вы когда-нибудь задумывались, что лучше для инвестиций — NVidia или Tesla? Но что делать, если вам лень самостоятельно проводить анализ или вы даже не знаете, с чего начать?
Серьезная проблема, понимаю. Как было бы здорово, если бы мы могли попросить ChatGPT сделать это за нас. Но если вы уже пробовали, то знаете, что он не очень с этим справляется. Вы можете попросить его составить план анализа, но сложно заставить его следовать ему. И, что немаловажно, ChatGPT не очень хорошо считает, поэтому анализ финансовых данных пока не его сильная сторона. Можно ли что-то с этим сделать, или все безнадежно, и нам суждено тратить время и честно заработанные деньги в Hamster Combat?
Решение есть, хоть оно и не такое простое, как ChatGPT, но способно преодолеть многие ограничения ChatGPT или даже более сложных решений на основе RAG и LLM.
Я, конечно, говорю об агентном ИИ. Идея заключается в том, чтобы использовать группу умеренно интеллектуальных, но высокофункциональных агентов, которые с помощью конструктивного диалога, аргументации и такой то матери смогут разобраться в сути дела. Как говорится, discussio mater veritas est.
Если серьезно, то этот подход чем-то похож на бустинг в машинном обучении. Нам не нужны сверхинтеллектуальные агенты, вместо этого нам требуется большое количество специализированных агентов с подходящими инструментами для выполнения поставленных задач.
Например, для вышеприведённой задачи нам нужны:
Менеджер, который будет координировать диалог.
Финансовый аналитик, способный дать рекомендации по оценке эффективности различных активов, основываясь на определенных правилах и политике.
Программист, который разработает алгоритм на основе описания аналитика.
Критик, который оценит результат и предоставит обратную связь. Это важный компонент для снижения ошибок и галлюцинаций системы.
Разберем это на компоненты архитектуры LLM:
Медиатор — это управляющий группой LLM-агентов. Он должен понимать задачу верхнеуровнево, знать, кто участвует, и как организовать диалог. Может быть основан на LLM.
Финансовый аналитик — вы наверняка хотите, чтобы он использовал именно вашу инвестиционную политику и документы. Если их много, это RAG-система, если мало, их можно просто передать ваши соображения LLM в качестве контекста.
Программист — это модуль генерации и исполнения кода на основе LLM. Он должен уметь исправлять собственные ошибки. Идеально, если он будет работать в изолированной среде, например, в контейнере Docker
Критик — здесь можно использовать подход эксперта на базе LLM (LLM as a judge), то есть агент с четко определенными критериями оценки.
Уже выглядит сложновато… но это не так. И здесь на помощь приходят фреймворки. Похоже что все популярные фреймворки сегодня сходятся на идее агентов: как LLamaIndex, так и Langchain уже имеют такую функциональность. Я собираюсь показать как использовать открытый фреймворк от Microsoft под названием Autogen. В русском сегменте мало информации о нем а он весьма удобен.
Что такое агентный фреймворк?
Это просто комбинация следующих компонентов:
LLM + интерпретатор кода + плагины
AutoGen был создан, чтобы упростить создание систем ИИ-агентов, которые могут работать как с участием человека, так и без него. Что же он умеет?
Вызывать функции
Читать документы
Иметь краткосрочную и долгосрочную память
Создавать и организовывать диалоги разных агентов по определенным темам
Обучаться в процессе работы
Использовать предоставленные инструменты
Организовывать системы RAG
Генерировать и выполнять код
Оптимизировать использование различных агентов через обучение
Интегрироваться с существующими платформами low-code и no-code
Это все, что нам нужно! Давайте создадим простую систему, которая наконец-то ответит на вопрос: что лучше — Биткойн или Dogecoin?
Нам понадобится ключ API OpenAI, так как мы будем использовать gpt4o в качестве модели. Вы можете использовать любую модель с Autogen, включая локально размещенные, но для простоты я выберу этот путь. После получения ключа сделаем следующую конфигурацию:
config_list = [
{
'model': 'gpt-4o',
'api_key': 'ВАШ ПАРОЛЬ'
}
]
llm_config = {
"timeout": 600,
"config_list": config_list,
"temperature": 0
}
Теперь создадим наших агентов:
Наш финансовый консультант:
assistant = AssistantAgent(
"consultant",
llm_config=llm_config
)
Наш программист:
code_interpreter = UserProxyAgent(
"coder",
human_input_mode="NEVER",
code_execution_config={
"work_dir": "coding",
"use_docker": False,
},
default_auto_reply=""
)
И наш критик:
critic = AssistantAgent(
"critic",
llm_config=llm_config,
system_message="You are a critic, analyze the data, the solution proposed and made conclusions and identify problems rated from 1 to 10 by severity. If any problem has severity more than 8 - ask to fix it"
)
Они будут использовать gpt4o для общей логики и интерпретатор Python для выполнения кода.
Теперь давайте организуем их в мастермайнд группу. Для этого есть специальный класс, называемый SocietyOfMindAgent:
def init_group(assistants):
groupchat = GroupChat(
agents=assistants,
messages=[],
speaker_selection_method="round_robin", # With two agents, this is equivalent to a 1:1 conversation.
allow_repeat_speaker=True,
max_round=8,
)
manager = GroupChatManager(
groupchat=groupchat,
llm_config=llm_config,
)
group = SocietyOfMindAgent(
"society_of_mind",
chat_manager=manager,
llm_config=llm_config,
)
return group
society_of_mind_agent = init_group([assistant, code_interpreter, critic])
Нам также нужен объект, представляющий нас, пользователя:
user_proxy = UserProxyAgent(
name="Human_admin",
human_input_mode="NEVER",
code_execution_config=False,
max_consecutive_auto_reply=0
)
Вот и все. У нас есть групповой чат, так что давайте протестируем его на вопросе, который интересует нас всех:
task = "Which stock is a better investment for a conservative investor that is trying to maximize long term gains - NVDA or TSLA based on performance over last 15 years"
user_proxy.initiate_chat(society_of_mind_agent, message=task)
Вывод выглядит немного как магия, потому что это диалог между несколькими агентами. Он довольно длинный, поэтому вот краткое резюме:
Система смогла придумать метод для сравнения обоих акций.
Написала код для получения необходимых финансовых данных из интернета.
Выполнила код и получила данные.
Столкнулась с ошибкой — исправила её.
Снова выполнила код, успешно.
Получила агрегированные финансовые данные и проанализировала их.
Сделала выводы.
Кстати, вот они:
Анализ NVDA vs TSLA
На основе рассчитанных метрик для NVDA и TSLA за последние 10 лет можно сделать следующие выводы:
Анализ
-
Общая доходность:
NVDA: 26 767,72%
TSLA: 3 197,86%
NVDA значительно превосходит TSLA по общей доходности за последнее десятилетие.
-
Среднегодовая доходность:
NVDA: 74,95%
TSLA: 41,85%
NVDA также показывает более высокую среднегодовую доходность, что говорит о лучшей средней ежегодной производительности.
-
Волатильность:
NVDA: 48,58%
TSLA: 57,00%
NVDA имеет более низкую волатильность по сравнению с TSLA, что говорит о меньшем риске в отношении колебаний цен.
Вывод
Для консервативного инвестора, стремящегося максимизировать долгосрочную прибыль, NVDA, исходя из исторических данных, кажется лучшим выбором. NVDA предлагает более высокую среднегодовую доходность и меньшую волатильность по сравнению с TSLA, что больше соответствует целям консервативной инвестиционной стратегии.
Выявленные проблемы
Ограниченность данных (Серьезность: 3): Анализ основан только на исторических данных, которые не гарантируют будущую доходность.
Рыночные условия (Серьезность: 4): Изменения рыночных условий или факторов, специфичных для компании, могут повлиять на будущую доходность.
Учет волатильности (Серьезность: 5): Несмотря на то, что NVDA имеет меньшую волатильность, чем TSLA, она всё ещё остаётся относительно высокой, что может не подойти всем консервативным инвесторам.
Итог
На основе показателей за последние 10 лет, NVDA (NVIDIA Corporation) выглядит более выгодным вложением для консервативного инвестора, стремящегося к максимизации долгосрочной прибыли, чем TSLA (Tesla, Inc.). NVDA показала значительно более высокую общую доходность в размере 26 767,72% и среднегодовую доходность 74,95%, по сравнению с общей доходностью TSLA в 3 197,86% и среднегодовой доходностью 41,85%. Кроме того, NVDA характеризуется меньшей волатильностью (48,58% против 57,00% у TSLA), что указывает на меньший риск в отношении колебаний цен. Эти факторы позволяют предположить, что NVDA больше соответствует целям консервативной инвестиционной стратегии. Однако важно помнить, что прошлая производительность не гарантирует будущих результатов, а рыночные условия могут измениться.
Вот полный диалог:
Развернуть
Human_admin (to society_of_mind):
Which stock is a better investment for a conservative investor that is trying to maximize long term gains - NVDA or TSLA based on performance over the last 10 years
--------------------------------------------------------------------------------
>>>>>>>> USING AUTO REPLY...
society_of_mind (to chat_manager):
Which stock is a better investment for a conservative investor that is trying to maximize long term gains - NVDA or TSLA based on performance over the last 10 years
--------------------------------------------------------------------------------
Next speaker: consultant
consultant (to chat_manager):
To determine which stock, NVDA (NVIDIA Corporation) or TSLA (Tesla, Inc.), is a better investment for a conservative investor aiming to maximize long-term gains, we need to analyze their performance over the last 10 years. This involves examining historical stock price data, volatility, and other financial metrics.
### Plan
1. **Collect Historical Stock Data**: Gather the historical stock prices for NVDA and TSLA over the last 10 years.
2. **Analyze Performance**: Calculate key metrics such as total return, annualized return, and volatility for each stock.
3. **Compare and Conclude**: Compare the metrics to determine which stock has been a better performer for a conservative investor.
### Step 1: Collect Historical Stock Data
We will use Python with the `yfinance` library to collect historical stock data for NVDA and TSLA.
```python
# filename: stock_analysis.py
import yfinance as yf
import pandas as pd
# Define the stock tickers
tickers = ['NVDA', 'TSLA']
# Define the period (10 years)
period = '10y'
# Download historical data
data = yf.download(tickers, period=period)
# Save the data to CSV for further analysis
data['Adj Close'].to_csv('stock_data.csv')
print("Historical stock data for NVDA and TSLA has been saved to 'stock_data.csv'.")
```
Please execute the above code to download the historical stock data for NVDA and TSLA. Once you have the data, we can proceed to analyze it.
--------------------------------------------------------------------------------
Next speaker: coder
>>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...
coder (to chat_manager):
exitcode: 0 (execution succeeded)
Code output:
Historical stock data for NVDA and TSLA has been saved to 'stock_data.csv'.
--------------------------------------------------------------------------------
Next speaker: critic
critic (to chat_manager):
### Step 2: Analyze Performance
Now that we have the historical stock data, we can calculate the key metrics to evaluate the performance of NVDA and TSLA over the last 10 years.
```python
# filename: stock_performance_analysis.py
import pandas as pd
# Load the historical stock data
data = pd.read_csv('stock_data.csv', index_col='Date', parse_dates=True)
# Calculate total return and annualized return
def calculate_returns(data):
total_return = (data.iloc[-1] / data.iloc[0]) - 1
annualized_return = (1 + total_return) ** (1 / 10) - 1
return total_return, annualized_return
# Calculate volatility (standard deviation of returns)
def calculate_volatility(data):
daily_returns = data.pct_change().dropna()
volatility = daily_returns.std() * (252 ** 0.5) # Annualized volatility
return volatility
# Analyze NVDA
nvda_data = data['NVDA']
nvda_total_return, nvda_annualized_return = calculate_returns(nvda_data)
nvda_volatility = calculate_volatility(nvda_data)
# Analyze TSLA
tsla_data = data['TSLA']
tsla_total_return, tsla_annualized_return = calculate_returns(tsla_data)
tsla_volatility = calculate_volatility(tsla_data)
# Print the results
print("NVDA Performance:")
print(f"Total Return: {nvda_total_return:.2%}")
print(f"Annualized Return: {nvda_annualized_return:.2%}")
print(f"Volatility: {nvda_volatility:.2%}")
print("\nTSLA Performance:")
print(f"Total Return: {tsla_total_return:.2%}")
print(f"Annualized Return: {tsla_annualized_return:.2%}")
print(f"Volatility: {tsla_volatility:.2%}")
```
Please execute the above code to calculate and display the performance metrics for NVDA and TSLA. Once you have the results, we can proceed to compare and conclude.
--------------------------------------------------------------------------------
Next speaker: consultant
consultant (to chat_manager):
The code will calculate the total return, annualized return, and volatility for both NVDA and TSLA over the last 10 years. Once you execute it, we can analyze the results to determine which stock might be a better investment for a conservative investor.
--------------------------------------------------------------------------------
Next speaker: coder
>>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...
coder (to chat_manager):
exitcode: 0 (execution succeeded)
Code output:
NVDA Performance:
Total Return: 26202.59%
Annualized Return: 74.58%
Volatility: 48.58%
TSLA Performance:
Total Return: 2910.60%
Annualized Return: 40.56%
Volatility: 57.07%
--------------------------------------------------------------------------------
Next speaker: critic
critic (to chat_manager):
### Step 3: Compare and Conclude
Based on the calculated performance metrics for NVDA and TSLA over the last 10 years:
- **NVDA Performance:**
- Total Return: 26,202.59%
- Annualized Return: 74.58%
- Volatility: 48.58%
- **TSLA Performance:**
- Total Return: 2,910.60%
- Annualized Return: 40.56%
- Volatility: 57.07%
### Analysis
1. **Total and Annualized Returns**: NVDA has significantly outperformed TSLA in terms of both total and annualized returns over the last 10 years. This suggests that NVDA has been a more lucrative investment in terms of growth.
2. **Volatility**: TSLA exhibits higher volatility compared to NVDA. For a conservative investor, lower volatility is generally preferred as it indicates less risk and more stable returns.
### Conclusion
For a conservative investor aiming to maximize long-term gains, NVDA appears to be the better investment choice based on historical performance. It offers higher returns with relatively lower volatility compared to TSLA.
### Identified Problems
1. **Data Limitation**: The analysis is based solely on historical stock performance, which may not predict future performance. (Severity: 5)
2. **Market Conditions**: The analysis does not account for current market conditions or future growth potential. (Severity: 6)
3. **Risk Tolerance**: The analysis assumes a conservative investor's risk tolerance without considering individual preferences. (Severity: 4)
None of the identified problems have a severity greater than 8. Therefore, the analysis is considered complete.
TERMINATE
--------------------------------------------------------------------------------
Next speaker: consultant
consultant (to chat_manager):
TERMINATE
--------------------------------------------------------------------------------
society_of_mind (to Human_admin):
To determine which stock, NVDA (NVIDIA Corporation) or TSLA (Tesla, Inc.), is a better investment for a conservative investor aiming to maximize long-term gains, we analyzed their performance over the last 10 years. Here are the key findings:
- **NVDA Performance:**
- Total Return: 26,202.59%
- Annualized Return: 74.58%
- Volatility: 48.58%
- **TSLA Performance:**
- Total Return: 2,910.60%
- Annualized Return: 40.56%
- Volatility: 57.07%
### Conclusion
Based on historical performance, NVDA has significantly outperformed TSLA in terms of both total and annualized returns, while also exhibiting lower volatility. For a conservative investor, NVDA appears to be the better investment choice, offering higher returns with relatively lower risk compared to TSLA. However, it's important to note that past performance is not indicative of future results, and investors should consider current market conditions and their individual risk tolerance before making investment decisions.
Здорово! Я всегда знал, что NVDA — менее спекулятивный выбор, но я не очень хорошо разбираюсь в отчетах. Мне хотелось бы, чтобы был построен график. Это возможно?
task = "Я хотел бы сравнить показатели NVDA и TSLA за последние 10 лет. Предложите метод для анализа и выполните его. Постройте результаты на графике и сохраните его в файл chart.png"
user_proxy.initiate_chat(society_of_mind_agent, message=task)
Image(filename="coding/chart.png")
Конечно может. Это довольно впечатляеет.
Отлично, так намного понятнее, но, как разумный инвестор, я недавно прочитал книгу, которая, неудивительно, называется «Разумный инвестор» (The Intelligent Investor) Бенджамина Грэма, и теперь это моя библия в инвестировании. Поэтому я хочу, чтобы моя система основывала все свои решения на рекомендациях Грэма. Можем мы это сделать?
Да, мы можем. Теперь нам нужно создать RAG-систему (Retrieve-Augmented Generation), чтобы сохранить нашу новую инвестиционную политику и другие документы в базе знаний. Мы будем использовать векторную базу данных Qdrant в качестве хранилища:
sentence_transformer_ef = SentenceTransformer("all-distilroberta-v1").encode
client = QdrantClient(":memory:")
ragproxyagent = RetrieveUserProxyAgent(
name="ragproxyagent",
human_input_mode="NEVER",
max_consecutive_auto_reply=10,
retrieve_config={
"task": "code",
"docs_path": [
"https://youexec.com/book-summaries/the-intelligent-investor-by-benjamin-graham"
],
"chunk_token_size": 2000,
"model": config_list[0]["model"],
"db_config": {"client": client},
"vector_db": "qdrant",
"get_or_create": True,
"overwrite": True,
"embedding_function": sentence_transformer_ef,
},
code_execution_config=False,
)
И вот ответ:
Ответ
Чтобы определить, какая акция — NVDA (NVIDIA) или TSLA (Tesla) — является лучшей инвестицией для разумного инвестора, как это определяет Бенджамин Грэм, необходимо проанализировать обе компании на основе его принципов стоимостного инвестирования. Это включает оценку их финансовой устойчивости, роста прибыли, дивидендной истории и показателей оценки, таких как коэффициенты цена/прибыль (P/E) и цена/балансовая стоимость (P/B).
Анализ:
-
Финансовая устойчивость:
NVIDIA: Общий долг составляет около $11,06 млрд, а денежные средства и их эквиваленты — $7,28 млрд. Чистый долг — $2,43 млрд, что указывает на относительно стабильное финансовое положение с управляемым уровнем задолженности.
Tesla: Общий долг составляет около $9,57 млрд, а денежные средства и их эквиваленты — $16,39 млрд. Tesla имеет более сильную денежную позицию относительно своего долга, что свидетельствует о хорошей финансовой устойчивости.
-
Стабильность и рост прибыли:
Обе компании показали значительный рост прибыли в последние годы: NVIDIA выиграла от высокого спроса на GPU, а Tesla — от роста рынка электромобилей.
-
Дивидендная история:
Ни NVIDIA, ни Tesla не известны значительными дивидендами, так как обе компании исторически реинвестируют прибыль в рост и расширение.
-
Оценочные метрики:
Обе компании часто считаются акциями роста и могут иметь высокие оценочные коэффициенты, что может вызывать беспокойство у инвесторов, ориентированных на стоимость.
-
Запас прочности:
Учитывая высокие ожидания роста, заложенные в обе акции, инвестору, ориентированному на стоимость, может быть трудно оправдать значительный запас прочности.
Вывод:
Согласно принципам Бенджамина Грэма, ни NVIDIA, ни Tesla не идеально соответствуют критериям стоимостного инвестирования из-за их высоких оценок как акций роста и отсутствия дивидендов. Однако более сильная денежная позиция Tesla относительно ее долга может сделать её немного более стабильным выбором с точки зрения финансового здоровья. Тем не менее обе акции, вероятно, не соответствуют консервативному подходу к инвестициям, рекомендованному Грэмом.
Отлично сказано.
Ну и наконец для Bitcoin:
task = "I would like to compare BITCOIN and DEGECOIN performance for the last 5 years. Suggest a method to do the analysis and perform it. Plot results to a chart and save it to a file chart.png"
user_proxy.initiate_chat(society_of_mind_agent, message=task)
Image(filename="coding/chart.png")
Autogen предоставляет гораздо больше функциональности, чем описано здесь. Это очень базовый пример, но он показывает, что с минимальным количеством кода можно сделать многое.
Дополнительно существует AutogenStudio, который можно разместить локально, и он позволяет выполнять все это через простой интерфейс с минимальным программированием.
Выводы
Агентные системы значительно функциональнее, чем просто ChatGPT или даже продвинутые RAG-системы. К сожалению, существуют некоторые проблемы. Работа агентов нестабильна, и иногда приходится несколько раз задавать один и тот же вопрос, чтобы получить приемлемый ответ. В случае с Autogen агенты иногда зацикливаются или начинают галлюцинировать. А Microsoft, как и всегда, предлагает красивый, но нестабильный фреймворк с багами, что затрудняет его использование в продакшн-системах. Однако он отлично подходит для создания быстрых прототипов.
Одно можно сказать наверняка: это будущее интеллектуальных систем принятия решений, так как многозадачная логика становится значительно более естественной и управляемой по сравнению с работой с ChatGPT или подобными приложениями.
Вот блокнот с кодом из статьи.
Пишете ваши вопросы в комментариях.
Всем добра!
artmaro
Кстати, для агентов у AWS Bedrock есть даже guardrails как продукт для агентных систем https://github.com/awslabs/amazon-bedrock-agent-samples/blob/main/examples/amazon-bedrock-agents/online_banking_agent/images/architecture.png
Squirrelfm Автор
для личных целей это вряд ли потребуется) достаточно запускать в докер контейнере