Corin1998 commited on
Commit
5b57f13
·
verified ·
1 Parent(s): 32fd079

Create llm_quant.py

Browse files
Files changed (1) hide show
  1. core/llm_quant.py +43 -0
core/llm_quant.py ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # core/llm_quant.py
2
+ from __future__ import annotations
3
+ from typing import Dict, Any, Optional
4
+ import json
5
+ from .openai_client import get_client, TEXT_MODEL
6
+
7
+ _SYSTEM = """あなたは中立な金融アナリストです。与えられたテキストから
8
+ (1) 業界/市場のCAGR(%)、(2) 市場規模(円換算が望ましいが不明ならnull)、
9
+ (3) 主力商品/サービス数、(4) そのうち成長中の数
10
+ を抽出してください。数値は半角。根拠が複数ある場合は最も信頼できる1つを採用し、出所の短い引用も返してください。
11
+ 必ず次のJSONだけを返すこと。"""
12
+
13
+ _SCHEMA = """
14
+ {
15
+ "market": {"cagr_pct": null, "size_jpy": null, "evidence": []},
16
+ "products": {"count": null, "growing_count": null, "notes": null}
17
+ }
18
+ """
19
+
20
+ def extract_market_product_signals(text: str, company_hint: str="") -> Dict[str, Any]:
21
+ if not text or len(text.strip()) == 0:
22
+ return {"market":{"cagr_pct":None,"size_jpy":None,"evidence":[]},
23
+ "products":{"count":None,"growing_count":None,"notes":None}}
24
+ client = get_client()
25
+ prompt = f"""{_SCHEMA}
26
+
27
+ 【会社名の参考】{company_hint or '(記載なし)'}
28
+ 【解析対象テキスト(抜粋可)】
29
+ {text[:16000]}"""
30
+ resp = client.chat.completions.create(
31
+ model=TEXT_MODEL,
32
+ messages=[
33
+ {"role":"system","content":_SYSTEM},
34
+ {"role":"user","content":prompt},
35
+ ],
36
+ response_format={"type":"json_object"},
37
+ temperature=0.1,
38
+ )
39
+ try:
40
+ return json.loads(resp.choices[0].message.content)
41
+ except Exception:
42
+ return {"market":{"cagr_pct":None,"size_jpy":None,"evidence":[]},
43
+ "products":{"count":None,"growing_count":None,"notes":None}}