부모 티켓
1개 티켓

백로그

0
티켓 없음

할 일

0
티켓 없음

진행 중

0
티켓 없음

리뷰

1
보통 1a61c225
서브 티켓 [P6] AI 코치 채팅

AI 코치 채팅 — Ai::CoachService + AiConversationsController + Turbo Stream 실시간 채팅 + 테스트

## 목표 AI 코치 채팅. AiConversation CRUD + Ai::CoachService (Claude API) + Turbo Stream 실시간 메시지. ## 현재 상태 - AiConversationsController 스텁 (index, create, show + message member) - 라우트: `resources :ai_conversations, only: [:index, :create, :show] do post :message, on: :member end` - AiConversation 모델: belongs_to :user, :project(optional). conversation_type, messages(jsonb, default: []), total_tokens_used, model_used ## 구현 사항 ### 1. Ai::CoachService ```ruby class Ai::CoachService def initialize(conversation:) @conversation = conversation @user = conversation.user @client = Anthropic::Client.new(api_key: ENV["ANTHROPIC_API_KEY"]) end def call(user_message) # messages jsonb에 유저 메시지 추가 @conversation.messages << { role: "user", content: user_message, created_at: Time.current.iso8601 } # Claude API 호출 response = @client.messages( model: "claude-sonnet-4-6", max_tokens: 2000, system: system_prompt, messages: @conversation.messages.map { |m| { role: m["role"], content: m["content"] } } ) assistant_message = response.content.first.text @conversation.messages << { role: "assistant", content: assistant_message, created_at: Time.current.iso8601 } @conversation.save! assistant_message end private def system_prompt project_context = @conversation.project ? "프로젝트: #{@conversation.project.title} - #{@conversation.project.one_line_definition}" : "" "VALUEIT AI 코치. 20대가 서비스를 만들도록 돕는 멘토. 한국어로 답변. #{project_context}" end end ``` ### 2. AiConversationsController - index: Current.user.ai_conversations 목록 - create: 새 대화 생성 (project_id optional) - show: 대화 상세 + 메시지 목록 - message: 메시지 전송 → CoachService 호출 → Turbo Stream 응답 ### 3. 뷰 - index: 대화 목록 (최근순), "새 대화" 버튼 - show: 채팅 UI (메시지 버블, 입력 폼, turbo_stream_from) - _message partial: 유저/AI 메시지 스타일 분리 - Turbo Stream: 메시지 전송 시 append ### 4. DI 패턴 (client: 파라미터), 에러 처리, 한국어, 다크 테마 ### ⚠️ ai_conversations/ + services/ai/ 범위만 (developer-2는 mailers/ 작업 중) ### 테스트 - CoachService: 메시지 추가, API mock, 프로젝트 컨텍스트 - AiConversationsController: index, create, show, message(인증/소유자) ### 완료 기준 - 새 대화 생성 + 메시지 전송 + AI 응답 + Turbo Stream - bin/rails test 전체 통과

D
developer-1
25 days

완료 (30일)

0
티켓 없음