728x90
반응형

소개

데이터베이스용 MCP Toolbox(이전의 Gen AI Toolbox)가 최근 LangChain과 공동으로 출시되었는데, 이제 Neo4j 통합이 포함된다고 해요. 또한 최근에는 최고 수준의 모델 컨텍스트 프로토콜(MCP) 지원도 추가되었어요.

이번 협업은 Kurtis Van Gent와의 GraphRAG 수집에 대한 논의를 거쳐 시작되었어요. 거기서 그는 소스이자 도구로서 에이전트 시스템의 데이터베이스 통합을 개선하기 위한 더 나은 인프라를 제안했죠. Neo4j를 추가하면 Knowledge Graph 기능을 Toolbox 사용자에게 제공하여 데이터베이스 관리 및 Gen AI 애플리케이션 기능을 확장할 수 있게 돼요.

에이전트 아키텍처

AI 에이전트에 대해 많이 들어보셨을 텐데요, 간단한 에이전트와 어떻게 다른지, Retrieval-Augmented Generation (RAG) 접근 방식과는 또 어떻게 다른지 한번 살펴볼까요?

RAG 워크플로우

전통적인 RAG 흐름에서는 LLM이 사용자 질문에 직접 답변하지 않아요. 신뢰할 수 있는 데이터 소스에서 관련 정보를 먼저 검색해서 답변에 사용되는 LLM 프롬프트의 일부로 질문과 함께 제공하죠. 따라서 LLM은 사전 훈련된 지식이 아닌 언어 능력에만 사용돼요. 이렇게 하면 답변의 관련성과 정확성을 높일 수 있고, 설명 가능성에도 도움이 된답니다.

GraphRAG 워크플로우

GraphRAG에서는 Knowledge Graph가 벡터 저장소에서 텍스트 조각을 검색하는 것 이상의 데이터 소스 역할을 해요. 그래프의 연결된 정보는 관련 엔터티, 문서 및 구조 요약의 관련 컨텍스트를 제공하죠. 검색된 정보의 구조적 특성 덕분에 답변의 자세한 출처를 설명하고 투명하게 표시하는 것도 더 쉬워져요.

에이전트

에서는 LLM에 정보 검색 및 사용자를 대신하여 조치를 취하는 도구가 갖춰져 있어요. LLM은 질문을 분석하고, 다양한 입력 및 요청 결과에 대한 정보를 검색하기 위한 도구 세트를 사용하기 위한 계획을 수립하고 이를 실행하는 데 더 적극적인 역할을 수행하죠. 실행 중에 Agent-LLM은 도구를 순서대로 여러 번 호출하거나, 이전에 검색한 결과를 새 도구 호출의 입력으로 사용하여 더 복잡한 정보 검색으로 드릴다운하도록 선택할 수도 있어요. 에이전트 루프에서 실행되는 동안 수집된 데이터가 사용자의 질문에 답변하기에 충분한지 관찰하고, 가드레일 및 관련성에 따른 재순위 지정, 판단, 선택과 같은 다른 기술도 적용한답니다.

에이전트 아키텍처 구성 요소

툴 호출에 대한 구조적 분석 및 매개변수 추출로 인해 Vector Embedding 유사성 검색의 필요성이 줄어들어요. 일반적으로 LLM 에이전트의 작업은 데이터베이스 세계의 Query 계획(및 실행) 프로세스와 유사하다고 볼 수 있죠.

에이전트에 제공되는 툴에는 (Python) 샌드박스의 코드 실행부터 REST API 호출, 검색용 데이터베이스 사용, 다른 LLM 사용까지 다양한 옵션과 형태가 있어요. 가능성은 정말 많죠. 대부분의 툴은 정보 검색 또는 처리에 사용되며 에이전트당 몇 개만 업데이트 및 수정 작업을 허용해요.

대부분의 LLM은 이미 함수 호출을 통한 툴 호출을 지원해요. 이를 통해 LLM이 선택하고 실행을 위한 매개변수를 제공하는 함수의 서명 목록(이름, 설명, 매개변수, 결과)을 전달할 수 있죠. 에이전트 프레임워크는 가드레일, 그래프 기반 워크플로, 실행 메모리 및 앞서 언급한 기술과 같은 많은 추가 기능을 추가해요.

