SpringBoot整合AI:5行代码接入大模型API实战


一、SpringAI快速入门指南

1.1 三步接入OpenAI

// build.gradle
dependencies {
    implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter:0.8.0'
}
// 核心调用代码
@RestController
public class AIController {
    @Autowired
    private OpenAiChatClient chatClient;

    @GetMapping("/ask")
    public String ask(String question) {
        return chatClient.call(question); // 实际仅需1行代码
    }
}
1.2 多模型支持配置
# application.yml
spring:
  ai:
    openai:
      api-key: ${OPENAI_KEY}
    qianwen:
      access-key: ${QW_ACCESS_KEY}
      secret-key: ${QW_SECRET_KEY}

二、企业级Prompt工程模板

2.1 角色预设模板

@Bean
public PromptTemplate rolePrompt() {
    String template = """
        你是一位资深Java架构师,请用中文回答技术问题。
        要求:
        1. 使用Markdown格式
        2. 包含代码示例
        3. 给出适用场景说明
        问题:{question}
        """;
    return new PromptTemplate(template);
}

2.2 结构化输出控制

@GetMapping("/design")
public String systemDesign(String requirement) {
    Prompt prompt = new Prompt(new UserMessage(requirement),
        new PromptOptions(List.of(
            new GenerationOptions.Builder()
                .withTemperature(0.3)
                .withMaxTokens(1000)
                .build()
        )));
    
    return chatClient.call(prompt).getResult().getOutput().getContent();
}

三、流式响应实现

3.1 类ChatGPT效果实现

@GetMapping(path = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamChat(String question) {
    return Flux.create(sink -> {
        chatClient.stream(new Prompt(question))
            .subscribe(chatResponse -> {
                chatResponse.getResults().forEach(result -> 
                    sink.next(result.getOutput().getContent())
                );
            }, sink::error, sink::complete);
    });
}

3.2 前端对接方案

// React示例
const eventSource = new EventSource('/stream?question=' + question);
eventSource.onmessage = (e) => {
    setContent(prev => prev + e.data); 
};

四、企业级AI中台架构

4.1 LangChain+本地知识库

通用问题
领域知识
用户提问
路由判断
大模型API
向量数据库检索
知识增强Prompt
响应输出

4.2 向量数据库集成

// Spring Data ChromaDB示例
@Repository
public interface DocRepository extends ChromaRepository<Document, String> {
    List<Document> findByEmbeddingSimilarity(float[] vector, int topK);
}

@Service
public class RetrievalService {
    public String query(String question) {
        float[] embedding = embeddingClient.embed(question);
        return docRepository.findByEmbeddingSimilarity(embedding, 3)
            .stream().map(Document::getContent).collect(Collectors.joining("\n"));
    }
}

五、成本控制策略

5.1 计费监控看板

指标计算公式报警阈值
单日费用∑(token数 × 单价)>$50/天
平均token/请求总token数 / 请求数>2000
错误成本失败请求数 × 平均token成本>$5/天

5.2 分级限流策略

@Configuration
public class RateLimitConfig {
    
    @Bean
    public RateLimiter openaiLimiter() {
        return RateLimiter.create(100); // 100 QPM
    }

    @Bean
    public RateLimiter qianwenLimiter() {
        return RateLimiter.create(500); // 500 QPM
    }
}

六、开源替代方案(本地部署)

6.1 Ollama本地部署

# 启动Ollama服务
docker run -d -v /data/ollama:/root/.ollama -p 11434:11434 ollama/ollama

# 下载中文模型
ollama pull qwen:7b-chat

# SpringBoot配置
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.model=qwen:7b-chat

6.2 性能对比

指标OpenAI GPT-4通义千问Ollama本地
响应时间420ms380ms2100ms
准确率92%88%76%
单次成本$0.06$0.02$0.0
最大token128k10k4k

七、实战选择题

❓ 当需要处理专业领域知识时,最优方案是:
A) 直接调用GPT-4
B) 本地模型微调
C) LangChain+向量检索
D) 人工编写规则引擎

下期预告:

《SpringBoot 3.2虚拟线程压测:Tomcat吞吐量提升800%的奥秘》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值