股票问答系统用Python怎么搭建?散户也能看懂的实战指南

企业微信

股票问答系统到底在解决什么问题

散户每天要面对几千只股票、几十个指标,想查一个数据得在软件里点好几层菜单。股票问答系统干的事很简单:你说一句“茅台现在多少钱”,系统直接把最新价、涨跌幅甩给你。它把“人找数据”变成“数据找人”,省下来的时间用来琢磨买卖点。

用Python搭这套东西,不需要一上来就搞深度学习。从本地数据加简单规则开始,三天就能跑通一个能用的版本。下面把每个模块拆开讲,代码能直接复制改。

股票问答系统用Python怎么搭建?散户也能看懂的实战指南

系统骨架就三层 别想复杂了

一层管数据,一层管听懂人话,一层管把答案拼出来。数据层负责把行情、财务指标拉到本地;解析层负责把用户的问题拆成“哪只股票、什么指标、什么时间”;回答层根据解析结果去数据层取数,套模板输出。

三层之间用字典传参,结构清爽。数据层用pandas存成DataFrame,解析层输出一个json,回答层拿到json直接查表。


# 最简三层结构示意

stock_data = {

    '600519': {'name': '贵州茅台', 'price': 1700.0, 'pe': 35.2},

    '000001': {'name': '平安银行', 'price': 11.5, 'pe': 5.1}

}

def parse_question(q):

    # 返回 {'code': '600519', 'field': 'price'}

    pass

def answer(parsed):

    code = parsed['code']

    field = parsed['field']

    return stock_data[code][field]

数据从哪来 别一上来就买贵接口

做问答系统,数据更新频率不用像高频交易那么苛刻。日线级别用akshare或者tushare的免费额度足够。akshare不需要token,直接调函数拿A股实时行情和历史K线。tushare积分够的话财务数据更全。

本地存一份csv或者sqlite,每天收盘后跑一次增量更新。问答系统查的时候先读本地,本地没有再触发网络请求。这样响应快,也不怕接口限流。


import akshare as ak

# 拿A股实时行情快照

df = ak.stock_zh_a_spot_em()

# 筛出茅台那行

row = df[df['代码'] == '600519'].iloc[0]

print(row['最新价'], row['涨跌幅'])

把这只股票的名称、代码、最新价、涨跌幅、市盈率、换手率存进字典。股票池别贪多,先覆盖沪深300成分股,三千多条数据在内存里随便查。

听懂人话 用规则匹配比大模型稳

问句五花八门,“茅台多少钱”“600519现价”“贵州茅台市盈率多少”。先做分词和实体识别,把股票名和指标词抽出来。股票名用全称和简称两张表匹配,指标词建一个同义词词典:现价、最新价、价格都映射到price;市盈率、pe映射到pe。

时间维度单独处理。问“昨天收盘”就把日期解析成上一个交易日,问“近五天涨幅”就取五日收益率。规则引擎的好处是行为可预期,散户自己维护起来不费劲。


import re

name_map = {'贵州茅台': '600519', '茅台': '600519', '平安银行': '000001'}

field_map = {'现价': 'price', '最新价': 'price', '市盈率': 'pe', 'pe': 'pe'}

def parse_question(q):

    code = None

    for name, c in name_map.items():

        if name in q:

            code = c

            break

    if not code:

        m = re.search(r'\d{6}', q)

        if m:

            code = m.group()

    field = None

    for word, f in field_map.items():

        if word in q:

            field = f

            break

    return {'code': code, 'field': field}

解析完检查code和field是否为空,为空就反问用户“您问的是哪只股票”或者“您想查价格还是市盈率”。别硬答,答错了比不答更伤信任。

回答模板 把数字翻译成人话

查到数据别光甩一个数字。价格带一句涨跌幅,市盈率带一句行业对比。用户问“茅台多少钱”,回答“贵州茅台最新价1700元,今日涨1.2%”。问“平安银行市盈率”,回答“平安银行市盈率5.1倍,低于股份制银行中位数”。

模板用字符串格式化,字段从解析结果和数据字典里取。涨跌幅正负号加红绿文字标识在终端里用ANSI转义,网页端加css类。


def build_answer(parsed, data):

    code = parsed['code']

    field = parsed['field']

    info = data[code]

    if field == 'price':

        return f"{info['name']}最新价{info['price']}元,涨跌幅{info['pct']}%"

    if field == 'pe':

        return f"{info['name']}市盈率{info['pe']}倍"

    return "暂不支持该指标"

进阶方向 让系统自己学会查

规则引擎覆盖八成常见问题,剩下两成靠意图分类模型。用几百条标注好的问句训练一个朴素贝叶斯或者轻量BERT,把问题分到价格类、财务类、技术指标类。分类结果再走对应的取数逻辑。

期货问答同理,把股票代码换成合约代码,指标换成基差、持仓量、涨跌幅。数据接口换成期货行情源,解析层加一个合约月份识别,其余结构照搬。

量化交易场景下,问答系统能当策略的回测数据查询入口。问“螺纹钢主力过去一年最大回撤”,系统调历史数据跑一遍计算再返回结果。计算函数独立成模块,问答层只负责路由。

散户上手路线图

第一天装好akshare和pandas,把沪深300快照拉下来存本地。第二天写解析函数,用十个问句测试股票名和指标词抽取。第三天写回答模板,把查询链路串起来。第四天加异常处理,没匹配到实体就反问,数据缺失就提示“该股票停牌或数据未更新”。

这套系统不替你下单,但让你在盘中少切三次软件,少翻五个网页。信息差缩小一点,决策质量就高一点。代码不长,关键是先跑起来,再慢慢加指标、加市场、加意图分类。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/gupiao-wenda-xitong-Python-1427.html