This commit is contained in:
2026-02-20 15:21:38 +09:00
parent d5ab55b336
commit 55b82c23af
5 changed files with 101 additions and 80 deletions
+46 -44
View File
@@ -203,50 +203,50 @@ object RagService {
/**
* 질문과 가장 유사한 정보를 H2에서 검색하여 AI 답변을 생성합니다.
*/
fun askWithContext(question: String,
corpInfo: String,
financialData: String,
days : List<CandleData>,
weeks : List<CandleData>,
monthly : List<CandleData>): String {
val questionEmbedding = embeddingModel.embed(question).content()
val searchResult = embeddingStore.search(
EmbeddingSearchRequest.builder()
.queryEmbedding(questionEmbedding)
.maxResults(5)
.build()
)
val newsContext = searchResult.matches().joinToString("\n") { it.embedded().text() }
// 2. 종합 분석 프롬프트 구성
val finalPrompt = """
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
당신은 뉴스(심리), 재무(본질), 차트(추세)를 통합 분석하는 'AI 수석 애널리스트'입니다.
제공된 데이터를 바탕으로 아래 형식을 엄격히 지켜 분석 리포트를 작성하세요.
[데이터 세트]
1. 기업 기본 정보: $corpInfo
2. 재무 성장성: $financialData
3. 기술적 추세: ${monthly}, ${weeks}, ${days}
4. 최신 이슈(뉴스): $newsContext
[분석 요청 사항]
1. **업계 상황**: 해당 종목이 속한 업종의 현재 전체적인 흐름을 먼저 정리하세요.
2. **종목 이슈 분석**: 뉴스에서 포착된 핵심 키워드와 시장의 반응을 요약하세요.
3. **장기/단기 전략**:
- 장기(재무/월봉 기반): 추천 혹은 비추천 사유
- 단기(뉴스/일봉 기반): 추천 혹은 비추천 사유
4. **최종 결론**: '매수/관망/매도' 의견과 그에 따른 근거를 단호하게 제시하세요.
<|eot_id|>
<|start_header_id|>user<|end_header_id|>
질문: $question
<|eot_id|><|start_header_id|>assistant<|end_header_id|>
""".trimIndent()
val response = chatModel.chat(UserMessage.from(finalPrompt))
// println(response)
return response.aiMessage().text()
}
// fun askWithContext(question: String,
// corpInfo: String,
// financialData: String,
// days : List<CandleData>,
// weeks : List<CandleData>,
// monthly : List<CandleData>): String {
// val questionEmbedding = embeddingModel.embed(question).content()
// val searchResult = embeddingStore.search(
// EmbeddingSearchRequest.builder()
// .queryEmbedding(questionEmbedding)
// .maxResults(5)
// .build()
// )
// val newsContext = searchResult.matches().joinToString("\n") { it.embedded().text() }
//
// // 2. 종합 분석 프롬프트 구성
// val finalPrompt = """
// <|begin_of_text|><|start_header_id|>system<|end_header_id|>
// 당신은 뉴스(심리), 재무(본질), 차트(추세)를 통합 분석하는 'AI 수석 애널리스트'입니다.
// 제공된 데이터를 바탕으로 아래 형식을 엄격히 지켜 분석 리포트를 작성하세요.
//
// [데이터 세트]
// 1. 기업 기본 정보: $corpInfo
// 2. 재무 성장성: $financialData
// 3. 기술적 추세: ${monthly}, ${weeks}, ${days}
// 4. 최신 이슈(뉴스): $newsContext
//
// [분석 요청 사항]
// 1. **업계 상황**: 해당 종목이 속한 업종의 현재 전체적인 흐름을 먼저 정리하세요.
// 2. **종목 이슈 분석**: 뉴스에서 포착된 핵심 키워드와 시장의 반응을 요약하세요.
// 3. **장기/단기 전략**:
// - 장기(재무/월봉 기반): 추천 혹은 비추천 사유
// - 단기(뉴스/일봉 기반): 추천 혹은 비추천 사유
// 4. **최종 결론**: '매수/관망/매도' 의견과 그에 따른 근거를 단호하게 제시하세요.
// <|eot_id|>
// <|start_header_id|>user<|end_header_id|>
// 질문: $question
// <|eot_id|><|start_header_id|>assistant<|end_header_id|>
// """.trimIndent()
//
// val response = chatModel.chat(UserMessage.from(finalPrompt))
//// println(response)
// return response.aiMessage().text()
// }
suspend fun decideTrading(
stockName: String,
@@ -342,6 +342,8 @@ object RagService {
}
@Serializable
class TradingDecision {
var corpName : String = ""