基于 CrewAI 与 LlamaIndex 构建金融分析师智能体实践
本文介绍了如何利用 CrewAI 多智能体协作框架结合 LlamaIndex 检索增强生成(RAG)技术,构建一个能够自动分析金融文档的智能体系统。通过定义研究员和作家角色,系统成功解析了 Uber 2019 年度风险因素报告,识别出市场扩张、技术创新及监管安全三大核心风险。文章提供了从环境配置、数据索引到任务编排的完整代码示例,展示了开源技术在金融数据分析领域的实际应用潜力与实施细节。

本文介绍了如何利用 CrewAI 多智能体协作框架结合 LlamaIndex 检索增强生成(RAG)技术,构建一个能够自动分析金融文档的智能体系统。通过定义研究员和作家角色,系统成功解析了 Uber 2019 年度风险因素报告,识别出市场扩张、技术创新及监管安全三大核心风险。文章提供了从环境配置、数据索引到任务编排的完整代码示例,展示了开源技术在金融数据分析领域的实际应用潜力与实施细节。

在当今快速发展的 AI 技术领域,多智能体协作框架和大型语言模型(LLMs)的应用正在逐步改变我们处理复杂任务的方式。本文将详细阐述如何利用 CrewAI 与 LlamaIndex 框架构建金融研究助手 Agent,并具体应用于对 Uber 2019 年度风险因素的深入分析。这一实践不仅展示了 AI 技术在金融研究领域的潜力,还揭示了如何通过智能协作提升数据分析的效率和准确性。
CrewAI 是一个创新的开源框架,它允许用户利用智能代理的协作能力来完成复杂任务。与传统的聊天机器人不同,CrewAI 中的代理能够相互协作、交换信息,并以团队的形式解决复杂问题。这种协作原则在 AI 领域的应用,使得 CrewAI 能够模拟一群专家协同工作的场景,每个成员都拥有独特的专长和知识,通过有效的沟通和任务分配,实现超越个体能力的成果。
LlamaIndex 是另一个用户友好的框架,它支持开发者利用自己的数据轻松构建基于 LLM 的应用程序。该框架包含索引、检索、提示创建和代理编排等关键模块,使得构建高效、智能的应用成为可能。LlamaIndex 的一个主要应用是开发多功能的 QA 接口,该接口能够综合知识并提供对复杂查询的全面回答。
首先,我们使用 LlamaIndex 来构建一个 RAG(检索增强生成)系统。RAG 系统结合了检索和生成的能力,通过从大量数据中检索相关信息,并结合 LLM 的生成能力来提供准确的回答。这一步骤是构建金融分析师 Agent 的基础,因为它使得 Agent 能够理解和分析金融数据。
接下来,我们将 RAG 查询引擎封装为 LlamaindexTool,确保工具抽象是构建数据代理的核心。通过封装,我们可以使 Agent 更容易地利用 RAG 系统的能力来执行复杂的金融分析任务。
在 CrewAI 中,我们需要定义不同角色的代理,并为其设定明确的目标。对于金融分析师 Agent,我们可以定义以下角色:
我们为金融分析师 Agent 创建了具体的任务,如'对 Uber 2019 年的风险因素进行全面分析'。同时,我们定义了任务的执行流程,可以是顺序流程或层次流程。在顺序流程中,任务按顺序执行;在层次流程中,一个管理 Agent 负责协调其他 Agent,确保任务的有序进行和结果的验证。
研究员 Agent 利用 LlamaindexTool 工具,通过多次查询 Uber 2019 年 10K 年度报告中的相关章节,特别是'风险因素'部分,逐步揭示了 Uber 在以下几个方面所面临的风险:
作家 Agent 在接收到研究员 Agent 的分析报告后,开始撰写博客文章。文章以'Uber 的艰难旅程:驾驭未来的挑战'为题,通过生动的语言和清晰的逻辑结构,向读者展示了 Uber 在 2019 年所面临的三大主要挑战:
pip install crewai llama-index llama-index-llms-groq langchain-openai
from google.colab import userdata
from llama_index.llms.groq import Groq
# 获取 API Key
groq_api_key = userdata.get('GROQ_API_KEY')
# 初始化 LLM
llm = Groq(model="llama3-70b-8192", api_key=groq_api_key)
# 测试响应
response = llm.complete("Explain the importance of low latency LLMs")
print(response)
!wget "https://s23.q4cdn.com/407969754/files/doc_financials/2019/ar/Uber-Technologies-Inc-2019-Annual-Report.pdf" -O uber_10k.pdf
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
import os
# 读取 PDF 文件
reader = SimpleDirectoryReader(input_files=["uber_10k.pdf"])
docs = reader.load_data()
# 查看文档片段
print(docs[1])
# 加载 BAAI/bge-small-en-v1.5
embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5")
index = VectorStoreIndex.from_documents(
docs,
embed_model=embed_model,
)
query_engine = index.as_query_engine(similarity_top_k=5, llm=llm)
from crewai_tools import LlamaIndexTool
query_tool = LlamaIndexTool.from_query_engine(
query_engine,
name="Uber 2019 10K Query Tool",
description="Use this tool to lookup the 2019 Uber 10K Annual Report",
)
# 查看参数模式
print(query_tool.args_schema.schema())
from crewai import Agent, Task, Crew, Process
# 定义 Chat LLM (需根据实际环境配置,此处复用 llm 或指定 chat_llm)
chat_llm = llm
# 定义研究员 Agent
researcher = Agent(
role="Senior Financial Analyst",
goal="Uncover insights about different tech companies",
backstory="""You work at an asset management firm.
Your goal is to understand tech stocks like Uber.""",
verbose=True,
allow_delegation=False,
tools=[query_tool],
llm=chat_llm,
)
# 定义作家 Agent
writer = Agent(
role="Tech Content Strategist",
goal="Craft compelling content on tech advancements",
backstory="""You are a renowned Content Strategist, known for your insightful and engaging articles.
You transform complex concepts into compelling narratives.""",
llm=chat_llm,
verbose=True,
allow_delegation=False,
)
# 创建任务
stask1 = Task(
description="""Conduct a comprehensive analysis of Uber's risk factors in 2019.""",
expected_output="Full analysis report in bullet points",
agent=researcher,
)
task2 = Task(
description="""Using the insights provided, develop an engaging blog
post that highlights the headwinds that Uber faces.
Your post should be informative yet accessible, catering to a casual audience.
Make it sound cool, avoid complex words.""",
expected_output="Full blog post of at least 4 paragraphs",
agent=writer,
)
crew = Crew(
agents=[researcher, writer],
tasks=[stask1, task2],
process=Process.sequential,
verbose=True
)
result = crew.kickoff()
print(result)
在实际部署多智能体系统时,以下几点值得注意:
利用 CrewAI 和 LlamaIndex 这两个强大的开源框架,我们成功地构建了一个高效的金融分析师 Agent。该 Agent 能够自动执行复杂的金融分析任务,提供实时、准确的分析结果,为企业的决策制定提供有力支持。这一解决方案不仅提高了金融分析的效率和准确性,还展示了开源技术在金融领域应用的巨大潜力。通过合理的任务编排和数据索引策略,多智能体系统能够有效处理结构化与非结构化数据的混合分析需求。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online