NIPA-ORACLE #13. langchain, ai-agent

HyunJunSon·2025년 10월 16일

NIPA-ORACLE

목록 보기
17/28
  1. AI-agent tool 추가
@tool
def run_sql_query(query:str) -> List
  • @tool 로 agent 체인을 구현해서 연동시킬수 있다
  • create_openai_tools_agent → 랭체인의 chain 역할이다.
  1. https://serper.dev
  • llm 이 웹서핑을 할수 있게 하는 agent 이다.
  1. Agent 로 sql 쿼리를 할때 프롬프트가 추상적이면 적용이 안되는 경우가 있음 -> iteration 을 주어서 해결이 가능함

  2. 랭체인 agent에 verbosa 옵션이 있어서 llm의 호출과정을 이해하는데 도움이 됨

  3. 스트링밍 활성화 옵션


llm = ChatOpenAI(
	model = 
	temperature = 
	streaming=True # 스트리밍 활성화)
  • create_tool_calling_agent () → 좀 더 범용
  • create_openai_tools_agetn() → 오픈 AI 전용
    • max_iterations = 5 ( 최대 5번까지 도구 호출 허용 - 실패시) : 지정 안하면 무제한 호출(리소스 많이 먹음)
  1. AI-agent 사용시 stream()은 마지막 데이터만 나옴. 비동기 처리로 astream()을 활용해야 제대로 나옴
  • stream() 은 동기식 함수라서, 응답을 다 생성한 뒤에야 마지막 데이터만 반환함
  • astream()은 비동기 제너레이터(async generator) 형태로 작동.
    즉, 모델이 토큰을 하나씩 생성할 때마다 바로바로 이벤트를 yield 함.
  1. Streamlit
    • 파이썬 코드만으로 대화형 웹 앱 만드는 프레임워크
  • @st.cache 으로 시간 오래 걸리는 작업(ex. 모델추론) 을 캐싱해서 재사용 가능하게 됨
  1. 파일변경시 화면 자동 reload 옵션

streamlit run app.py --server.runOnSave true

파일 저장시 자동으로 적용
  1. pre_delete_collection=True 의 의미는 기존에 동일한 collection 이름(rag-healthcare)이 데이터베이스에 존재하면, 새로 만들기 전에 먼저 삭제하라는 뜻

vectorstore = PGVector.from_documents(
    documents=splits,
    embedding=embeddings_model,
    collection_name="rag-healthcare",
    connection=CONNECTION_STRING,
    pre_delete_collection=True
)

pre_delete_collection=True 의 의미는 기존에 동일한 collection 이름(rag-healthcare)이 데이터베이스에 존재하면, 새로 만들기 전에 먼저 삭제하라는 뜻입니다.
  1. enumrate(n,1) 1의 의미
def format_docs(docs):
    formatted = []
    for idx, doc in enumerate(docs, 1):
        formatted.append(f"[문서 {idx}]\n{doc.page_content}")
    return "\n\n---\n\n".join(formatted)
  • 1의 의미는 1번째 요소부터 가져오는게 아님
  • idx를 1번부터 가져온다는 의미임.
  1. 코드 설명
rag_chain = (
    {
        "context": retriever | format_docs,
        "question": RunnablePassthrough()
    }
    | prompt_template
    | llm
    | StrOutputParser()
)
  • 체인에 들어오는 입력데이터를 프롬프트에 필요한 편수 형태(context, question)을 맞춰주는 역할을 한다.
  1. pytz - python timezone

  1. VLM 이란?
  • Vision-Language Model 또는 Visual Language Model의 약자다.이미지(또는 비주얼 정보)와 언어(텍스트)를 동시에 이해하고 생성할 수 있는 AI 모델
  • 이미지 임베딩은 gpu 필요( 멀티모달 모델 크기가 좀 커서)
  • https://www.ncloud-forums.com/topic/497/
  1. .gitignore
  • .gitignore에 data/ 패턴이 있어서 모든 경로의 data 디렉토리가 무시됨
  • .gitignore은 기본적으로 패턴이 경로 전체에 재귀적으로 적용됨
  • /data/ → 루트(repo/data/)만 무시
profile
즐겁게 공부하고 사람들에게 도움을 주는 개발자가 되고 싶습니다.

0개의 댓글