上一篇文章已详细分析: 未来的必备技能, 要么会写AI Agent, 要么会用AI Agent!
那么如何写一个AI Agent?
例如如何写一个推荐股票的AI Agent? 可推荐股票, 并且推荐什么时机买入, 什么时机卖出, 适合短线操作, 做波段, 还是长线持有?
看看Qwen怎么回答,让AI设计AI

写一个 AI Agent(智能体)的核心思想是:让程序不仅能执行固定指令,还能感知环境、自主决策、调用工具、记忆历史,并持续完成目标。下面我用通俗易懂的方式,结合当前主流技术(如大模型 + 工具调用 + 记忆机制),分步骤说明如何构建一个实用的 AI Agent。
一个典型的 AI Agent 包含以下模块:
模块 | 作用 | 常见实现 |
|---|---|---|
大脑(Reasoning) | 决策、规划、推理 | 大语言模型(如 Qwen、GPT、Llama) |
感知(Perception) | 理解输入(文本、图像等) | LLM + 多模态模型 |
行动(Action) | 调用工具、执行操作 | 函数调用(Function Calling)、API |
记忆(Memory) | 存储历史、上下文、知识 | 向量数据库、短期/长期记忆 |
✅ 简单说:Agent = LLM + 工具 + 记忆 + 循环控制
假设我们要做一个“能查天气、做计算、回答问题”的 Agent。
import math
import requests
def get_weather(city: str) -> str:
# 模拟调用天气 API
return f"今天 {city} 晴,25°C"
def calculate(expression: str) -> float:
# 安全计算(仅支持简单表达式)
try:
return eval(expression, {"__builtins__": {}}, {"math": math})
except:
return "计算错误"
使用支持 Function Calling 的模型(如 Qwen-Max、GPT-4、Ollama + function schema)。
from qwen_agent import Agent # 假设使用通义千问官方 Agent 框架
# 定义工具描述(供 LLM 理解)
tools = [
{
"name": "get_weather",
"description": "查询某城市的天气",
"parameters": {"city": "城市名,如'北京'"}
},
{
"name": "calculate",
"description": "计算数学表达式",
"parameters": {"expression": "合法的数学表达式,如'2+3*4'"}
}
]
# 创建 Agent
agent = Agent(
model="qwen-max",
tools=tools,
system_prompt="你是一个智能助手,能回答问题、查天气、做计算。"
)
# 运行
response = agent.run("北京今天天气怎么样?")
print(response) # → 调用 get_weather("北京") → 返回天气
🔧 如果不用官方框架,也可手动解析 LLM 输出的 JSON,判断是否需要调用工具。
history = [
{"role": "user", "content": "北京天气?"},
{"role": "assistant", "tool_calls": [{"name": "get_weather", "args": {"city": "北京"}}]},
{"role": "tool", "content": "今天北京晴,25°C"},
{"role": "assistant", "content": "北京今天晴,25°C"}
]
from chromadb import Client
client = Client()
collection = client.create_collection("memory")
# 存记忆
collection.add(
documents=["用户喜欢喝美式咖啡"],
metadatas=[{"user_id": "123"}],
ids=["mem1"]
)
# 查记忆
results = collection.query(query_texts=["用户喜欢什么咖啡?"], n_results=1)
让 Agent 先写计划,再执行:
用户问:“帮我订明天从北京到上海的机票,预算 1000 元内。”
Agent 思考:
get_current_date()search_flights("北京", "上海", "2024-06-15", max_price=1000)框架 | 特点 | 适合人群 |
|---|---|---|
LangChain | 功能全面,支持记忆、工具、链式调用 | 开发者 |
LlamaIndex | 专注 RAG + Agent,适合知识问答 | 研究者 |
Qwen-Agent(通义) | 中文友好,支持 function calling | 国内用户 |
AutoGen(微软) | 多 Agent 协作,适合复杂任务 | 高级用户 |
Ollama + LM Studio | 本地运行开源模型 + 工具调用 | 隐私敏感者 |
eval()、os.system() 等危险操作。
写 AI Agent 的本质是:把大模型当作“决策中心”,让它指挥各种工具完成任务。
✅ 初学者建议:
🌟 最终目标:让 Agent 像一个“数字员工”,能独立完成复杂工作。
如果你有具体场景(如客服、数据分析、游戏 NPC),我可以给出针对性架构!
要构建一个推荐股票的 AI Agent,能判断买入/卖出时机,并建议操作风格(短线、波段、长线),需要融合 金融知识、技术指标、市场数据、大模型推理能力 和 风险控制逻辑。
下面我将从 设计架构 → 核心模块 → 代码示例 → 风险提示 四个层面,给出一个可落地的 AI Agent 实现方案。

