
종료
마이크로소프트
팔로워2명
주최대회0개
Competition
전체보기종료
종료
종료
컨설팅 + 총100만원
종료
1000만원 + GitHub goods
종료
종료
종료
Learning
전체보기진행예정
진행중
종료
종료
종료
종료
종료
Forum
전체보기마이크로소프트가 장애 대학생을 위한 단기 테크 역량 강화 프로그램 ENGAGE Program을 시작합니다.AI, Cloud, Copilot 등 최신 기술 트렌드와 함께, 취업 특강, 모의 면접, 현직자 네트워킹까지 경험할 수 있는 특별한 기회! 서울 소재 대학(학부/석사/박사) 재학생 중, 장애를 경험한 학생이라면 누구나 참여할 수 있어요. 수료 시에는 인증서와 Microsoft 채용 정보 우선 제공 혜택도 주어집니다.📅 일정: 4/14, 4/21 (온라인) + 4/30 (오프라인)🔗 신청하기: https://aka.ms/engagekorea
채용공고 작성 지원 에이전트 시스템개요중소기업을 위한 채용공고 작성 및 관리 시스템을 개발했습니다. 이 시스템은 회사 소개, 부서 전문성 소개, 구직자 면접 질문까지 포함한 완성도 높은 채용공고를 작성하는 데 도움을 주는 AI 기반 에이전트 시스템입니다.문제 정의중소기업은 대기업과 달리 전문적인 인사팀이나 마케팅팀의 부재로 인해 매력적인 채용공고 작성에 어려움을 겪습니다. 특히 잡코리아나 사람인과 같은 구인사이트에 등록할 때, 회사 소개와 부서 전문성을 효과적으로 표현하고 적절한 면접 질문을 구성하는 것이 쉽지 않습니다.해결 방안이러한 문제를 해결하기 위해 세 단계의 AI 에이전트로 구성된 시스템을 개발했습니다:모집요강 에이전트: 회사의 정책과 목적에 맞는 초안 작성부서장 에이전트: 작성된 내용 검수 및 수정사항 지적최종결과 에이전트: 수정사항을 반영하여 HTML 형태로 최종 공고 생성기능 및 특징맞춤형 회사 소개: 기업의 비전, 가치, 문화적 특성을 반영한 전문적인 회사 소개 작성부서 전문성 강조: 해당 부서의 주요 업무와 전문성을 구체적으로 소개효과적인 면접 질문: 지원자의 역량과 적합성을 평가할 수 있는 맞춤형 면접 질문 제공반복적인 검증 과정: 부서장 에이전트의 검토를 통한 정확성과 적합성 향상HTML 변환: 완성된 채용공고를 즉시 웹에 게시할 수 있는 HTML 형식으로 제공구현 사례 - 상생솔루션 마케팅부 신입 채용시스템 구현의 예시로, 시스템에어컨 임대 및 자재 공급 기업인 상생솔루션의 마케팅부 신입 채용 공고를 작성했습니다.모집요강 에이전트가 기본 정보를 바탕으로 초안 작성부서장 에이전트가 검토 후 자격 요건 구체화, 면접 질문 개선 등의 피드백 제공모집요강 에이전트가 수정사항 반영하여 개선된 버전 작성최종결과 에이전트가 웹 게시용 HTML 형식으로 최종 공고 생성기대 효과시간 및 비용 절감: 채용공고 작성에 필요한 시간과 인력 비용 감소전문성 향상: 전문적이고 매력적인 채용공고로 우수 인재 지원율 증가일관성 유지: 회사의 브랜드 이미지와 일관된 메시지 전달맞춤형 솔루션: 각 기업과 부서의 특성에 맞는 맞춤형 채용공고 작성향후 발전 방향다양한 산업별 템플릿 추가지원자 분석 기능 통합으로 타겟 인재 맞춤형 공고 작성 지원다국어 지원으로 글로벌 인재 채용 지원채용 트렌드 데이터 분석 및 반영 기능 추가 화면-Tools 화면-Agents 화면-Teams
“어시웍스 API 도구 생성 방법 - 특급편”에 소개된 예제에 따라 개발해 보았습니다. 내가 좋아하는 음식을 설농탕, 파인애플이라 알려준 다음,배 고프다고 하면 설농탕과 파인애플 볶음밥을 추천 메뉴로 알려주네요.또 좋아하는 과일을 물으면 파인애플이라고 알려 줍니다. 그리고 내가 좋아하는 것을 독서이고 좋아하는 가수를 알려준 다음심심할 때 뭐 하면 좋겠느냐고 물으니책 읽기와 좋아하는 가수의 음악 감상을 추천해 줍니다. 이런 것이 고정된 방식의 DB 검색과 LLM을 이용한 검색의 차이인 것 같습니다. 어시웍스를 이용하니 아주 빠르고 편하게 만들 수 있어 좋네요.
이제 에이전트로 유튜브 영상 분석하는 시대! 어시웍스 덕분에 유튜브 링크만 있으면 AI가 자막을 추출하고, 핵심 내용을 뽑아주며, 질문하면 "몇 초에 나와요!"까지 알려줍니다 🤖✨에이전트 API 개요세션 생성: 여러 유튜브 영상을 동시에 처리할 수 있도록 세션 단위로 관리영상 다운로드: yt-dlp를 사용해 유튜브 링크로부터 mp4 다운로드오디오 추출: ffmpeg로 mp4에서 오디오(wav)만 추출Whisper로 자막(SRT) 생성: OpenAI의 음성인식 모델SRT → 텍스트 변환: 자막 파일을 읽어 "시작시간 자막텍스트" 형태로 가공다운로드 및 파일 제공: 세션별로 저장된 비디오/오디오/SRT 파일을 직접 다운로드각 단계를 에이전트가 순서대로 호출하면, 영상 처리 작업이 완결됩니다.사용 시나리오사용자가 에이전트에게 "이 유튜브 영상 요약 좀 해줘!"라고 요청합니다. 에이전트는 이 API 서버를 통해 다음을 진행합니다:/create_session으로 새 세션 아이디(session_id) 받기/youtube_download로 영상 다운로드/extract_audio로 오디오 추출/audio2srt로 자막 생성/srt_to_text로 완성된 자막을 텍스트로 가져오기필요하다면 자막 텍스트를 기반으로 LLM이 요약함결과:에이전트가 "영상에서 뽑은 자막과 요약"을 사용자에게 답변합니다.사용자가 추가 질문을 하면, 자막에 시간대별로 접근해 "몇 초 부분입니다."라고 알려줍니다.시연 동영상을 보도록 하겠습니다.API 상세 설명1. 세션 생성: /create_sessionMethod: GET설명:세션이란, 각 작업(영상 다운로드 등)을 독립적으로 처리하기 위해 필요한 고유 식별자입니다.이 엔드포인트는 내부적으로 uuid.uuid4()로 고유 ID를 만들고, SESSIONS[session_id]에 작업 상태를 저장할 공간을 마련합니다.사용 예시:<code class="language-plaintext">GET /create_session</code>샘플 응답:<code class="language-plaintext">{ "session_id": "4f055ad9-268c-4caa-be39-...", "message": "새로운 세션이 생성되었습니다." } </code>주요 포인트글로벌 딕셔너리 SESSIONS:<code class="language-plaintext">SESSIONS[session_id] = { "video_path": None, "audio_path": None, "srt_path": None, }</code>실제 배포 시: Redis, DB 등을 사용해 세션 정보를 관리하는 방식을 권장.2. 유튜브 영상 다운로드: /youtube_downloadMethod: POSTPayload:<code class="language-plaintext">{ "session_id": "string", "youtube_url": "string" }</code>설명:yt_dlp 라이브러리를 통해 지정된 session_id 경로에 mp4 영상을 저장합니다.다운로드된 파일 경로를 SESSIONS[session_id]["video_path"]에 기록합니다.응답:<code class="language-plaintext">{ "message": "다운로드 완료", "file_path": "...", "download_url": "http://127.0.0.1:8000/download_file/{session_id}/video", "session_id": "..." }</code>주요 포인트yt-dlp 설정:<code class="language-plaintext">ydl_opts = { 'format': 'best[ext=mp4]/bestvideo[ext=mp4]+bestaudio[ext=m4a]/best', 'outtmpl': f'{download_dir}/%(title)s.%(ext)s', 'merge_output_format': 'mp4' }</code>가능한 mp4 포맷 중 가장 화질 좋은 것부터 시도.영상/오디오 스트림 통합(m4a → mp4).파일명 관리:실제 파일명은 동영상의 title을 가져와 [title].mp4 형태로 저장.session_id별로 downloads/{session_id} 디렉토리에 구분 저장.3. 오디오 추출: /extract_audioMethod: POSTPayload:<code class="language-plaintext">{ "session_id": "string" }</code>설명:ffmpeg를 이용해 영상(mp4)에서 오디오(wav)만 추출합니다.SESSIONS[session_id]["audio_path"]에 결과 파일 경로를 저장합니다.응답:<code class="language-plaintext">{ "session_id": "...", "audio_path": "outputs/..._audio.wav", "download_url": "http://127.0.0.1:8000/download_file/{session_id}/audio", "message": "오디오 추출이 완료되었습니다." }</code>주요 포인트ffmpeg-python 사용 예시:<code class="language-plaintext">ffmpeg.input(video_path).output( audio_path, format='wav', acodec='pcm_s16le', ar='16000', ac=1 ).run(overwrite_output=True)</code>ac=1: 모노로 변환ar=16000: Whisper 권장 16kHz 샘플링pcm_s16le: 16비트 오디오 인코딩폴더 구조:outputs/ 디렉토리에 WAV를 저장해두고, 필요하면 /download_file/ API를 통해 액세스.4. Whisper로 자막(SRT) 생성: /audio2srtMethod: POSTPayload:<code class="language-plaintext">{ "session_id": "string", "model_size": "tiny" // tiny, base, small, medium, large }</code>설명:OpenAI Whisper 모델로 오디오를 인식하고, segment별로 SRT 파일을 생성.SESSIONS[session_id]["srt_path"]에 자막 파일 경로를 저장합니다.응답:<code class="language-plaintext">{ "session_id": "...", "srt_path": "...", "download_url": "http://127.0.0.1:8000/download_file/{session_id}/srt", "message": "SRT 생성이 완료되었습니다." }</code>주요 포인트Whisper 모델 로딩:<code class="language-plaintext">model = whisper.load_model(req.model_size) result = model.transcribe(audio_path)</code>큰 모델로 갈수록 정확도 높아지나, 메모리 점유/추론 시간이 증가.SRT 형식 생성:<code class="language-plaintext">for i, segment in enumerate(result['segments'], start=1): start_time = str(timedelta(seconds=segment['start'])) end_time = str(timedelta(seconds=segment['end'])) ...</code>start_time --> end_timeSRT 파일에선 인덱스 번호, 시간 정보, 자막 텍스트, 공백 줄 구조를 지킵니다.5. SRT → 텍스트 변환: /srt_to_textMethod: POSTPayload:<code class="language-plaintext">{ "session_id": "string" }</code>설명:생성된 SRT 파일을 파싱하여 "시작시간 자막텍스트" 형식의 문자열로 변환.추가적으로 사용자 입맛에 맞게 "00:00:01,000 Hello..." 등 더 정교한 포맷을 만들 수도 있습니다.응답:<code class="language-plaintext">{ "session_id": "...", "srt_path": "...", "text": "00:00:02 Hello and welcome to ...\n00:00:07 Today we are...", "message": "SRT 텍스트 변환이 완료되었습니다." }</code>기술 포인트SRT 파싱:<code class="language-plaintext"># SRT 파일 읽으며: if content[i].strip().isdigit(): i += 1 if '-->' in content[i]: time_line = content[i].strip() start_time = time_line.split(' --> ')[0]</code>자막 인덱스 번호 / 시간 구간 / 자막 본문을 순서대로 읽어내는 간단한 로직.포맷 변환:필요하다면 start_time, end_time 모두 저장해 DB나 JSON 형태로 응답 가능.6. 파일 다운로드: /download_file/{session_id}/{file_type}Method: GETPath Variables:session_id: 세션 IDfile_type: video, audio, srt설명:서버에 저장된 (video/audio/srt) 파일을 직접 다운로드할 수 있는 엔드포인트.응답:FileResponse로 해당 파일을 즉시 다운로드.기술 포인트StaticFiles:app.mount("/downloads", StaticFiles(directory="downloads"), name="downloads")app.mount("/outputs", StaticFiles(directory="outputs"), name="outputs")고정된 폴더 구조에 접근 가능.FileResponse:return FileResponse(path=file_path, filename=os.path.basename(file_path), media_type="application/octet-stream")이 방식으로 브라우저나 클라이언트에서 바로 다운로드 할 수 있습니다.전체 흐름 정리세션 생성GET /create_session → 세션 ID 발급유튜브 다운로드POST /youtube_download → yt-dlp로 mp4 획득, video_path 저장오디오 추출POST /extract_audio → ffmpeg로 mp4 → wav 변환, audio_path 저장자막 생성POST /audio2srt → whisper 음성인식 후 SRT 작성, srt_path 저장텍스트 변환POST /srt_to_text → 사용자가 재가공하기 쉽게 SRT 파싱파일 다운로드파일이 필요할 때 GET /download_file/{session_id}/{file_type}로 가져오기확장 아이디어자동 요약:마지막 단계에서 result["text"]를 받아 GPT나 다른 NLP 알고리즘을 사용해 요약.시간대별 검색:SRT 결과를 저장해두면 특정 키워드가 언제 등장했는지 알려줄 수 있습니다.예: "문장에 'Python' 이라는 단어가 몇 번째 시간 구간에 나오는지"번역:Whisper가 언어를 자동 감지하므로, 특정 언어로 번역해서 SRT를 만드는 것도 가능.다운로드 로직 개선:실제 운영에선 대형 파일을 저장/관리하는 방식을 S3 등 클라우드 스토리지와 연계하기도 합니다.마무리위 API들로 "유튜브 → 자막 생성 → 텍스트 변환" 과정을 구축해 에이전트가 손쉽게주요 내용 요약질문에 시간대별로 답변추가적인 NLP 분석 등을 수행할 수 있습니다.정말 편해지겠죠? 추가 기능이 필요하다면 댓글로 남겨주세요~