chatgpt-on-wechat
chatgpt-on-wechat copied to clipboard
支持Ollama部署的大模型服务
⚠️ 搜索是否存在类似issue
- [X] 我已经搜索过issues和disscussions,没有发现相似issue
总结
Ollama本地服务目前支持了Qwen、Gemma、Mistral、Codellama等多种大模型,可参考Ollama支持的模型
这里我在现有的项目中做了如下更改以支持Ollama服务本地部署在本地的所有大模型。
Step1:
const.py文件中增加配置:OLLAMA = "ollama"
MODEL_LIST = [... , OLLAMA]
Step2:
创建 /bot/ollama/ollama_bot.py
from bot.bot import Bot
from bot.session_manager import SessionManager
from bridge.context import ContextType, Context
from bridge.reply import Reply, ReplyType
from common.log import logger
from config import conf
from bot.baidu.baidu_wenxin_session import BaiduWenxinSession
import ollama
# Ollama对话模型API (可用)
class OllamaBot(Bot):
def __init__(self):
super().__init__()
self.model = conf().get("model") or "gemma:7b"
# 复用文心的token计算方式
self.sessions = SessionManager(BaiduWenxinSession, model=conf().get("model") or "gemma:7b")
def reply(self, query, context: Context = None) -> Reply:
try:
if context.type != ContextType.TEXT:
logger.warn(f"[Ollama] Unsupported message type, type={context.type}")
return Reply(ReplyType.TEXT, None)
logger.info(f"[Ollama] query={query}")
session_id = context["session_id"]
session = self.sessions.session_query(query, session_id)
# 这里直接调用本地的Ollama服务
response = ollama.chat(
model=self.model,
messages=self.filter_messages(session.messages))
reply_text = response['message']['content']
self.sessions.session_reply(reply_text, session_id)
logger.info(f"[Ollama] reply={reply_text}")
return Reply(ReplyType.TEXT, reply_text)
except Exception as e:
logger.error("[Ollama] fetch reply error, may contain unsafe content")
logger.error(e)
return Reply(ReplyType.ERROR, "invoke [Ollama] api failed!")
def _convert_to_gemini_messages(self, messages: list):
res = []
for msg in messages:
if msg.get("role") == "user":
role = "user"
elif msg.get("role") == "assistant":
role = "model"
else:
continue
res.append({
"role": role,
"parts": [{"text": msg.get("content")}]
})
return res
@staticmethod
def filter_messages(messages: list):
res = []
turn = "user"
if not messages:
return res
for i in range(len(messages) - 1, -1, -1):
message = messages[i]
if message.get("role") != turn:
continue
res.insert(0, message)
if turn == "user":
turn = "assistant"
elif turn == "assistant":
turn = "user"
return res
Step3:
修改bot_factory.py处理如下
def create_bot(bot_type):
elif bot_type == const.OLLAMA:
from bot.ollama.ollama_bot import OllamaBot
return OllamaBot()
raise RuntimeError
Step4:
requirements.txt增加ollama
Step5:
修改bridge.py
self.btype = {
#....修改"chat": const.CHATGPT为下面.....
"chat": conf().get("bot_type", const.CHATGPT)
...
}
Step6:
config.py文件中的available_setting增加配置:"bot_type":"ollama",修改"model": "gemma:7b "
Ollama支持的所有模型,执行命令: ollama list,然后将你想要用的NAME复制到model中,例如这里的NAME为gemma:7b 。
举例
ollama list
涉及修改的文件:
动机
Ollama支持将大部分模型能在本地快速部署或者服务端部署并运行,通过对Ollama的支持,能够减少对ChatGPT的依赖。能够将这个项目的底层大模型支持范围拓展的更广阔。
针对STEP6, 建议改成不需要修改MODEL,就用默认的gpt3.5 turbo. LM STUDIO做服务器时, COW只需要修改API和BASE,可以工作. 每次换模型还需要改MODEL,太麻烦了. @kaina404
STEP 1 除了你写的, # bot_type下面不需要加 OLLAMA="ollama"吗? @kaina404
我这边启动显示错误
Traceback (most recent call last):
File "/Users/taozhiyu/Downloads/chatgpt-on-wechat/app.py", line 8, in
我修改的const.py如下
bot_type
OPEN_AI = "openAI" CHATGPT = "chatGPT" BAIDU = "baidu" XUNFEI = "xunfei" CHATGPTONAZURE = "chatGPTOnAzure" LINKAI = "linkai" CLAUDEAI = "claude" CLAUDEAPI= "claudeAPI" QWEN = "qwen" GEMINI = "gemini" ZHIPU_AI = "glm-4" MOONSHOT = "moonshot"
model
CLAUDE3 = "claude-3-opus-20240229" GPT35 = "gpt-3.5-turbo" GPT4 = "gpt-4" GPT4_TURBO_PREVIEW = "gpt-4-0125-preview" GPT4_VISION_PREVIEW = "gpt-4-vision-preview" WHISPER_1 = "whisper-1" TTS_1 = "tts-1" TTS_1_HD = "tts-1-hd"
MODEL_LIST = ["gpt-3.5-turbo", "gpt-3.5-turbo-16k", "gpt-4", "wenxin", "wenxin-4", "xunfei", "claude","claude-3-opus-20240229", "gpt-4-turbo", "gpt-4-turbo-preview", "gpt-4-1106-preview", GPT4_TURBO_PREVIEW, QWEN, GEMINI, ZHIPU_AI, MOONSHOT, OLLAMA]
channel
FEISHU = "feishu" DINGTALK = "dingtalk"
STEP 5少了逗号
我这边解决上面问题后运行成功. 建议吧STEP 6的model 解决下. 最好和lm studio一样, 忽略model, 否则每次换模型都改,太麻烦了.
成功运行截图
STEP 1 除了你写的, # bot_type下面不需要加 OLLAMA="ollama"吗? @kaina404
是的需要增加OLLAMA="ollama"
STEP 6 我没有在config.py里修改model, 只是在config.json里面按你说的修改了model. 运行成功. 还是如上说的,是否能像LM STUDIO, 用默认的模型设置
STEP 6 我没有在config.py里修改model, 只是在config.json里面按你说的修改了model. 运行成功. 还是如上说的,是否能像LM STUDIO, 用默认的模型设置 这里的config.json需要增加
"bot_type": "ollama", "model": "qwen:7b",
@zhayujie 建议合并代码,这样太好了.谢谢 @kaina404
针对STEP6, 建议改成不需要修改MODEL,就用默认的gpt3.5 turbo. LM STUDIO做服务器时, COW只需要修改API和BASE,可以工作. 每次换模型还需要改MODEL,太麻烦了. @kaina404
这里是为了将默认的chat模型切换到ollama部署支持的模型,当然你可以直接修改bot_type为之前的chat模型也是可以的。当你修改了bot_type然后,就可以修改model对应的值,这样就可以直接切换ollama支持的其他模型了,例如:Gemma、qwen、llava、mistral等等
STEP 6 我没有在config.py里修改model, 只是在config.json里面按你说的修改了model. 运行成功. 还是如上说的,是否能像LM STUDIO, 用默认的模型设置 这里的config.json需要增加
"bot_type": "ollama", "model": "qwen:7b",![]()
我没有在config.py里面改model, 如图改的,运行成功
config.py
config.py只是一个示例,真正的修改配置的地方是在config.json里面的,你修改的没错。
针对STEP6, 建议改成不需要修改MODEL,就用默认的gpt3.5 turbo. LM STUDIO做服务器时, COW只需要修改API和BASE,可以工作. 每次换模型还需要改MODEL,太麻烦了. @kaina404
这里是为了将默认的chat模型切换到ollama部署支持的模型,当然你可以直接修改bot_type为之前的chat模型也是可以的。当你修改了bot_type然后,就可以修改model对应的值,这样就可以直接切换ollama支持的其他模型了,例如:Gemma、qwen、llava、mistral等等
好复杂. 我用 lm studio + cow, 只需要修改config.json的api key 和api base,不需要改 model. 你看ollama + cow是否也可以这样.
修改的文件内容:
新增的文件--> ollam_bot.py 文件
@taozhiyuai 这是我本地的修改。
@kaina404 还遇到个问题.因为我是COW ,OLLAMA本机MAC环境部署. 我盒盖休息时,COW就断了.再也不能恢复.但是openwebui就可以直接回应消息. 能否解决这个问题呢?
@kaina404 还遇到个问题.因为我是COW ,OLLAMA本机MAC环境部署. 我盒盖休息时,COW就断了.再也不能恢复.但是openwebui就可以直接回应消息. 能否解决这个问题呢?
我这里是mac一直处理息屏状态,但是不会断掉的。你看看你的电源/电池相关的设置。
@taozhiyuai 这是我本地的修改。
能否实现像LM STUDIO一样,不用修改MODEL呢?
这个能解决吗?
@taozhiyuai 这是我本地的修改。
能否实现像LM STUDIO一样,不用修改MODEL呢?
这个能解决吗?
没有使用过LLM STUDIO ....
行吧.够好了.谢谢.希望还有其他开发者能进一步完善
新版本的ollama的API变了,变成了http://localhost:11434/api/chat,我这边照着API填写进去,发送文字没回应,大佬有解决么
有反应了,但是提示 [ERROR] invoke [Ollama] api failed!
有反应了,但是提示 [ERROR] invoke [Ollama] api failed! @jinghunsanzu
https://github.com/kaina404/chatgpt-on-wechat/tree/feature/ollama_support
有反应了,但是提示 [ERROR] invoke [Ollama] api failed! @jinghunsanzu
https://github.com/kaina404/chatgpt-on-wechat/tree/feature/ollama_support
快让cow合并这个代码吧
@zhayujie @6vision 麻烦尽快合并这个代码.实际使用没有问题.
请问使用ollama 本地大语言模型, 是否支持运行插件,我直接修改api base 和chatgpt api key, 可以对话,但是无法调用插件
请问使用ollama 本地大语言模型, 是否支持运行插件,我直接修改api base 和chatgpt api key, 可以对话,但是无法调用插件
还真没测试过。
试了,总是失败,我是docker的ollama,端口给的5XXX
试了,总是失败,我是docker的ollama,端口给的5XXX
什么错误呢?