Conversation
- 后端:新增 /api/v1/recommendation 端点(推荐提交、状态轮询、历史查询) - 前端:新增 /recommend 选股页面(表单提交、进度展示、结果与历史记录) - 服务层:股票筛选器、内容提取器、LLM 推荐服务 - 数据层:RecommendationHistory 模型与 Repository - 支持按市场/价格区间筛选,结合舆情 URL/文件/备注进行 AI 分析 - 新增 python-docx 依赖用于 DOCX 文件解析 - 包含单元测试覆盖
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
🤖 自动审查报告
📁 修改的文件
... 还有 10 个文件 🧠 AI 代码审查意见结论Not Ready 结构化审查结果
|
ZhuLinsen
left a comment
There was a problem hiding this comment.
评审结论
- 必要性:通过,新增独立的 AI 选股推荐能力,覆盖后端接口、服务层、持久化和 Web 工作台,业务目标明确。
- 是否有对应 issue:无(PR 描述未填写
Fixes #.../Refs #...,也未说明无 Issue 时的验收标准) - PR 类型:feat,新增
/api/v1/recommendation端点、推荐服务、历史表与/recommend页面,属于新能力扩展。 - description 完整性:不完整,缺少
Background And Problem、Scope Of Change、Issue Link、实际执行过的Verification Commands And Results、Compatibility And Risk、Rollback Plan;另外按AGENTS.md,未更新README.md时需要说明原因和信息实际落点,当前描述也未补充。 - 是否可直接合入:不可,核心阻断点是多市场联合筛选时的候选排序存在跨币种直接比较的正确性风险,会直接影响最终推荐结果。
主要问题
[Correctness blocker] src/services/stock_screener.py:screen()把 A 股、港股、美股候选合并后,直接按amount做全局降序截断;但同文件前面又明确港股/美股成交额阈值是“对应币种”。这意味着多市场模式下实际在用 CNY/HKD/USD 的原始数值做同量纲比较,最终 Top N 候选会被系统性偏置,进而改变 LLM 可见候选集和推荐结果。该 PR 又把“按市场组合筛选”作为主打能力,所以这不是旧债旁支,而是本 PR 新放大的核心正确性问题。置信度:高。[Process blocker] README.md / docs / PR 描述:仓库已有通用部署文档和 changelog,但本次新增的/api/v1/recommendation/*语义、输入约束(文件数量/大小/格式、URL 数量、价格区间、多市场组合)以及/recommend页面交互,除了docs/CHANGELOG.md外没有看到对应专题说明;同时按AGENTS.md,未更新README.md时应在交付说明或 PR 描述中写明原因和文档落点,当前也缺失。对用户可见新功能来说,这部分仍不满足仓库约束。置信度:中。tests/:当前新增测试主要覆盖了解析、筛选和文本提取的单元逻辑,没有看到 recommendation API 的 multipart 提交、任务状态/历史/详情接口,以及“多市场联合筛选”场景的回归用例;因此上面的核心风险没有被自动化验证兜住。置信度:高。
🤖 此回复由 OpenReview Bot 自动生成,仅供参考。如有疑问请 @维护者。
|
@ZhuLinsen 大佬麻烦看看 |
ZhuLinsen
left a comment
There was a problem hiding this comment.
跟进结论
- 结论:部分接受 + 重新核对当前 head 后,文档覆盖这一点可以收窄,但 PR 描述层面的必填信息仍然没有补齐。
- 是否仍有阻断:有 + 当前代码与文档改动已基本覆盖功能说明,但 PR 描述里仍缺少 Issue 关联/验收标准、实际验证结果和可执行回滚方案,未满足仓库既定合入要求。
说明
- 之前如果把问题表述成“缺少用户可见变更文档”,这条需要收窄。当前 diff 里
docs/CHANGELOG.md已按扁平格式补充 3 条[新功能],docs/webserver-setup.md也新增了这套能力的接入说明;就“新增能力是否完全无文档”这一点,现状不成立。 - 但这不等于 PR 描述已经完整。当前 PR 正文里
Background And Problem、Scope Of Change、Issue Link、Verification Commands And Results、Compatibility And Risk、Rollback Plan这些模板项仍是空的,结构化事实也明确显示未检测到Fixes #.../Refs #...。这属于 PR 元数据未补齐,不是文档文件能替代的。 README.md未改本身不构成单独阻断,因为本次已经把说明落到了docs/webserver-setup.md和docs/CHANGELOG.md;但按仓库规则,若不更新README.md,应在 PR 描述中说明原因以及信息实际落点,当前也还没有补。- 当前 CI 为 success,
mergeable_state=blocked这里不能单独作为阻断依据;我保留“有阻断”的原因仅来自仓库协作规则中对 PR 描述完整性和回滚方案的要求,而不是合并状态本身。
🤖 此回复由 OpenReview Bot 自动生成,仅供参考。如有疑问请 @维护者。
ZhuLinsen
left a comment
There was a problem hiding this comment.
评审结论
- 必要性:通过 + 新增独立的 AI 选股推荐能力,覆盖 API、服务层、持久化和 Web 工作台,业务目标明确。
- 是否有对应 issue:无(PR 描述未填写
Fixes #.../Refs #...,也未说明无 Issue 时的验收标准) - PR 类型:feat + 新增
/api/v1/recommendation端点、推荐服务、历史表与/recommend页面,属于用户可见的新能力扩展。 - description 完整性:不完整 + 缺少
Background And Problem、Scope Of Change、Issue Link、实际执行过的验证命令与结果、Compatibility And Risk、Rollback Plan,Checklist 也未补齐。 - 是否可直接合入:不可 + 当前存在合并冲突;此外还有异步任务状态持久化问题需要先补齐,否则服务重启后会出现任务永久卡住/历史状态失真的情况。
主要问题
- [Correctness blocker]
src/services/recommendation_service.py、api/v1/endpoints/recommendation.py、src/repositories/recommendation_repo.py:任务生命周期只在RecommendationTaskManager这个进程内内存结构里维护,落库时仅在提交前写一条pending,完成/失败时再回写结果。这样一旦服务在任务执行中重启,内存状态丢失,但数据库里仍是旧的pending记录;GET /api/v1/recommendation/status/{task_id}的 fallback 逻辑会直接把这条库记录当成当前状态返回,前端就会看到一个永远 0%/pending 的任务,且没有恢复或兜底失败标记。对这个 PR 新增的“状态轮询 + 历史查询”主链路是实质性正确性风险。置信度:高。 - [Correctness blocker]
api/v1/endpoints/recommendation.py、src/repositories/recommendation_repo.py:提交接口里repo.create(...)的返回值没有校验,而仓库层在写库失败时会吞掉异常并返回0。这意味着数据库写入失败时,接口仍会返回“推荐任务已提交”,后台线程也会继续跑;但后续历史记录、重启后的状态查询、详情查询都没有可靠持久化依据。这会把“提交成功”与“可追踪可回放”分离,和本仓库对稳定性优先的要求不一致。置信度:高。 - [Process blocker] 结合仓库
AGENTS.md与 PR 模板,本 PR 已更新了docs/CHANGELOG.md和docs/webserver-setup.md,所以“完全无文档”这一点不成立;但 PR 描述仍缺少必填的 issue/验收标准、实际验证结果、兼容性影响、回滚方案。当前这些不是单纯格式问题,而是仓库默认合入要求的一部分,尤其这次改动同时触达 API、Schema 风格、Web 页面、依赖和持久化层,缺少这些信息会降低后续回归和回滚可操作性。
🤖 此回复由 OpenReview Bot 自动生成,仅供参考。如有疑问请 @维护者。
ZhuLinsen
left a comment
There was a problem hiding this comment.
评审结论
- 必要性:通过 + 新增 AI 选股推荐能力,覆盖 API、服务层、持久化和 Web 工作台,业务价值明确,和仓库现有股票分析主链路相关。
- 是否有对应 issue:无(PR 描述未填写
Fixes #.../Refs #...,也未说明无 Issue 时的验收标准) - PR 类型:feat + 新增
/api/v1/recommendation相关接口、推荐服务、历史记录存储和/recommend页面,属于用户可见的新功能扩展。 - description 完整性:不完整 + 缺少
Background And Problem、Scope Of Change、Issue Link;Verification Commands And Results未给出实际执行命令和关键结果;Compatibility And Risk未填写;Rollback Plan缺失;且本次未更新README.md也未按AGENTS.md说明信息实际落点。 - 是否可直接合入:不可 + 当前分支存在冲突,且 PR 描述仍未满足仓库
AGENTS.md/ PR 模板要求,至少需要补齐可执行回滚方案、Issue/验收标准、实际验证结果后再评估。
主要问题
- [Process blocker] 当前结构化事实显示“存在冲突,当前不能直接合并”。这不是单纯的分支保护状态,而是明确的合并冲突;在冲突未解决前不能判定可直接合入。
- [Process blocker] PR 描述缺少仓库明确要求的合入信息。按
AGENTS.md第 8、9 节,至少应补齐 Issue 关联或无 Issue 时的验收标准、实际执行过的验证命令与关键结果、兼容性/风险说明、可执行回滚方案;这些目前仍为空或只勾选了 checklist,没有形成可审计证据。 - [Process blocker] 本次是用户可见新能力,代码侧已补
docs/CHANGELOG.md和docs/webserver-setup.md,但未改README.md。按AGENTS.md,如果不更新README.md,需要在交付或 PR 描述中明确说明原因,以及信息实际落在哪份文档;当前这部分说明缺失。 - [Nice to have] 从前端状态管理实现看,
apps/dsa-web/src/stores/recommendStore.ts使用setInterval轮询异步poll,没有请求互斥控制;当接口响应时间超过 3 秒时,可能出现并发轮询请求重叠。现有 diff 还不足以证明一定出错,但这是本 PR 新引入的行为风险,置信度:中。
🤖 此回复由 OpenReview Bot 自动生成,仅供参考。如有疑问请 @维护者。
- 添加新浪和腾讯的批量接口,提供 A 股全市场快照获取功能,增强数据源的多样性 - 实现 A 股代码列表的缓存机制,优化性能 - 更新相关函数以支持新的数据获取方式,确保在不同情况下的可靠性 - 增强日志记录,便于调试和监控数据获取过程
ZhuLinsen
left a comment
There was a problem hiding this comment.
评审结论
- 必要性:通过 + 新增 AI 选股推荐能力,覆盖 API、服务层、持久化和 Web 工作台,和仓库现有股票分析主链路相关,业务价值明确。
- 是否有对应 issue:无(描述中未填写
Fixes #.../Refs #...,也未说明无 Issue 时的验收标准) - PR 类型:feat + 新增
/api/v1/recommendation相关接口、推荐服务、历史记录存储和/recommend页面,属于用户可见的新功能扩展。 - description 完整性:不完整 + 缺少
Background And Problem、Scope Of Change、Issue Link、实际执行过的验证命令与关键结果、可执行回滚方案;且README.md未改动时,描述里也没有按AGENTS.md说明本次为什么不更新 README 以及信息实际落到哪份文档。 - 是否可直接合入:不可 + 当前结构化事实已明确“存在冲突,当前不能直接合并”;此外 PR 描述仍未满足仓库模板和
AGENTS.md对 issue/验证/回滚的合入要求。
主要问题
[Correctness blocker]apps/dsa-web/src/api/recommendation.ts在提交FormData时显式写死Content-Type: multipart/form-data。这类请求通常应由浏览器自动补 boundary;当前写法有兼容性风险,可能在部分环境下导致后端无法正确解析上传文件或表单字段。置信度:中。[Process blocker]PR 描述未补齐仓库要求的关键信息:没有 issue 关联或无 issue 的验收标准,没有实际执行过的验证命令和结果,没有回滚方案。按AGENTS.md的默认交付结构,这些都属于合入前应补齐的必填项。[Process blocker]本次是用户可见的新能力,代码侧已经补了docs/CHANGELOG.md和docs/webserver-setup.md,所以“完全无文档”这一点不成立;但README.md未更新时,PR 描述也没有说明为何不更新以及信息实际落在哪份文档,这一点仍不满足仓库文档治理要求。
🤖 此回复由 OpenReview Bot 自动生成,仅供参考。如有疑问请 @维护者。
|
@ZhuLinsen 请问可以合并了吗 |
ZhuLinsen
left a comment
There was a problem hiding this comment.
跟进结论
- 结论:部分接受 + 当前 head 的功能实现和 CI 状态已经基本到位,但还不能认定“现在可以直接合并”,因为仍有明确冲突,且 PR 描述/文档收口没有完全补齐。
- 是否仍有阻断:有 + 结构化事实已经明确显示当前分支存在冲突、不能直接合并,同时 PR 描述里的回滚方案仍未补齐。
说明
- docs/CHANGELOG.md 已按 Unreleased 扁平格式补了 3 条新功能记录,所以“完全没有用户可见文档”这条判断可以收窄。
- 但 docs/webserver-setup.md 目前是 Web + Server 部署指南,未看到 /recommend 或 /api/v1/recommendation 的功能说明;README.md 也没有同步更新,因此“新增能力的相关文档已经补齐”这条现在还不能完全成立。
- PR 描述里,Issue Link 仍没有 Fixes/Refs 或“无 issue 时的验收标准”,Rollback Plan 仍为空;按仓库 AGENTS.md,回滚方案缺失仍是合入前需要补齐的项。
- 当前 CI 是 success,所以我这里不再把阻断放在测试失败上;现阶段真正阻断的是“明确存在合并冲突”以及上面的 PR 元信息缺口。
🤖 此回复由 OpenReview Bot 自动生成,仅供参考。如有疑问请 @维护者。
PR Type
Background And Problem
请描述当前问题、影响范围与触发场景。
(EN) Describe the problem, its impact, and what triggers it.
Scope Of Change
请列出本 PR 修改的模块和文件范围。
(EN) List the modules and files changed in this PR.
Issue Link
必须填写以下之一 / Fill in one of:
Fixes #<issue_number>Refs #<issue_number>Verification Commands And Results
请填写你实际执行过的命令和关键结果(不要只写"已测试")。
(EN) Paste the commands you actually ran and their key output (don't just write "tested"):
关键输出/结论 / Key output & conclusion:
Compatibility And Risk
请说明兼容性影响、潜在风险(如无请写
None)。(EN) Describe compatibility impact and potential risks (write
Noneif not applicable).Rollback Plan
请至少写一句可执行的回滚方案(必填)。
(EN) Provide at least one actionable rollback step (required).
EXTRACT_PROMPT Change (if applicable)
若本 PR 修改了
src/services/image_stock_extractor.py中的EXTRACT_PROMPT,请在此处粘贴完整变更后的 prompt。If this PR changes
EXTRACT_PROMPTinsrc/services/image_stock_extractor.py, paste the full updated prompt here:展开 / Expand: Full EXTRACT_PROMPT
Checklist
docs/CHANGELOG.md;若未更新README.md,已说明原因与文档落点 / If user-visible changes are included, the relevant docs anddocs/CHANGELOG.mdare updated; ifREADME.mdwas not updated, the reason and documentation location are explained