openAI model gpt-3.5-turboμ μ¬μ©ν μΈκ³΅μ§λ₯ μ±ν μΉμ λλ€.
νλ‘μ νΈλ₯Ό μ§ννλ©΄μ μ΄λ €μ λ μ μ΄λ μΆκ°λ‘ μ κ³ μΆμλ κ²λ€μ μ μμ΅λλ€.
pj-cloneGPT/src
.
βββ api / # api ν΅μ μ νμν νμΌ (`axios.post()`)
βββ asset
βββ component
βββ constant / # μμλ₯Ό λͺ¨μλ νμΌ (`"Explain quantum computing in simple terms" μ κ°μ μκ°κΈ`)
βββ lib / # μν
βββ pages
βββ style / # global style
βββ utils / # customhook κ³Ό type (useApi,Types)
μμ λλ ν 리 ꡬ쑰λ pj-cloneGPT λ ν¬μ§ν 리μ νμΌ λ° ν΄λ ꡬ쑰μ κ°λ΅ν μ€λͺ κΈμ λλ€.
ν΄λΉ νλ‘μ νΈλ openAI model gpt-3.5-turboμ μ¬μ©ν μΈκ³΅μ§λ₯ μ±ν μΉμ λλ€.
ν΄λΉ λͺ¨λΈμ μΆκ°λ κΈ°λ₯ roleκ³Ό contentλ₯Ό 미리 μ€μ νμ¬,
μ΄λ€ μμ²μ΄ νΉμ ννμ μλ΅μ΄ λ°νλ κ²½μ° μ ν΄μ§ νμμ chat μΌλ‘ λνλ©λλ€.
νμ¬ κ΅¬νλ κ²μ κ°λ°μ½λ, μμκ° μλ μλ΅κ°μ
λλ€.
μλ₯Ό λ€μλ©΄, κ³λμ μΆλ λ°©λ²μ μμλλ‘ μλ €μ€ λΌλ μμ²μ΄ μμκ²½μ° μλ΅κ°μ΄ ol,li tagλ‘ κ°μΈμ§ μ±λ‘ μ 곡λ©λλ€.
sideBarμ chatBoxλ₯Ό μ¬λ¬κ°λ₯Ό ꡬμ±νμ¬ κ΄μ¬μ¬ λ³λ‘ μ§νν μ μμ΅λλ€
chatbox_0 => μ½λμ κ΄ν chat
chatbox_1 => μ리μ κ΄ν chat
κΈ°μ‘΄μ μ¬μ©νλ text-davinci-003 λͺ¨λΈμ΄ νΉμ μ¬μ΄νΈμμ μ 곡νλ μΈκ³΅μ§λ₯ μ±λ³΄λ€ μ±λ₯μ΄ λ§μ΄ λ¨μ΄μ‘μ΅λλ€.
μλμ μΈ λΆλΆμ λ§μ΄ λΉ¨λμΌλ, μ λ’°λκ° λ§μ΄ λ¨μ΄μ§λ μλ΅κ°μ λΉλκ° λμ μ ν¨μ±κ²μ¬λ₯Ό μ§νν΄μΌλ§ νμ΅λλ€.
νμ§λ§ κ·Έκ³Όμ μμ λ무λ λ§μ κ²½μ°μ μκ° μμ΄ κΌ κ°μ μ΄ νμνμ΅λλ€.
μλ₯Ό λ€μλ©΄ isAlpha()μ κ°μ ν¨μλ₯Ό λ§λ€μ΄ μνλ²³μΌλ‘ μμνμ§ μλλ€λ©΄ μ¬μμ²μ νλ μμΌλ‘ μ¬μ©νμμΌλ, μ μμ μΈ μλ΅κ°μΌμ§λΌλ μ¬μμ²μ΄ λμμ΅λλ€.
λμμΌλ‘ λͺ¨λΈ μ κ·Έλ μ΄λλ₯Ό μ ννμμΌλ μλ΅μλκ° λ§μ΄ λλ Έκ³ ,νΉμ ννμ μλ΅μ΄ λ°νλ κ²½μ° μ ν΄μ§ νμμ chatFormμΌλ‘ ννμ νκ³ μΆμκΈ° λλ¬Έμ
μλ΅ > μ ν¨μ±μ²΄ν¬ > νΉμ νΌμΌλ‘ λ³ν > λ λλ§
λ‘ μ§νλμ΄ λ λ¦μ΄μ‘μ΅λλ€.
ν΄κ²°μ± μΌλ‘ role,content μ 보λ₯Ό 미리 μ½μ νμ¬ νΉμ μλ΅κ°μ΄λΌλ©΄ 미리μ ν λ νκ·Έλ‘ κ°μΈμ§ μλ΅κ°μ λ°ννκ² μ€μ νμμ΅λλ€. νμ¬λ dangerousSetInnerHTML μ μ¬μ©νμ¬ api μλ΅κ°μ λ°λ‘ μ½μ νμ¬ 2κ°μ§ κ³Όμ μ΄ μλ΅λ μνμ¬μ μλλ¬Έμ λ μννκ² ν΄κ²°λμμ΅λλ€.
μ μ΄λ―Έμ§μ κ°μ΄,img + Text μ νμμ κ°μ§ κΈ°λ₯μμ κ°μ λ‘μ§μ μ¬μ©νμμ§λ§ typeκ°μκ²½μ° κ°μ Typeμ΄μ§λ§ keyκ°λ§ λ°κΏ μ¬μ©νλκ²μ΄ λΆνΈνμ¬ κ°μ μ νμμ±μ λκΌμ΅λλ€ μλμ κ°μ΄ keyλ§ μ»€μ€ν ν΄μ μ¬μ©ν μ μκ² λͺ¨λν νμμ΅λλ€.
type Data<T extends string> = `${T}Data`;
type Img<T extends string> = `${T}Img`;
type Detail<T extends string> = `${T}Detail`;
export type IMockData<T> = {
[key: Data<string>]: string[];
[key: Img<string>]: string[];
[key: Detail<string>]: T;
};