模型都开源了,你还在花钱对接第三方AI?

1,355 阅读2分钟

大家好,我是程序员可乐,专注于Spring生态,给大家带来更便捷的开发体验。

wechat 公众号 : 【全栈程序员可乐】

最近可谓是AI的天下,以chatGPT为主导的AI模型在国内遍地开花,如阿里的通义千问、百度的文心一言、清华的智谱AI、Kimi等。同时,他们也提供了第三方接口允许开发者们整合在自己的产品中,但是他们得收费啊~

但是,收费的并不是他们的模型,而是他们的产品,我们并不需要使用他们的产品才能用他们的模型,我们完全可以将他们的模型下载到本地,依然能够达到AI的效果,应该怎么做呢?

Ollama

Ollama可以理解为是一个模型驱动,有了Ollama,我们可以将任何模型放在Ollama中进行调用,下面我们就来演示一下Ollama的具体使用:

  1. 下载Ollama:ollama.com/

image-20241010142810759

按照指示安装完成之后,我们可以看一下右上角的Models,看看Ollama支持哪些模型:

image-20241010142947596

每个模型都各有千秋,但阿里的qwen2.5更适合中国宝宝体质,所以我们今天选择用qwen2.5来测试。

image-20241010143509425

命令很简单,我们只需要在控制台输入:ollama run qwen2.5即可(默认为7b)

image-20241010143646890

模型较大,等待模型下载完毕后就可以使用了。(我先去打把王者)

虽然这把输了,但是依然不影响我继续写博客!!!

image-20241010145510937

下载完成之后,我们就可以和AI对话了

image-20241010145548819

Spring AI

我们需要将对话的方式从控制台集成到我们的应用系统中,Spring AI就派上用场了

引入Spring AI:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

<repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
</repositories>

配置文件:

spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.options.model=qwen2.5
spring.ai.ollama.chat.options.temperature=0.7

创建接口:

@RestController
public class ChatController {
    private final OllamaChatModel chatModel;

    @Autowired
    public ChatController(OllamaChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map<String,String> generate(@RequestParam(value = "message") String message) {
        return Map.of("generation", chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
    public Flux<ChatResponse> generateStream(@RequestParam(value = "message") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return chatModel.stream(prompt).map(res -> res.getResult().getOutput().getContent());
    }
}

测试效果:

image-20241010152044640

流式传输:

image-20241010152620099

至此,我们可以在本地搭建模型并运用在自己的项目中了,完全不需要第三方的介入,实现AI本地化。

关于AI的具体操作,我会在下一章讲解~~