python언어로 langchain라이브러리를 활용한 AI 실습을 진행했다.
어제 내용을 가볍게 복습한 후에 pip install로 langchain관련 패키지를 가상환경에 설치를 마쳤다.
라이브러리에 맞는 새로운 문법이 아직 헷갈리는데 여기서 안 좋은? 소식을 들었다.
파이썬 라이브러리 중 특히 AI관련 라이브러리는 업데이트가 빈번해 지금 쓰는 문법과 라이브러리가 언제 바뀔지 모른다는 것이다.
AI를 깊게 파려면 항상 주의를 기울이고 있어야 할 것 같다.
지금 작성한 코드가 1년 뒤에는 제대로 동작하지 않을 확률이 크다...
오늘 블로그는 파이썬 langchain보다는 어제 배운 node.js 환경에서 openai API를 활용하는 방법을 추가로 복습해보겠습니다.
아래는 OpenAI의 chat/completions API에 사용되는 주요 파라미터 값들에 대한 상세 설명입니다. axios로 직접 요청할 때 사용되는 JSON 요청 본문을 기준으로 설명합니다.
{
"model": "gpt-3.5-turbo",
"messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{ "role": "user", "content": "Explain quantum physics in simple terms." }
],
"temperature": 0.7,
"top_p": 1,
"n": 1,
"stream": false,
"stop": null,
"max_tokens": 1000,
"presence_penalty": 0,
"frequency_penalty": 0
}
{
"temperature": 0.7,
"top_p": 1,
"max_tokens": 500,
"presence_penalty": 0.3,
"frequency_penalty": 0.5
}
아래는 다양한 OpenAI Chat API 파라미터 조합을 테스트하는 Node.js 예제 코드입니다. 각 파라미터별로 어떻게 응답 결과가 달라지는지를 직접 실험해볼 수 있게 구성했으며, 예상 결과에 대한 설명도 함께 주석으로 포함되어 있습니다.
.env 파일
OPENAI_API_KEY=sk-...
npm install axios dotenv
const axios = require('axios');
require('dotenv').config();
async function testPrompt({ temperature, top_p, presence_penalty, frequency_penalty }) {
try {
const res = await axios.post(
'https://api.openai.com/v1/chat/completions',
{
model: 'gpt-3.5-turbo',
messages: [
{ role: 'system', content: 'You are a creative assistant who writes short stories.' },
{ role: 'user', content: 'Write a very short story about a robot and a cat.' }
],
temperature,
top_p,
max_tokens: 200,
presence_penalty,
frequency_penalty
},
{
headers: {
Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
'Content-Type': 'application/json'
}
}
);
console.log(`\n=== Test: temp=${temperature}, top_p=${top_p}, presence=${presence_penalty}, freq=${frequency_penalty} ===`);
console.log(res.data.choices[0].message.content);
} catch (err) {
console.error('Error:', err.response?.data || err.message);
}
}
// 테스트 시나리오 배열
const testCases = [
{
// 기본값, 가장 안정적인 결과
temperature: 0.7,
top_p: 1,
presence_penalty: 0,
frequency_penalty: 0
},
{
// 더 창의적인 응답
temperature: 1.2,
top_p: 1,
presence_penalty: 0.5,
frequency_penalty: 0.3
},
{
// 반복 억제, 중복 단어 줄이기
temperature: 0.7,
top_p: 1,
presence_penalty: 0,
frequency_penalty: 1.0
},
{
// 새로운 아이디어 강제 유도
temperature: 0.7,
top_p: 1,
presence_penalty: 1.5,
frequency_penalty: 0
},
{
// 가장 보수적이고 안정적인 응답
temperature: 0.2,
top_p: 0.8,
presence_penalty: 0,
frequency_penalty: 0
}
];
// 실행
(async () => {
for (const test of testCases) {
await testPrompt(test);
}
})();
테스트 케이스 | 주요 설정 | 예상 결과 설명 |
---|---|---|
기본값 | temp=0.7, top_p=1, others=0 | 균형 잡힌 일반적 응답 |
창의적 설정 | temp=1.2, presence=0.5 | 더 독창적이고 자유로운 이야기 |
반복 억제 | frequency_penalty=1.0 | 같은 단어 반복 줄임 |
새 아이디어 유도 | presence_penalty=1.5 | 더 참신한 개념을 시도하려 함 |
안정적 응답 | temp=0.2, top_p=0.8 | 보수적이고 짧은 문장, 무난한 흐름 |
이 코드를 통해 하나의 프롬프트에 대해 다양한 파라미터 조합을 실험하며 결과 차이를 직접 확인할 수 있습니다.