mistral模型+SpringAi实现FuncationCalling

1.获取mistral模型的api-key和base-url
2.yaml

spring:
  ai:
    mistralai:
      chat:
        base-url: http://localhost:11434
        options:
          model: mistral
      api-key: sk-50c1070552f249d8ad3c261b7bb3b369

3.Controller

    @GetMapping(value = "/chat/stream/function", produces = "text/html;charset=UTF-8")
    public Flux<String> chatStreamWithFunction() {
        String prompt = "/Joker/a/1.md,通过解析这个文档,这个文档中开发规范有哪些?";
        MistralAiChatOptions builder = MistralAiChatOptions.builder().withFunction("documentAnalyzerFunction").build();
        String content = model.call(new Prompt(prompt, builder)).getResult().getOutput().getContent();
        System.out.println(content);
        return null;
    }

4.Function

/**
 * 通过@Description描述函数的用途,这样ai在多个函数中可以根据描述进行选择。
 */
@Description("文档解析函数")
@Service
@Slf4j
public class DocumentAnalyzerFunction implements Function<DocumentAnalyzerFunction.Request, DocumentAnalyzerFunction.Response> {
    /**
     * 通过@JsonProperty声明属性名称和是否必填
     * 通过@JsonPropertyDescription描述属性的用途,这样ai可以提取出符合参数描述的内容。
     */
    @Data
    public static class Request {
        @JsonProperty(required = true, value = "path")
        @JsonPropertyDescription(value = "解析文档路径")
        String path;
    }

    public record Response(String result) {
    }

    @SneakyThrows
    @Override
    public Response apply(Request request) {
        // ai解析用户的提问得到path参数,使用tika读取本地文件获取内容。把读取到的内容再返回给ai作为上下文去回答用户的问题。
        TikaDocumentReader tikaDocumentReader = new TikaDocumentReader(new FileSystemResource(request.path));
        return new Response(tikaDocumentReader.read().get(0).getContent());
    }
}

5.由于此模型是我本地部署的7b大小的模型,所以不怎么智能,调取多次才有概率分析到我本地的文件,而且还不怎么正确
6.效果:
在这里插入图片描述

7.总结:
代码没有问题,主要是看调用的模型,支持的模型可以通过SpringAi官网中查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值