<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: mulir rai</title>
    <description>The latest articles on DEV Community by mulir rai (@mulir_rai_baf603365902fcb).</description>
    <link>https://dev.to/mulir_rai_baf603365902fcb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4114861%2F5e875b65-6835-4e37-8af8-cbeb5bd9cd02.png</url>
      <title>DEV Community: mulir rai</title>
      <link>https://dev.to/mulir_rai_baf603365902fcb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mulir_rai_baf603365902fcb"/>
    <language>en</language>
    <item>
      <title>Building "StudyPal": A Simple AI Study Assistant with Tencent EdgeOne Makers</title>
      <dc:creator>mulir rai</dc:creator>
      <pubDate>Tue, 08 Sep 2026 04:09:15 +0000</pubDate>
      <link>https://dev.to/mulir_rai_baf603365902fcb/building-studypal-a-simple-ai-study-assistant-with-tencent-edgeone-makers-1359</link>
      <guid>https://dev.to/mulir_rai_baf603365902fcb/building-studypal-a-simple-ai-study-assistant-with-tencent-edgeone-makers-1359</guid>
      <description>&lt;p&gt;If you've ever wanted to build an AI-powered chatbot but got scared off by the thought of managing servers, databases, and deployment pipelines, this tutorial is for you. In this post, I'll walk through how I built &lt;strong&gt;StudyPal&lt;/strong&gt;, a lightweight AI study assistant chatbot, using &lt;strong&gt;Tencent EdgeOne Makers&lt;/strong&gt; — a serverless, full-stack platform that lets you ship both web apps and AI agents without touching a single server.&lt;/p&gt;

&lt;p&gt;The idea behind StudyPal is simple: a chat interface where students can ask questions about a specific subject (in my case, I focused it on programming concepts) and get quick, clear answers powered by an LLM, with the whole app running on the edge for fast global access.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why EdgeOne Makers?
&lt;/h2&gt;

&lt;p&gt;Before diving into the build, here's what stood out to me while exploring the platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero server management&lt;/strong&gt; — you write code in a &lt;code&gt;cloud-functions/&lt;/code&gt; or &lt;code&gt;agents/&lt;/code&gt; folder, and the platform handles routing, scaling, and deployment automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in AI Gateway&lt;/strong&gt; — you don't need to bring your own OpenAI or Anthropic key. Makers exposes an AI Gateway compatible with the OpenAI SDK, and gives new users a free trial token quota, which is more than enough to prototype an idea like this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native storage (KV &amp;amp; Blob)&lt;/strong&gt; — no need to spin up an external database just to remember a user's conversation history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global edge network&lt;/strong&gt; — once deployed, your app is served close to users worldwide, which matters a lot for latency-sensitive things like streaming chat responses.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting Up the Project
&lt;/h2&gt;

&lt;p&gt;Getting started only takes a few commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; edgeone
edgeone login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After logging in (I used the Global region since I signed up on edgeone.ai), you can verify everything is connected with &lt;code&gt;edgeone whoami&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Instead of using a template, I started from an empty folder to really understand how the platform maps files to routes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;study-pal/
├── cloud-functions/
│   └── index.ts        → GET /  (serves the chat UI)
└── agents/
    └── studypal/
        └── index.ts     → POST /studypal (the AI logic)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This routing convention is one of the things I appreciated most — no manual route configuration, the folder structure &lt;em&gt;is&lt;/em&gt; the API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting to the AI Gateway
&lt;/h2&gt;

&lt;p&gt;The core of StudyPal lives in &lt;code&gt;agents/studypal/index.ts&lt;/code&gt;. Makers' AI Gateway is OpenAI SDK-compatible, so calling the built-in model is straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;OpenAI&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MAKERS_MODELS_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://ai-gateway.edgeone.link&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;completion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@makers/deepseek-v4-flash&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;You are StudyPal, a friendly study assistant.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userQuestion&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the agent runs in &lt;strong&gt;Session Mode&lt;/strong&gt;, requests sharing the same conversation ID get routed to the same instance, which makes it easy to maintain short-term context without wiring up your own session logic from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remembering Conversations with KV Storage
&lt;/h2&gt;

&lt;p&gt;To let StudyPal recall a user's recent questions, I used the platform's built-in KV store instead of setting up an external database. Each conversation is saved under a unique key, and retrieved on the next request — no extra infrastructure, no connection strings, no maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying to Production
&lt;/h2&gt;

&lt;p&gt;Once the local version worked (tested via &lt;code&gt;edgeone makers dev&lt;/code&gt;, which comes with hot-reload out of the box), deployment was just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
edgeone makers deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within minutes, StudyPal was live on a production URL with SSL and edge acceleration included — no manual CDN or certificate setup required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;What impressed me most about &lt;strong&gt;Tencent EdgeOne Makers&lt;/strong&gt; is how much of the "boring" infrastructure work disappears. As a developer, especially one still learning, that means more time spent thinking about the actual product logic — how the assistant should behave, what data it should remember — instead of fighting deployment configs.&lt;/p&gt;

&lt;p&gt;If you're a student or a young developer curious about building AI-powered apps without the usual DevOps overhead, I'd genuinely recommend giving EdgeOne Makers a try. The free tier alone is generous enough to take an idea from an empty folder to a live, working product.&lt;/p&gt;




&lt;h1&gt;
  
  
  TencentEdgeOne #EdgeOneMakers #CODEPOLITAN #EdgeOne
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>serverless</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
