首页 > 软件教程 > DeepSeek funcation call尝试

DeepSeek funcation call尝试

时间:25-04-23

本文主要探讨了如何在ollama + deepseek-r1的环境中尝试function call功能。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

步骤

首先,我们自定义了一个JavaScript函数,代码如下:

@Service@Slf4j@Description("根据用户的查询生成天气相关信息")public class DemoFunction implements Function<DemoFunction.Request, DemoFunction.Response> {    @JsonClassDescription("用户的查询")    public record Request(            @JsonProperty(required = true, value = "query")             @JsonPropertyDescription("用户的查询") String query) {    }    @JsonClassDescription("天气信息")    public record Response(String result) {    }    @Override    public Response apply(Request s) {        log.info("call demoFunction query:{}", s.query);        return new Response("今天深圳天气晴朗");    }}
登录后复制

接着,我们编写了API调用代码:

@GetMapping("/function-all")public String functionCall(HttpServletResponse response, @RequestParam("query") String query) {    response.setCharacterEncoding("UTF-8");    OllamaOptions customOptions = OllamaOptions.builder()            .topP(0.7)            .temperature(0.8)            .function("demoFunction")            .build();    return ollamaChatModel.call(new Prompt(Arrays.asList(new SystemMessage("请基于用户的查询调用function来回答"), new UserMessage(query)), customOptions)).getResult().getOutput().getContent();}
登录后复制

然而,在实际运行中,我们遇到了以下错误:

2025-02-21T17:45:28.633+08:00 ERROR 26728 --- [spring-ai-alibaba-ollama-chat-model-example] [io-10005-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.RuntimeException: [400] Bad Request - {"error":"registry.ollama.ai/library/deepseek-r1:8b does not support tools"}] with root causejava.lang.RuntimeException: [400] Bad Request - {"error":"registry.ollama.ai/library/deepseek-r1:8b does not support tools"}
登录后复制

通过查阅官方文档,我们发现当前版本的deepseek-chat模型在Function Calling方面的功能不稳定,可能会导致循环调用或空响应。官方正在积极修复,预计在下一个版本中解决。

此外,DeepSeek R1模型本身并不原生支持function calling或结构化输出,主要优化用于推理任务(如数学、代码和STEM),并遵循对话格式。

为了解决这个问题,我们尝试切换模型到MFDoom/deepseek-r1-tool-calling,并将spring.ai.ollama.chat.model设置为MFDoom/deepseek-r1-tool-calling:1.5b。经过重新运行,发现该模型支持function calling。

以下是步骤的详细解释:

  1. 确定查询:用户的查询是“今天天气怎么样”。
  2. 确定所需参数:工具期望一个名为query的字符串参数。
  3. 根据查询生成输出:使用提供的demoFunction函数,我们可以根据查询生成天气信息。
  4. 构建输出字符串:将占位符替换为用户的具体查询,并按要求格式化输出。

最终输出如下:

{"result":"今天深圳天气晴朗"}
登录后复制

尽管如此,实际操作中prompt的书写仍然是一个挑战,书写不当可能会导致多次function调用。

总结

目前,DeepSeek的r1模型不支持function call,尽管有第三方改造支持,但效果还不太理想。建议等到官方支持后再尝试。

参考文档

  • 使用spring-ai-alibaba本地集成ollama+deepseek
  • Function calling #9
  • Function Calling
  • MFDoom/deepseek-r1-tool-calling
  • 终于有一家支持 Function Call 了!!!

DeepSeek funcation call尝试


这就是DeepSeek funcation call尝试的全部内容了,希望以上内容对小伙伴们有所帮助,更多详情可以关注我们的菜鸟游戏和软件相关专区,更多攻略和教程等你发现!

热搜     |     排行     |     热点     |     话题     |     标签

手机版 | 电脑版 | 客户端

湘ICP备2022003375号-1

本站所有软件,来自于互联网或网友上传,版权属原著所有,如有需要请购买正版。如有侵权,敬请来信联系我们,cn486com@outlook.com 我们立刻删除。