使用 Autogen 进行代理人工智能金融分析:比特币和特斯拉哪个更好?
- Rifx.Online
- Finance , Programming , Machine Learning
- 14 Jan, 2025
你是否曾经想过,NVidia 和特斯拉,哪个投资更好?但是如果你懒得自己去分析,或者甚至不知道该如何开始呢?
这是个严肃的问题,我知道。如果我们能让 ChatGPT 来完成这个任务,那该多好,但如果你已经尝试过——你就知道它并不擅长这方面。你可以让它制定计划,但让它在多个步骤中坚持执行就很难。而且它在会计方面也不太擅长,所以分析财务数据并不是它的强项。有没有办法解决这个问题,还是说没有希望,我们注定要在“仓鼠战斗”中浪费时间和辛苦挣来的钱?
答案是——有解决方案,尽管它不如 ChatGPT 简单,但能够克服许多 ChatGPT 或更复杂的 RAG 和基于 LLM 的解决方案。
我当然是在说代理 AI。这个想法是我们有一组适度智能但高度功能化的代理,通过建设性的对话和辩论来弄清楚事情的真相。正如他们所说,讨论是通向真理的母亲。
认真说,这种方法在某种程度上类似于机器学习中的增强。我们不需要代理们超级智能,而是需要许多专门化并具备完成任务所需工具的代理。
例如,对于上述任务,我们需要以下角色:
- 一个调解员来调解对话
- 一个财务分析师,能够指导如何评估不同资产的表现,并能够根据某些政策进行评估
- 一个程序员,根据分析师的描述编写算法
- 一个评论员,将评估答案并提供反馈。这是减少幻觉的重要组成部分
这些就是系统的代理。让我们将其分解为 LLM 的架构组件:
- 调解员 — 这是 LLM 代理组的管理者。它需要知道任务是什么,参与者是谁,以及对话是如何结构化的。可以基于 LLM。
- 财务分析师 — 你可能希望它能理解你的投资政策和文件。如果你有很多文件——那就是一个 RAG 系统,如果没有——我们可以将其作为上下文的一部分提供给 LLM。
- 程序员 — 这是一个 LLM 代码生成和执行模块。它应该支持重试和修复自身错误的能力。理想情况下,它应该在像 Docker 容器这样的隔离环境中运行。
- 评论员 — 假设我们将使用 LLM 作为评判者,因此它将是一个具有定义标准的 LLM 代理。
看起来已经很困难了……但并不是。框架在这里发挥了作用。似乎所有流行的框架如今都趋向于代理的理念,LLamaIndex 和 Langchain 都包含了它们。我将使用一个名为 Autogen 的微软开源框架。
代理方法
那么什么是代理框架?它只是以下内容的组合:
LLM + 代码解释器 + 插件
AutoGen 的创建旨在简化构建可以在人类输入的情况下或不需要人类输入的 AI 代理系统。它能做什么?
- 调用函数
- 阅读文档
- 拥有短期和长期记忆
- 创建和组织不同代理在特定主题上的对话
- 随着进展学习新知识
- 使用提供的工具
- 组织 RAG 系统
- 生成和执行代码
- 通过训练优化不同代理的使用
- 与现有的低代码和无代码平台集成
这就是我们所需要的,所以让我们构建一个简单的系统,可以一次性回答,哪个更好——比特币还是狗狗币?
我们将需要一个 OpenAI API 密钥,因为我们将使用 gpt4o 作为模型。您可以使用任何模型与 Autogen,包括自托管的,但为了简单起见,我将选择这种方式。
一旦您拥有密钥,我们将进行以下配置:
config_list = [
{
'model': 'gpt-4o',
'api_key': 'DER PAROL'
}
]
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 indentify 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 和 TSLA 在过去 10 年的计算指标,我们可以得出以下观察结果:
### 分析
1. **总回报**:
- NVDA: 26,767.72%
- TSLA: 3,197.86%
- 在过去十年中,NVDA 在总回报方面显著超过 TSLA。
2. **年化回报**:
- NVDA: 74.95%
- TSLA: 41.85%
- NVDA 的年化回报率也高于 TSLA,表明其平均年度表现更好。
3. **波动性**:
- NVDA: 48.58%
- TSLA: 57.00%
- NVDA 的波动性低于 TSLA,表明其价格波动风险较小。
### 结论
对于希望最大化长期收益的保守投资者而言,根据历史数据,NVDA 似乎是更好的选择。与 TSLA 相比,它提供了更高的年化回报和更低的波动性,更符合保守投资策略的目标。
### 已识别的问题
1. **数据限制** (严重性:3):分析仅基于历史数据,可能无法预测未来表现。
2. **市场条件** (严重性:4):市场条件或公司特定因素的变化可能会影响未来表现。
3. **波动性考虑** (严重性:5):虽然 NVDA 的波动性低于 TSLA,但仍然相对较高,这可能不适合所有保守投资者。
根据过去 10 年的表现,NVDA(英伟达公司)似乎是希望最大化长期收益的保守投资者相比于 TSLA(特斯拉公司)的更好投资选择。NVDA 的总回报率为 26,767.72%,年化回报率为 74.95%,而 TSLA 的总回报率为 3,197.86%,年化回报率为 41.85%。此外,NVDA 的波动性为 48.58%,而 TSLA 为 57.00%,表明其价格波动风险较小。这些因素表明,NVDA 更符合保守投资策略的目标。然而,重要的是要考虑过去的表现并不能保证未来的结果,市场条件可能会发生变化。
很好,我一直知道 NVDA 是一个不那么投机的选择,但我不擅长阅读报告,我希望它为我画一个图表。它能做到吗?
task = "I would like to compare NVDA and TSLA performance for the last 10 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")
当然可以。这简直令人惊叹!
甚至更好。但我作为一个非常聪明的投资者,最近读了一本书,毫无疑问,这本书叫做《聪明的投资者》由本杰明·格雷厄姆撰写,它现在是我投资的圣经。所以我希望我的系统在做出所有决策时都以格雷厄姆的建议为基础。我们可以做到吗?
是的,我们可以,现在我们需要构建一个 RAG 系统,以便我们可以将新的投资政策和其他文档存储在知识库中。我们将使用 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(英伟达)或 TSLA(特斯拉)哪只股票对于本杰明·格雷厄姆定义的聪明投资者来说是更好的投资,我们需要根据格雷厄姆的价值投资原则分析这两家公司。这涉及评估它们的财务稳定性、盈利增长、股息记录和估值指标,如市盈率(P/E)和市净率(P/B)。
### 分析:
1. **财务稳定性**:
- **英伟达**:总债务约为 110.6 亿美元,现金及现金等价物为 72.8 亿美元。净债务为 24.3 亿美元,表明其财务状况相对稳定,债务水平可控。
- **特斯拉**:总债务约为 95.7 亿美元,现金及现金等价物为 163.9 亿美元。特斯拉相对于其债务似乎拥有更强的现金状况,表明财务稳定性良好。
2. **盈利稳定性与增长**:
- 两家公司近年来都表现出显著的盈利增长,英伟达受益于对 GPU 的需求,而特斯拉则受益于电动车市场。
3. **股息记录**:
- 英伟达和特斯拉都不以支付显著股息而闻名,因为这两家公司历史上一直将盈利再投资于增长和扩张。
4. **估值指标**:
- 两家公司通常被视为成长型股票,可能具有较高的估值倍数,这对价值投资者来说可能是一个问题。
5. **安全边际**:
- 鉴于对这两只股票的高增长预期,价值投资者可能会发现很难证明显著的安全边际。
### 结论:
根据本杰明·格雷厄姆的原则,英伟达和特斯拉都不完全符合价值投资的标准,因为它们的高增长估值和缺乏股息。然而,特斯拉相对于其债务的更强现金状况可能使其在财务健康方面成为一个稍微更稳定的选择。尽管如此,这两只股票可能与格雷厄姆提倡的保守、以价值为中心的方法不太一致。
说得好。
这是关于比特币的内容:
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")
Augtogen 提供的功能远比这里描述的要多。这实际上是一个非常基本的示例,但展示了您可以用少量代码做很多事情。
此外,还有 AutogenStudio,可以自托管,并允许您通过简单的用户界面实现所有这些功能,几乎不需要编码。
结论
代理系统的能力远超单独的 ChatGPT 或甚至先进的 RAG 系统。不幸的是,这里存在一些问题。输出不稳定,有时需要多次运行相同的问题才能得到一个体面的答案。具体来说,使用 Autogen 时,有时代理会陷入循环或产生幻觉。而且,微软一如既往——框架看起来不错,但不稳定且存在漏洞,使其在生产系统中难以使用。不过,它非常适合快速原型的构建。
有一点是明确的,这就是智能决策系统的未来,因为它使多步骤逻辑比使用 ChatGPT 或类似应用程序更自然和可控。
这里有一个 notebook,包含了文章中的代码。
本文中的内容不构成财务建议,所有示例仅用于演示目的!
玩得开心!如果你有任何问题——请在评论中提出。