工具名 | 功能 | 数据源 |
|---|---|---|
get_stock_price(symbol) | 获取当前价格、52周高低 | Yahoo Finance / Tushare |
get_technical_indicators(symbol) | 计算 MACD、RSI、均线、布林带 | TA-Lib / 自定义 |
get_fundamentals(symbol) | 获取 PE、PB、ROE、营收增速 | 东方财富 / Tushare |
get_market_sentiment() | 获取新闻情绪、资金流向 | 新浪财经 / 东方财富 API |
classify_trend(symbol) | 判断趋势:上涨/震荡/下跌 | 基于均线+波动率 |
LLM 负责综合解读指标,避免硬编码规则。
假设你有 Tushare token(免费注册),并安装
qwen-agent、tushare、talib
pip install qwen-agent tushare TA-Lib pandas numpy
import tushare as ts
import talib
import pandas as pd
ts.set_token('YOUR_TUSHARE_TOKEN')
pro = ts.pro_api()
def get_stock_price(symbol: str) -> dict:
df = ts.get_realtime_quotes(symbol)
return {
"price": float(df['price'].iloc[0]),
"high_52w": float(df['high'].iloc[0]),
"low_52w": float(df['low'].iloc[0])
}
def get_technical_indicators(symbol: str, days=60) -> dict:
df = ts.pro_bar(ts_code=symbol, adj='qfq', freq='D', start_date='20240101')
df = df.sort_index(ascending=True)
close = df['close'].values
rsi = talib.RSI(close, timeperiod=14)[-1]
macd, signal, hist = talib.MACD(close)
ma20 = talib.SMA(close, 20)[-1]
ma60 = talib.SMA(close, 60)[-1]
return {
"rsi": rsi,
"macd": macd[-1],
"macd_signal": signal[-1],
"ma20": ma20,
"ma60": ma60,
"price": close[-1]
}
def get_fundamentals(symbol: str) -> dict:
# 简化:假设 symbol 是 ts_code,如 '600519.SH'
df = pro.daily_basic(ts_code=symbol, trade_date='20240614')
ifnot df.empty:
return {
"pe": df['pe'].iloc[0],
"pb": df['pb'].iloc[0],
"total_mv": df['total_mv'].iloc[0] # 亿元
}
return {"pe": None, "pb": None}
from qwen_agent import Agent
tools = [
{
"name": "get_stock_price",
"description": "获取股票当前价格和52周高低",
"parameters": {"symbol": "股票代码,如 '600519'"}
},
{
"name": "get_technical_indicators",
"description": "获取技术指标:RSI、MACD、均线",
"parameters": {"symbol": "股票代码"}
},
{
"name": "get_fundamentals",
"description": "获取基本面数据:PE、PB",
"parameters": {"symbol": "股票代码(带交易所后缀,如 '600519.SH')"}
}
]
system_prompt = """
你是一个专业的股票投资顾问AI,擅长结合技术面与基本面给出操作建议。
请根据工具返回的数据,回答以下问题:
1. 是否值得买入?当前是否是好时机?
2. 建议买入区间、止损位、目标卖出价。
3. 适合短线(<5天)、波段(1-3月)还是长线(>6月)?
4. 风险提示(如高估值、行业利空等)。
"""
agent = Agent(
model="qwen-max",
tools=tools,
system_prompt=system_prompt
)
# 用户提问
response = agent.run("分析贵州茅台(600519)现在是否适合买入?")
print(response)
股票:贵州茅台(600519) 当前价:1700 元 技术面:RSI=45(中性),MACD金叉,股价站上20日均线,但未突破60日均线。 基本面:PE=28,PB=8.5,估值偏高,但ROE>30%,行业龙头。 建议:
方向 | 说明 |
|---|---|
多因子模型 | 加入资金流、北向持仓、龙虎榜数据 |
回测验证 | 用 backtrader 验证策略历史表现 |
风险控制 | 加入最大回撤限制、仓位建议 |
多股票对比 | 同时分析多个标的,推荐最优 |
本地部署 | 用 Ollama + Qwen2.5-Coder + 本地数据,避免 API 依赖 |
本 AI Agent 仅用于技术演示,不构成投资建议。 股市有风险,入市须谨慎。AI 无法预测黑天鹅事件(如政策突变、财报暴雷)。 建议:AI 辅助决策 + 人工复核 + 严格止损。
如果你希望我提供 完整可运行的 GitHub 项目模板(含 Docker 部署、Web UI),也可以告诉我!