Airtable + GPT : 코드가없는 도구가있는 경량 강그 시스템 프로토 타이핑


편집자에 의한 이미지 | chatgpt
틀 소개
선택한 접근 방식에 따라 코드가 거의 또는 전혀없는 실용적인 연습 준비가 되셨습니까? 이 튜토리얼은 두 가지 강력한 도구를 함께 묶는 방법을 보여줍니다. Openai의 GPT 모델과 에어테이블 클라우드 기반 데이터베이스-간단한 장난감 크기의 검색 세대 (RAG) 시스템을 프로토 타입합니다. 이 시스템은 질문 기반 프롬프트를 받아들이고 AirTable에 저장된 텍스트 데이터를 지식 기반으로 사용하여 접지 된 답변을 생성합니다. 헝겊 시스템에 익숙하지 않거나 새로 고침을 원한다면 Rag 이해에 관한이 기사 시리즈를 놓치지 마십시오.
틀 성분
이 튜토리얼을 직접 연습하려면 다음이 필요합니다.
- 작업 공간에 생성 된 기본이있는 에어테이블 계정.
- OpenAI API 키 (모델 선택의 유연성을위한 유료 계획).
- 에이 PipedReam 계정 – 오케스트레이션 및 자동화 앱으로 무료 계층 아래에서 실험을 할 수 있습니다 (매일 달리기 제한).
틀 검색된 세대 레시피
Rag 시스템을 구축하는 과정은 순전히 선형이 아니며 일부 단계는 다른 방식으로 수행 할 수 있습니다. 프로그래밍 지식 수준에 따라 코드가 없거나 거의 코드없는 접근 방식을 선택하거나 프로그래밍 방식으로 워크 플로를 만들 수 있습니다.
본질적으로, 우리는 PipedReam을 사용하여 세 부분으로 구성된 오케스트레이션 워크 플로를 만들 것입니다.
- 방아쇠: 웹 서비스 요청과 유사 하게이 요소는 워크 플로에서 다음 요소를 통과하는 작업 흐름을 시작합니다. 일단 배포되면 이곳에서 프로토 타입 래그 시스템의 사용자 프롬프트 (IE)를 지정하는 곳입니다.
- 에어테이블 블록: Airtable Base 및 특정 테이블에 연결하여 데이터를 Rag 시스템의 지식 기반으로 사용합니다. AirTable 내에 곧 텍스트 데이터를 추가하겠습니다.
- Openai 블록: API 키를 사용하여 OpenAI의 GPT 기반 언어 모델에 연결하고 컨텍스트 (검색된 에어테이블 데이터)와 함께 사용자 프롬프트를 모델로 전달하여 응답을 얻습니다.
그러나 먼저, 텍스트 데이터가 포함 된 에어테이블베이스에 새 테이블을 만들어야합니다. 이 예에서는 세 개의 필드 (ID : 한 줄 텍스트, 출처 : 일선 텍스트, 내용 : 긴 텍스트)가있는 빈 테이블을 만들었고, 아시아 국가에 대한 기본 지식이 포함 된 텍스트가 포함 된 공개적으로 사용 가능한 작은 데이터 세트에서 가져온 데이터를 가져 왔습니다. CSV와 링크 옵션을 사용하여 데이터를 테이블로 가져옵니다. 테이블 작성 및 데이터 가져 오기에 대한 자세한 내용은이 기사에 있습니다.
Airtable에 지식 기반이 준비되면 나머지 프로세스를 위해 PipedReam으로 전환합시다! 아직 그렇게하지 않은 경우 등록하고 로그인하십시오. 워크 플로를 시작하는 몇 가지 방법이 있습니다. 그중 하나는 PipedReam의 AI 에이전트에 작성하려는 내용을 설명하는 것입니다. 직관적이지만 곧 설명 할 수 있듯이 수정이 필요한 오류가 발생할 수 있습니다. PipedReam에는 두 개의 병렬 UI가 있습니다. 하나는 워크 플로를 수동으로 빌드 및 편집하기위한 것과 String이라고 불리는 AI 에이전트와의 대화를위한 것입니다.


