> ## Documentation Index
> Fetch the complete documentation index at: https://docs.factagora.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026-07

> 2026-07 Factagora API 릴리스 (v0.1.7 – v0.1.20)

<Update label="v0.1.20" description="2026-07-16 · temporal annotation 포맷 수정">
  ## 수정: `PATCH /api/v1/tkgs/{tkgId}/graph/nodes/{nodeId}/annotation`의 temporal annotation 포맷

  요청 바디가 기존의 느슨한 `{ when: "2026 Q3", precision: "quarter" }` 문자열 대신 `{ timestamp: "2026-09-30", precision: "quarter" }`(ISO 8601 날짜)를 사용합니다. 플랫폼의 다른 곳에서 이미 쓰이던 annotation 포맷과 통일한 것입니다.

  이 엔드포인트는 이제 기존 annotation 데이터를 덮어쓰지 않고 merge합니다 — source 등 다른 필드가 보존됩니다.

  `POST /api/v1/chat`의 `capture_temporal` action도 `when` 대신 `timestamp`(ISO 8601)를 반환하므로, 이 엔드포인트에 그대로 넘기면 됩니다.
</Update>

<Update label="v0.1.19" description="2026-07-16 · 노드 생성 시 제목 중복 방지">
  ## 개선: 그래프 노드 생성 시 중복 방지

  `POST /api/v1/collections/{id}/graph/nodes`와 `POST /api/v1/tkgs/{tkgId}/graph/nodes`가 이제 새 노드를 만들기 전에 제목이 상당히 겹치는 기존 prediction/claim이 있는지 먼저 확인합니다. 플랫폼에 이미 유사한 항목이 있으면 새로 만들지 않고 그 기존 FactBlock을 재사용하며, 같은 그래프 안에 이미 해당 FactBlock을 가리키는 노드가 있으면 노드도 중복 생성하지 않습니다.

  응답에 optional `reused: boolean` 필드가 추가되어, 요청이 새로 생성했는지 기존 FactBlock에 매칭됐는지 구분할 수 있습니다.
</Update>

<Update label="v0.1.18" description="2026-07-16 · TKG 그라운딩 채팅 개선">
  ## 개선: `POST /api/v1/chat`의 `tkg_id` 그라운딩

  `tkg_id`로 그라운딩한 채팅에서 knowledge graph를 더 적극적으로 확장하도록 도와줍니다.

  * **`capture_temporal` action 추가** — `capture_belief`, `capture_causal`에 이어, 기존 belief에 시간 정보(`when` + `precision`: year/quarter/month/day)를 붙이자고 제안할 수 있습니다.
  * **그래프 갭 인식** — 인과관계로 연결되지 않은 belief와 타임라인이 없는 prediction을 파악해 능동적으로 질문합니다.
  * **FactBlock 재사용** — 새로운 belief로 취급하기 전에 플랫폼에 이미 있는 관련 prediction/claim이 있는지 먼저 확인합니다.
  * **자유 텍스트에서 암묵적 캡처** — 제안된 액션을 클릭하지 않고 사용자가 메시지에 직접 구체적인 시간이나 인과 관계를 언급하면, 명시적으로 저장을 요청하지 않아도 해당 `capture_temporal`/`capture_causal` action을 함께 제안합니다.
  * **세션 저장** — `collection_id` 대화와 마찬가지로 `tkg_id` 대화도 이제 서버에 세션과 대화 이력을 저장합니다. 응답으로 받은 `session_id`를 다음 요청에 그대로 넘기면 전체 맥락을 유지한 채 대화를 이어갈 수 있습니다.
  * **언어 일관성** — 답변, follow-up 질문, 제안된 action의 title이 이제 사용자가 쓰는 언어와 일관되게 나옵니다.

  `collection_id` 그라운딩은 변경되지 않았습니다.
</Update>

