from langchain_ollama import ChatOllama
from langchain_core.prompts import (SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
ChatPromptTemplate)
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
base_url = "http://localhost:11434"
model = 'benedict/linkbricks-hermes3-llama3.1-8b-korean-advanced-q8'
llm = ChatOllama(base_url=base_url, model=model)
system = SystemMessagePromptTemplate.from_template(
"""당신은 제공된 컨텍스트를 기반으로 사용자의 질문에 답변하는 유용한 AI 비서입니다."""
)
prompt = """
**작업:** 아래 이력서 텍스트에서 핵심 정보를 추출하세요.
**이력서 텍스트:**
{context}
**지시사항:**
다음 정보를 추출하여 명확한 구조로 작성하세요.
1. **연락처 정보:**
- 이름:
- 이메일:
- 전화번호:
- 웹사이트/포트폴리오:
2. **학력:**
- 기관명:
- 학위:
- 전공:
- 졸업일:
3. **경력:**
- 직책:
- 회사명:
- 근무지:
- 근무 기간:
- 주요 업무/프로젝트:
4. **프로젝트:**
- 프로젝트명:
- 설명/사용 기술:
- 결과/성과:
5. **기술 스킬:**
- 프로그래밍 언어:
- 기술/도구:
6. **추가 정보:** (해당되는 경우)
- 자격증:
- 수상 내역:
- 전문 협회:
- 사용 가능 언어:
**질문:**
{question}
**추출된 정보:**
"""
prompt = HumanMessagePromptTemplate.from_template(prompt)
def ask_llm(context, question):
messages = [system, prompt]
template = ChatPromptTemplate(messages)
qna_chain = template | llm | StrOutputParser()
return qna_chain.invoke({'context': context, 'question': question})
def validate_json(data):
json_prompt = """
다음 JSON 데이터를 검증하고 수정하세요:
**추출된 정보:**
{data}
반드시 수정된 JSON만 제공하고, 설명이나 다른 내용은 포함하지 마세요.
**수정된 JSON:**"""
json_prompt = HumanMessagePromptTemplate.from_template(json_prompt)
json_messages = [system, json_prompt]
json_template = ChatPromptTemplate(json_messages)
json_chain = json_template | llm | JsonOutputParser()
return json_chain.invoke({'data': data})