Initial commit: stock analysis backend and prototype UI.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
37
backend/rag.py
Normal file
37
backend/rag.py
Normal file
@@ -0,0 +1,37 @@
|
||||
"""轻量 RAG:检索与个股/大盘相关的资讯,做情绪标注,作为 LLM 上下文降低幻觉。
|
||||
|
||||
当前为基于来源接口 + 关键词情绪的检索式上下文;后续可平滑升级为向量检索(embedding + 向量库)。
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import akshare_service as svc
|
||||
|
||||
|
||||
def stock_news(symbol: str, limit: int = 5):
|
||||
"""返回个股相关资讯(已带利好/利空标注)。"""
|
||||
try:
|
||||
data = svc.get_stock_news(symbol, limit=limit)
|
||||
return data.get("list", [])[:limit]
|
||||
except Exception:
|
||||
return []
|
||||
|
||||
|
||||
def _senti_score(items):
|
||||
pos = sum(1 for x in items if x.get("sentiment") == "利好")
|
||||
neg = sum(1 for x in items if x.get("sentiment") == "利空")
|
||||
if pos > neg:
|
||||
return "利好", pos, neg
|
||||
if neg > pos:
|
||||
return "利空", pos, neg
|
||||
return "中性", pos, neg
|
||||
|
||||
|
||||
def stock_context(symbol: str, limit: int = 5):
|
||||
"""供 AI 诊断使用:检索资讯 + 汇总情绪。"""
|
||||
items = stock_news(symbol, limit)
|
||||
tone, pos, neg = _senti_score(items)
|
||||
block = ""
|
||||
if items:
|
||||
block = "近期相关资讯(检索):\n" + "\n".join(
|
||||
f"- [{x.get('sentiment','中性')}] {x.get('title','')}({x.get('time','')})" for x in items)
|
||||
return {"items": items, "tone": tone, "pos": pos, "neg": neg, "block": block}
|
||||
Reference in New Issue
Block a user