[人工智能-大模型-32]:大模型应用层技术栈 - 智能决策层(AI Agent)- 搭建实例
我们来亲手搭建一个智能决策层(AI Agent)的实例。这个Agent将是一个**“个人投资分析助手”**,它能:
- 接收用户指令:“分析一下宁德时代(300750.SZ)是否值得投资。”
- 自主规划任务:获取公司基本信息、财务数据、行业动态、市场情绪。
- 调用工具:使用网络搜索、金融API、代码解释器。
- 综合分析并生成一份结构化的投资分析报告。
- 输出最终决策建议。
一、技术栈选择
我们将使用轻量级但功能强大的开源框架,快速实现原型:
- 核心应用开发框架:
LangChain
(最流行的LLM应用开发框架) - 大模型:OpenAI GPT-4(或国内可替代的通义千问、讯飞星火等)
- 工具调用:
TavilySearch
:用于搜索最新新闻和行业动态(比传统搜索引擎更适合Agent)。Python REPL
:代码解释器,用于计算财务比率、绘制图表。- (可选)金融数据API:如
akshare
(免费的中文金融数据接口)。
- 记忆系统:
ConversationBufferMemory
(简单会话记忆)。 - 执行引擎:
LangChain Agents
(支持ReAct、Plan-and-Execute等模式)。
环境准备:Python 3.9+,安装依赖:
bash编辑
pip install langchain langchain-community langchain-openai tavily-python matplotlib akshare
二、代码实现:搭建投资分析Agent
python
编辑
# investment_analyst_agent.pyfrom langchain.agents import initialize_agent, Tool, AgentType
from langchain_community.tools import TavilySearchResults
from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory
import matplotlib.pyplot as plt
import pandas as pd
import os# 1. 设置API密钥(请替换为你的实际密钥)
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"
os.environ["TAVILY_API_KEY"] = "your-tavily-api-key"# 2. 初始化大模型
llm = ChatOpenAI(temperature=0, model="gpt-4", streaming=True)# 3. 定义工具集 (Tools)
# 工具1: 网络搜索 - 获取最新资讯
search = TavilySearchResults(max_results=5)# 工具2: Python代码解释器 - 用于计算和绘图
def python_repl_tool(code: str) -> str:"""Safely execute Python code and return the result."""try:# 捕获绘图输出if 'plt.' in code or 'matplotlib' in code:exec(code)plt.show()return "Chart displayed."else:# 对于计算,返回结果result = eval(code)return str(result)except Exception as e:return f"Error executing code: {e}"# 工具3: 模拟获取财务数据(实际中可接入akshare等)
def get_finance_data(ticker: str) -> str:"""Simulate fetching financial data. In real use, call akshare API."""# 模拟数据data = {"ticker": ticker,"revenue_2023": 4000, # 亿元"net_profit_2023": 450,"pe_ratio": 28.5,"roe": 18.7}return str(data)# 构建工具列表
tools = [Tool(name="Search",func=search.run,description="用于查找公司新闻、行业趋势、市场情绪等最新信息。当需要了解外部动态时使用。"),Tool(name="Python_REPL",func=python_repl_tool,description="一个Python代码解释器。可用于执行数学计算、数据分析、绘制图表等。输入应为可执行的Python代码。"),Tool(name="GetFinanceData",func=get_finance_data,description="获取指定股票代码的财务数据,如营收、利润、PE、ROE等。")
]# 4. 初始化记忆系统
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)# 5. 初始化Agent
# 使用 PLAN_AND_EXECUTE 模式,先规划再执行,更稳定
agent = initialize_agent(tools,llm,agent=AgentType.PLAN_AND_EXECUTE,memory=memory,verbose=True, # 显示思考过程handle_parsing_errors=True
)# 6. 执行任务
if __name__ == "__main__":print("🚀 投资分析助手已启动,请输入您的问题:")# 用户指令user_query = "请全面分析宁德时代(300750.SZ)是否值得投资。你需要:1. 获取其最新财务数据;2. 搜索行业动态和竞争对手情况;3. 分析其估值水平;4. 绘制过去三年营收增长趋势图;5. 给出明确的投资建议。"print(f"\n👤 用户提问:{user_query}\n")# Agent开始工作response = agent.run(user_query)print(f"\n🤖 助手回复:\n{response}")
三、Agent的决策流程解析(模拟运行)
当Agent收到指令后,它会这样思考和行动:
规划阶段(Planning):
“用户要求分析宁德时代投资价值。我需要分五步:a) 获取财务数据;b) 搜索行业新闻;c) 计算估值;d) 绘制营收图;e) 综合分析。”
执行阶段(Execution):
- 步骤1:调用
GetFinanceData("300750.SZ")
→ 返回模拟数据。 - 步骤2:调用
Search("宁德时代 最新动态 竞争对手 比亚迪 中创新航")
→ 返回近期新闻摘要。 - 步骤3:调用
Python_REPL
计算:python编辑
pe = 28.5 industry_avg_pe = 25.0 valuation = "高于行业平均" if pe > industry_avg_pe else "合理" valuation
- 步骤4:调用
Python_REPL
绘图:python编辑
import matplotlib.pyplot as plt years = [2021, 2022, 2023] revenue = [3000, 3500, 4000] # 亿元 plt.figure(figsize=(8, 5)) plt.plot(years, revenue, marker='o') plt.title("宁德时代近三年营收增长") plt.xlabel("年份") plt.ylabel("营收(亿元)") plt.grid(True) plt.show()
- 步骤5:综合所有信息,生成报告并给出建议。
- 步骤1:调用
最终输出示例:
宁德时代(300750.SZ)投资分析报告
1. 财务概况:2023年营收4000亿元,净利润450亿元,ROE 18.7%,盈利能力强。 2. 行业动态:固态电池研发取得突破,但面临比亚迪、中创新航激烈竞争,行业价格战风险上升。 3. 估值分析:当前PE 28.5倍,高于行业平均25倍,估值偏高。 4. 增长趋势:过去三年营收持续增长,复合增长率约15%。
结论:公司基本面优秀,但短期估值偏高。建议:长期投资者可逢低分批建仓,短期交易者需谨慎。
四、如何进阶?
- 接入真实数据源:用
akshare
替换get_finance_data
,获取实时股价、财报。 - 增加更多工具:接入邮件工具自动发送报告,或日历工具安排调研会议。
- 增强记忆:使用向量数据库存储历史分析记录,实现长期学习。
- 多Agent协作:创建“宏观分析师Agent”、“行业研究员Agent”,协同完成更复杂任务。
- 加入人类反馈:让用户对报告打分,Agent据此优化下次分析。
总结
这个实例展示了智能决策层(AI Agent)的核心能力:自主规划、工具调用、多步推理、执行落地。它不再是简单的问答机器人,而是一个能独立完成复杂任务的“数字分析师”。
通过 LangChain
这样的框架,我们可以快速构建出具备实用价值的AI Agent。未来,这样的智能体将渗透到各行各业,成为人类在信息时代的“超级外脑”。