[{"data":1,"prerenderedAt":1586},["ShallowReactive",2],{"nav-docs":3,"page-/docs/admin/ai/qdrant-server-setup":880,"surround-/docs/admin/ai/qdrant-server-setup":1580,"raw-/docs/admin/ai/qdrant-server-setup":1583},[4,56,226,546,634,773,806,863],{"title":5,"path":6,"stem":7,"children":8,"page":55},"Space Builder","/getting-started","00.getting-started",[9,13,17,23,29,33,38,42,46,50],{"title":10,"path":11,"stem":12,"children":-1},"Introducing SpaceBuilder","/getting-started/overview","00.getting-started/00.overview",{"title":14,"path":15,"stem":16,"children":-1},"Create a SetFN Account","/getting-started/create-setfn-account","00.getting-started/05.create-setfn-account",{"title":18,"path":19,"stem":20,"tags":21,"children":-1},"Installing on Linux","/getting-started/install-linux","00.getting-started/10.install-linux",[22],"recommended",{"title":24,"path":25,"stem":26,"tags":27,"children":-1},"Installing with Docker","/getting-started/install-docker","00.getting-started/12.install-docker",[28],"preparing",{"title":30,"path":31,"stem":32,"children":-1},"Installing on Windows","/getting-started/install-windows","00.getting-started/14.install-windows",{"title":34,"path":35,"stem":36,"tags":37,"children":-1},"Installing on macOS","/getting-started/install-macos","00.getting-started/16.install-macos",[28],{"title":39,"path":40,"stem":41,"children":-1},"Initial Setup","/getting-started/initial-setup","00.getting-started/20.initial-setup",{"title":43,"path":44,"stem":45,"children":-1},"License Activation","/getting-started/license-activation","00.getting-started/30.license-activation",{"title":47,"path":48,"stem":49,"children":-1},"Checking Your Access Address (Local/Internal Network)","/getting-started/access-url","00.getting-started/35.access-url",{"title":51,"path":52,"stem":53,"tags":54,"children":-1},"Choosing an External Access Method","/getting-started/access-domain","00.getting-started/40.access-domain",[22],false,{"title":57,"path":58,"stem":59,"children":60,"page":55},"Space management","/admin","10.admin",[61,74,107,136,171,184,209],{"title":62,"path":63,"stem":64,"children":65,"page":55},"Admin Home","/admin/home","10.admin/00.home",[66,70],{"title":67,"path":68,"stem":69,"children":-1},"Accessing the Admin Page","/admin/home/admin-page-access","10.admin/00.home/00.admin-page-access",{"title":71,"path":72,"stem":73,"children":-1},"License Management","/admin/home/license","10.admin/00.home/20.license",{"title":75,"path":76,"stem":77,"children":78,"page":55},"User management","/admin/user-management","10.admin/10.user-management",[79,83,87,91,95,99,103],{"title":80,"path":81,"stem":82,"children":-1},"Setting Signup Policy and Default Permissions","/admin/user-management/signup-policy","10.admin/10.user-management/02.signup-policy",{"title":84,"path":85,"stem":86,"children":-1},"Creating a User Account","/admin/user-management/invite-new-member","10.admin/10.user-management/10.invite-new-member",{"title":88,"path":89,"stem":90,"children":-1},"Editing a User Account","/admin/user-management/edit-member","10.admin/10.user-management/11.edit-member",{"title":92,"path":93,"stem":94,"children":-1},"Adding an Admin","/admin/user-management/add-new-admin","10.admin/10.user-management/12.add-new-admin",{"title":96,"path":97,"stem":98,"children":-1},"Team Management","/admin/user-management/team","10.admin/10.user-management/22.team",{"title":100,"path":101,"stem":102,"children":-1},"Level Management","/admin/user-management/level","10.admin/10.user-management/24.level",{"title":104,"path":105,"stem":106,"children":-1},"Checking Access Logs","/admin/user-management/access-log","10.admin/10.user-management/30.access-log",{"title":108,"path":109,"stem":110,"children":111,"page":55},"Service Configuration","/admin/service-config","10.admin/20.service-config",[112,116,120,124,128,132],{"title":113,"path":114,"stem":115,"children":-1},"File Area Settings","/admin/service-config/file-area","10.admin/20.service-config/10.file-area",{"title":117,"path":118,"stem":119,"children":-1},"Webhook Settings","/admin/service-config/webhook-settings","10.admin/20.service-config/16.webhook-settings",{"title":121,"path":122,"stem":123,"children":-1},"Community Settings","/admin/service-config/community-space","10.admin/20.service-config/22.community-space",{"title":125,"path":126,"stem":127,"children":-1},"AI Chatbot Policy Settings","/admin/service-config/community-ai-chatbot","10.admin/20.service-config/24.community-ai-chatbot",{"title":129,"path":130,"stem":131,"children":-1},"Email Settings","/admin/service-config/email-settings","10.admin/20.service-config/30.email-settings",{"title":133,"path":134,"stem":135,"children":-1},"Branding Settings","/admin/service-config/brand","10.admin/20.service-config/40.brand",{"title":137,"path":138,"stem":139,"children":140,"page":55},"Intelligent Service (AI)","/admin/ai","10.admin/30.ai",[141,145,149,153,159,163,167],{"title":142,"path":143,"stem":144,"children":-1},"AI Model Settings","/admin/ai/ai-model-setting","10.admin/30.ai/10.ai-model-setting",{"title":146,"path":147,"stem":148,"children":-1},"AI DB Settings","/admin/ai/ai-db-setting","10.admin/30.ai/20.ai-db-setting",{"title":150,"path":151,"stem":152,"children":-1},"Setting Up a Qdrant Server","/admin/ai/qdrant-server-setup","10.admin/30.ai/25.qdrant-server-setup",{"title":154,"path":155,"stem":156,"children":157},"Knowledge Indexing","/admin/ai/knowledge-indexing","10.admin/30.ai/30.knowledge-indexing",[158],{"title":154,"path":155,"stem":156,"children":-1},{"title":160,"path":161,"stem":162,"children":-1},"AI Integration and Policy Settings","/admin/ai/ai-link","10.admin/30.ai/40.ai-link",{"title":164,"path":165,"stem":166,"children":-1},"MCP Server Management","/admin/ai/mcp-server","10.admin/30.ai/50.mcp-server",{"title":168,"path":169,"stem":170,"children":-1},"Search Management","/admin/ai/search-management","10.admin/30.ai/60.search-management",{"title":172,"path":173,"stem":174,"children":175,"page":55},"plugin","/admin/plugin","10.admin/40.plugin",[176,180],{"title":177,"path":178,"stem":179,"children":-1},"Managing Plugins","/admin/plugin/overview","10.admin/40.plugin/00.overview",{"title":181,"path":182,"stem":183,"children":-1},"Extension Plugin Settings","/admin/plugin/settings","10.admin/40.plugin/10.settings",{"title":185,"path":186,"stem":187,"children":188,"page":55},"Security Management","/admin/security","10.admin/50.security",[189,193,197,201,205],{"title":190,"path":191,"stem":192,"children":-1},"Security Overview","/admin/security/overview","10.admin/50.security/00.overview",{"title":194,"path":195,"stem":196,"children":-1},"Checking the Audit Log","/admin/security/audit-log","10.admin/50.security/05.audit-log",{"title":198,"path":199,"stem":200,"children":-1},"Block Management","/admin/security/block-management","10.admin/50.security/10.block-management",{"title":202,"path":203,"stem":204,"children":-1},"Security Settings","/admin/security/security-setting","10.admin/50.security/12.security-setting",{"title":206,"path":207,"stem":208,"children":-1},"IP Access Restriction","/admin/security/ip-restriction","10.admin/50.security/16.ip-restriction",{"title":210,"path":211,"stem":212,"children":213,"page":55},"System management","/admin/system-admin","10.admin/60.system-admin",[214,218,222],{"title":215,"path":216,"stem":217,"children":-1},"Device Information","/admin/system-admin/device-info","10.admin/60.system-admin/10.device-info",{"title":219,"path":220,"stem":221,"children":-1},"Server Restart and System Maintenance","/admin/system-admin/server-restart","10.admin/60.system-admin/12.server-restart",{"title":223,"path":224,"stem":225,"children":-1},"Background Services","/admin/system-admin/background-service","10.admin/60.system-admin/14.background-service",{"title":227,"path":228,"stem":229,"children":230,"page":55},"Use workspace","/workspace","20.workspace",[231,264,281,337,448,495,527],{"title":232,"path":233,"stem":234,"children":235,"page":55},"menu","/workspace/menu","20.workspace/05.menu",[236,240,244,248,252,256,260],{"title":237,"path":238,"stem":239,"children":-1},"Workspace Overview","/workspace/menu/overview","20.workspace/05.menu/00.overview",{"title":241,"path":242,"stem":243,"children":-1},"Team Space","/workspace/menu/team-space","20.workspace/05.menu/05.team-space",{"title":245,"path":246,"stem":247,"children":-1},"Client Space","/workspace/menu/client-space","20.workspace/05.menu/06.client-space",{"title":249,"path":250,"stem":251,"children":-1},"Favorites","/workspace/menu/favorites","20.workspace/05.menu/10.favorites",{"title":253,"path":254,"stem":255,"children":-1},"Recent Documents","/workspace/menu/recent","20.workspace/05.menu/20.recent",{"title":257,"path":258,"stem":259,"children":-1},"External Share","/workspace/menu/external-share","20.workspace/05.menu/30.external-share",{"title":261,"path":262,"stem":263,"children":-1},"Trash","/workspace/menu/trash","20.workspace/05.menu/40.trash",{"title":265,"path":266,"stem":267,"children":268,"page":55},"Account","/workspace/account","20.workspace/10.account",[269,273,277],{"title":270,"path":271,"stem":272,"children":-1},"Sign Up and Log In","/workspace/account/signup","20.workspace/10.account/10.signup",{"title":274,"path":275,"stem":276,"children":-1},"Resetting Your Password","/workspace/account/reset-password","20.workspace/10.account/20.reset-password",{"title":278,"path":279,"stem":280,"children":-1},"Account Settings","/workspace/account/account-settings","20.workspace/10.account/30.account-settings",{"title":282,"path":283,"stem":284,"children":285,"page":55},"folder","/workspace/folder","20.workspace/20.folder",[286,290,294,298,302,308,312,316,321,325,329,333],{"title":287,"path":288,"stem":289,"children":-1},"Folder Basics","/workspace/folder/basic","20.workspace/20.folder/10.basic",{"title":291,"path":292,"stem":293,"children":-1},"Creating Multiple Folders at Once","/workspace/folder/bulk-folder-creation","20.workspace/20.folder/12.bulk-folder-creation",{"title":295,"path":296,"stem":297,"children":-1},"Filter","/workspace/folder/filter","20.workspace/20.folder/13.filter",{"title":299,"path":300,"stem":301,"children":-1},"Configuring Folder View Options","/workspace/folder/folder-view-options","20.workspace/20.folder/14.folder-view-options",{"title":303,"path":304,"stem":305,"tags":306,"children":-1},"Folder Web View","/workspace/folder/folder-web-view","20.workspace/20.folder/16.folder-web-view",[307],"hot",{"title":309,"path":310,"stem":311,"children":-1},"Folder Organization","/workspace/folder/folder-organize","20.workspace/20.folder/17.folder-organize",{"title":313,"path":314,"stem":315,"children":-1},"Folder Notice (README)","/workspace/folder/folder-readme","20.workspace/20.folder/18.folder-readme",{"title":317,"path":318,"stem":319,"tags":320,"children":-1},"Exporting Folder/File Lists","/workspace/folder/folder-export","20.workspace/20.folder/20.folder-export",[307],{"title":322,"path":323,"stem":324,"children":-1},"Setting Level-Based Access Permissions","/workspace/folder/level-access-permissions","20.workspace/20.folder/24.level-access-permissions",{"title":326,"path":327,"stem":328,"children":-1},"Setting Team-Based Access Permissions","/workspace/folder/team-access-permissions","20.workspace/20.folder/26.team-access-permissions",{"title":330,"path":331,"stem":332,"children":-1},"Folder Webhooks","/workspace/folder/webhook","20.workspace/20.folder/30.webhook",{"title":334,"path":335,"stem":336,"children":-1},"Work Automation Folder","/workspace/folder/automation","20.workspace/20.folder/40.automation",{"title":338,"path":339,"stem":340,"children":341,"page":55},"file","/workspace/file","20.workspace/30.file",[342,346,351,355,359,363,367,371,375,379,384,388,392,396,400,404,408,412,416,420,424,428,432,436,440,444],{"title":343,"path":344,"stem":345,"children":-1},"File Management Basics","/workspace/file/overview","20.workspace/30.file/00.overview",{"title":347,"path":348,"stem":349,"tags":350,"children":-1},"Checking the List While Viewing a File","/workspace/file/list-in-file","20.workspace/30.file/05.list-in-file",[307],{"title":352,"path":353,"stem":354,"children":-1},"Register disk files","/workspace/file/disk-file-registration","20.workspace/30.file/06.disk-file-registration",{"title":356,"path":357,"stem":358,"children":-1},"Viewing and Editing Text Files","/workspace/file/text-file-viewer","20.workspace/30.file/10.text-file-viewer",{"title":360,"path":361,"stem":362,"children":-1},"Viewing HTML Files","/workspace/file/html-viewer","20.workspace/30.file/11.html-viewer",{"title":364,"path":365,"stem":366,"children":-1},"Viewing and Editing CSV Files","/workspace/file/csv-viewer","20.workspace/30.file/12.csv-viewer",{"title":368,"path":369,"stem":370,"children":-1},"Viewing Image/Video Files","/workspace/file/image-file-viewer","20.workspace/30.file/13.image-file-viewer",{"title":372,"path":373,"stem":374,"children":-1},"Viewing Office/PDF Files","/workspace/file/office-viewer","20.workspace/30.file/14.office-viewer",{"title":376,"path":377,"stem":378,"children":-1},"Pasting Web Pages (HTML)","/workspace/file/paste-html","20.workspace/30.file/20.paste-html",{"title":380,"path":381,"stem":382,"tags":383,"children":-1},"Pasting Screenshots","/workspace/file/paste-screenshot","20.workspace/30.file/21.paste-screenshot",[307],{"title":385,"path":386,"stem":387,"children":-1},"Pasting Markdown (MD)","/workspace/file/paste-md","20.workspace/30.file/22.paste-md",{"title":389,"path":390,"stem":391,"children":-1},"Screen Recording","/workspace/file/screen-recording","20.workspace/30.file/23.screen-recording",{"title":393,"path":394,"stem":395,"children":-1},"File Tags","/workspace/file/file-tag","20.workspace/30.file/33.file-tag",{"title":397,"path":398,"stem":399,"children":-1},"Bulk Renaming Files","/workspace/file/bulk-name-revise","20.workspace/30.file/34.bulk-name-revise",{"title":401,"path":402,"stem":403,"children":-1},"File Conversion","/workspace/file/file-convert-overview","20.workspace/30.file/40.file-convert-overview",{"title":405,"path":406,"stem":407,"children":-1},"Template Files","/workspace/file/templates","20.workspace/30.file/41.templates",{"title":409,"path":410,"stem":411,"children":-1},"To-Do List","/workspace/file/template-todo","20.workspace/30.file/42.template-todo",{"title":413,"path":414,"stem":415,"children":-1},"Approval Form","/workspace/file/template-approval","20.workspace/30.file/43.template-approval",{"title":417,"path":418,"stem":419,"children":-1},"Kanban Board","/workspace/file/template-kanban","20.workspace/30.file/44.template-kanban",{"title":421,"path":422,"stem":423,"children":-1},"Timeline","/workspace/file/template-timeline","20.workspace/30.file/45.template-timeline",{"title":425,"path":426,"stem":427,"children":-1},"Memo","/workspace/file/template-memo","20.workspace/30.file/46.template-memo",{"title":429,"path":430,"stem":431,"children":-1},"AI Chat File","/workspace/file/ai-chat-file","20.workspace/30.file/47.ai-chat-file",{"title":433,"path":434,"stem":435,"children":-1},"Checking the File Change History","/workspace/file/audit-trail","20.workspace/30.file/50.audit-trail",{"title":437,"path":438,"stem":439,"children":-1},"File Version Control","/workspace/file/version-trail","20.workspace/30.file/51.version-trail",{"title":441,"path":442,"stem":443,"children":-1},"Edit Lock","/workspace/file/file-lock","20.workspace/30.file/52.file-lock",{"title":445,"path":446,"stem":447,"children":-1},"File Encryption","/workspace/file/file-encrypt","20.workspace/30.file/53.file-encrypt",{"title":449,"path":450,"stem":451,"children":452,"page":55},"Collaboration","/workspace/cooperation","20.workspace/35.cooperation",[453,457,461,465,470,474,478,482,487,491],{"title":454,"path":455,"stem":456,"children":-1},"File/Folder Comments","/workspace/cooperation/file-comments","20.workspace/35.cooperation/00.file-comments",{"title":458,"path":459,"stem":460,"children":-1},"Chat","/workspace/cooperation/chat","20.workspace/35.cooperation/10.chat",{"title":462,"path":463,"stem":464,"children":-1},"Collaboration Chat and Edit Lock","/workspace/cooperation/collaboration-chat","20.workspace/35.cooperation/11.collaboration-chat",{"title":466,"path":467,"stem":468,"tags":469,"children":-1},"Following a Team Member's Location","/workspace/cooperation/follow-team-location","20.workspace/35.cooperation/12.follow-team-location",[307],{"title":471,"path":472,"stem":473,"children":-1},"Mentions","/workspace/cooperation/mention","20.workspace/35.cooperation/14.mention",{"title":475,"path":476,"stem":477,"children":-1},"Direct Messages","/workspace/cooperation/dm","20.workspace/35.cooperation/16.dm",{"title":479,"path":480,"stem":481,"children":-1},"Notification Inbox","/workspace/cooperation/notification-inbox","20.workspace/35.cooperation/18.notification-inbox",{"title":483,"path":484,"stem":485,"tags":486,"children":-1},"Checking Team Activity","/workspace/cooperation/file-activity","20.workspace/35.cooperation/30.file-activity",[307],{"title":488,"path":489,"stem":490,"children":-1},"Creating an External Share Link","/workspace/cooperation/share-link-creation","20.workspace/35.cooperation/40.share-link-creation",{"title":492,"path":493,"stem":494,"children":-1},"Sending an External Share Link by Email","/workspace/cooperation/share-link-email","20.workspace/35.cooperation/42.share-link-email",{"title":496,"path":497,"stem":498,"children":499,"page":55},"Search","/workspace/search","20.workspace/40.search",[500,504,509,515,519,523],{"title":501,"path":502,"stem":503,"children":-1},"File Search","/workspace/search/search","20.workspace/40.search/00.search",{"title":505,"path":506,"stem":507,"tags":508,"children":-1},"Context Search (AI Search)","/workspace/search/context-search","20.workspace/40.search/10.context-search",[307],{"title":510,"path":511,"stem":512,"tags":513,"children":-1},"Image Search","/workspace/search/image-search","20.workspace/40.search/20.image-search",[514],"new",{"title":516,"path":517,"stem":518,"children":-1},"Chat Search","/workspace/search/chat-search","20.workspace/40.search/30.chat-search",{"title":520,"path":521,"stem":522,"children":-1},"Comment Search","/workspace/search/comment-search","20.workspace/40.search/40.comment-search",{"title":524,"path":525,"stem":526,"children":-1},"Synonym Search","/workspace/search/synonym-search","20.workspace/40.search/50.synonym-search",{"title":528,"path":529,"stem":530,"children":531,"page":55},"AI","/workspace/ai","20.workspace/50.ai",[532,536,541],{"title":533,"path":534,"stem":535,"children":-1},"AI Features Summary","/workspace/ai/overview","20.workspace/50.ai/00.overview",{"title":537,"path":538,"stem":539,"tags":540,"children":-1},"Requesting Work from the Local AI","/workspace/ai/ai-work","20.workspace/50.ai/10.ai-work",[307],{"title":542,"path":543,"stem":544,"tags":545,"children":-1},"Using External AI","/workspace/ai/external-ai","20.workspace/50.ai/20.external-ai",[514],{"title":547,"path":548,"stem":549,"children":550,"page":55},"Webspace","/webspace","40.webspace",[551,555,559,563,567,571,576,580,584,588,592,621],{"title":552,"path":553,"stem":554,"children":-1},"What is WebSpace?","/webspace/overview","40.webspace/00.overview",{"title":556,"path":557,"stem":558,"children":-1},"Deploying a Website","/webspace/website-release","40.webspace/10.website-release",{"title":560,"path":561,"stem":562,"children":-1},"Create a schema file (.sfn)","/webspace/create-database","40.webspace/20.create-database",{"title":564,"path":565,"stem":566,"children":-1},"Build APIs and deploy a database","/webspace/api-overview","40.webspace/24.api-overview",{"title":568,"path":569,"stem":570,"children":-1},"Checking the Frontend Sample","/webspace/frontend-example","40.webspace/26.frontend-example",{"title":572,"path":573,"stem":574,"tags":575,"children":-1},"Building an Internal Team Web Service","/webspace/internal-webservice","40.webspace/32.internal-webservice",[307],{"title":577,"path":578,"stem":579,"children":-1},"Building a Publicly Accessible Web Service","/webspace/external-webservice","40.webspace/34.external-webservice",{"title":581,"path":582,"stem":583,"children":-1},"Import and export SQL","/webspace/sql-converter","40.webspace/42.sql-converter",{"title":585,"path":586,"stem":587,"children":-1},"Developer Tip 2: Code Converter","/webspace/code-converter","40.webspace/44.code-converter",{"title":589,"path":590,"stem":591,"children":-1},"Performance and scaling","/webspace/performance","40.webspace/48.performance",{"title":593,"path":594,"stem":595,"children":596,"page":55},"Webspace Management","/webspace/admin","40.webspace/50.admin",[597,601,605,609,613,617],{"title":598,"path":599,"stem":600,"children":-1},"Get started with WebSpace administration","/webspace/admin/overview","40.webspace/50.admin/00.overview",{"title":602,"path":603,"stem":604,"children":-1},"Operations","/webspace/admin/operations","40.webspace/50.admin/10.operations",{"title":606,"path":607,"stem":608,"children":-1},"Workspace access","/webspace/admin/workspace-access","40.webspace/50.admin/20.workspace-access",{"title":610,"path":611,"stem":612,"children":-1},"API & site security","/webspace/admin/api-site-security","40.webspace/50.admin/30.api-site-security",{"title":614,"path":615,"stem":616,"children":-1},"Services and capacity","/webspace/admin/service-capacity","40.webspace/50.admin/40.service-capacity",{"title":618,"path":619,"stem":620,"children":-1},"Deployment management and frontend releases","/webspace/admin/deployments","40.webspace/50.admin/50.deployments",{"title":622,"path":623,"stem":624,"children":625,"page":55},"Try WebSpace","/webspace/examples","40.webspace/60.examples",[626,630],{"title":627,"path":628,"stem":629,"children":-1},"WebSpace examples","/webspace/examples/overview","40.webspace/60.examples/00.overview",{"title":631,"path":632,"stem":633,"children":-1},"Build a real-time Gomoku game","/webspace/examples/realtime-gomoku","40.webspace/60.examples/20.realtime-gomoku",{"title":635,"path":636,"stem":637,"children":638,"page":55},"Using plugin","/plugin","50.plugin",[639,643,660,704,722,752],{"title":640,"path":641,"stem":642,"children":-1},"Plugin Overview","/plugin/overview","50.plugin/00.overview",{"title":644,"path":645,"stem":646,"children":647,"page":55},"Calendar","/plugin/calendar","50.plugin/10.calendar",[648,652,656],{"title":649,"path":650,"stem":651,"children":-1},"Calendar Introduction","/plugin/calendar/overview","50.plugin/10.calendar/00.overview",{"title":653,"path":654,"stem":655,"children":-1},"Creating, Editing, and Deleting Events","/plugin/calendar/create-event","50.plugin/10.calendar/10.create-event",{"title":657,"path":658,"stem":659,"children":-1},"Checking Activity History","/plugin/calendar/file-activity","50.plugin/10.calendar/40.file-activity",{"title":661,"path":662,"stem":663,"children":664,"page":55},"Email","/plugin/email","50.plugin/20.email",[665,669,672,676,680,684,688,692,696,700],{"title":666,"path":667,"stem":668,"children":-1},"Email Introduction","/plugin/email/overview","50.plugin/20.email/00.overview",{"title":129,"path":670,"stem":671,"children":-1},"/plugin/email/setfn-email-setting","50.plugin/20.email/05.setfn-email-setting",{"title":673,"path":674,"stem":675,"children":-1},"Connect an External Email Account","/plugin/email/external-email","50.plugin/20.email/07.external-email",{"title":677,"path":678,"stem":679,"children":-1},"Basic Email Functionality","/plugin/email/email-basic","50.plugin/20.email/10.email-basic",{"title":681,"path":682,"stem":683,"children":-1},"Composing and Sending Email","/plugin/email/email-compose","50.plugin/20.email/20.email-compose",{"title":685,"path":686,"stem":687,"children":-1},"Attaching Files","/plugin/email/email-attachment","50.plugin/20.email/30.email-attachment",{"title":689,"path":690,"stem":691,"children":-1},"Mail Folder Management","/plugin/email/email-folders","50.plugin/20.email/40.email-folders",{"title":693,"path":694,"stem":695,"children":-1},"Automatic Email Classification","/plugin/email/email-auto-classify","50.plugin/20.email/50.email-auto-classify",{"title":697,"path":698,"stem":699,"children":-1},"Email File Archiving and Sharing","/plugin/email/email-open-in-space","50.plugin/20.email/60.email-open-in-space",{"title":701,"path":702,"stem":703,"children":-1},"Email Security","/plugin/email/email-security","50.plugin/20.email/70.email-security",{"title":705,"path":706,"stem":707,"children":708,"page":55},"Workflow","/plugin/workflow","50.plugin/30.workflow",[709,713,718],{"title":710,"path":711,"stem":712,"children":-1},"Workflow Introduction","/plugin/workflow/overview","50.plugin/30.workflow/00.overview",{"title":714,"path":715,"stem":716,"tags":717,"children":-1},"Creating a New Workflow","/plugin/workflow/new-workflow","50.plugin/30.workflow/10.new-workflow",[307],{"title":719,"path":720,"stem":721,"children":-1},"Checking Execution History","/plugin/workflow/execution-history","50.plugin/30.workflow/20.execution-history",{"title":723,"path":724,"stem":725,"children":726,"page":55},"Pinetuning (AI learning)","/plugin/fine-tuning","50.plugin/40.fine-tuning",[727,732,736,740,744,748],{"title":728,"path":729,"stem":730,"tags":731,"children":-1},"Fine-tuning Introduction","/plugin/fine-tuning/overview","50.plugin/40.fine-tuning/00.overview",[307],{"title":733,"path":734,"stem":735,"children":-1},"Preprocessing Training Data","/plugin/fine-tuning/pre-processing","50.plugin/40.fine-tuning/10.pre-processing",{"title":737,"path":738,"stem":739,"children":-1},"Training","/plugin/fine-tuning/training","50.plugin/40.fine-tuning/20.training",{"title":741,"path":742,"stem":743,"children":-1},"Evaluation","/plugin/fine-tuning/evaluation","50.plugin/40.fine-tuning/30.evaluation",{"title":745,"path":746,"stem":747,"children":-1},"Chat Test","/plugin/fine-tuning/chat-test","50.plugin/40.fine-tuning/40.chat-test",{"title":749,"path":750,"stem":751,"children":-1},"Export","/plugin/fine-tuning/export","50.plugin/40.fine-tuning/50.export",{"title":753,"path":754,"stem":755,"children":756,"page":55},"EDC (data collection)","/plugin/edc","50.plugin/50.edc",[757,761,765,769],{"title":758,"path":759,"stem":760,"children":-1},"EDC Introduction","/plugin/edc/overview","50.plugin/50.edc/00.overview",{"title":762,"path":763,"stem":764,"children":-1},"Data Entry, Audit Trail","/plugin/edc/data-entry","50.plugin/50.edc/10.data-entry",{"title":766,"path":767,"stem":768,"children":-1},"Builder","/plugin/edc/builder","50.plugin/50.edc/20.builder",{"title":770,"path":771,"stem":772,"children":-1},"User/Site Settings","/plugin/edc/account","50.plugin/50.edc/30.account",{"title":774,"path":775,"stem":776,"children":777,"page":55},"FAQ","/faq","99.FAQ",[778,782,786,790,794,798,802],{"title":779,"path":780,"stem":781,"children":-1},"SetFN vs Cloud Services Comparison","/faq/comparison-cloud","99.FAQ/10.comparison-cloud",{"title":783,"path":784,"stem":785,"children":-1},"SetFN vs NAS Comparison","/faq/comparison-nas","99.FAQ/20.comparison-nas",{"title":787,"path":788,"stem":789,"children":-1},"Security Policy","/faq/security-policy","99.FAQ/30.security-policy",{"title":791,"path":792,"stem":793,"children":-1},"Why Is SetFN Fast","/faq/why-fast","99.FAQ/40.why-fast",{"title":795,"path":796,"stem":797,"children":-1},"License FAQ","/faq/license-faq","99.FAQ/50.license-faq",{"title":799,"path":800,"stem":801,"children":-1},"AI Features FAQ","/faq/ai-faq","99.FAQ/60.ai-faq",{"title":803,"path":804,"stem":805,"children":-1},"Troubleshooting Guide","/faq/troubleshooting","99.FAQ/70.troubleshooting",{"title":807,"path":808,"stem":809,"children":810,"page":55},"Applied (draft)","/draft","draft",[811,815,819,823,827,831,835,839,843,847,851,855,859],{"title":812,"path":813,"stem":814,"children":-1},"Example 1. Building an Introduction Page","/draft/static-intro","draft/05.static-intro",{"title":816,"path":817,"stem":818,"children":-1},"Example 2. Building a Notice Board","/draft/public-notice-board","draft/07.public-notice-board",{"title":820,"path":821,"stem":822,"children":-1},"Example 3. Building a Coffee Chat Booking System","/draft/coffee-chat-booking","draft/08.coffee-chat-booking",{"title":824,"path":825,"stem":826,"children":-1},"Example 4. Building a Leave Request System","/draft/leave-request","draft/09.leave-request",{"title":828,"path":829,"stem":830,"children":-1},"Example 5. Building Real-Time Team Chat","/draft/team-chat","draft/10.team-chat",{"title":832,"path":833,"stem":834,"children":-1},"Example 6. Building a Job Application Intake","/draft/client-submission","draft/11.client-submission",{"title":836,"path":837,"stem":838,"children":-1},"Example 7. Building an Issue Tracker with Team and Level Conditions","/draft/crm-basic","draft/12.crm-basic",{"title":840,"path":841,"stem":842,"children":-1},"Example 8. Building a Status Filter and Stats Summary Screen","/draft/crm-search-filter","draft/13.crm-search-filter",{"title":844,"path":845,"stem":846,"children":-1},"Example 9. Building Real-Time Community Chat with Moderation","/draft/community-moderation","draft/14.community-moderation",{"title":848,"path":849,"stem":850,"children":-1},"Example 10. Building a Real-Time Attendance Check / Poll","/draft/attendance-poll","draft/15.attendance-poll",{"title":852,"path":853,"stem":854,"children":-1},"Example 11. Building a Debate Battle","/draft/debate-battle","draft/16.debate-battle",{"title":856,"path":857,"stem":858,"children":-1},"Example 13. Building an Announcement Read Receipt","/draft/announcement-read","draft/18.announcement-read",{"title":860,"path":861,"stem":862,"children":-1},"Example 14. Building an Inventory Management System","/draft/inventory-management","draft/19.inventory-management",{"title":864,"path":865,"stem":866,"children":867,"page":55},"SJAUTO","/sjauto","sjauto",[868,872,876],{"title":869,"path":870,"stem":871,"children":-1},"Access the Administrator Page","/sjauto/admin-page-access","sjauto/00.admin-page-access",{"title":873,"path":874,"stem":875,"children":-1},"Sign Up and Sign In","/sjauto/signup","sjauto/10.signup",{"title":877,"path":878,"stem":879,"children":-1},"AI Chat Files","/sjauto/ai-chat-file","sjauto/ai-chat-file",{"id":881,"title":150,"body":882,"cover":1563,"description":1564,"extension":1565,"image":1563,"meta":1566,"navigation":1137,"path":151,"seo":1568,"stem":152,"tags":1563,"thumbnail":1563,"__hash__":1579},"docs_en/10.admin/30.ai/25.qdrant-server-setup.md",{"type":883,"value":884,"toc":1549},"minimal",[885,889,903,906,911,928,932,935,940,1033,1037,1148,1152,1180,1184,1188,1195,1285,1289,1292,1313,1361,1409,1413,1427,1434,1509,1522,1530,1534,1545],[886,887,150],"h1",{"id":888},"setting-up-a-qdrant-server",[890,891,892,893,897,898,902],"p",{},"To select ",[894,895,896],"code",{},"Qdrant"," as the driver in ",[899,900,146],"a",{"href":901},"./ai-db-setting",", you need a reachable Qdrant server first. SetFN doesn't install the Qdrant server for you, so this explains how to set one up yourself with Docker.",[904,905],"hr",{},[907,908,910],"h2",{"id":909},"before-you-start","Before You Start",[912,913,914,922,925],"ul",{},[915,916,917,918,921],"li",{},"You need a Linux (Ubuntu) environment to run the Qdrant server on, with administrator (",[894,919,920],{},"sudo",") access.",[915,923,924],{},"Install Docker on that environment first if it isn't already installed.",[915,926,927],{},"The SetFN server needs network access to this Qdrant server.",[907,929,931],{"id":930},"installing-docker","Installing Docker",[890,933,934],{},"The official Docker installation procedure for Ubuntu. Skip this step if Docker is already installed.",[936,937,939],"h3",{"id":938},"_1-update-the-package-index-and-install-required-packages","1. Update the Package Index and Install Required Packages",[941,942,947],"pre",{"className":943,"code":944,"language":945,"meta":946,"style":946},"language-bash shiki shiki-themes github-light github-dark monokai","sudo apt update\nsudo apt install ca-certificates curl\nsudo install -m 0755 -d /etc/apt/keyrings\nsudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc\nsudo chmod a+r /etc/apt/keyrings/docker.asc\n","bash","",[894,948,949,964,980,1000,1020],{"__ignoreMap":946},[950,951,954,957,961],"span",{"class":952,"line":953},"line",1,[950,955,920],{"class":956},"srTi1",[950,958,960],{"class":959},"sstjo"," apt",[950,962,963],{"class":959}," update\n",[950,965,967,969,971,974,977],{"class":952,"line":966},2,[950,968,920],{"class":956},[950,970,960],{"class":959},[950,972,973],{"class":959}," install",[950,975,976],{"class":959}," ca-certificates",[950,978,979],{"class":959}," curl\n",[950,981,983,985,987,991,994,997],{"class":952,"line":982},3,[950,984,920],{"class":956},[950,986,973],{"class":959},[950,988,990],{"class":989},"s7F3e"," -m",[950,992,993],{"class":989}," 0755",[950,995,996],{"class":989}," -d",[950,998,999],{"class":959}," /etc/apt/keyrings\n",[950,1001,1003,1005,1008,1011,1014,1017],{"class":952,"line":1002},4,[950,1004,920],{"class":956},[950,1006,1007],{"class":959}," curl",[950,1009,1010],{"class":989}," -fsSL",[950,1012,1013],{"class":959}," https://download.docker.com/linux/ubuntu/gpg",[950,1015,1016],{"class":989}," -o",[950,1018,1019],{"class":959}," /etc/apt/keyrings/docker.asc\n",[950,1021,1023,1025,1028,1031],{"class":952,"line":1022},5,[950,1024,920],{"class":956},[950,1026,1027],{"class":959}," chmod",[950,1029,1030],{"class":959}," a+r",[950,1032,1019],{"class":959},[936,1034,1036],{"id":1035},"_2-add-the-docker-repository-to-apt-sources","2. Add the Docker Repository to Apt Sources",[941,1038,1040],{"className":943,"code":1039,"language":945,"meta":946,"style":946},"sudo tee /etc/apt/sources.list.d/docker.sources \u003C\u003CEOF\nTypes: deb\nURIs: https://download.docker.com/linux/ubuntu\nSuites: $(. /etc/os-release && echo \"${UBUNTU_CODENAME:-$VERSION_CODENAME}\")\nComponents: stable\nArchitectures: $(dpkg --print-architecture)\nSigned-By: /etc/apt/keyrings/docker.asc\nEOF\n\nsudo apt update\n",[894,1041,1042,1060,1065,1070,1101,1106,1121,1127,1132,1139],{"__ignoreMap":946},[950,1043,1044,1046,1049,1052,1056],{"class":952,"line":953},[950,1045,920],{"class":956},[950,1047,1048],{"class":959}," tee",[950,1050,1051],{"class":959}," /etc/apt/sources.list.d/docker.sources",[950,1053,1055],{"class":1054},"sC2Qs"," \u003C\u003C",[950,1057,1059],{"class":1058},"sinWB","EOF\n",[950,1061,1062],{"class":952,"line":966},[950,1063,1064],{"class":959},"Types: deb\n",[950,1066,1067],{"class":952,"line":982},[950,1068,1069],{"class":959},"URIs: https://download.docker.com/linux/ubuntu\n",[950,1071,1072,1075,1079,1082,1085,1088,1092,1095,1098],{"class":952,"line":1002},[950,1073,1074],{"class":959},"Suites: $(",[950,1076,1078],{"class":1077},"sTrkL",".",[950,1080,1081],{"class":959}," /etc/os-release && ",[950,1083,1084],{"class":1077},"echo",[950,1086,1087],{"class":959}," \"${",[950,1089,1091],{"class":1090},"sMOD_","UBUNTU_CODENAME",[950,1093,1094],{"class":1054},":-",[950,1096,1097],{"class":1090},"$VERSION_CODENAME",[950,1099,1100],{"class":959},"}\")\n",[950,1102,1103],{"class":952,"line":1022},[950,1104,1105],{"class":959},"Components: stable\n",[950,1107,1109,1112,1115,1118],{"class":952,"line":1108},6,[950,1110,1111],{"class":959},"Architectures: $(",[950,1113,1114],{"class":956},"dpkg",[950,1116,1117],{"class":989}," --print-architecture",[950,1119,1120],{"class":959},")\n",[950,1122,1124],{"class":952,"line":1123},7,[950,1125,1126],{"class":959},"Signed-By: /etc/apt/keyrings/docker.asc\n",[950,1128,1130],{"class":952,"line":1129},8,[950,1131,1059],{"class":1058},[950,1133,1135],{"class":952,"line":1134},9,[950,1136,1138],{"emptyLinePlaceholder":1137},true,"\n",[950,1140,1142,1144,1146],{"class":952,"line":1141},10,[950,1143,920],{"class":956},[950,1145,960],{"class":959},[950,1147,963],{"class":959},[936,1149,1151],{"id":1150},"_3-install-the-docker-packages","3. Install the Docker Packages",[941,1153,1155],{"className":943,"code":1154,"language":945,"meta":946,"style":946},"sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[894,1156,1157],{"__ignoreMap":946},[950,1158,1159,1161,1163,1165,1168,1171,1174,1177],{"class":952,"line":953},[950,1160,920],{"class":956},[950,1162,960],{"class":959},[950,1164,973],{"class":959},[950,1166,1167],{"class":959}," docker-ce",[950,1169,1170],{"class":959}," docker-ce-cli",[950,1172,1173],{"class":959}," containerd.io",[950,1175,1176],{"class":959}," docker-buildx-plugin",[950,1178,1179],{"class":959}," docker-compose-plugin\n",[907,1181,1183],{"id":1182},"running-the-qdrant-container","Running the Qdrant Container",[936,1185,1187],{"id":1186},"_1-create-the-docker-composeyml-file","1. Create the docker-compose.yml File",[890,1189,1190,1191,1194],{},"In the folder where you want to run Qdrant, create a ",[894,1192,1193],{},"docker-compose.yml"," file with the following content.",[941,1196,1200],{"className":1197,"code":1198,"language":1199,"meta":946,"style":946},"language-yaml shiki shiki-themes github-light github-dark monokai","services:\n  qdrant:\n    image: qdrant/qdrant:latest\n    container_name: qdrant\n    restart: unless-stopped\n    ports:\n      - \"6333:6333\"\n      - \"6334:6334\"\n    volumes:\n      - ./qdrant_storage:/qdrant/storage\n","yaml",[894,1201,1202,1211,1218,1229,1239,1249,1256,1264,1271,1278],{"__ignoreMap":946},[950,1203,1204,1208],{"class":952,"line":953},[950,1205,1207],{"class":1206},"s5clZ","services",[950,1209,1210],{"class":1090},":\n",[950,1212,1213,1216],{"class":952,"line":966},[950,1214,1215],{"class":1206},"  qdrant",[950,1217,1210],{"class":1090},[950,1219,1220,1223,1226],{"class":952,"line":982},[950,1221,1222],{"class":1206},"    image",[950,1224,1225],{"class":1090},": ",[950,1227,1228],{"class":959},"qdrant/qdrant:latest\n",[950,1230,1231,1234,1236],{"class":952,"line":1002},[950,1232,1233],{"class":1206},"    container_name",[950,1235,1225],{"class":1090},[950,1237,1238],{"class":959},"qdrant\n",[950,1240,1241,1244,1246],{"class":952,"line":1022},[950,1242,1243],{"class":1206},"    restart",[950,1245,1225],{"class":1090},[950,1247,1248],{"class":959},"unless-stopped\n",[950,1250,1251,1254],{"class":952,"line":1108},[950,1252,1253],{"class":1206},"    ports",[950,1255,1210],{"class":1090},[950,1257,1258,1261],{"class":952,"line":1123},[950,1259,1260],{"class":1090},"      - ",[950,1262,1263],{"class":959},"\"6333:6333\"\n",[950,1265,1266,1268],{"class":952,"line":1129},[950,1267,1260],{"class":1090},[950,1269,1270],{"class":959},"\"6334:6334\"\n",[950,1272,1273,1276],{"class":952,"line":1134},[950,1274,1275],{"class":1206},"    volumes",[950,1277,1210],{"class":1090},[950,1279,1280,1282],{"class":952,"line":1141},[950,1281,1260],{"class":1090},[950,1283,1284],{"class":959},"./qdrant_storage:/qdrant/storage\n",[936,1286,1288],{"id":1287},"_2-run-the-container","2. Run the Container",[890,1290,1291],{},"Run the container from the same folder.",[941,1293,1295],{"className":943,"code":1294,"language":945,"meta":946,"style":946},"sudo docker compose up -d\n",[894,1296,1297],{"__ignoreMap":946},[950,1298,1299,1301,1304,1307,1310],{"class":952,"line":953},[950,1300,920],{"class":956},[950,1302,1303],{"class":959}," docker",[950,1305,1306],{"class":959}," compose",[950,1308,1309],{"class":959}," up",[950,1311,1312],{"class":989}," -d\n",[912,1314,1315,1336,1346,1352],{},[915,1316,1317,1320,1321,1324,1325,1331,1332,1335],{},[894,1318,1319],{},"image",": the Qdrant image and version to use. ",[894,1322,1323],{},"latest"," changes to whatever is newest each time you pull the image, so for production it's best to pin a specific version from the ",[899,1326,1330],{"href":1327,"rel":1328},"https://github.com/qdrant/qdrant/releases",[1329],"nofollow","Qdrant releases"," (e.g., ",[894,1333,1334],{},"qdrant/qdrant:v1.12.4","). If you mirror images through an internal registry, point this at that path instead.",[915,1337,1338,1341,1342,1345],{},[894,1339,1340],{},"container_name",", ",[894,1343,1344],{},"./qdrant_storage",": the container name and data storage path are just examples — change them to whatever you prefer.",[915,1347,1348,1351],{},[894,1349,1350],{},"6333",": the REST API (HTTP) port.",[915,1353,1354,1357,1358,1360],{},[894,1355,1356],{},"6334",": the gRPC port. It uses a binary protocol (protobuf), which is faster than the REST API for high-throughput work like bulk upserts or batch search. SetFN supports a gRPC connection in ",[894,1359,146],{}," and recommends using gRPC first for search and vector storage.",[1362,1363,1364,1381,1406],"warning",{},[890,1365,1366,1367,1369,1370,1372,1373,1376,1377,1380],{},"This configuration opens ports ",[894,1368,1350],{}," and ",[894,1371,1356],{}," on every network interface (",[894,1374,1375],{},"0.0.0.0","). If you're running SetFN and Qdrant on the same machine, it's safer to bind the ports to ",[894,1378,1379],{},"127.0.0.1"," only, so they aren't exposed externally.",[941,1382,1384],{"className":1197,"code":1383,"language":1199,"meta":946,"style":946},"    ports:\n      - \"127.0.0.1:6333:6333\"\n      - \"127.0.0.1:6334:6334\"\n",[894,1385,1386,1392,1399],{"__ignoreMap":946},[950,1387,1388,1390],{"class":952,"line":953},[950,1389,1253],{"class":1206},[950,1391,1210],{"class":1090},[950,1393,1394,1396],{"class":952,"line":966},[950,1395,1260],{"class":1090},[950,1397,1398],{"class":959},"\"127.0.0.1:6333:6333\"\n",[950,1400,1401,1403],{"class":952,"line":982},[950,1402,1260],{"class":1090},[950,1404,1405],{"class":959},"\"127.0.0.1:6334:6334\"\n",[890,1407,1408],{},"With this binding, only the same machine can connect — if the SetFN server runs on a different machine, it won't be able to reach it.",[907,1410,1412],{"id":1411},"connecting-to-setfn","Connecting to SetFN",[890,1414,1415,1416,1418,1419,1422,1423,1426],{},"In ",[899,1417,146],{"href":901},"'s ",[894,1420,1421],{},"Local AI DB Setup",", fill in the following fields and click the ",[894,1424,1425],{},"Save"," button.",[890,1428,1429],{},[1430,1431],"img",{"alt":1432,"src":1433},"AI DB configuration screen with Qdrant selected as the driver","./_screenshots/admin-ai-db-qdrant_en.png",[1435,1436,1437,1450],"table",{},[1438,1439,1440],"thead",{},[1441,1442,1443,1447],"tr",{},[1444,1445,1446],"th",{},"Item",[1444,1448,1449],{},"Value",[1451,1452,1453,1463,1471,1483,1501],"tbody",{},[1441,1454,1455,1459],{},[1456,1457,1458],"td",{},"Driver",[1456,1460,1461],{},[894,1462,896],{},[1441,1464,1465,1468],{},[1456,1466,1467],{},"Collection",[1456,1469,1470],{},"The collection name to use, distinct per instance. You choose this yourself.",[1441,1472,1473,1476],{},[1456,1474,1475],{},"REST endpoint",[1456,1477,1478,1479,1482],{},"The Qdrant server's REST API address (e.g., ",[894,1480,1481],{},"http://localhost:6333",")",[1441,1484,1485,1488],{},[1456,1486,1487],{},"gRPC endpoint (recommended)",[1456,1489,1490,1491,1494,1495,1497,1498,1500],{},"The gRPC address of the same Qdrant instance as REST (e.g., ",[894,1492,1493],{},"http://localhost:6334","). Search and vector storage use gRPC first. If left blank, ",[894,1496,1356],{}," is used automatically when the REST address is on port ",[894,1499,1350],{},"; it falls back to REST if it can't connect.",[1441,1502,1503,1506],{},[1456,1504,1505],{},"API key",[1456,1507,1508],{},"Only fill this in if authentication is enabled on Qdrant. Leaving it blank connects without authentication; saving over a stored value with a blank one deletes it.",[890,1510,1511,1512,1515,1516,1519,1520,1078],{},"After saving, the connection is working correctly once ",[894,1513,1514],{},"Local AI DB Operating Status"," shows connection status as ",[894,1517,1518],{},"Connected"," and the vector store as ",[894,1521,896],{},[1523,1524,1525],"note",{},[890,1526,1527,1528,1078],{},"If the SetFN server and the Qdrant server are on different machines, enter an address the SetFN server can actually reach (an internal IP or hostname) in the REST and gRPC endpoint fields, not ",[894,1529,1379],{},[907,1531,1533],{"id":1532},"related-documents","Related Documents",[912,1535,1536,1540],{},[915,1537,1538],{},[899,1539,146],{"href":901},[915,1541,1542],{},[899,1543,154],{"href":1544},"./knowledge-indexing",[1546,1547,1548],"style",{},"html pre.shiki code .srTi1, html code.shiki .srTi1{--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sstjo, html code.shiki .sstjo{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .s7F3e, html code.shiki .s7F3e{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sC2Qs, html code.shiki .sC2Qs{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sinWB, html code.shiki .sinWB{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#F8F8F2}html pre.shiki code .sTrkL, html code.shiki .sTrkL{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .s5clZ, html code.shiki .s5clZ{--shiki-default:#22863A;--shiki-dark:#85E89D;--shiki-sepia:#F92672}",{"title":946,"searchDepth":966,"depth":982,"links":1550},[1551,1552,1557,1561,1562],{"id":909,"depth":966,"text":910},{"id":930,"depth":966,"text":931,"children":1553},[1554,1555,1556],{"id":938,"depth":982,"text":939},{"id":1035,"depth":982,"text":1036},{"id":1150,"depth":982,"text":1151},{"id":1182,"depth":966,"text":1183,"children":1558},[1559,1560],{"id":1186,"depth":982,"text":1187},{"id":1287,"depth":982,"text":1288},{"id":1411,"depth":966,"text":1412},{"id":1532,"depth":966,"text":1533},null,"To use Qdrant as the AI DB driver, you need a reachable Qdrant server first. Explains how to install a Qdrant server with Docker and connect it to SetFN.","md",{"slug":1567},"/admin/ai/qdrant-server-setup/",{"title":1569,"description":1570,"ogType":1571,"twitterCard":1572,"keywords":1573},"Setting Up a Qdrant Server | Admin Docs","Explains how to install a Qdrant server with Docker and connect it to the Qdrant driver in SetFN's AI DB settings.","article","summary_large_image",[1574,1575,1576,1577,1578],"installing Qdrant","Docker Qdrant","vector DB server","AI DB Qdrant integration","SetFN","3wc5cJknq2pepl37-szacqgyQNhj9K3tA0X_sTCDFXk",[1581,1582],{"title":146,"path":147,"stem":148,"children":-1},{"title":154,"path":155,"stem":156,"children":-1},{"title":150,"filename":1584,"content":1585},"qdrant-server-setup","# Setting Up a Qdrant Server\n\nTo select `Qdrant` as the driver in [AI DB Settings](./20.ai-db-setting.md), you need a reachable Qdrant server first. SetFN doesn't install the Qdrant server for you, so this explains how to set one up yourself with Docker.\n\n---\n\n## Before You Start\n\n- You need a Linux (Ubuntu) environment to run the Qdrant server on, with administrator (`sudo`) access.\n- Install Docker on that environment first if it isn't already installed.\n- The SetFN server needs network access to this Qdrant server.\n\n## Installing Docker\n\nThe official Docker installation procedure for Ubuntu. Skip this step if Docker is already installed.\n\n### 1. Update the Package Index and Install Required Packages\n\n```bash\nsudo apt update\nsudo apt install ca-certificates curl\nsudo install -m 0755 -d /etc/apt/keyrings\nsudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc\nsudo chmod a+r /etc/apt/keyrings/docker.asc\n```\n\n### 2. Add the Docker Repository to Apt Sources\n\n```bash\nsudo tee /etc/apt/sources.list.d/docker.sources \u003C\u003CEOF\nTypes: deb\nURIs: https://download.docker.com/linux/ubuntu\nSuites: $(. /etc/os-release && echo \"${UBUNTU_CODENAME:-$VERSION_CODENAME}\")\nComponents: stable\nArchitectures: $(dpkg --print-architecture)\nSigned-By: /etc/apt/keyrings/docker.asc\nEOF\n\nsudo apt update\n```\n\n### 3. Install the Docker Packages\n\n```bash\nsudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n```\n\n## Running the Qdrant Container\n\n### 1. Create the docker-compose.yml File\n\nIn the folder where you want to run Qdrant, create a `docker-compose.yml` file with the following content.\n\n```yaml\nservices:\n  qdrant:\n    image: qdrant/qdrant:latest\n    container_name: qdrant\n    restart: unless-stopped\n    ports:\n      - \"6333:6333\"\n      - \"6334:6334\"\n    volumes:\n      - ./qdrant_storage:/qdrant/storage\n```\n\n### 2. Run the Container\n\nRun the container from the same folder.\n\n```bash\nsudo docker compose up -d\n```\n\n- `image`: the Qdrant image and version to use. `latest` changes to whatever is newest each time you pull the image, so for production it's best to pin a specific version from the [Qdrant releases](https://github.com/qdrant/qdrant/releases) (e.g., `qdrant/qdrant:v1.12.4`). If you mirror images through an internal registry, point this at that path instead.\n- `container_name`, `./qdrant_storage`: the container name and data storage path are just examples — change them to whatever you prefer.\n- `6333`: the REST API (HTTP) port.\n- `6334`: the gRPC port. It uses a binary protocol (protobuf), which is faster than the REST API for high-throughput work like bulk upserts or batch search. SetFN supports a gRPC connection in `AI DB Settings` and recommends using gRPC first for search and vector storage.\n\n::warning\nThis configuration opens ports `6333` and `6334` on every network interface (`0.0.0.0`). If you're running SetFN and Qdrant on the same machine, it's safer to bind the ports to `127.0.0.1` only, so they aren't exposed externally.\n\n```yaml\n    ports:\n      - \"127.0.0.1:6333:6333\"\n      - \"127.0.0.1:6334:6334\"\n```\n\nWith this binding, only the same machine can connect — if the SetFN server runs on a different machine, it won't be able to reach it.\n::\n\n## Connecting to SetFN\n\nIn [AI DB Settings](./20.ai-db-setting.md)'s `Local AI DB Setup`, fill in the following fields and click the `Save` button.\n\n![AI DB configuration screen with Qdrant selected as the driver](./_screenshots/admin-ai-db-qdrant_en.png)\n\n| Item | Value |\n|------|-------|\n| Driver | `Qdrant` |\n| Collection | The collection name to use, distinct per instance. You choose this yourself. |\n| REST endpoint | The Qdrant server's REST API address (e.g., `http://localhost:6333`) |\n| gRPC endpoint (recommended) | The gRPC address of the same Qdrant instance as REST (e.g., `http://localhost:6334`). Search and vector storage use gRPC first. If left blank, `6334` is used automatically when the REST address is on port `6333`; it falls back to REST if it can't connect. |\n| API key | Only fill this in if authentication is enabled on Qdrant. Leaving it blank connects without authentication; saving over a stored value with a blank one deletes it. |\n\nAfter saving, the connection is working correctly once `Local AI DB Operating Status` shows connection status as `Connected` and the vector store as `Qdrant`.\n\n::note\nIf the SetFN server and the Qdrant server are on different machines, enter an address the SetFN server can actually reach (an internal IP or hostname) in the REST and gRPC endpoint fields, not `127.0.0.1`.\n::\n\n## Related Documents\n\n- [AI DB Settings](./20.ai-db-setting.md)\n- [Knowledge Indexing](./30.knowledge-indexing.md)\n",1789664750990]