spring-ai-alibaba实现简易聊天项目

好了话不多说直接上代码

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com</groupId>
    <artifactId>chat-ai</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.0</version>
    </parent>
    
    <dependencies>

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

        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-starter</artifactId>
            <version>1.0.0-M5.1</version>
        </dependency>
    </dependencies>

    <repositories>
    // maven仓库配置下阿里云或其他仓库, 不然拉不到spring-boot-starter-parent
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

config

package com.chatai;

import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AiConfig {
    public static final String DEFAULT_PROMPT = "你是一个有才华的助手,请根据我的提问回答我问题尽可能的满足我,知道吗!";

    @Bean
    public ChatClient chatClient(ChatClient.Builder chatClientBuilder) {
        return chatClientBuilder
                .defaultSystem(DEFAULT_PROMPT)
                .defaultAdvisors(new MessageChatMemoryAdvisor(new InMemoryChatMemory()))
                .defaultAdvisors(new SimpleLoggerAdvisor())
                .defaultOptions(DashScopeChatOptions.builder().withTopP(0.7).build())
                .build();
    }
}

controller

package com.chatai.controller;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyChatController {

    @Autowired
    private ChatClient chatClient;

    @GetMapping("/chat")
    public String simpleChat(String query) {
        System.out.println("ask: " + query);
        String content = chatClient.prompt(query).call().content();
        System.out.println("answer: " + content);
        return content;
    }
}

yml

spring:
  application:
    name: ai-chat
  ai:
    dashscope:
      api-key: sk-ffd***** #这里换自己的key

好不好用看疗效

以下是问题以及通义千问的回复


ask: 我是一个小白,请你记住上下文,我需要你帮我实现一个ai客服系统 越详细越好
answer: 好的!作为一个小白,我会尽量用通俗易懂的语言来帮你理解如何实现一个AI客服系统,并且提供详细的步骤和注意事项。我会记住我们的对话上下文,随时为你解答疑问。


第一步:明确需求

在开始开发之前,我们需要先明确以下问题:

  1. 目标用户群体:你的AI客服是面向企业内部员工、普通消费者,还是其他特定人群?
  2. 应用场景:你的AI客服是用来处理常见问题(如订单查询、技术支持),还是需要更复杂的交互(如情感分析或推荐服务)?
  3. 支持的渠道:AI客服会在哪些平台上运行?例如网站、微信小程序、APP、电话等。
  4. 语言要求:需要支持哪些语言?是否需要多语言切换功能?
  5. 数据来源:是否有现成的知识库(如FAQ文档)可以供AI学习?如果没有,是否需要从头构建?

如果你能告诉我这些信息,我可以进一步定制化建议。如果暂时不清楚也没关系,我们可以假设一个通用场景来继续讨论。


第二步:技术选型

实现AI客服系统通常需要以下几个模块:

1. 自然语言处理(NLP)
  • AI客服的核心在于理解用户的意图并给出合适的回复。这需要用到NLP技术。
  • 推荐工具:
    • 开源框架:Hugging Face Transformers、spaCy、NLTK
    • 商业API:阿里云通义千问、百度文心一言、腾讯云小微
2. 对话管理
  • 对话管理负责跟踪用户与AI之间的对话历史,确保上下文连贯。
  • 可以使用状态机模型或基于机器学习的对话管理系统。
  • 推荐工具:Rasa、Dialogflow、Microsoft Bot Framework
3. 知识库
  • 知识库是AI客服回答问题的基础。可以是一个结构化的数据库,也可以是非结构化的文本文件。
  • 如果你有FAQ文档,可以直接导入到系统中;如果没有,可以通过爬虫抓取相关资料或者手动整理。
4. 集成平台
  • 根据你的需求选择合适的部署方式。例如:
    • 微信小程序:通过微信开放平台接入
    • 网站:嵌入HTML页面
    • APP:通过SDK集成
5. 数据分析
  • 收集用户反馈,优化AI的表现。可以记录用户的提问频率、未解决问题等数据。

第三步:具体实现流程

以下是实现AI客服系统的详细步骤:

