crewai与langchain分析某公司股票是否可购买
文件

代码
main.py
from crewai import Crew, Process
from langchain.chat_models import ChatOpenAI
from agents import AnalysisAgents
from tasks import AnalysisTasks
import os
from dotenv import load_dotenv,find_dotenv#从 .env 文件中读取键值对,并将其加载到环境变量中
load_dotenv(find_dotenv(),override=True)
#指定LLM配置,取环境变量中的api_key和base_url
llm = ChatOpenAI(api_key=os.environ.get('API_KEY'), base_url=os.environ.get('API_ENDPOINT'),#一般不用这个model_name="选择的大模型的名称"
)class FinancialCrew:def __init__(self, company: str):self.company = companydef run(self):agents = AnalysisAgents(llm)tasks = AnalysisTasks()#两个agentmr_analyst = agents.market_research_analyst()cfa = agents.cfa()#两个task将任务委托给代理(agent)research = tasks.research(mr_analyst, self.company)#将搜索到的公司的资讯给分析师进行分析,传了research给analysisanalysis = tasks.analysis(cfa, research)crew = Crew(agents=[mr_analyst, cfa],tasks=[research, analysis],#使用按顺序执行任务的流程。上一个任务的结果将作为附加内容传递给下一个任务process=Process.sequential,verbose=True)result = crew.kickoff()return resultif __name__ == "__main__":print("\n\n## 欢迎来到投资顾问团队")print("-------------------------")company = input("请输入你想分析的公司名称\n")financial_crew = FinancialCrew(company)result = financial_crew.run()print("\n\n####################")print("## 如下是分析结果")print("####################\n")print(result)
agents.py
from crewai import Agent
# from tools.search import SearchToolsclass AnalysisAgents:def __init__(self, llm):self.llm = llmdef market_research_analyst(self):return Agent(llm=self.llm,role="市场研究分析师",goal="搜索公司的市场和财务状况,并按照找到的信息整理总结出公司各方面的表现和财务状况",backstory="最富经验的市场研究分析师,善于捕捉和发掘公司内在的真相,请用中文思考和行动,并用中文回复客户问题或与其他同事交流。",#使用联网搜索# tools=[SearchTools.searchInfo],#llm搜索,查的是已经训练的数据tools=[],#是否允许此代理将其任务委派给其他代理或进程,比如有两个代理market_research_analyst和cfa,如果是True则其中一个代理执行异常会交给另一个代理执行allow_delegation=False,max_iter=3,#是否打印详细的日志、输出或解释,方便看到执行过程调试verbose=True)#特许财务分析师def cfa(self):return Agent(llm=self.llm,role="特许财务分析师",goal="根据市场研究分析师搜索到的资料,重新整理并总结出公司的状况,并且提供该公司的股份是否值得买入的建议",backstory="最富经验的投资者,善于透过公司细微的变化,捕捉公司股价走向。现在你面对一生中最重要的客户,请用中文思考和行动,并用中文回复客户问题或与其他同事交流。",tools=[],allow_delegation=False,verbose=True)
tasks.py
from crewai import Task
from textwrap import dedentclass AnalysisTasks:def research(self, agent, company):return Task(description=dedent(f"""正在搜索并总结最新的{company}公司动态和新闻。特别关注最近发生的重大事件。"""),async_execution = True,agent=agent,expected_output="用列表的形式总结头5项最重要的公司新闻。")def analysis(self, agent, context):return Task(description=dedent(f"""将搜索到的信息进行分析并总结。"""),agent=agent,#research的结果传给他context = [context],expected_output="用报告的形式总结该公司的市场和走向,最终得出是否应该买入该公司股票的建议。")
requirements.txt (安装依赖)
langchain
openai
python-dotenv
crewai[tools]
效果