에이전트는 복잡한 질문과 작업에 답하고 대화를 원활하게 진행하는 데에도 놀랍게도 잘 작동하는 강력한 메커니즘이지만 몇 가지 과제가 있어요. 여기에는 다음이 포함돼요.

  • 툴 구성 및 설명은 LLM이 올바른 선택을 할 수 있도록 일관되고 충분해야 해요.
  • 툴 실행 관리는 개발자에게 맡겨지는 경우가 많았으므로 데이터 인프라에 대한 익숙함에 따라 리소스 관리가 최적이 아니었어요.
  • 상당한 추가 작업(OpenAPI 사양, 함수 호출 서명, 실행을 위한 Python 코드)이 제공되었기 때문에 데이터 분석가는 데이터베이스 Query 및 기타 툴을 구성할 수 없었어요.
  • 올바른 툴을 선택해야 하므로 이름과 설명을 통해 각 툴의 기능과 해당 툴이 적용되는 하위 작업을 명확히 해야 해요.
  • 툴은 매개변수의 종류와 데이터 유형에 대해 매우 구체적이어야 하므로 LLM은 매개변수를 툴에 전달하기 전에 변환 및 번역을 수행할 수 있어야 해요.
  • 데이터 유출이나 무제한 수정으로 이어질 수 있는 코드 삽입을 방지하려면 매개변수를 주입에 안전한 방식으로 사용해야 해요.
  • 사용자 질문을 임베딩 생성 및 Vector Embedding 유사성 검색에 구문으로 전달하는 경우가 거의 없고 구조화된 매개변수 추출 및 특정 툴 호출을 수행하므로 벡터 검색은 에이전트 설정에서 관련성이 낮아요.

Gen AI Toolbox

데이터베이스에 액세스하는 툴을 만들 때 일반적으로 인증, 권한 부여, 삭제, 연결 풀링 등 오늘날의 오케스트레이션 프레임워크로는 해결하기 어려울 수 있는 문제가 있어요. 이러한 문제는 빠르게 부담이 되어 개발 속도를 늦추고 동일한 상용구 코드를 반복적으로 구현할 때 실수할 여지가 남죠.

Enter Toolbox — 데이터베이스와 상호 작용하기 위한 Gen AI 툴을 더 쉽게 구축할 수 있게 해주는 오픈 소스 서버예요. 연결 풀링, 인증 등을 처리하여 툴을 더 쉽고, 빠르고, 안전하게 개발할 수 있죠. Toolbox를 사용하면 단일 위치에서 툴을 정의하고 세 줄 미만의 코드로 LangGraph 에이전트와 통합할 수 있어요.

from toolbox_langchain import ToolboxClient

# update the URL to point to your server
client = ToolboxClient("http://127.0.0.1:5000")

# these tools can be passed to your agent! 
tools = await client.aload_toolset()

Toolbox는 진정한 오픈소스예요. 출시의 일환으로 Google Cloud는 Neo4j를 포함한 다른 데이터베이스 공급업체와 제휴하여 수많은 오픈소스 및 독점 데이터베이스에 대한 지원을 구축했어요.

  • PostgreSQL(포함합금DB and MySQL용 Cloud SQL)
  • MySQL(포함MySQL용 Cloud SQL)
  • SQL 서버(Cloud SQL 포함SQL 서버)
  • 네오4j

또한 우리는 귀하의 애플리케이션이 더욱 빠르게 생산에 착수할 수 있도록 돕는 다양한 기능을 갖추고 있어요. 여기에는 다음과 같은 기본 제공 기능이 포함됩니다.툴의 최종 사용자 인증그리고 내장관찰 가능성OpenTelemetry를 통해.

Neo4j Cypher Sources and Tools