1. 搭建环境
  • 安装Python(或其他编程语言)及必要的依赖库。
  • 示例代码安装命令(以Python为例):
    pip install transformers torch rasa
    
2. 训练NLP模型
  • 使用预训练模型(如BERT、GPT)微调以适应你的业务场景。
  • 如果没有大量标注数据,可以从简单的规则匹配开始(如关键词检索)。
  • 示例代码(基于Hugging Face Transformers):
    from transformers import pipeline
    
    # 加载问答模型
    nlp = pipeline("question-answering", model="distilbert-base-cased-distilled-squad")
    
    # 测试模型
    result = nlp({
        "question": "什么是AI客服系统?",
        "context": "AI客服系统是一种利用人工智能技术自动回答用户问题的系统。"
    })
    print(result["answer"])
    
3. 设计对话逻辑
  • 使用对话管理工具定义意图和响应规则。
  • 示例(基于Rasa):
    • 创建domain.yml文件定义意图和实体:
      intents:
        - greet
        - ask_question
      responses:
        utter_greet:
          - text: "你好!有什么我可以帮你的吗?"
      
    • 编写训练数据(nlu.md):
      ## intent:greet
      - 你好
      - 在吗
      - 请问
      
4. 构建知识库
  • 将FAQ整理为结构化格式(如JSON或CSV)。
  • 示例(JSON格式):
    [
      {"question": "如何重置密码?", "answer": "请点击登录页面的“忘记密码”链接."},
      {"question": "你们的营业时间是什么时候?", "answer": "我们每天24小时在线服务."}
    ]
    
5. 测试与优化
  • 部署到本地服务器进行测试。
  • 收集用户反馈,不断调整模型参数和对话逻辑。
6. 部署上线
  • 将AI客服集成到目标平台(如网站、APP)。
  • 确保系统稳定运行,并定期更新知识库。

第四步:常见问题解决

  1. 用户输入模糊怎么办?
    • 提供澄清问题的功能,例如:“您是指XX吗?”
  2. 无法回答的问题怎么办?
    • 转接人工客服,或者提示用户提供更多细节。
  3. 性能优化
    • 使用缓存机制减少重复计算。
    • 压缩模型大小以降低资源消耗。

第五步:后续扩展

随着系统的成熟,可以考虑以下功能扩展:

  1. 多轮对话:支持复杂场景下的多轮交互。
  2. 个性化推荐:根据用户历史行为推荐相关内容。
  3. 情感分析:检测用户情绪,改善用户体验。
  4. 语音支持:添加语音识别和合成功能。

如果你对某个环节感兴趣,或者有具体的技术问题,请告诉我,我会继续深入讲解!
ask: 帮我完善一下并用java 语言实现

这里调用等待超时了,可能是我没花钱的原因,不给我好的体验

2025-06-18T21:01:58.349+08:00  WARN 34269 --- [ai-chat] [nio-8080-exec-2] o.s.a.a.r.SpringAiRetryAutoConfiguration : Retry error. Retry count:1

java.net.SocketTimeoutException: Read timed out
	at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:288) ~[na:na]

ask: 帮我完善一下并用java 语言实现
answer: 好的!既然你希望用Java语言实现一个AI客服系统,我们可以从简单的版本开始,逐步完善功能。以下是一个基于Java的AI客服系统的详细设计和实现步骤。


第一步:明确需求

假设我们的AI客服需要满足以下基本功能:

  1. 用户输入问题。
  2. 系统根据预定义的知识库回答问题。
  3. 如果无法匹配到答案,则提示用户转接人工客服或提供更多细节。

第二步:设计知识库

我们可以将知识库设计为一个简单的键值对结构(Map<String, String>),其中:

  • Key 是用户可能提出的问题。
  • Value 是对应的答案。
示例知识库:
import java.util.HashMap;
import java.util.Map;

public class KnowledgeBase {
    private static Map<String, String> knowledgeBase = new HashMap<>();

