Skip to content

LLM Frontend Integration 2025

When it comes to LLM frontend integration in 2025, many developers only work at the API call level. This article approaches it from a production-environment angle, discussing real-world problems and solutions.

Core Principles

In a real project, the usage gets a bit more complex:

javascript
import { openai } from "@ai-sdk/openai";
import { streamText } from "ai";

export async function POST(req) {
  const { messages } = await req.json();
  const result = await streamText({
    model: openai("gpt-4o"),
    messages,
    system: "你是一个专业的前端开发助手。",
    maxTokens: 2000,
  });
  return result.toDataStreamResponse();
}

This approach improves both the testability and scalability of the code.

Advanced Features

Here is a complete example:

javascript
"use client";
import { useChat } from "ai/react";

export function AIChat() {
  const { messages, input, handleInputChange, handleSubmit, isLoading } =
    useChat({
      api: "/api/chat",
    });
  return (
    <div className="chat-container">
      {messages.map((m) => (
        <div key={m.id} className={`message ${m.role}`}>
          <p>{m.content}</p>
        </div>
      ))}
      <form onSubmit={handleSubmit}>
        <input value={input} onChange={handleInputChange} />
        <button type="submit" disabled={isLoading}>
          发送
        </button>
      </form>
    </div>
  );
}

Pay attention to edge-case handling—this is crucial in production environments.

Project Practice

The key is to understand the core logic:

javascript
import { openai } from "@ai-sdk/openai";
import { streamText } from "ai";

export async function POST(req) {
  const { messages } = await req.json();
  const result = await streamText({
    model: openai("gpt-4o"),
    messages,
    system: "你是一个专业的前端开发助手。",
    maxTokens: 2000,
  });
  return result.toDataStreamResponse();
}

Performance optimization must be tailored to specific scenarios—not every situation calls for aggressive optimization.

Best Practices

We can improve it in the following way:

javascript
"use client";
import { useChat } from "ai/react";

export function AIChat() {
  const { messages, input, handleInputChange, handleSubmit, isLoading } =
    useChat({
      api: "/api/chat",
    });
  return (
    <div className="chat-container">
      {messages.map((m) => (
        <div key={m.id} className={`message ${m.role}`}>
          <p>{m.content}</p>
        </div>
      ))}
      <form onSubmit={handleSubmit}>
        <input value={input} onChange={handleInputChange} />
        <button type="submit" disabled={isLoading}>
          发送
        </button>
      </form>
    </div>
  );
}

This approach has been running stably in production for over six months and has been battle-tested.

Summary

  • Stay up-to-date with community trends; technical solutions require continuous iteration

MIT Licensed