Google이 Gen AI Toolbox에 추가한 Neo4j 통합은 Cypher 실행을 위한 source 및 tool 정의를 지원해요. Source는 URI, API 키 등과 같은 Neo4j 인스턴스에 연결하는 방법을 나타내죠. Tool은 source를 읽거나 쓰는 등 에이전트가 수행할 수 있는 특정 작업을 나타내요.

는 선도적인 오픈 소스 Graph Database이에요. 정보를 테이블이 아닌 엔터티(Node) 및 이들 간의 Relationship으로 관리하므로 연결된 정보를 유연하고 강력하게 표현할 수 있죠. 그래프는 생물의학, 공급망, 제조, 사기 탐지, 운송 물류 등 다양한 영역에 고유한 기능을 추가해요. Knowledge Graph는 조직(사람, 프로세스, 제품, 파트너 등)의 디지털 트윈으로 생각할 수 있는데, Large Language Model(LLM)의 언어 기술에 대한 훌륭한 '사실 기억' 동반자가 될 수 있어요.

Toolbox 바이너리를 가져온 후에 여러 Neo4j에 대한 정의를 제공할 수 있어요. Source는 시작 시 Toolbox 바이너리에 제공되는 tools.yaml이라는 파일에 데이터베이스 연결 세부 정보(URL, 사용자 이름, 비밀번호)를 구성하는 방식으로 설정해요.

대부분의 경우 Query는 해당 데이터세트의 데이터 모델에만 적용되므로 나중에 정의하는 Tool은 Source에 연결되죠.

sources:
    my-neo4j-source:
        kind: "neo4j"
        uri: "neo4j+s://xxxx.databases.neo4j.io:7687"
        user: "neo4j"
        password: "my-password"
        database: "neo4j"

Tool은 Source에 대해 실행하려는 특정 명령문이에요. 에이전트 설정과 함께 사용하려면 LLM이 적용 가능성을 추론할 수 있도록 Tool, 매개변수 및 결과를 충분히 자세히 설명하는 것이 매우 중요해요.

Tool의 설명은 다음과 같이 나눌 수 있어요. 일반적인 것 – '술어로 단일 엔터티를 가져오거나, 1차 또는 2차 이웃을 가져오거나, 엔터티 간 최단 경로를 찾는 것'과 같아요. 또 특정한 것도 있는데, 데이터의 보다 복잡한 경로 집합을 따라 해당 분야 전문가가 작성한 것이죠 (예: 약물의 유전자 또는 단백질 발현 표적 검색 또는 사용자를 위한 제품 권장 사항 얻기). Tool은 기능도 제공하는데, 속성을 업데이트하거나 비즈니스 개념을 나타내는 Node 및 Relationship을 추가하여 그래프에 표시할 수 있어요.

하지만 Tool은 클러스터링을 위한 그래프 알고리즘 실행, 공간 작업 수행, Vector Embedding 유사성 실행 또는 텍스트 구문에 대한 전체 텍스트 검색과 같은 고급 기능을 활용할 수도 있답니다.

아래에는 간단한 예제가 나와 있어요. neo4j-사이퍼 Tool을 사용해서 배우 및 개봉 시작 연도별로 영화 세트를 검색하는 것이죠. Tool과 매개변수에 대한 자세한 설명을 참고하면 LLM은 계획 및 실행의 각 단계에서 올바른 Tool을 추론하고 선택할 수 있을 거예요.

각 Tool에는 다음과 같은 구성이 있어요.

  • 연결된 Source
  • 매개변수를 사용하고 그래프 패턴 일치를 수행하고 결과를 반환하는 Cypher Query 문
  • Tool/Query 설명
  • 각 매개변수의 이름, 유형 및 설명
tools:
 search_movies_by_actor:
    kind: neo4j-cypher
    source: my-neo4j-movies-instance
    statement: |
      MATCH (m:Movie)<-[:ACTED_IN]-(p:Person)
      WHERE p.name = $name AND m.year > $year
      RETURN m.title, m.year
      ORDER BY m.year DESC
      LIMIT 10
    description: |
Use this tool to get a list of movies for a specific actor and a given minimum 
 release year. Takes a full actor name, e.g. "Tom Hanks" and a year e.g 1993
 and returns a list of movie titles and release years.