PipedReam의 AI 대화 인터페이스 (String)
String이 원하는 워크 플로의 대략적인 버전을 빌드하도록 선택하면 다음과 같은 모습을 보일 수있는 프롬프트와 함께 무엇을 작성 해야하는지 명확하게 설명하십시오.
텍스트가 포함 된 에어 테이블 테이블과 OpenAi의 GPT 모델 (유료 API 키가 있음)을 사용하는 간단한 장난감 래그 응용 프로그램을 오케스트레이션하고 싶습니다.
PipedReam의 언어 모델은 다음과 같이 자신의 위험에 따라 승인 할 답변을 반환 할 수 있습니다.
에어 테이블 테이블을 OpenAI의 GPT 모델과 연결하는 간단한 헝겊 (검색-구분 세대) 에이전트를 만들 것입니다. 여기에 제작할 수있는 것은 다음과 같습니다.
쿼리 수락 트리거 설정 (Webhook 또는 수동 실행을 통해)
쿼리를 기반으로 Airtable 테이블에서 관련 텍스트를 검색하고 검색하십시오.
검색된 텍스트를 OpenAI GPT의 컨텍스트로 사용하여 정보에 입각 한 응답을 생성하십시오.
AirTable 데이터에 근거한 AI 생성 답변을 반환하십시오.
이렇게하면 GPT의 추론 능력에 의해 향상된 에어테이션에 저장된 내용을 기반으로 질문을하고 답변을받을 수있는 기본 래그 시스템이 제공됩니다.
실험과“무슨 일이 일어나는지보기”를 위해, 제안 된 조치 과정을 승인하여 위의 이미지에서 유사한 3 블록 워크 플로를 얻습니다.
이것은 핵심 PipedReam 편집기 UI가 아니므로 오른쪽 상단에서 “PipedReam을 열어”를 클릭하여 전환하십시오. 실제 PipedReam 워크 플로우 편집기와 함께 새 탭이 열립니다.
트리거 블록의 경우 URL은 내가 얻은 것과 유사한 구문으로 자동으로 생성됩니다. https://eoupscprutt37xx.m.pipedream.net
. 클릭하고 오른쪽에서 열리는 설정 창에서 첫 번째 옵션이 “전체 HTTP 요청”과 “정적 응답 반환”으로 설정되어 있는지 확인하십시오.
두 번째 블록 (Airtable Action)의 경우해야 할 일이 약간있을 수 있습니다. 먼저, 에어테이블베이스에 연결하십시오. 동일한 브라우저에서 작업하는 경우 간단 할 수 있습니다. “새 계정 연결”을 클릭 한 후 나타나는 팝업 창에서 Airtable에 로그인 한 다음 스크린 내 단계를 따라 기본 및 테이블을 지정하여 액세스 할 수 있습니다.


PipedReam 워크 플로우 편집기 : AirTable에 연결
여기에 까다로운 부분이 있습니다 (그리고 AI 에이전트에게 골격 워크 플로를 구축하도록 요청할 때 의도적으로 불완전한 프롬프트를 남긴 이유) : 선택할 수있는 몇 가지 유형의 에어테이블 액션이 있으며, 래그 스타일의 검색 메커니즘에 필요한 특정 작업은 “목록 레코드”입니다. 아마도 이것은 워크 플로의 두 번째 블록에서 보는 행동이 아닙니다. 이 경우 제거하고 중간에 새 블록을 추가하고 “Airtable”을 선택하고 “목록 레코드”를 선택하십시오. 그런 다음 테이블에 다시 연결하고 연결을 테스트하여 작동하는지 확인하십시오.
이것이 성공적으로 테스트 된 연결의 모습입니다.


PipedReam Workflow 편집기 : Airtable에 대한 연결 테스트
마지막으로 GPT에 대한 OpenAI 액세스를 설정하고 구성하십시오. API 키를 편리하게 유지하십시오. 세 번째 블록의 보조 레이블이 “Rag 응답 생성”이 아닌 경우 블록을 제거 하고이 하위 유형으로 새로운 OpenAi 블록으로 교체하십시오.
API 키를 사용하여 OpenAI 연결을 설정하여 시작하십시오.


