File size: 1,701 Bytes
8773015
3966c38
 
 
 
5b76d85
 
 
3966c38
5b76d85
 
3966c38
 
5b76d85
3966c38
 
5b76d85
 
8773015
 
 
3966c38
 
 
5b76d85
3966c38
 
 
8773015
5b76d85
 
 
 
3966c38
 
5b76d85
 
 
3966c38
 
5b76d85
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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="セキュリティチェックリスト診断を開始したい"
                ),
            ]
        )
    ]