Do NOT use this tool with a movie title. Do NOT guess an actor name, 
 Do NOT guess a year. An actor name is a fully qualified name with first and 
 last name separated by a space.
For example, if given "Hanks, Tom" the actor name is "Tom Hanks".
If the tool returns more than one option choose the most recent movies.
      Example:
      {{
          "name": "Meg Ryan",
          "year": 1993
      }}
      Example:
      {{
          "name": "Clint Eastwood",
          "year": 2000
      }}
    parameters:
      - name: name
        type: string
        description: Full actor name, "firstname lastname"
      - name: year
        type: integer
        description: 4 digit number starting in 1900 up to the current year

투자 조사 에이전트

이건 전체 텍스트 검색과 그래프 검색을 결합한 GraphRAG 패턴을 사용하는 도구가 포함된 에이전트 LangChain 애플리케이션 데모예요.

이 예시는 투자 조사 에이전트를 보여주는데요. 회사, 투자자, 경쟁사, 파트너, 그리고 산업에 대한 최신 뉴스를 찾는 데 사용할 수 있어요. Neo4j로 가져온 Diffbot Knowledge Graph의 데이터를 기반으로 하죠.

예제 코드는 이 저장소에서 찾을 수 있어요.

회사 및 기사: Diffbot 데이터세트

이 데이터 세트는 회사, 관련 산업, 회사에서 일하거나 투자한 사람, 그리고 회사에 대해 보도하는 기사에 대한 그래프로 구성되어 있어요.

기사, 업계, 회사 그래프

뉴스 기사는 청크 단위로 구성되고, 이 청크들도 그래프에 저장돼요.

데이터베이스는 읽기 전용 사용자를 위해 공개적으로 제공되고 있어요. 에서 데이터를 탐색해 볼 수 있습니다.

  • URI: neo4j+s://demo.neo4jlabs.com
  • 사용자: 회사
  • 비밀번호: 회사
  • 회사 : 회사

Vertex AI와 에이전트 LangChain 통합을 사용하고 있어요. 이걸 통해 Toolbox에 등록한 도구를 도구 호출을 위해 LLM에 자동으로 전달할 수 있죠. 하이브리드 검색은 물론 부모-자식 검색기, GraphRAG(관련 컨텍스트 추출)도 사용할 거예요.

우리 구성에서는 다음과 같은 추가 정보를 가져오는 그래프 검색 쿼리는 물론 전체 텍스트 index를 활용하는 도구를 제공해요.

  • 청크의 상위 기사(단일 기사의 모든 청크를 집계)
  • 조직의 IndustryCategory(들)
  • 조직에 연결된 사람과 그들의 역할(예: 투자자, 회장, CEO)

도구

상담사가 사용할 수 있도록 도구 상자에서 제공하는 특정 쿼리가 포함된 도구들이에요.

각 도구는 에이전트에서 parameters를 가져와서 그래프 쿼리를 실행하고 구조화된 결과를 반환하죠.

  • industry — 산업 카테고리 이름 목록
  • Companies_in_industry — 산업별 특정 업계의 회사(ID, 이름, 요약)
  • 기업 — 전체 텍스트 검색을 통한 기업 목록(ID, 이름, 요약)
  • Articles_in_month — 지정 날짜(yyyy-mm-dd)로부터 해당 월의 기사 목록(ID, 작성자, 제목, 날짜, 감정)
  • 기사 — 기사 ID별 단일 기사 세부정보(ID, 작성자, 제목, 날짜, 감정, 사이트, 요약, 콘텐츠)
  • Companies_in_articles — 기사 ID 목록별로 기사에서 언급된 회사(ID, 이름, 요약)
  • people_at_company — 회사 ID별로 회사와 연결된 사람(이름, 역할)

도구 상자의 Configuration

Neo4j Source Configuration

tools.yaml 파일의 source 섹션에서 공개 Neo4j 회사 그래프 데이터베이스 연결을 source로 구성합니다.

sources:
    companies-graph:
        kind: "neo4j"
        uri: "neo4j+s://demo.neo4jlabs.com"
        user: "companies"
        password: "companies"
        database: "companies"