    public static void initialize() {
        knowledgeBase.put("你好", "你好!有什么我可以帮你的吗?");
        knowledgeBase.put("如何重置密码", "请点击登录页面的“忘记密码”链接。");
        knowledgeBase.put("你们的营业时间是什么时候", "我们每天24小时在线服务。");
        knowledgeBase.put("找不到订单", "请检查您的邮箱或联系客服提供订单号。");
    }

    public static String getAnswer(String question) {
        return knowledgeBase.getOrDefault(question, null);
    }
}

第三步:实现对话逻辑

接下来,我们需要编写一个简单的对话管理器,用于处理用户的输入并返回相应的答案。

示例代码:
import java.util.Scanner;

public class ChatBot {
    public static void main(String[] args) {
        // 初始化知识库
        KnowledgeBase.initialize();

        // 创建扫描器对象以读取用户输入
        Scanner scanner = new Scanner(System.in);

        System.out.println("欢迎使用AI客服系统!请输入您的问题(输入'退出'结束对话):");

        while (true) {
            // 读取用户输入
            System.out.print("您:");
            String userInput = scanner.nextLine().trim();

            // 检查是否退出
            if (userInput.equalsIgnoreCase("退出")) {
                System.out.println("感谢使用AI客服系统,再见!");
                break;
            }

            // 获取答案
            String answer = KnowledgeBase.getAnswer(userInput);

            // 如果没有匹配的答案
            if (answer == null) {
                System.out.println("AI:抱歉,我无法理解您的问题。您可以尝试重新描述,或者联系人工客服。");
            } else {
                System.out.println("AI:" + answer);
            }
        }

        // 关闭扫描器
        scanner.close();
    }
}

第四步:运行程序

将上述代码保存为两个文件:

  1. KnowledgeBase.java
  2. ChatBot.java

然后编译并运行:

javac KnowledgeBase.java ChatBot.java
java ChatBot

运行后,你可以与AI客服进行简单的对话,例如:

欢迎使用AI客服系统!请输入您的问题(输入'退出'结束对话):
您:你好
AI:你好!有什么我可以帮你的吗?
您:如何重置密码
AI:请点击登录页面的“忘记密码”链接。
您:退出
感谢使用AI客服系统,再见!

第五步:功能扩展

为了使系统更加智能,可以考虑以下改进:

1. 模糊匹配

如果用户输入的问题与知识库中的问题不完全一致,可以通过模糊匹配算法找到最接近的答案。例如:

  • 使用Levenshtein距离计算字符串相似度。
  • 或者使用第三方库(如Apache Commons Text)。

示例代码(基于Levenshtein距离):

import org.apache.commons.text.similarity.LevenshteinDistance;

public class FuzzyMatcher {
    private static final int MAX_DISTANCE = 3;

    public static String fuzzyMatch(String question) {
        LevenshteinDistance levenshteinDistance = new LevenshteinDistance();

        for (String key : KnowledgeBase.knowledgeBase.keySet()) {
            int distance = levenshteinDistance.apply(question, key);
            if (distance <= MAX_DISTANCE) {
                return KnowledgeBase.knowledgeBase.get(key);
            }
        }
        return null;
    }
}

ChatBot中调用:

String answer = KnowledgeBase.getAnswer(userInput);
if (answer == null) {
    answer = FuzzyMatcher.fuzzyMatch(userInput);
}
2. 多轮对话

可以通过维护会话状态来支持多轮对话。例如:

  • 记录用户的上下文信息。
  • 根据上下文动态调整回复。
3. 语音支持

如果需要支持语音交互,可以集成Google Speech-to-Text API或阿里云语音识别服务。

4. 部署到Web平台

可以将AI客服封装为RESTful API,并通过Spring Boot框架部署到服务器上。


第六步:总结

以上是一个简单的Java版AI客服系统的实现方案。如果你希望进一步优化或添加新功能,请告诉我具体需求,我会继续为你完善!

回答结束了,下面是我的总结
可以看出来这个聊天的系统已经可以实现了,对于思考时间,以及答案来说可能并不完美,毕竟没花钱,也不挑理了。

tip:快去阿里云百炼大模型白嫖去吧,
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