Tool Calling

简介

如果我们现在问我们前面的智能客服说:我现在下单一杯美式几点几分可以做好你会发现他没办法很好的回答问题。因为模型能力是有限的(比如不知道当前时间),如果想要让AI应用具备更强的功能,calling。相当于是给模型提供一些工具,当模型判断需要使用工具的时候就会进行使用Tool Calling

Tool Calling 原理

image.png

其实就是把工具的name,description,input schema等信息也放入模型的请求中。模型如果觉得需要调用工具就会返回相关的工具调用消息,这个时候SpringAI会基于这个消息去调用工具,得到一个工具调用的结果给到模型模型再综合这个调用结果返回最终的答案。

使用方法

 @Tool(description="通过时区id获取当前时间")
    public String getTimeByZoneId(@ToolParam(description = "时区id, 如Asia/Shanghai") String zoneId) {
        ZoneId zid = ZoneId.of(zoneId);
        ZonedDateTime zonedDateTime = ZonedDateTime.now(zid);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm: ss 2");
        return zonedDateTime.format(formatter);
    }

  public ToolController(VectorStore vectorStore, ChatClient.Builder chatClientBuilder) {
        this.vectorStore = vectorStore;

        VectorStoreDocumentRetriever vectorStoreDocumentRetriever = VectorStoreDocumentRetriever.builder()
                .vectorStore(vectorStore)
                .topK(3)
                .similarityThreshold(0.5)
                .build();
        RetrievalAugmentationAdvisor retrievalAugmentationAdvisor = RetrievalAugmentationAdvisor.builder()
                .documentRetriever(vectorStoreDocumentRetriever)
                .build();

        this.chatClient = chatClientBuilder
                .defaultAdvisors(retrievalAugmentationAdvisor)
                //添加工具类
                .defaultTools(new TimeTool())
                .build();
    }

  /**
     * 智能客服实现RAG智能问答
     * @param query
     * @return
     */
    @PostMapping("/rag-ask")
    public String ragAskQuestion(@RequestParam(name = "query") String query){
        return chatClient.prompt()
                .system("你是一个智能客服助手,回答客户问答的问题")
                .user(query)
                .call()
                .content();
    }

调用方法后,直接进入到工具类对应方法


image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容