Neo4j Cypher Tools 설정

이제 툴박스를 사용해서 테스트하고 싶은 첫 번째 두 개의 툴을 구성해 볼 수 있어요. 다른 툴들도 아래와 비슷한 방식으로 구성하고 설명할 수 있답니다.

  • industry — 업계 이름 목록
  • Companies_in_industry — 산업별 특정 업계의 회사 (ID, 이름, 요약)
tools:
  industries:
    kind: neo4j-cypher
    source: companies-graph
    statement: |
      MATCH (i:IndustryCategory) 
      RETURN i.name as industry
    description: List of Industry names

  companies_in_industry:
    kind: neo4j-cypher
    source: companies-graph
    statement: |
      MATCH (:IndustryCategory {name:$industry})<-[:HAS_CATEGORY]-(c) 
      WHERE NOT EXISTS { (c)<-[:HAS_SUBSIDARY]-() }
      RETURN c.id as company_id, c.name as name, c.summary as summary
    description: Companies (company_id, name, summary) in a given industry by industry
    parameters:
      - name: industry
        type: string
        description: Industry name to filter companies by

YAML 구성 파일로 툴박스를 시작한 후에 API를 통해 툴 정의를 제공하게 돼요. 이 정의는 ToolboxClient로 검색해서 LangChain에 전달할 수 있습니다.

# one of linux/amd64, darwin/arm64, darwin/amd64, or windows/amd64
export OS="linux/amd64" 
curl -O https://storage.googleapis.com/genai-toolbox/v0.1.0/$OS/toolbox
chmod +x toolbox

./toolbox --tools_file tools.yaml
2025-02-13T13:50:22.052198+01:00 INFO "Initialized 1 sources." 
2025-02-13T13:50:22.052967+01:00 INFO "Initialized 0 authSources." 
2025-02-13T13:50:22.053095+01:00 INFO "Initialized 2 tools." 
2025-02-13T13:50:22.053146+01:00 INFO "Initialized 1 toolsets." 
2025-02-13T13:50:22.053742+01:00 INFO "Server ready to serve!"

이제 Gemini 2.0 Flash 모델과 함께 LangChain을 사용하고 툴 정의를 모델에 공급해서 간단하게 테스트를 해볼 수 있어요. 빠른 시작 예시는 툴박스 설명서에 있답니다.

import asyncio
import os

from langgraph.prebuilt import create_react_agent
from langchain_google_vertexai import ChatVertexAI
from langgraph.checkpoint.memory import MemorySaver

from toolbox_langchain import ToolboxClient

prompt = """
  You're a helpful investment research assistant. 
  You can use the provided tools to search for companies, 
  people at companies, industries, and news articles from 2023.
  Don't ask for confirmations from the user.
  User: 
"""

queries = [
    "What industries deal with computer manufacturing?",
    "List 5 companies in the computer manufacturing industry with their 
     description.",
]

def main():
    model = ChatVertexAI(model_name="gemini-1.5-pro")

    client = ToolboxClient("http://127.0.0.1:5000")
    tools = client.load_toolset()

    agent = create_react_agent(model, tools, checkpointer=MemorySaver())

    config = {"configurable": {"thread_id": "thread-1"}}
    for query in queries:
        inputs = {"messages": [("user", prompt + query)]}
        response = agent.invoke(inputs, stream_mode="values", config=config)
        print(response["messages"][-1].content)

main()

결과는 다음과 같이 나온답니다.

The industries that deal with computer manufacturing are: 
Computer Hardware Companies, Electronic Products Manufacturers, 
and Computer Storage Companies.

Here are 5 companies in the computer hardware industry along with their 
descriptions:

1.  **Microsoft Egypt:** Microsoft branch in Egypt
2.  **Apigee:** Software company based in San Jose, California, United States and owned by Google
3.  **Microsemi:** Communications corporation
4.  **Intermec:** American electronics manufacturing company
5.  **Elitegroup Computer Systems:** No summary available