<Update label="v0.1.17" description="2026-07-16 · chat, TKG 그래프 편집, 버그 수정">
  ## 추가: `POST /api/v1/chat`

  스트리밍(SSE) 방식의 신규 채팅 엔드포인트입니다.

  * `collection_id`를 지정하면 해당 collection 지식(시맨틱 청크 검색 + 지식그래프 폴백)에 기반해 답변합니다. 세션과 대화 이력이 저장됩니다.
  * `tkg_id`를 지정하면 collection이 아닌 독립된 knowledge graph에 기반해 답변합니다.
  * 둘 다 생략하면 그라운딩 없는 1회성 채팅으로 동작하며 세션은 저장되지 않습니다.
  * `model` 파라미터로 `gpt-5-nano`, `gpt-5-mini`, `gpt-5` 중 선택할 수 있습니다.
  * `use_fact_search` / `use_evidence_finder` / `use_fact_checker`를 켜면 모델이 대화 중 해당 리서치 도구를 자율적으로 호출할 수 있습니다. 각 도구 호출은 실제로 호출될 때만, 해당 단독 엔드포인트와 동일한 크레딧으로 개별 과금됩니다.
  * 이 엔드포인트의 요청 자체는 가격 정책이 확정되기 전까지 현재 무료입니다.

  ## 추가: TKG 그래프 편집 엔드포인트

  `POST/PATCH/DELETE /api/v1/tkgs/{tkgId}/graph/nodes`와 `POST/DELETE /api/v1/tkgs/{tkgId}/graph/edges`를 통해 collection에 속하지 않은 knowledge graph의 노드/엣지를 직접 생성, 수정, 삭제할 수 있습니다 — collection에서 이미 제공하던 그래프 편집 기능을 collection 없이도 사용할 수 있게 되었습니다. 이 엔드포인트들은 무료입니다.

  `PATCH /api/v1/tkgs/{tkgId}/graph/nodes/{nodeId}/annotation` 엔드포인트가 새로 추가되어, belief 노드에 시간 정보(`when` + `precision`: year/quarter/month/day)를 주석으로 붙일 수 있습니다.

  ## 수정: qa-verify 엔티티 매칭

  `POST /api/v1/collections/{id}/qa-verify`가 같은 collection 내 여러 엔티티에 공통으로 들어가는 브랜드/제품군 토큰만으로 과하게 매칭되던 문제를 수정했습니다(예: 같은 브랜드명을 공유한다는 이유만으로 거의 모든 엔티티가 매칭되던 현상). 매칭 정확도가 개선되었습니다.

  ## 수정: 엔티티 연결 fact 개수 제한

  엔티티를 해석할 때 고려하는 연결된 fact 개수의 내부 상한을 20개에서 50개로 올렸습니다. 이전에는 실제로 연결된 fact 중 일부가 relevance 정렬 전에 잘려나가, 더 나은 근거가 있음에도 verdict가 `unsupported`로 표시될 수 있었습니다.
</Update>

<Update label="v0.1.11" description="2026-07-14 · fact-search 모드">
  ## 추가: fact-search `mode` 파라미터

  `GET /api/v1/fact-search`에 `mode` 파라미터가 추가되었습니다:

  * `auto` (기본) — 시맨틱 하이브리드 검색 + 라이브 폴백. 기존 기본 동작과 동일합니다.
  * `fast` — 쿼리 임베딩과 라이브 폴백을 생략하는 키워드 전용 검색으로, 가장 낮은 지연을 제공합니다. 빠른 결과가 필요하고 시맨틱 매칭이 필요 없을 때 적합합니다.

  `mode`를 생략하면 기존 동작(`auto`)이 그대로 유지됩니다.

  ## 개선: 도메인 등 좁은 조건으로 필터링할 때 결과

  특정 도메인 등으로 결과를 제한할 때, 기존에는 매칭 기사가 있어도 결과가 적거나 0건이던 경우가 있었는데 이제 매칭 기사를 안정적으로 반환합니다.
</Update>

<Update label="v0.1.10" description="2026-07-08 · qa-verify 속도 개선">
  ## 개선: 응답 속도 향상

  `POST /api/v1/collections/{id}/qa-verify`가 질문/답변 쌍마다 엔티티 연결 근거를 찾는 속도가 크게 빨라져 전체 응답 시간이 개선되었습니다. 요청/응답 형식은 변경되지 않았습니다.
</Update>

