import chainlit as cl from models.chat_state import get_security_survey_initial_state from workflows.chat_workflow import survey_chainlit_app from security_checklist import security_checklist from langchain_core.messages import HumanMessage @cl.on_message async def process_user_message(message: cl.Message): """ユーザメッセージを処理する""" state = cl.user_session.get("state") # ユーザ回答をmessagesに追加(HumanMessage型で追加) state['messages'].append(HumanMessage(content=message.content)) # ワークフロー進行 - process_input -> display_question or survey_complete state = await survey_chainlit_app.ainvoke(state) cl.user_session.set("state", state) @cl.on_chat_start async def start(): """チャット開始時の処理""" # 初期状態を作成 state = get_security_survey_initial_state(security_checklist) cl.user_session.set("state", state) # 最初の質問を表示するためにワークフローを呼び出す await process_user_message(cl.Message(content="セキュリティチェックリスト診断を開始したい")) @cl.set_chat_profiles async def chat_profile(): return [ cl.ChatProfile( name="security_survey_bot", markdown_description="セキュリティチェックリスト診断を行うチャットボットです。", icon="public/icon.jpg", starters=[ cl.Starter( label="セキュリティチェックリスト診断", message="セキュリティチェックリスト診断を開始したい" ), ] ) ]