이제 이게 작동하니까 다른 도구들도 추가할 수 있어요.

  • Companies — 전체 텍스트 검색을 통한 회사 목록 (ID, 이름, 요약)
  • Articles_in_month — 지정 날짜 (yyyy-mm-dd)로부터 해당 월의 기사 목록 (ID, 작성자, 제목, 날짜, 감정)
  • Articles — 기사 ID별 단일 기사 세부 정보 (ID, 작성자, 제목, 날짜, 감정, 사이트, 요약, 콘텐츠)
  • Companies_in_articles — 기사 ID 목록별로 기사에서 언급된 회사 (ID, 이름, 요약)
  • people_at_company — 회사 ID별로 회사와 연결된 사람 (이름, 역할)

배열 매개변수를 처리하려면 하위 유형 및 설명을 지정하는 "항목" 하위 그룹을 제공해야 해요.

tools:

  companies:
    kind: neo4j-cypher
    source: companies-graph
    statement: |
      CALL db.index.fulltext.queryNodes('entity', $search, {limit: 100}) 
      YIELD node as c, score WHERE c:Organization 
      AND NOT EXISTS { (c)<-[:HAS_SUBSIDARY]-() }
      RETURN c.id as company_id, c.name as name, c.summary as summary
    description: List of Companies (company_id, name, summary) by fulltext search
    parameters:
      - name: search
        type: string
        description: Part of a name of a company to search for

  articles_in_month:
    kind: neo4j-cypher
    source: companies-graph
    statement: |
      MATCH (a:Article)
      WHERE date($date) <= date(a.date) < date($date) + duration('P1M')
      RETURN a.id as article_id, a.author as author, a.title as title, toString(a.date) as date, a.sentiment as sentiment
      LIMIT 25
    description: List of Articles (article_id, author, title, date, sentiment) in a month timeframe from the given date
    parameters:
      - name: date
        type: string
        description: Start date in yyyy-mm-dd format

  article:
    kind: neo4j-cypher
    source: companies-graph
    statement: |
      MATCH (a:Article)-[:HAS_CHUNK]->(c:Chunk)
      WHERE a.id = $article_id
      WITH a, c ORDER BY id(c) ASC
      WITH a, collect(c.text) as contents
      RETURN a.id as article_id, a.author as author, a.title as title, toString(a.date) as date,
      a.summary as summary, a.siteName as site, a.sentiment as sentiment, apoc.text.join(contents, ' ') as content
    description: Single Article details (article_id, author, title, date, sentiment, site, summary, content) by article id
    parameters:
      - name: article_id
        type: string
        description: ID of the article to retrieve

  companies_in_articles:
    kind: neo4j-cypher
    source: companies-graph
    statement: |
      MATCH (a:Article)-[:MENTIONS]->(c)
      WHERE a.id = $article_id AND not exists { (c)<-[:HAS_SUBSIDARY]-() }
      RETURN c.id as company_id, c.name as name, c.summary as summary
    description: Companies (company_id, name, summary) mentioned in articles by article id
    parameters:
      - name: article_id
        type: string
        description: Article id to find companies mentioned in

  people_at_company:
    kind: neo4j-cypher
    source: companies-graph
    statement: |
      MATCH (c:Organization)-[role]-(p:Person) WHERE c.id = $company_id
      RETURN replace(type(role),"HAS_","") as role, p.name as person_name, c.id as company_id, c.name as company_name
    description: People (person_name, role, company_id, company_name) associated with a company by company id
    parameters:
      - name: company_id
        type: string
        description: Company id to find associated people for

에이전트 사용 — 대화

저는 LLM이 도구를 제대로 활용해서 질문에 필요한 정보를 수집하는 능력에 정말 감명받았어요.

LLM은 단순히 엔드포인트를 한 번 사용하는 게 아니라, 대화 기록 속 정보를 다시 참고해서 관련 맥락을 고려하는지 확인하기도 해요.

