..
This commit is contained in:
@@ -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 = ""
|
||||
|
||||
Reference in New Issue
Block a user