Bài viết
Hỏi & Đáp
yfinance 429 Client Error 문제
비슷한 다른 api 인 finnhub api 를 사용해서 해결했습니다. 하지만, gpt 모델을 쓰는 경우에는 token 한계가 있어서, 한꺼번에 너무 많은 내용을 불러오면 TPM에 걸리는 문제가 자주 발생하네요. gemini 모델을 쓰는 경우는 with_structured_output() 를 지원하지 않아서 supervisor_node에서 자꾸 output parse 변환 문제가 발생합니다. prompt로 keyword로만 반환하라고 명시해놔도, tool을 호출하고 나면 '```tool_code\n# 요청된 주식 티커에 대한 최신 가격 견적을 가져옵니다.\ntickers = ["SNOW"]\n```'이런식으로 다시 무시하고 다른 형식으로 반환하고 이래가지고 gemini 모델은 거의 쓰기가 힘드네요.. 혹시 어떤 모델이든 상관없이 확실하게 output 포맷이 보장되게 할 수 있는 방법이 없을까요? 아니면 gpt모델을 써도 TPM limit에 안 걸리게 할 수 있는 방법이 있을까요?
- 0
- 2
- 52
Hỏi & Đáp
schema 질문
답변 감사합니다!Chain에 PydanticOutputParser 로 output parser를 이어 붙이면, LLM의 답변이 원하는대로 parsing이 됩니다. 그러나 그외의 방식으로 쓰게 되면, 파싱이 자주 실패합니다. Gemini 모델을 쓰는 경우 답변 앞뒤로"```json ... ```" 가 붙게 되어서 결국 이미 존재하는 TypedDict용 StrOutputParser 를 써도 파싱이 실패하고, 결국 custom한 Parser를 만들어줘야 해서 번거롭네요. 코드로 예를 들어드리면, 다음과 같은 노드를 만든다고 했을 때 : class LogState(BaseModel): project_name: str error_level: str time_period_hours: int environment: str output_parser = PydanticOutputParser(pydantic_object=LogState) def log_filter(state: UserQueryState) -> LogState: user_input = state['user_input'] chain = prompt | llm | output_parser response: LogState = chain.invoke({'user_input': user_input})이런 식으로 할 경우에는 chain 과 pydantic output parsing 에 의해 답변이 원하는 스키마 형태로(LogState) 잘 나오는데 반해, class LogState(TypedDict): project_name: str error_level: str time_period_hours: int environment: str from langchain_core.output_parsers import StrOutputParser def log_filter(state: UserQueryState) -> LogState: user_input = state['user_input'] chain = prompt | llm | StrOutputParserser response: LogState = chain.invoke({'user_input': user_input})다음과 같이 쓴다면 response에서 파싱이 안됩니다. 답변 앞뒤로 "```json ... ```" 같은 형태가 붙기 때문입니다. OpenAI 모델을 사용하면 또 다른 형식으로 붙습니다. 결국, Pydantic BaseModel을 사용하면 간단하게 주어진 outputparser 만 끝에 붙이는걸로도 충분히 output 값이 보장되지만, TypedDict를 쓰는 경우에는 모델마다 output 값을 일일이 custom 해줘야하는 문제가 발생합니다.
- 0
- 2
- 56
Hỏi & Đáp
음수 데이터의 표시에 관하여
이진수만 봐서는 음수인지 양수인지 판단하기 어려워서 음수 양수 구분하기 위해 플래그를 사용한다 (p.59, p.106)책에 살짝 헷갈리게 적혀있긴 한데, 제가 알기론 2진수만 봐도 음수인지 양수인지 데이터의 타입이 명시되어 있다면 실제로 컴퓨터는 구분을 할 겁니다.예를 들면 8비트짜리 데이터가 있다고 할 때,unsigned (음수 존재 X) 타입의 데이터라면 데이터의 범위가 0~255가 되지만,signed (음수 존재 O) 타입의 데이터라면 데이터의 범위가 -128~127 입니다.signed 타입의 자료형인데 숫자가 128이 넘어간다? 즉, 최상위 비트가 1 이다 (1XXX XXXX 형태) 하면 무조건 음수이고 보수의 형태로 봅니다. 근데 ALU에서 연산한 직후에는 연산자에서 데이터를 내보낼 때 타입형을 알 수 없어서? 부호 플래그를 사용해야 하나 봅니다. (저도 이 부분은 잘 모르겠습니다)
- 4
- 2
- 708
Hỏi & Đáp
PineconeVectorStore import 에러
debug를 하다보니 from langchain_pinecone import PineconeVectorStore 이 부분을 실행할 때 전체 파일을 다시 진행하는 것을 보고, 파일 이름에 문제가 있다는 것을 깨달았습니다. 파일 이름을 pinecone.py라고 하는 바람에 현재 실행중인 파일을 다시 들어가고 circular import 에러가 났었네요.. 파일 이름을 바꾸고 실행하니 잘 됩니다. 해결했습니다. 감사합니다.
- 0
- 3
- 199