철자가 틀리거나 잘못된 파라미터를 수정하고, 날짜 형식을 필요한 형태로 다시 지정하는 등의 작업도 할 수 있죠. API 함수는 여러 번 호출되고, 필요하면 순차적으로 호출되기도 해요. 예를 들어 특정 맥락에 대한 ID 목록을 검색한 다음, 각 ID에 대해 개별 호출을 해서 세부 정보를 가져오는 거죠.

게다가 대명사나 지시어(예: '이것'이 여러 API 호출에 사용되는 회사 ID나 특정 목록으로 확인되는 경우)도 제대로 파악할 수 있답니다.

각 질문에서 어떤 점이 까다로웠는지, 그리고 LLM 에이전트가 어떻게 해결했는지 설명해 드릴게요.

연구 에이전트에게 몇 가지 질문을 더 던져보고, 결과가 어떻게 나오는지 한번 살펴볼까요?

  • Neural Network 임플란트를 다루는 5개 산업은 무엇인가요?
  • 설명과 함께 해당 업계의 회사 세 곳을 나열하고, 나중에 캘리포니아로 필터링해 주세요.
  • 이 회사들에서는 누가 일하고 있나요?
  • 2023년 1월 뉴스에서 긍정적인 감정으로 언급된 기업은 어디인가요?
  • 그곳에서 이사회 구성원으로 일하는 사람은 누구인가요?

답변

Neural Implant를 다루는 5개 산업은 무엇인가요?

처음에는 쉬운 작업을 수행해요. 여기서 작업은 산업 끝점을 호출한 다음 5개의 결과로만 제한하는 것이죠 (끝점은 제한 인수를 사용하지 않음). 또한 실제 산업에 대해서는 모호해요.

이용 가능한 산업에 따르면 다음은 Neural Implant와 가장 관련이 있는 것으로 보여요.

  • 의료 기술 회사

설명과 함께 해당 업계의 세 회사를 나열하고 나중에 캘리포니아별로 필터링합니다.

사전 정보 사용, 매개변수 수정, 사후 필터링! 이 질문에서는 업계에 대한 일반적인 역참조와 매개변수는 아니지만 사후 필터링이 필요한 추가 위치를 제공해요.

대화의 사전 정보를 사용하여 업계 이름을 수정하고 사후 필터와 제한을 적용하여 캘리포니아 회사 3개만 표시합니다.

네, 회사가 많아요. 캘리포니아에 위치한 회사를 필터링한 다음 그 중 5개 회사를 설명과 함께 나열할게요.

  • goBalto:(생명공학 회사, 제약 회사) 미국 캘리포니아주 샌프란시스코에 본사를 둔 소프트웨어 회사
  • 퀀테나 통신:(반도체 회사, 전자 제품 제조업체) 미국 캘리포니아 주 산호세에 본사를 두고 ON Semiconductor가 소유한 제조 회사

이 회사에서는 누가 일하고 있나요?

다음 질문에서는 회사에 대한 "이것"을 다시 참조하고 별도의 엔드포인트에서 사용할 수 있는 세부 정보를 요청해요. 하지만 단일 회사 ID만 사용하므로 상담사는 `people_at_company` 엔드포인트를 여러 번 호출해야 해요.

상장회사에서 일하는 사람들은 다음과 같아요.

  • goBalto:Sujay Jadhav(CEO), Darren Hite(BOARD_MEMBER), Masashi Kiyomine(BOARD_MEMBER)
  • 퀀테나 통신:Sam Heidari(CEO), Dmitry Akhanov(BOARD_MEMBER), Edwin B Hooper III “Ned”(BOARD_MEMBER), Jack Lazar(BOARD_MEMBER), Mark Stevens(BOARD_MEMBER)
  • 피니사르:Bob Bashaw(CEO), Mary Jane Raymond(BOARD_MEMBER)

2023년 1월 뉴스에 긍정적인 감정으로 언급된 기업은 무엇인가요?

