본문 바로가기

전체 글

(106)
Open ai api로 대화형 챗봇 만들기 코랩 python3로 작성했다.요약본 + 최신 대화 내용 + 유저 input까지 넣어서 대화 내용을 기억하게 한다. import jsonimport osfrom openai import OpenAIMEMORY_SUMMARY_FILE = "memory_summary.json" # 요약본 저장MEMORY_RECENT_FILE = "memory_recent.json" # 최근 대화 저장RECENT_LIMIT = 10 # 모델에 전달할 최근 메시지 개수# ---------- 파일 IO ----------def load_json(path, default): if os.path.exists(path): with open(path, "r", encoding="utf-8") as f: ..
chat gpt api 사용해보기 open api들어가서 api 키를 만들어서 5달러 결제해서 사용해보았다. import OpenAI from "openai"; import readline from "readline"; // OpenAI 클라이언트 초기화 const openai = new OpenAI({ apiKey: "sk-....(real key)", }); // readline 인터페이스 생성 (터미널 입력/출력) const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); // 사용자 입력 받기 함수 function askUser() { rl.question("You: ", async (userInput) => { ..
밑바닥부터 만드는 컴퓨팅 시스템(10) 10.컴파일러 - 구문분석원본 언어에서 대상언어로 번역하는 프로그램 컴파일러는 두단계로 나누어 작업을 진행함 1.구문 분석2.코드 생성 구문을 분석해서 의미로 나누고그것을 바탕으로 대상언어로 코드를 생성함. 이 책에서는 이 순서로 컴파일러를 제작한다. 구문 분석1.토큰화입력을 공백이나 주석을 무시하고 문자들을 토큰으로 분류그러면 이제 입력이 토큰의 스트림으로 바뀜 2.구문 분석이제 토큰을 분석해야하는데명시적 트리 생성 방식과 내재적 트리생성 방식이 있는데n2t에선 내재적 트리생성방식으로 한다.토큰을 넣을 함수 만들어서 계속 반복적으로 넣는거다.함수에서는 전 정보를 가지고 있다가 들어올게 아닌데 들어오면 에러를 내면 문법에 안맞는거다. ll(k) 첫 토큰 k개를 봐야 무슨 문법인지 알 수 있는 문법들n2..
밑바닥부터 만드는 컴퓨팅 시스템(9) 9, 고수준 언어 잭 언어에 대해 설명했다 잭 언어는 객체지향으로 클래스 문법을 제공하고main클래스의 main함수를 호출하는것으로 프로그램이 시작한다. 클래스 인터페이스론 메서드(객체 함수), 함수(클래스 함수), 생성자가 있다 클래스의 변수로는 필드변수(객체 변수), 정적변수(클래스 변수)가 있다. 그 외에 주석도 있고 데이터 타입도 3가지(int,char,boolean) 있다. 잭 표준 라이브러리에 사용할 수 있는 다양한 함수들이 정의되어있다. 각종 수학, 문자열, 입출력 등 하드웨어 제어 등의 함수들이 있다. class Main{function void main(){while(true){do Output.printString("HELLO");}return;}}
밑바닥부터 만드는 컴퓨팅 시스템(7,8) 가상머신VM기반소프트웨어를 수정할 필요 없이 여러 프로세서와 운영체제에서 실행가능하게 만든 프로그램 코드 -> 기계어로 바로 컴파일 하게 될 경우 컴파일러의 크기가 너무 커지는데코드 -> 중간어 -> VM실행(중간어 -> 기계어) 하게 될 경우 쪼개서 할 수 있으니 컴파일 하드웨어 독립성-하지만 vm을 하드웨어마다 구현해햐하지만 컴파일러보다 vm을 구현하는게 더 간단함.컴파일 시간도 짧아짐 다양한 언어를 하나의 vm언어로 컴파일 하면 하나의 언어에서 다른 언어의 함수를 호출할 수 있음.vm을 개선하면 모든게 개선됨(그냥 새로운cpu생겨도 개선되는 느낌) #!/usr/bin/env python3"""Nand2Tetris VM Translator (Projects 7 + 8)Supports: - arith..
밑바닥부터 만드는 컴퓨팅 시스템(6) 6.어셈블러 어셈블러어셈블리를 기계어 2진표현으로 바꿔주는 프로그램 기호weight라는 변수가 있고 이 변수가 메모리 7번에 매핑된다고 하면정확히 7번을 읽어와야 한다.이 변수를 읽어오기 위해선 Load R3,7 이런식으로 써야하지만어셈블리를 쓰면 Load R3, weight라고 쓰면 된다. 그리고 어셈블리 프로그램에서 loop가 250번을 참조하라고 설정했다면goto 250대신에 goto loop같은 명령어로 사용할 수 있다.기호 없는 어셈블리 작성을 해보면 얼마나 감사한 건지 알 수 있다. 한줄 늘어나거나 위치를 바꿀때마다 수정해야해.. 이러한 기호를 어셈블리에서 사용하기 위해서는 어셈블러가 사용자 정의 변수,레이블을 실제 메모리 주소에 매핑 시켜야하는데 간단한 문제가 아니다. 어셈블리 프로그램을 ..
밑바닥부터 만드는 컴퓨팅 시스템(5) 5.컴퓨터 아키텍처 내장식 프로그램프로그램이 기계에 박혀있는게 아니라 메모리에 존재해서 갈아끼울 수 있게 하는 개념램의 명령어만 바꿀 수 있다면 다른 프로그램을 동작시킬 수 있음. 폰노이만 구조cpu,저장장치,입출력 구조를 가지는 현대 컴퓨터 가장 기본적인 모델 메모리데이터 메모리(읽기 쓰기 가능한 데이터 메모리)명령어 메모리(읽기 실행 가능한 명령어 메모리) 중앙처리장치(cpu)ALU - 각종 연산작업레지스터 - 연산의 피연산자, 결과를 입출력제어장치 - 명령어 해석하는 장치 레지스터데이터 레지스터 - 데이터를 저장주소 지정 레지스터 - 주소를 저장 메모리 접근할때 주소를 두는 용도프로그램 카운터 - 실행할 명령어의 주소 ( jmp하면 덮어써지고 아니면 +1(다음줄로)) 입출력장치메모리 매핑으로 작동입..
밑바닥부터 만드는 컴퓨팅 시스템(4) 4.기계어 기계어프로세서와 레지스터들을 이용해서 메모리를 조작할 수 있도록 미리 정의된 규칙 메모리컴퓨터에서 데이터와 명령어를 저장하는 하드웨어 장치들 프로세서중앙처리장치(CPU), 특정한 기초 연산(산술, 논리연산, 메모리 접근 연산, 제어,분기 연산)을 수행하는 장치피연산자들은 선택된 메모리 위치와 레지스터에 있는 2진 값. 결과도 메모리나 레지스터에 저장. 레지스터프로세서 바로 옆에 있는 고속 메모리 속도 향상 기계어 프로그램은1010001111101011 이런식으로 이루어져있다.cpu마다 규칙이 있고 예를 들어 앞의 4비트는 cpu연산 종류를 나타내는 필드 나머지 12비트는 4비트씩 끊어서 피연산자 필드로 볼 수 있다. cpu마다 다르고 연상 기호로 나타낼 수 있다. 위 기계어는 add R3, ..