Files
group_xinghuo_jinrong/scripts/dev/demo.py
T

40 lines
1.5 KiB
Python
Raw Normal View History

"""演示:用真实 LLM + 真实 MySQL 跑数据分析 Agent 的典型问答。"""
import json
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
from app.service.analyst_agent import AnalystAgent
from app.utils.auth import AuthContext
def run(question, roles, subject):
agent = AnalystAgent()
ctx = AuthContext(subject_id=subject, token_type="staff", roles=roles, staff_type=roles[0])
resp = agent.run(question, ctx)
print(f"\n=== 问题:{question}(角色 {roles[0]})===")
print(f"状态:{resp.status} 缓存命中:{resp.meta.cache_hit}")
print(f"解读:{resp.answer}")
print(f"表格:{json.dumps(resp.table.model_dump(), ensure_ascii=False, default=str)}")
print(f"SQL:{resp.sql}")
if resp.error_code:
print(f"错误码:{resp.error_code} 建议:{resp.suggestions}")
return resp
if __name__ == "__main__":
# 先拿到一个顾问和他的非名下客户
agent = AnalystAgent()
advisor = agent.repo.execute_readonly(
"SELECT staff_id FROM core_staff WHERE staff_type='advisor' AND is_active=1 LIMIT 1"
)["rows"][0][0]
scope = agent.repo.resolve_advisor_scope(advisor)
out_customer = next(
c for c in agent.repo.execute_readonly("SELECT customer_id FROM core_customer LIMIT 100")["rows"]
if c[0] not in scope
)[0]
run("按产品类型统计总持仓规模", ["analyst"], "STAFF-20001")
run(f"查 {out_customer} 的持仓", ["advisor"], advisor)