<Update label="v0.1.9" description="2026-07-08 · Q&A 검증 개선">
  ## 개선: Q\&A 검증 근거 수집

  `POST /api/v1/collections/{id}/qa-verify`가 관련 근거를 더 안정적으로 찾도록 개선되었습니다.

  * 근거 수집 시 질문뿐 아니라 검증 대상 답변 텍스트도 함께 고려합니다 — 답변 표현에만 겹치는 사실도 이제 놓치지 않습니다.
  * 엔티티 매칭이 이제 엔티티 정식 명칭의 일부만 언급한 질문도 인식합니다 (예: 제품의 짧은 이름만 언급해도 그래프상의 정식 명칭과 매칭됩니다).
  * 벡터 검색 결과에 최소 관련도 기준을 적용해, 명백히 무관한 콘텐츠가 근거로 포함되지 않도록 했습니다.

  ## 수정: 일부 쌍 실패가 전체 요청을 실패시키던 문제

  기존에는 `qa-verify` 요청에 포함된 질문/답변 쌍 중 하나라도 내부 오류가 발생하면 요청 전체가 실패해, 정상적으로 검증됐을 나머지 쌍의 결과까지 반환되지 않았습니다. 이제 각 쌍을 독립적으로 처리해, 실패한 쌍은 `"verdict": "unsupported"`로 반환되고 나머지는 정상적으로 완료됩니다.

  요청/응답 형식은 변경되지 않았습니다.
</Update>

<Update label="v0.1.8" description="2026-07-08 · 대형 컬렉션 그래프 조회 버그 수정">
  ## 수정: 대형 컬렉션에서 500 에러

  `GET /api/v1/collections/{id}/graph`가 claim/prediction/entity를 합쳐 수백 개 이상인 컬렉션에서 `500` 에러를 반환하던 문제가 있었습니다. 컬렉션이 이 규모를 넘어선 뒤 그래프를 처음 조회하면 항상 실패했습니다.

  이미 커진 컬렉션에 새 source를 ingest하는 것도 같은 원인으로 실패할 수 있었고, 그 경우 해당 컬렉션엔 더 이상 source를 추가할 수 없었습니다.

  ### 변경 내용

  노드 제목을 조회하는 내부 로직을 대량의 id 목록을 요청에 실어 보내는 방식 대신 서버 사이드에서 한 번에 처리하는 쿼리로 바꿨습니다. 이로써 규모 제한이 사라져 노드 수와 무관하게 동일하게 동작합니다.

  응답 형식은 변경되지 않았습니다 — 이전에 영향을 받았던 요청이라면 이제 그냥 정상적으로 성공합니다.
</Update>

<Update label="v0.1.7" description="2026-07-07 · Collections 엔티티">
  ## 신규: 지식 그래프의 엔티티

  Collections가 이제 수집한 콘텐츠에서 claims/predictions와 함께 **엔티티**(인물, 기관, 상품)를 추출합니다. 엔티티는 지식 그래프의 노드가 되어, 해당 엔티티를 언급하는 모든 claim/prediction과 연결됩니다 — 같은 인물·기업·상품에 대해 흩어져 있던 사실들이 하나의 연결된 클러스터로 묶입니다.

  ### 엔티티 타입

  | 타입             | 설명                             |
  | -------------- | ------------------------------ |
  | `PERSON`       | 특정 실명 인물                       |
  | `ORGANIZATION` | 특정 실명 기업·기관·단체                 |
  | `PRODUCT`      | 특정 브랜드/모델명 (일반 카테고리명은 추출되지 않음) |

  ### 변경된 엔드포인트

  | 엔드포인트                                     | 변경 내용                                                                                                 |
  | ----------------------------------------- | ----------------------------------------------------------------------------------------------------- |
  | `GET /api/v1/collections/{id}/graph`      | 응답 노드에 `CLAIM`/`PREDICTION` 외에 `"type": "ENTITY"`가 포함될 수 있음                                           |
  | `GET /api/v1/collections/{id}/context`    | `matched_entities`(질문에서 발견된 엔티티 이름/별칭), `entity_facts`(해당 엔티티와 연결된 claims/predictions) 필드 추가          |
  | `POST /api/v1/collections/{id}/qa-verify` | 근거 수집 방식이 벡터 검색과 엔티티 그래프 순회를 결합하는 방식으로 개선됨. 질문과 claim의 표현이 크게 달라도 같은 엔티티를 공유하면 이제 찾을 수 있어 검증 정확도가 향상됨 |

  ### 의미

  기존에는 질문과 수집된 텍스트 사이의 벡터 유사도에만 의존해 근거를 찾았습니다. 질문에 엔티티 이름이 명시돼 있어도 원문 표현이 다르면 관련 claim을 놓칠 수 있었는데, 엔티티가 시맨틱 검색과 별개로 정확히 일치하는 검색 경로를 그래프에 추가로 제공합니다.
</Update>
