前言

上篇博客中,尝试Windows本地部署Ollama+DeepSeek-R1-7b+AnythingLLM,成功实现了本地知识库的检索。实际使用中,往往将DeepSeek装在性能好的机器上,其他机器只需远程访问。因此,本文将讨论如何调用API。


一、Ollama的API

1.配置

1.1 环境变量

为了实现远程访问,需要在环境变量中新建以下指令,以允许Ollama在局域网内被访问:

OLLAMA_HOST "0.0.0.0"
OLLAMA_ORIGINS "*"

重启Ollama服务
在这里插入图片描述

1.2 服务器的防火墙开放端口

为了实现在局域网内,供他人使用,需要将Ollama的端口开放。步骤如下:

步骤一、打开防火墙和网络保护,并进入高级设置

在这里插入图片描述
在这里插入图片描述

步骤二、点击入站规则并新建规则

在这里插入图片描述

步骤三、开放端口

规则类型选择“端口”,下一页
在这里插入图片描述
协议和端口选择TCP,特定本地端口填入11434(一般默认是这个),下一页,下一页,下一页,最后名字自取
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.使用

在客户端上(台式机A),尝试使用python调用服务器(台式机B)上的Ollama的api(当然要保证服务器上的Ollama处于正常运行)

import requests

url = "http://your_ip:11434/api/generate"  # your_ip 替换为 Ollama 所在的服务器 IP
payload = {
    "model": "deepseek-r1:7b",
    "prompt": "请介绍一下自己?",
    "stream": False
}

response = requests.post(url, json=payload)

if response.ok:
    print("API 响应:" + response.text)
else:
    print(f"请求失败,状态码:{response.status_code}")

运行结果:
在这里插入图片描述

二、AnythingLLM的API调用

1.配置

1.1进入软件设置,打开可被LAN访问选项,然后重启软件

在这里插入图片描述
在PowerShell中输入下行指令,以查看是否设置成功。如果有0.0.0.0:3001,说明成功

netstat -ano | Select-String ":3001"

在这里插入图片描述

1.2服务器的防火墙开放端口

步骤和Ollama的一样,只不过将端口号改成3001。另外注意将下图红框中的两个AnythingLLM规则禁用,不然其他机器无法使用api,会报network error(找了一下午才找出原因。。。)
【2025.3.7更新】今天换了下服务器的ip又出现网络问题,所以提供一个最新的解决方法。有时候规则生效需要重启防火墙,在powershell中,重新启动防火墙:

netsh advfirewall reset

上述指令的潜在风险:
–丢失自定义规则 :执行此命令后,所有手动配置的防火墙规则都会被删除,无法恢复。因此,在运行之前建议备份现有规则 。
–影响网络连接 :如果某些应用程序依赖于特定的防火墙规则(如开放端口),这些规则在重置后将失效,可能导致应用程序无法正常工作。

然后重新放行 3001 端口:

netsh advfirewall firewall add rule name="Allow 3001" dir=in action=allow protocol=TCP localport=3001

在这里插入图片描述

2.使用

在客户端上(台式机A),尝试使用python调用服务器(台式机B)上的AnythingLLM的api:

import requests


def ask_anythingllm(question, slug, api_key):
    url = f"http://your_ip:3001/api/v1/workspace/{slug}/chat" #替换成你自己的服务器ip

    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
        "accept": "application/json"
    }
    data = {
        "message": question,
        "mode": "chat"  # 可选chat/query模式
    }
    response = requests.post(url, headers=headers, json=data)
    if response.status_code == 200:
        result = response.json()
        # 提取有效回答(去除思考过程)
        answer = result['textResponse'].split('</think>')[-1].strip()
        sources = result.get('sources', [])
        return answer, sources
    else:
        return f"Error: {response.text}", []

# 示例调用
api_key = "apikey"  #替换成你自己的apikey
slug = "test12"
question = "2025年3月4日的头条新闻有哪些"
answer, sources = ask_anythingllm(question, slug, api_key)
print("回答:", answer)
print("来源:", [src['title'] for src in sources])

结果如下:
在这里插入图片描述

3.关于AnythingLLM的api详解

参考文献:https://zhuanlan.zhihu.com/p/24228685499
AnythingLLM的官方文档提供了api:
在这里插入图片描述
在这里插入图片描述

3.1 首先需要生成密匙,然后点击绿色的Authorize登陆:

在这里插入图片描述
在这里插入图片描述

3.2 列出所有的workspace并找到slug:

在这里插入图片描述

3.3 在一个workspace中进行chat

在这里插入图片描述
响应:
在这里插入图片描述


总结

以上就是利用Ollama和AnythingLLM的API调用的内容。笔者在实际使用中,发现了一些问题:
第一,sources会跟随问答传递,如果sources数据量很大,就麻烦了;
第二,前端调用api时,对于同一个对话的上下文,需要进一步优化;
第三,对于本文使用的deepseek-r1:7b模型,当你问的问题多了,后面他会胡乱作答,答非所问。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