OpenAi 연결 설정
사용자 질문 필드는 다음과 같이 설정해야합니다 {{ steps.trigger.event.body.test }}
그리고 지식 기반 레코드 (Airtable의 Rag에 대한 텍스트“문서”)는 다음과 같이 설정해야합니다. {{ steps.list_records.$return_value }}
.
나머지를 기본값과 테스트로 유지할 수 있지만 이러한 종류의 워크 플로에 공통적 인 구문 분석 오류가 발생할 수있어 AI 에이전트를 사용하여 지원 및 자동 수정을 위해 문자열로 돌아가야합니다. 또는 강력한 솔루션을 위해 다음을 하단의 OpenAI 구성 요소의 코드 필드에 직접 복사하여 붙여 넣을 수 있습니다.
import openai from "@pipedream/openai"
export default defineComponent({
name: "Generate RAG Response",
description: "Generate a response using OpenAI based on user question and Airtable knowledge base content",
type: "action",
props: {
openai,
model: {
propDefinition: [
openai,
"chatCompletionModelId",
],
},
question: {
type: "string",
label: "User Question",
description: "The question from the webhook trigger",
default: "{{ steps.trigger.event.body.test }}",
},
knowledgeBaseRecords: {
type: "any",
label: "Knowledge Base Records",
description: "The Airtable records containing the knowledge base content",
default: "{{ steps.list_records.$return_value }}",
},
},
async run({ $ }) {
// Extract user question
const userQuestion = this.question;
if (!userQuestion) {
throw new Error("No question provided from the trigger");
}
// Process Airtable records to extract content
const records = this.knowledgeBaseRecords;
let knowledgeBaseContent = "";
if (records && Array.isArray(records)) {
knowledgeBaseContent = records
.map(record => {
// Extract content from fields.Content
const content = record.fields?.Content;
return content ? content.trim() : "";
})
.filter(content => content.length > 0) // Remove empty content
.join("\n\n---\n\n"); // Separate different knowledge base entries
}
if (!knowledgeBaseContent) {
throw new Error("No content found in knowledge base records");
}
// Create system prompt with knowledge base context
const systemPrompt = `You are a helpful assistant that answers questions based on the provided knowledge base. Use only the information from the knowledge base below to answer questions. If the information is not available in the knowledge base, please say so.
Knowledge Base:
${knowledgeBaseContent}
Instructions:
- Answer based only on the provided knowledge base content
- Be accurate and concise
- If the answer is not in the knowledge base, clearly state that the information is not available
- Cite relevant parts of the knowledge base when possible`;
// Prepare messages for OpenAI
const messages = [
{
role: "system",
content: systemPrompt,
},
{
role: "user",
content: userQuestion,
},
];
// Call OpenAI chat completion
const response = await this.openai.createChatCompletion({
$,
data: {
model: this.model,
messages: messages,
temperature: 0.7,
max_tokens: 1000,
},
});
const generatedResponse = response.generated_message?.content;
if (!generatedResponse) {
throw new Error("Failed to generate response from OpenAI");
}
// Export summary for user feedback
$.export("$summary", `Generated RAG response for question: "${userQuestion.substring(0, 50)}${userQuestion.length > 50 ? '...' : ''}"`);
// Return the generated response
return {
question: userQuestion,
response: generatedResponse,
model_used: this.model,
knowledge_base_entries: records ? records.length : 0,
full_openai_response: response,
};
},
})
오류 나 경고가 나타나지 않으면 테스트하고 배포 할 준비가되어 있어야합니다. 먼저 배포 한 다음 새로 열린 배포 탭에서 이와 같은 사용자 쿼리를 전달하여 테스트하십시오.


일본의 수도가 무엇인지 묻는 프롬프트로 배포 된 워크 플로 테스트
요청이 처리되고 모든 것이 올바르게 실행되면 아래로 스크롤하여 워크 플로의 마지막 단계에서 액세스 한 GPT 모델에서 반환 된 응답을 확인하십시오.


GPT 모델 응답
잘하셨어요! 이 응답은 우리가 Airtable에서 구축 한 지식 기반에 기반을두고 있으므로 이제 PipedReam을 통해 에어테이션 및 GPT 모델을 결합한 간단한 프로토 타입 Rag 시스템을 갖추고 있습니다.
틀 마무리
이 기사는 코딩이 거의 없거나 전혀없는 오케스트레이션 워크 플로우를 제작하는 방법을 보여주었습니다. 에어테이블 텍스트 데이터베이스를 검색하기위한 지식 기반으로 사용하고 응답 생성을위한 OpenAI의 GPT 모델을 사용하는 Rag 시스템을 프로토 타입으로 만들었습니다. PipedReam을 사용하면 오케스트레이션 워크 플로를 프로그래밍 방식으로, 수동으로 또는 대화적인 AI 에이전트를 지원할 수 있습니다. 저자의 경험을 통해, 우리는 각 접근 방식의 장단점을 간결하게 보여주었습니다.
Iván Palomares Carrascosa AI, 기계 학습, 딥 러닝 및 LLM의 리더, 작가, 연사 및 고문입니다. 그는 실제 세계에서 AI를 활용하는 다른 사람들을 훈련시키고 안내합니다.
Post Comment