反思

我曾在4中提到实现用户偏好智能画像模块的基本思路。
现在实际实现起来,发现其还存在一个巨大的问题:
就是多个功能混成了一个大功能,没有遵循单一职责原则。
在这里插入图片描述
上图所示原来的用户偏好智能画像模块实际上包含3个功能:

  1. 多层记忆
  2. 用户画像
  3. 自我优化

因为我们的astrbot自身已提供记忆功能,我们这里先只实现单纯的用户画像功能。

大模型选择

这里我们选择一个独立的astrbot实例作为构建用户画像的接口,保证构建用户画像的astrbot上下文的干净。

整体思路

在这里插入图片描述
(上图有一个小问题,就是自选股表还是需要建立的,因为每个用户的自选股是不一样的,需要一个表将user_id和stock_id联系起来)

根据用户和astrbot之间的聊天记录,收藏的帖子,自选股列表和策略表抽取出用户的投资偏好画像。

app输入

聊天记录,收藏的帖子(标题和关联的股票),自选股列表,策略表

astrbot处理(这里我们的astrbot是一个独立的astrbot,以保证astrbot实例上下文的干净)

提示词:你是用户投资画像分析专家。请根据用户和astrbot的聊天记录{聊天记录},收藏的论坛中的帖子{收藏帖子},自选股列表{自选股列表},策略表{策略表},分析这个用户的投资偏好画像,输出格式如

{
“risk_level”: “中等偏保守”,
“preferred_style”: [“低估值”, “稳健成长”, “高股息”],
“disliked_style”: [“追高”, “强题材炒作”, “高换手短线”],
“preferred_industries”: [“消费”, “银行”, “电力”],
“avoid_industries”: [“ST股”, “退市风险股”, “高波动小盘股”],
“capital_preference”: “更关注本金安全”,
“drawdown_tolerance”: “不希望单只股票亏损超过8%”,
“decision_style”: “希望先看风险,再看收益”,
}
注意,这里我们需要对astrbot http_adapter进行修改,对消息处理函数进行画像生成功能的适配,以区分普通聊天和画像生成

返回给app

app接受用户画像,更新用户画像表。用户画像表包含9个属性:id,risk_level,preferred_style,disliked_style,preferred_industries,avoid_industries,capital_preference,drawdown_tolerance,decision_style.

前后端

点击用户画像分析按钮,app调用astrbot接口输入用户画像分析需要的数据。如果输入的内容过少(至少包含聊天记录,收藏的帖子(标题和关联的股票),自选股列表,策略表),提示缺少数据。一旦用户画像返回app成功,就用可视化的方法展示新更新的用户投资偏好画像。

前置约束

  1. 对于聊天记录,在实现app与astrbot建立连接的过程中已建立聊天记录表。

  2. 对于收藏帖子,在实现论坛功能时已建立forum_post表和post_collection表

  3. 对于自选股,这里需要我们新建股票表和自选股表,然后把对股票的相关文字介绍纳入introduction属性。

  4. 对于策略,这里是前置约束中最难实现的一环。
    这里我们需要的策略不同于队友实现的。这里的策略是内置于专属聊天机器人中的策略,是vip功能。具体来说,这里的策略相关的功能除了包括策略生成外,还包括策略反馈。同时,这里的策略生成功能服务于且受用户画像功能的影响。astrbot返回策略时,会返回多种不同风格的策略,其中包括根据你的用户画像定制的策略,然后根据你对各个策略的反馈,astrbot又会进一步调整你的用户画像。

在这里插入图片描述

策略及策略反馈的实现

app输入

聊天输入框上添加策略按钮,点击这个按钮弹出一个表,可供我们选择或填写股票名称(必填)
然后真正传入astrbot的是股票名称、代码以及用户画像。

astrbot处理

  1. 无用户画像输入的情况。
    提示词:为{所填股票}制定4个策略,风险等级分别为:低,中,高,极高。每个策略的输出格式为:
    [
    股票名:
    代码:
    买入条件:
    卖出条件:
    风险等级:

    ]

  2. 有用户画像输入的情况。
    提示词:为{所填股票}制定5个策略,用户的投资偏好画像为{用户画像},风险等级分别为:低,中,高,极高和根据用户画像制定的专属策略(风险等级为专属)。每个策略的输出格式为:
    [
    股票名:
    代码:
    买入条件:
    卖出条件:
    风险等级:

    ]

注意,这里我们需要对astrbot http_adapter进行修改,对消息处理函数进行策略生成功能的适配,以区分普通聊天和策略生成

返回给app

1次请求策略返回4个或5个策略。用户点击返回的每个策略,可以对策略进行打分(1-10分之间)。打分后,存入投资策略表,投资策略表包含7个属性:id,股票名,股票代码,买入时机,卖出时机,风险等级,用户打分。

聊天记录

调用和astrbot聊天记录表中近200条聊天记录返回给用户画像功能。

自选股

不用为自选股建表。而是建立股票表(具体的数据由管理员在数据库中填充,这里只负责建表),股票表的属性有5个:id,name,introduction,field,is_chosen。然后前后端加一个增删自选股的操作。这样只要扫描股票表,就能根据is_chosen得到所有的自选股信息返回给用户画像功能。同时,由于论坛中发布帖子的功能中原来的选择帖子相关的股票是通过模拟实现的,现在因为有了股票表,我们发帖子的时候就可以真实实现帖子和具体股票的关联。

收藏帖子信息

遍历收藏的帖子表,得到{标题,管理股票}数据返回给用户画像构建功能。

关系表

新增股票表
自选股表
用户画像表
策略表

补充

我的astrbot是用于提供交易策略等功能的,是用户投资偏好画像的使用方。所以,分析并总结用户的投资画像的astrbot应该是一个新开的实例,,而对话历史才是来自我们和astrbot之间的主实例。(这里为了万无一失,我可以再开一个astrbot实例,http请求接口改成8090,单独服务于用户画像分析。)

前端展示

用户画像

在这里插入图片描述

astrbot ai助手的策略生成及评价

在这里插入图片描述

在这里插入图片描述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