기업이 프로덕션 지원 AI 에이전트 애플리케이션을 배포하고자 할 때, 대규모 언어 모델(LLM) 통합 가시성은 성능과 신뢰를 모두 보장하기 위한 중요한 요구 사항으로 부상했습니다. 조직은 신뢰성, 보안 및 규정 준수를 유지하기 위해 에이전트가 데이터와 상호 작용하고, 의사 결정을 내리고, 정보를 검색하는 방식에 대한 가시성이 필요합니다. 적절한 가시성이 없으면 기업은 일관되지 않거나 부정확하거나 편향된 결과를 생성하는 모델을 배포하여 사용자 경험이 저하되고 운영 비효율을 초래할 위험이 있습니다. 새로운 파트너십 카우치베이스 그리고 아리제 AI 는 AI 기반 애플리케이션에 강력한 모니터링, 평가, 최적화 기능을 제공하는 데 중요한 역할을 합니다.
Couchbase와 Arize AI의 통합은 검색 증강 세대(RAG) 및 에이전트 애플리케이션을 대규모로 구축 및 모니터링할 수 있는 강력한 솔루션을 제공합니다. Couchbase의 고성능 벡터 데이터베이스와 Arize AI 통합 가시성 플랫폼 및 향상된 모니터링 기능을 활용하여 기업은 프로덕션 환경에서 에이전트 RAG 솔루션을 자신 있게 구축, 배포 및 최적화할 수 있습니다.
이 블로그에서는 LangGraph와 Couchbase를 사용하여 에이전틱 RAG QA 챗봇을 만드는 과정을 안내합니다. 상담원 카탈로그 최근 발표된 카펠라 AI 서비스 (미리 보기), 그리고 Arize AI로 성능을 평가하고 최적화하고 있습니다. 이는 개발자가 Couchbase와 Arize AI를 통해 검색 워크플로우를 개선하고, 응답 정확도를 높이고, LLM 기반 상호 작용을 실시간으로 모니터링하는 방법을 보여주는 실질적인 예시입니다.
카우치베이스와 아리제 AI 파트너십의 가치
카우치베이스와 아리제 AI는 힘을 합쳐 개발자가 AI 에이전트 애플리케이션을 구축하고 평가하는 방식을 혁신하고 있습니다. 개발자는 에이전트 워크플로우 조정을 위해 선호하는 에이전트 개발 프레임워크와 함께 LLM 캐싱, 장기 및 단기 에이전트 메모리, 벡터 임베딩 사용 사례, 분석 및 운영 워크로드를 위한 단일 데이터 플랫폼으로 Couchbase Capella를 활용하여 정교한 에이전트 애플리케이션을 구축할 수 있습니다.
카우치베이스 에이전트 카탈로그는 조직 내에서 다양한 에이전트 도구의 저장, 관리 및 검색, 신속한 버전 관리, LLM 추적 디버깅이 가능한 멀티 에이전트 워크플로우를 위한 중앙 집중식 저장소를 제공하여 이 시스템을 더욱 향상시킵니다.
높은 신뢰성과 투명성을 보장하기 위해 Arize AI는 다음과 같은 중요한 가시성 기능을 제공합니다:
-
- 에이전트 함수 호출 추적: Arize를 사용하면 검색 단계 및 LLM 상호 작용을 포함한 상담원의 함수 호출을 자세히 모니터링하여 응답이 어떻게 생성되는지 추적할 수 있습니다.
- 데이터 세트 벤치마킹: 개발자는 구조화된 데이터 세트를 만들어 시간 경과에 따른 상담원 성과를 평가하고 비교할 수 있습니다.
- LLM을 심사위원으로 하는 성과 평가: 아리제는 기본 제공 평가기를 사용하여 LLM을 활용하여 응답 정확도, 관련성 및 전반적인 상담원 효과를 평가합니다.
- 검색 전략 실험하기: 청크 크기, 중복 및 검색된 문서 수(K-값)를 조정하여 개발자가 상담원 성과에 미치는 영향을 분석할 수 있습니다.
- 아리제 비교 분석: 이 플랫폼에서는 다양한 검색 전략을 나란히 비교할 수 있으므로 팀이 상담원을 위한 최적의 구성을 결정할 수 있습니다.
LLM 관찰 가능성의 중요성
AI 애플리케이션이 프로덕션 환경에서 제대로 작동하도록 하려면 기업에는 강력한 평가 프레임워크가 필요합니다. 개발자는 Arize AI와 같은 통합 가시성 도구를 통해 이를 수행할 수 있습니다:
-
- 관련성, 환각률, 지연 시간 등의 요소를 기준으로 LLM 결과물을 평가합니다.
- 신속한 변경, 검색 수정 및 매개변수 조정의 영향을 측정하기 위해 체계적인 평가를 수행합니다.
- 포괄적인 데이터 집합을 큐레이션하여 다양한 사용 사례에서 성능을 벤치마킹하세요.
- CI/CD 파이프라인 내 평가 프로세스를 자동화하여 일관된 애플리케이션 안정성 보장
개발자는 LLM을 판단 기준으로 삼아 사전 테스트를 거친 평가자, 다단계 사용자 지정 평가 기법, 대규모 성능 벤치마킹을 사용하여 에이전트의 효율성을 측정할 수 있습니다. 수천 번의 평가를 실행함으로써 팀은 빠르게 반복하고 LLM 프롬프트, 검색 방법 및 상담원 워크플로를 개선하여 전반적인 애플리케이션 품질을 개선할 수 있습니다.
에이전트 RAG QA 챗봇 구축하기
에이전틱 RAG는 기존의 검색 증강 생성 기능과 지능형 의사 결정을 결합합니다. 이 구현에서는 LLM이 쿼리 컨텍스트에 따라 검색이 필요한지 여부를 동적으로 결정할 수 있도록 합니다.
의 상담원 워크플로우를 설명하는 그림 Langgraph의 에이전트 RAG 예시.
단계별 구현
이 블로그의 나머지 내용은 다음과 같은 내용을 기반으로 합니다. 튜토리얼 노트. 관찰 가능한 AI 에이전트를 빌드하고 배포하기 전에 개발 환경을 구성해야 합니다.
전제 조건:
-
- 이 튜토리얼을 따라 하려면 다음이 필요합니다. 아리제 가입하기 를 클릭하고 Space, API 및 개발자 키를 받으세요. 스페이스에서 여기 가이드. 또한 OpenAI API 키.
- 다음을 수행하여 Couchbase 클러스터를 설정해야 합니다:
- 다음에서 계정을 만드세요. 카우치베이스 클라우드
- 데이터, 인덱스, 검색 서비스가 활성화된 무료 클러스터를 생성하세요*.
- 클러스터 액세스 자격 증명 만들기
- 로컬 머신에서 클러스터에 대한 액세스 허용
- 문서를 저장할 버킷 만들기
- 만들기 검색 색인
- Couchbase 상담원 카탈로그를 사용하여 상담원에게 필요한 도구 및 프롬프트를 만듭니다(설치 및 자세한 지침은 다음 문서를 참조하세요. 여기)
*검색 서비스는 나중에 상담원 카탈로그를 사용할 때 시맨틱 검색을 수행하는 데 사용됩니다.
1) AI 에이전트를 관리하기 위한 벡터 저장소 및 에이전트 카탈로그로 LangGraph, Couchbase를 사용하여 에이전트 RAG 챗봇을 생성합니다.
종속성 설정
|
1 2 3 4 |
%pip install -qU langchain-openai langchain-community langchain langgraph langgraph.prebuilt openai langchain-couchbase agentc langchain-huggingface langchain_core %pip install -qq "arize-phoenix[evals]>=7.0.0" "arize-otel>=0.7.0" "openinference-instrumentation-openai>=0.1.18" "openinference-instrumentation-langchain>=0.1.29" |
Couchbase에 연결
벡터 저장소로 Couchbase를 사용하겠습니다. 연결을 설정하는 방법은 다음과 같습니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
from datetime import timedelta from couchbase.auth import PasswordAuthenticator from couchbase.cluster import Cluster from couchbase.options import ClusterOptions from langchain_couchbase.vectorstores import CouchbaseSearchVectorStore from langchain_huggingface import HuggingFaceEmbeddings # Cluster settings CB_CONN_STRING = "your-connection-string" CB_USERNAME = "your-username" CB_PASSWORD = "your-password" BUCKET_NAME = "your-bucket-name" SCOPE_NAME = "your-scope-name" COLLECTION_NAME = "your-collection-name" SEARCH_INDEX_NAME = "your-search-index-name" # Connect to couchbase cluster auth = PasswordAuthenticator(CB_USERNAME, CB_PASSWORD) options = ClusterOptions(auth) options.apply_profile("wan_development") cluster = Cluster(CB_CONN_STRING, options) cluster.wait_until_ready(timedelta(seconds=5)) # Initialize vector store embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L12-v2") vector_store = CouchbaseVectorStore( cluster=cluster, bucket_name=BUCKET_NAME, scope_name=SCOPE_NAME, collection_name=COLLECTION_NAME, embedding=embeddings, index_name=SEARCH_INDEX_NAME, ) |
문서 수집
구성 가능한 청킹 매개변수를 사용하여 문서를 로드하고 색인하는 도우미 함수를 만들겠습니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
from langchain_community.document_loaders import WebBaseLoader from langchain_text_splitters import RecursiveCharacterTextSplitter def reset_vector_store(vector_store, chunk_size=1024, chunk_overlap=20): try: # Delete existing documents results = vector_store.similarity_search( k=1000, query="", search_options={ "query": {"field": "metadata.source", "match": "lilian_weng_blog"} }, ) if results: deleted_ids = [result.id for result in results] vector_store.delete(ids=deleted_ids) # Load documents from URLs urls = [ "https://lilianweng.github.io/posts/2024-07-07-hallucination/", "https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/", "https://lilianweng.github.io/posts/2023-10-25-adv-attack-llm/", ] docs = [WebBaseLoader(url).load() for url in urls] docs_list = [item for sublist in docs for item in sublist] # Use RecursiveCharacterTextSplitter with configurable parameters text_splitter = RecursiveCharacterTextSplitter( chunk_size=chunk_size, chunk_overlap=chunk_overlap, separators=["\n\n", "\n", " ", ""], ) doc_splits = text_splitter.split_documents(docs_list) # Add metadata to documents for doc in doc_splits: doc.metadata["source"] = "lilian_weng_blog" # Add documents to vector store vector_store.add_documents(doc_splits) return vector_store except ValueError as e: print(f"Error: {e}") # Initialize with default settings reset_vector_store(vector_store) |
리트리버 도구 설정
에이전트 카탈로그에서 리트리버 도구를 가져옵니다. agentc 제공자. 향후 더 많은 도구(및/또는 프롬프트)가 필요하고 애플리케이션이 더 복잡해지면 상담원 카탈로그 SDK 및 CLI를 사용하여 사용 사례(시맨틱 검색) 또는 이름에 따라 도구를 자동으로 가져올 수 있습니다.
이 도구가 만들어진 방법과 상담원 카탈로그의 더 많은 기능에 대한 안내는 다음 문서를 참조하세요. 여기.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import agentc.langchain import agentc from langchain_core.tools import tool provider = agentc.Provider( decorator=lambda t: tool(t.func), secrets={"CB_USERNAME": CB_USERNAME, "CB_PASSWORD": CB_PASSWORD, "CB_CONN_STRING": CB_CONN_STRING}) # Get the retriever tool from Agent Catalog retriever_tool = provider.get_item(name="retriever_tool", item_type="tool") tools = retriever_tool |
에이전트 상태 정의하기
관련된 모든 상담원이 서로 더 잘 소통할 수 있도록 상담원 그래프를 정의합니다. 상담원은 상태 객체를 각 노드에 전달하고 해당 노드의 출력으로 수정합니다.
우리 주는 다음과 같은 목록이 될 것입니다. 메시지 를 클릭하면 그래프의 각 노드가 추가됩니다:
|
1 2 3 4 5 6 7 8 |
from typing import Annotated, Sequence, TypedDict from langchain_core.messages import BaseMessage from langgraph.graph.message import add_messages class AgentState(TypedDict): # The add_messages function defines how an update should be processed # Default is to replace. add_messages says "append" messages: Annotated[Sequence[BaseMessage], add_messages] |
에이전트 노드 만들기
에이전트 파이프라인의 핵심 구성 요소를 정의하겠습니다:
노드: 관련성 검사 기능, 쿼리 재작성기, 메인 에이전트, 응답 생성
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
from typing import Annotated, Literal, Sequence, TypedDict from langchain import hub from langchain_core.messages import BaseMessage, HumanMessage from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import PromptTemplate from langchain_core.pydantic_v1 import BaseModel, Field from langchain_openai import ChatOpenAI from langgraph.prebuilt import tools_condition ### Relevance Checking Function def grade_documents(state) -> Literal["generate", "rewrite"]: """ Determines whether the retrieved documents are relevant to the question. """ print("---CHECK RELEVANCE---") # Data model class grade(BaseModel): """Binary score for relevance check.""" binary_score: str = Field(description="Relevance score 'yes' or 'no'") # LLM model = ChatOpenAI(temperature=0, model="gpt-4o", streaming=True) llm_with_tool = model.with_structured_output(grade) #fetch a prompt from Agent Catalog grade_documents_prompt = PromptTemplate( template=provider.get_item(name="grade_documents", item_type="prompt").prompt.render(), input_variables=["context", "question"], ) # Chain chain = grade_documents_prompt | llm_with_tool messages = state["messages"] last_message = messages[-1] question = messages[0].content docs = last_message.content scored_result = chain.invoke({"question": question, "context": docs}) score = scored_result.binary_score if score == "yes": print("---DECISION: DOCS RELEVANT---") return "generate" else: print("---DECISION: DOCS NOT RELEVANT---") print(score) return "rewrite" ### Main Agent Node def agent(state): """ Invokes the agent model to generate a response or use tools. """ print("---CALL AGENT---") messages = state["messages"] model = ChatOpenAI(temperature=0, streaming=True, model="gpt-4-turbo") model = model.bind_tools(tools) response = model.invoke(messages) return {"messages": [response]} ### Query Rewriting Node def rewrite(state): """ Transform the query to produce a better question. """ print("---TRANSFORM QUERY---") messages = state["messages"] question = messages[0].content msg = [ HumanMessage( content=f""" \n Look at the input and try to reason about the underlying semantic intent / meaning. \n Here is the initial question: \n ------- \n {question} \n ------- \n Formulate an improved question: """, ) ] model = ChatOpenAI(temperature=0, model="gpt-4-0125-preview", streaming=True) response = model.invoke(msg) return {"messages": [response]} ### Response Generation Node def generate(state): """ Generate answer using retrieved documents """ print("---GENERATE---") messages = state["messages"] question = messages[0].content last_message = messages[-1] docs = last_message.content # Prompt prompt = hub.pull("rlm/rag-prompt") llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0, streaming=True) rag_chain = prompt | llm | StrOutputParser() # Run response = rag_chain.invoke({"context": docs, "question": question}) return {"messages": [response]} |
상담원 그래프 구축하기
이제 노드를 일관된 워크플로에 연결해 보겠습니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
from langgraph.graph import END, StateGraph, START from langgraph.prebuilt import ToolNode # Define a new graph workflow = StateGraph(AgentState) # Define the nodes workflow.add_node("agent", agent) retrieve = ToolNode(retriever_tool) workflow.add_node("retrieve", retrieve) workflow.add_node("rewrite", rewrite) workflow.add_node("generate", generate) # Define edges workflow.add_edge(START, "agent") # Conditional edges based on agent's decision workflow.add_conditional_edges( "agent", tools_condition, { "tools": "retrieve", END: END, }, ) # Conditional edges after retrieval based on document relevance workflow.add_conditional_edges( "retrieve", grade_documents, ) workflow.add_edge("generate", END) workflow.add_edge("rewrite", "agent") # Compile the graph graph = workflow.compile() |
에이전트 그래프 시각화하기
워크플로우를 더 잘 이해하기 위해 시각화해 보겠습니다:
|
1 2 3 4 5 6 7 |
from IPython.display import Image, display try: display(Image(graph.get_graph(xray=True).draw_mermaid_png())) except Exception: # This requires some extra dependencies and is optional pass |
2) Arize를 사용하여 에이전트의 함수 호출을 추적하여 검색 쿼리, LLM 응답 및 도구 사용을 캡처합니다.
Arize는 에이전트 시스템을 위한 포괄적인 관찰 기능을 제공합니다. 추적을 설정해 보겠습니다:
|
1 2 3 4 5 6 7 8 9 10 11 |
from arize.otel import register # Setup tracer provider tracer_provider = register( space_id = SPACE_ID, api_key = API_KEY, project_name = "langgraph-agentic-rag", ) # Import the automatic instrumentor from OpenInference from openinference.instrumentation.langchain import LangChainInstrumentor # Instrument LangChain LangChainInstrumentor().instrument(tracer_provider=tracer_provider) |
이제 에이전트를 실행하여 어떻게 작동하는지 확인해 보겠습니다:
|
1 2 3 4 5 6 7 8 9 10 |
import pprint inputs = { "messages": [ ("user", "What does Lilian Weng say about the types of adversarial attacks on LLMs?"), ] } for output in graph.stream(inputs): for key, value in output.items(): pprint.pprint(f"Output from node '{key}':") pprint.pprint(value, indent=2, width=80, depth=None) |
그러면 에이전트 그래프가 실행되고 쿼리를 처리하면서 각 노드에 대한 자세한 정보가 출력됩니다. 아리제에서는 각 함수 호출의 실행 흐름, 지연 시간 및 세부 정보를 보여주는 추적 시각화를 볼 수 있습니다.
아리제 플랫폼의 추적 시각화
3) 쿼리와 예상 응답이 포함된 데이터 세트를 생성하여 성능 벤치마크하기
시스템을 체계적으로 평가하려면 벤치마크 데이터 세트가 필요합니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import pandas as pd from langchain_openai import ChatOpenAI # Define a template for generating questions GEN_TEMPLATE = """ You are an assistant that generates Q&A questions about the content below. The questions should involve the content, specific facts and figures,names, and elements of the story. Do not ask any questions where the answer is not in the content. Respond with one question per line. Do not include any numbering at the beginning of each line. Do not include any category headings. Generate 10 questions. Be sure there are no duplicate questions. [START CONTENT] {content} [END CONTENT] """ # Load the content you want to generate questions about content = """ Lilian Weng discusses various aspects of adversarial attacks on LLMs and prompt engineering techniques. Make sure to use Lilian Weng's name in the questions. """ # Format the template with the content formatted_template = GEN_TEMPLATE.format(content=content) # Initialize the language model model = ChatOpenAI(model="gpt-4o", max_tokens=1300) # Generate questions response = model.invoke(formatted_template) questions_content = response.content questions = questions_content.strip().split("\n") # Create a dataframe to store the questions questions_df = pd.DataFrame(questions, columns=["input"]) |
4) LLM을 심사위원으로 사용하여 성과 평가하기
LLM 기반 평가를 사용하여 상담원의 응답 품질을 평가합니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
from phoenix.evals import ( RAG_RELEVANCY_PROMPT_RAILS_MAP, RAG_RELEVANCY_PROMPT_TEMPLATE, QA_PROMPT_RAILS_MAP, QA_PROMPT_TEMPLATE, OpenAIModel, llm_classify ) # The rails is used to hold the output to specific values based on the template RELEVANCE_RAILS = list(RAG_RELEVANCY_PROMPT_RAILS_MAP.values()) QA_RAILS = list(QA_PROMPT_RAILS_MAP.values()) relevance_eval_df = llm_classify( dataframe=response_df, template=RAG_RELEVANCY_PROMPT_TEMPLATE, model=OpenAIModel(model="gpt-4o"), rails=RELEVANCE_RAILS, provide_explanation=True, include_prompt=True, concurrency=4, ) correctness_eval_df = llm_classify( dataframe=response_df, template=QA_PROMPT_TEMPLATE, model=OpenAIModel(model="gpt-4o"), rails=QA_RAILS, provide_explanation=True, include_prompt=True, concurrency=4, ) |
5) 검색 설정으로 실험하기
이제 시스템을 최적화하기 위해 다양한 구성을 실험해 보겠습니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# Create a dataset in Arize to store our experiments from arize.experimental.datasets import ArizeDatasetsClient from uuid import uuid1 from arize.experimental.datasets.experiments.types import ( ExperimentTaskResultColumnNames, EvaluationResultColumnNames, ) from arize.experimental.datasets.utils.constants import GENERATIVE # Set up the arize client arize_client = ArizeDatasetsClient(developer_key=DEVELOPER_KEY, api_key=API_KEY) dataset_name = "rag-experiments-" + str(uuid1())[:3] dataset_id = arize_client.create_dataset( space_id=SPACE_ID, dataset_name=dataset_name, dataset_type=GENERATIVE, data=questions_df, ) dataset = arize_client.get_dataset(space_id=SPACE_ID, dataset_id=dataset_id) # Define column mappings for task and evaluation results task_cols = ExperimentTaskResultColumnNames( example_id="example_id", result="output" ) relevance_evaluator_cols = EvaluationResultColumnNames( label="relevance", explanation="relevance_explanation", ) correctness_evaluator_cols = EvaluationResultColumnNames( label="correctness", explanation="correctness_explanation", ) # Function to log experiments to Arize def log_experiment_to_arize(experiment_df, experiment_name): experiment_df["example_id"] = dataset["id"] return arize_client.log_experiment( space_id=SPACE_ID, experiment_name=experiment_name + "-" + str(uuid1())[:2], experiment_df=experiment_df, task_columns=task_cols, evaluator_columns={ "correctness": correctness_evaluator_cols, "relevance": relevance_evaluator_cols, }, dataset_name=dataset_name, ) |
이제 다양한 구성으로 실험을 실행해 보겠습니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Experiment 1: Chunks of 1024 tokens, k=2 reset_vector_store(vector_store, chunk_size=1024, chunk_overlap=20) k_2_chunk_1024_overlap_20 = run_rag(questions_df, k_value=2) k_2_chunk_1024_overlap_20 = run_evaluators(k_2_chunk_1024_overlap_20) # Experiment 2: Chunks of 1024 tokens, k=4 k_4_chunk_1024_overlap_20 = run_rag(questions_df, k_value=4) k_4_chunk_1024_overlap_20 = run_evaluators(k_4_chunk_1024_overlap_20) # Experiment 3: Smaller chunks (200 tokens), k=2 reset_vector_store(vector_store, chunk_size=200, chunk_overlap=20) k_2_chunk_200_overlap_20 = run_rag(questions_df, k_value=2) k_2_chunk_200_overlap_20 = run_evaluators(k_2_chunk_200_overlap_20) # Experiment 4: Medium chunks (500 tokens), k=2 reset_vector_store(vector_store, chunk_size=500, chunk_overlap=20) k_2_chunk_500_overlap_20 = run_rag(questions_df, k_value=2) k_2_chunk_500_overlap_20 = run_evaluators(k_2_chunk_500_overlap_20) # Log all experiments to Arize log_experiment_to_arize(k_2_chunk_1024_overlap_20, "k_2_chunk_1024_overlap_20") log_experiment_to_arize(k_4_chunk_1024_overlap_20, "k_4_chunk_1024_overlap_20") log_experiment_to_arize(k_2_chunk_200_overlap_20, "k_2_chunk_200_overlap_20") log_experiment_to_arize(k_2_chunk_500_overlap_20, "k_2_chunk_500_overlap_20") |
6) 아리제에서 실험 비교
모든 실험을 실행한 후에는 이제 Arize UI에서 실험을 보고 비교할 수 있습니다. 실험은 앞서 만든 데이터 세트 이름으로 Arize 작업 영역에서 볼 수 있습니다.
아리제 플랫폼의 실험 비교 보기
아리제에서는 가능합니다:
-
- 다양한 구성 간의 전체 성능 메트릭 비교
- 질문별 성과를 분석하여 패턴 파악하기
- 추적 세부 정보를 검토하여 실행 흐름 이해
- 각 실험의 관련성 및 정확성 점수 보기
- 평가 결정에 대한 설명 참조
- 응답 관련성 및 정확성에 점수를 매기기 위해 LLM을 판정자로 사용하여 출력을 평가합니다.
- 청크 크기, 중첩 구성, 문서 검색 제한을 실험하여 검색 설정을 최적화하세요.
- 아리제에서 실험을 비교하고 분석하여 가장 성능이 좋은 구성을 결정하세요.
카우치베이스와 아리제 AI로 혁신하기
Couchbase와 Arize의 통합으로 기업은 강력한 통합 가시성 및 최적화 기능을 갖춘 강력한 프로덕션 지원 GenAI 애플리케이션을 구축할 수 있습니다. 조직은 검색 결정 모니터링과 함께 에이전틱 RAG를 활용함으로써 정확도를 개선하고, 착각을 줄이며, 시간이 지남에 따라 최적의 성능을 보장할 수 있습니다.
기업이 계속해서 GenAI의 한계를 확장함에 따라, 고성능 벡터 스토리지와 AI 통합 가시성을 결합하는 것이 안정적이고 확장 가능한 애플리케이션을 배포하는 데 핵심이 될 것입니다. Couchbase와 Arize를 통해 조직은 엔터프라이즈 GenAI 배포의 과제를 자신 있게 해결할 수 있는 도구를 갖추게 됩니다.
추가 리소스
-
- 시작하기 카우치베이스 카펠라 개발자 플랫폼 무료
- 아리제 AI에 데모 요청하기 여기
- 다음에 대한 더 많은 게시물과 자습서를 읽어보세요. 생성 AI(GenAI)