여기서는 세션을 다시 시작하지 않고 대화를 회사에서 기사로 전환하는 두 가지 작업을 수행하려고 해요. API 호출을 위해 yyyy-mm-dd 형식으로 변환해야 하는 2023년 1월의 부분 날짜를 제공하죠. "좋은 감정"은 숫자 점수를 의미하며 우리는 가장 높은 점수를 원한다는 것을 이해해야 해요. 감정 출력과 함께 제공되는 기사 목록에서 모델은 읽고, 이해하고, 감정 내림차순으로 정렬하고, 가장 높은 순위의 기사를 선택하고, 제목과 여기에 언급된 회사를 출력해야 해요. 동일한 엔드포인트가 아니므로 기사 ID를 가져와 각 기사에 대한 `Companies_in_article` 도구를 개별적으로 확인해야 해요.

다음은 긍정적인 감정 점수가 포함된 2023년 1월 기사와 기사에서 언급된 회사에요.

  • BackBox, 맞춤형 제품 업데이트 공개(0.886):이 기사에 언급된 회사를 식별할 수 있는 도구가 없어요.
  • Mozilla의 Pocket 앱이 대규모 업데이트를 받았습니다(0.838, 0.83):모질라
  • Onapsis와 Wipro는 기업이 SAP 애플리케이션을 보호하도록 돕습니다(0.612): Onapsis, Wipro, SAP
  • Onapsis, 디지털 혁신의 장애물인 보안을 제거하기 위해 Wipro와의 협력 발표(0.804, 0.735):Onapsis, Wipro
  • Houston Metro와 Lone Star College는 Lone Star College-Houston North Fallbrook 캠퍼스에 대한 새로운 시범 서비스를 시작합니다(0.816):론스타 칼리지

그곳에서 이사회 구성원으로 일하는 사람은 누구인가요?

여기서는 "거기"로 이전 회사를 다시 참조하고 API 호출 선택에 대한 역할 요구 사항을 모호하게 지정해요. 에이전트는 이전에 세션 기록에서 검색한 회사 ID를 사용하여 `people_at_company` 엔드포인트를 여러 번 호출한 다음 해당 정보를 응답으로 집계하고 필터링해야 해요.

모든 회사의 이사회 구성원을 검색할 수는 없었어요. 제가 찾은 정보는 다음과 같아요.

  • 위프로:
    아짐 프렘지(BOARD_MEMBER)
    리샤드 프렘지(BOARD_MEMBER)
  • SAP:
    Hasso Plattner(BOARD_MEMBER)
    제니퍼 모건(BOARD_MEMBER)
  • Google:
    래리 페이지(BOARD_MEMBER)
    세르게이 브린(BOARD_MEMBER)

전개

Toolbox 서버와 LangGraph 응용 프로그램의 배포는 이 기사의 범위를 벗어나요. 다음을 참조하세요.GenAI Toolbox 문서 and Cloud Run의 LangChain.

요약

Google Gen AI Toolbox를 사용해서 데이터베이스 기반 도구를 쉽게 통합하는 에이전트 애플리케이션을 구축하는 방법을 보여드릴게요. 저희는 GraphRAG, 즉 Neo4j의 Knowledge Graph를 사용하는 사용 사례에 집중하고 있지만, 동일한 에이전트 애플리케이션에서 다양한 데이터 소스와 데이터베이스 유형을 결합할 수도 있어요. Toolbox는 다양한 에이전트 프레임워크와 통합되니까, 도구를 한 번 정의하고 여러 사용 사례에 재사용할 수 있다는 장점이 있죠. 오픈 소스라서 Toolbox에 기여하는 것도 간단해요. 여러분도 피드백 및 토론 메커니즘을 통해 여러분만의 데이터 소스를 추가하고 피드백과 개선 사항을 제공해주시면 좋겠어요.

Knowledge Graph에 대해 더 자세히 알고 싶으시다면, "지식 그래프란 무엇입니까?"를 확인해보세요. 그리고 "GraphRAG란 무엇입니까?"도 꼭 확인해보시고요!


  • 에이전트 AI
  • 생성 AI 도구
  • mcp

에이치시스템즈LogTree는 Neo4j 기반 GraphRAG 플랫폼으로, 데이터를 자동으로 지식그래프화하고 자연어 질의로 즉시 답을 제공합니다.

👉 에이치시스템즈 홈페이지

728x90
반응형

+ Recent posts