@/src\models\product_model.py @/src\models\ai_analysis.py @/src\ai\agent_product.py
在ai_analysis模型的文件中,需要用到 AI 进行推理分析才能存放结果。由于运营分析是一个综合考虑的过程,因此我希望可以使用多个 AI 模型或者多种数据多种方式来推理分析市场营销字段和竞品字段分析,有时候同一段数据也会生成多次分析。比较每次是否有差异。然后把AI分析的结果统一保存到一个单独集合中。虽然目前只有这两个字段需要分析,但是未来可能会有更多的字段需要分析。
我现在已经定义好了 AI分析 等数据模型在 ai_analysis.py 文件中,你接下来要完成业务逻辑,你参考 agent_product.py 的逻辑调用了模型的传参来分析,最终保存结果。但是不应该修改上述文件代码,而是用新文件来对 AI 有关功能编写逻辑。
@/src\ai\agent_ai_analysis.py
你已经新建文件 agent_ai_analysis.py ,但是我不确定逻辑和设计思路,你看有什么地方需要重构或者优化,或者用更多新建文件来完成业务逻辑。
@/src\models\product_model.py @/src\models\ai_analysis.py src\ai\agent_product.py
在产品模型的文件中,有几个字段需要重构,改为外部集合。 Product.marketing 、Product.competitor_analyze 、Product.ai_analysis_compare 。 你会发现这些字段都需要用到 AI 进行推理分析才能存放结果。由于运营分析是一个总和考虑的过程,因此我希望可以使用多个 AI 模型或者多种数据多种方式来推理分析市场营销字段和竞品字段分析,有时候同一段数据也会生成多次分析。比较每次是否有差异。然后把AI分析的结果统一保存到一个单独集合中。虽然目前只有这两个字段需要分析,但是未来可能会有更多的字段需要分析。
我现在已经定义好了 AIAnalysisCompetitor 、AIAnalysisMarketing 等数据模型在 ai_analysis.py 文件中,你接下来要完成业务逻辑,你参考 agent_product.py 的逻辑,帮我新建文件,在新的文件里面完成最佳的程序设计。请不要修改任何文件,你只能在新文件中重新设计程序。
@/src\models\product_model.py 在产品模型的文件中,有几个字段需要重构,改为外部集合。 Product.marketing 、Product.competitor_analyze 、Product.ai_analysis_compare 。 你会发现这些字段都需要用到 AI 进行推理分析才能存放结果。由于运营分析是一个总和考虑的过程,因此我希望可以使用多个 AI 模型或者多种数据多种方式来推理分析市场营销字段和竞品字段分析,然后把AI分析的结果统一保存到一个单独集合中。虽然目前只有这两个字段需要分析,但是未来可能会有更多的字段需要分析。
并且 AI 分析不同大模型的结果可以进行对照,也可以再次重新生成,反正应该总是涉及数据量改动,所以我认为把它作为一个单独的MongoDB集合符合最佳设计。
在 AI 专用的集合中,我设想可以这样定义 class Somename(Document): name 该文档名称,例如 marketing 、 competitor_analyze ,未来可能有更多字段或者别的用处,例如分析 销售额?评论? product 使用 beanie-odm Link 链接到 Product 文档 model 模型名称,例如 deepseek-r1 prompt 提示词
或者也有别的类型的文档在同一个集合中 class Somename2(Document):
name 该文档名称,例如 marketing 、 competitor_analyze ,未来可能有更多字段或者别的用处,例如分析 销售额?评论? type asin 使用 beanie-odm Link 链接到 Product 文档 model 模型名称,例如 deepseek-r1 comment
你觉得我上述构思怎么样,给我完善和更多建议,我需要在一个新的文件中定义这个集合。给我最佳数据结构的设计方案,需结合我当下的场景。
@/src\models\product_model.py @/src\models\config_model.py @/docs\gpt\website\beanie-odm-link.md
product AIAnalyzeCompare 集合的字段 marketing_template_name competitor_template_name 我觉得改为直接引用文档更合理,是否可以通过 beanie-odm 来自动加载数据。
userconfig 集合中的 AIPromptConfig 似乎要改为文档才可以被外部引用对吗? 同时要注意 AIPromptConfig 是归属于 哪个 User
请使用标准的 beanie-odm 编程,参考文档: beanie-odm-link.md
新的集合和文档结构理应在一个新文件中。
@/src\models\product_model.py @/src\ai\agent_product.py @/docs\gpt\llmaindex_prompt.md @/src\manager\manager_task.py
我在大模型分析运营数据的过程中,想对比多个版本的 AI 分析结果,因此在 MongoDB Product 文档中有些字段需要对比多个不同的分析结果。通常 product.basic_info 、product.competitor_crawl_data variants 这些字段的数据是固定的,但是 marketing 、 competitor_analyze 是由AI分析的,我可能要使用不同的大模型,或者使用不同的 prompt 提示词以对比各个情况下最佳的AI分析结果。 例如基于不同的大模型 model 得出的分析结果: deepseek-r1:
doubao
marketing ... 基于不同提示词得出结果
product.competitor_analyze = get_from_deepseek_r1()
model = "deepseek-r1"
prompt = f"我是亚马逊运营,。。。。 数据 {product.basic_info} {product.competitor_analyze} ..."
product.competitor_analyze = get_from_doubao_competitor_analyze()
model = "doubao"
prompt = f"我是亚马逊运营,。。。。 数据 {product.basic_info} {product.competitor_analyze} ..."
product.marketing = ai_analyze_marketing(model, prompt)
在 agent 中新增方法用于从 _prepare_prompt_template 中格式化。必须要参考 llmaindex 的模板方法
官方定义推荐关键词: 保持简洁:虽然 200 个字符是允许的最大字符数,但我们建议您使用 80 个或更少字符,因为手机屏幕会缩短较长的商品名称避免冗余:请勿在商品名称中包含冗余信息、不必要的同义词或过多的关键词优化词序:仅包含有助于买家快速识别和了解商品的信息,将词语排序以优先展示最重要的商品信息。如果适用,您可以考虑以下顺序:品牌名称-口味/款式-商品类型名称-关键属性(即商品的唯一销售主张)-颜色-尺寸/包装数量-型号。
例如,在某个竞品的产品信息中“MEL Chemistry大径 肉厚 ペットコード ペット 犬 猫 キャット ドッグ 噛みつき 防止 感電 保護 家電 チャージ コード 配線 プロテクター カバー 螺旋 スパイラル チューブ ラップ 被覆 破れ 防止 破損防止 補強 収納 収束 結束 まとめる TPU 約93cm (ブラック 黒)B0B658JC22”
@/tests\mytest\models\t_filed.py @/src\models\product_model.py
output_fields = get_field_descriptions(AICompetitorAnalyzeMainKeywordsResult)
示例输出格式:
{ "results": [
{
"asin": "商品编号描述",
"main_key": "主要关键词描述",
"monthly_searches": "月搜索量描述"
}
], "supplement": "补充说明描述", "tail_keys": [
{
"tail_key": "长尾关键词描述",
"monthly_searches": "月搜索量描述"
}
] }
不要修改 product_model.py 。帮我实现获取该模型的字段名和描述词。
要通用可扩展,如果我有许多模型,需要能有一个通用的函数,可以处理任意模型。 编程必须最小模块化,单一职责,不要硬编码。
class AICompetitorAnalyzeMainKeywords(BaseModel):
asin:str = Field(default=None, description="商品(竞品)编号")
main_key:str = Field(default=None, description="主要关键词")
monthly_searches: Optional[int] = Field(default=None, description="月搜索量")
reason:Optional[str] = Field(default=None, description="选择该主关键词原因")
crawl_result: Optional[SearchAmazoneKeyResult] = Field(
default=None,
description="爬取AI分析出来的主关键词"
)
created_at:Optional[datetime] = Field(default_factory=datetime.now)
class AICompetitorAnalyzeMainKeywordsResult(BaseModel):
class TailKey(BaseModel):
tail_key:str = Field(default=None, description="长尾关键词")
monthly_searches:int = Field(default=None, description="月搜索量")
results:Optional[List[AICompetitorAnalyzeMainKeywords]] = []
supplement:Optional[str] = Field(
default=None,
description="补充说明"
)
tail_keys: Optional[List[TailKey]] = Field(
default=[],
)
OUTPUT: {'results': [{'asin': '商品(竞品)编号', 'main_key': '主要关键词', 'monthly_searches': '月搜索量', 'reason': '选择该主关键词原因', 'crawl_result': {'search_key': '', 'suggestions': [''], 'mhtml_path': '', 'screenshot': '', 'error': '', 'msg': '', 'created_at': ''}, 'created_at': ''}], 'supplement': '补充说明', 'tail_keys': [{'tail_key': '长尾关键词', 'monthly_searches': '月搜索量'}]}
编程规范: 要通用可扩展,如果我有许多模型,需要能有一个通用的函数,可以处理任意模型。 编程必须最小模块化,单一职责,不要硬编码。
现在我想实现类似 model_dump_json 的功能 include exclude ,不传参时默认全部。为了单一职责应该创建另一个函数来实现对吗
@/src\ai\agent_product.py
@/src\models\field_config.py
@/src\models\product_model.py
get_field_descriptions 有没有更加优雅的实现方式?我不想要 FieldConfig ConfigManager 。 只想通过传参获取描述: output_fields = get_field_descriptions(AICompetitorAnalyzeMainKeywordsResult)
示例输出格式:
{ "results": [
{
"asin": "商品编号描述",
"main_key": "主要关键词描述",
"monthly_searches": "月搜索量描述"
}
], "supplement": "补充说明描述", "tail_keys": [
{
"tail_key": "长尾关键词描述",
"monthly_searches": "月搜索量描述"
}
] }
@/src\ai\agent_product.py @/src\models\product_model.py @/src\manager\manager_task.py
agent_product 分析结果: { "results": [
{
"asin": "B0B658JC22",
"main_key": "配線カバー",
"monthly_searches": "35,521",
"reason": "该关键词在所有竞品中搜索量最高,且与产品名称'电线保护套'高度相关,符合日本市场对产品功能性的需求。"
},
{
"asin": "B0B658JC22",
"main_key": "ケーブルカバー",
"monthly_searches": "16,103",
"reason": "搜索量排名第二,广泛用于描述电线保护产品,适合作为主要关键词之一。"
},
{
"asin": "B0B658JC22",
"main_key": "スパイラルケーブル",
"monthly_searches": "10,806",
"reason": "搜索量超过1万,且与产品的螺旋设计特点相关,适合吸引特定需求的消费者。"
}
], "supplement": "日本市场消费者对产品的功能性和设计细节有较高要求,选择搜索量高且与产品特性紧密相关的关键词有助于提高产品的可见性和吸引力。" } 帮我在 manager_task.py 新增代码,调用 agent 将分析结果存入 mongodb 。从数据模型可知,结果应该存储在 competitor_analyze 字段。
@/src\ai\agent_product.py @/src\models\product_model.py 帮我修改 task 方法,我主要用于提取有关数据给 llm 作为提示词,我需要的数据有 crawl_data.extra_result.product_info crawl_data.extra_result.result_table 不过为了节省字符串长度,有些字段是不需要的,例如 image_url 、 goto_amazon、 img_path 、keyword_link、amazon_search_link 、unique_words
并且在筛选完成后,这些字段理论上应该会有描述信息,现在我只能在字段串中硬编码的定义,是否有更加通用和优雅的办法获取自动获得该模型的字段名和描述词。不想硬编码 analyz_main_keyword_template_str
analyz_main_keyword_template_str = '''
我是亚马逊运营,我在给产品名称为 {product_name} 选主要关键词,附件中是我从同类竞品的关键词搜索量数据,总共有 {competitor_count} 个竞品数据。
例如
- asin 是竞品商品的编号
- product_info 是该竞品商品的信息
- result_table.traffic_keyword 是该竞品商品的同类相关的关键词搜索量数据,
- monthly_searches 是同类相关的关键词月搜索量
它所在的列是它的关键词,第二列是该竞品搜索关键词月搜索量。
末尾包含了该产品的所有信息。
往右是第二个商B0CQ1SHD8V 也是一样。帮我选出他们两个的相同关键词并且搜索量在1万以上来作为我产品的主要关键词3个。
如果竞品的所有关键词搜索量都没有达到1万以上的话,就从排名前十的关键词里筛选三个搜索量最大相关性最强的词最为主关键词。
'''
text_qa_template = PromptTemplate(analyz_main_keyword_template_str)