问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于Ollama和AnythingLLM的API调用(局域网内可用)

创作时间:
作者:
@小白创作中心

基于Ollama和AnythingLLM的API调用(局域网内可用)

引用
CSDN
1.
https://m.blog.csdn.net/weixin_43807749/article/details/146036679

在局域网环境下,如何实现Ollama和AnythingLLM的API调用?本文将为你详细介绍配置步骤和使用方法,并提供Python代码示例。

前言

上篇博客中,尝试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.服务器的防火墙开放端口

步骤和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模型,当你问的问题多了,后面他会胡乱作答,答非所问。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号