-
Notifications
You must be signed in to change notification settings - Fork 509
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用 Higress + LobeChat 快速搭建私人GPT助理(支持 RAG、联网) #1023
Comments
😀 |
@dpy013 进higress容器看下/var/log/higress/gateway.log |
@dpy013 你是ARM处理器吗,刚刚支持了下多架构镜像,可以重新拉取一下镜像试试 |
不是,是x86的腾讯云vps |
@dpy013 给错日志了,docker exec -it ai-higress-1 bash 然后cat /var/log/higress/gateway.log |
gateway.log |
没看到什么错误啊 |
@dpy013 怀疑是配置文件没有权限写入,你按这个步骤试一下: # 创建一个工作目录,以及其下的配置目录
mkdir -p higress/data
# 进入工作目录
cd higress 在工作目录下创建这份 docker-compose.yaml: version: '3.9'
networks:
higress-net:
external: false
services:
higress:
image: higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/all-in-one:1.4.0
environment:
- CONFIG_TEMPLATE=ai-proxy
- DEFAULT_AI_SERVICE=qwen
- DASHSCOPE_API_KEY=YOUR_DASHSCOPE_API_KEY
networks:
- higress-net
ports:
- "8080:8080/tcp"
- "8001:8001/tcp"
volumes:
- ./data:/data
restart: always
lobechat:
image: lobehub/lobe-chat
environment:
- CODE=访问密码
- OPENAI_API_KEY=unused
- OPENAI_PROXY_URL=http://higress:8080/v1
networks:
- higress-net
ports:
- "3210:3210/tcp"
restart: always |
@haifzhu 定位到是新版本镜像的配置问题,你重新执行一下 |
参加编程挑战赛的朋友可以用这个issue里的方式做本地测试,给AI代理插件配上以下配置: provider:
apiTokens:
- "你的Dashscope API Key"
modelMapping:
'*': "qwen-long"
gpt-4: "qwen-max"
gpt-4-turbo: "qwen-max"
gpt-4o: "qwen-max"
type: "qwen"
qwenFileIds:
# 比赛使用的文档,需要自己上传获取fileid,具体看赛事说明文档
- "file-fe-xxxxx" 使用lobechat 对话的效果(注意选择gpt-3.5,才能映射到qwen-long): |
有直接操作ingress添加ai代理的例子吗? |
@pepesi 你用这个模式启动,在ingresses目录下就是ingress文件了,mcpbridges目录下是服务配置,wasmplugins目录下是插件配置,都跟k8s下的配置一样的 |
报错400, 从错误日志看,似乎是网关返回的,没到上游去
|
@pepesi 访问日志发来看看 |
response flag = DPE 是 downstream protocol 客户端协议错误 response flag = NC 是 No Cluster 对应路由的目标服务发现不了 |
现在是UF了…… |
可以了,是我的注解写错了导致的
|
想问一下,我基于该环境测试。并且为了对接云服务,封装了http请求之后(用的net/http),编译不通过,看样子可能是使用协程导致的(如下图)。这个有什么简单的解决方法呢,我看到有tinygo封装的http库,但是似乎需要注册到higress的第三方库列表里比较好对吗? |
@Suchun-sv 现在 tinygo 编译 wasm 目标还不支持开启schedule,没法支持goroutine |
哦哦,明白了,感谢! |
更新一下 lobe-chat 镜像到最新版本 registry.cn-hangzhou.aliyuncs.com/2456868764/lobe-chat:v1.1.3, 避免下载不了 docker.io 镜像 # 创建一个工作目录,以及其下的配置目录
mkdir -p higress/data
# 进入工作目录
cd higress 在工作目录下创建这份 docker-compose.yaml: version: '3.9'
networks:
higress-net:
external: false
services:
higress:
image: higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/all-in-one:1.4.1
environment:
- CONFIG_TEMPLATE=ai-proxy
- DEFAULT_AI_SERVICE=qwen
- DASHSCOPE_API_KEY=YOUR_DASHSCOPE_API_KEY
networks:
- higress-net
ports:
- "8080:8080/tcp"
- "8001:8001/tcp"
volumes:
- ./data:/data
restart: always
lobechat:
image: registry.cn-hangzhou.aliyuncs.com/2456868764/lobe-chat:v1.1.3
environment:
- ACCESS_CODE=lobe66
- OPENAI_API_KEY=sk-unused
- OPENAI_PROXY_URL=http://higress:8080/v1
networks:
- higress-net
ports:
- "3210:3210/tcp"
restart: always |
@jaymie9019 现在higress的默认参数,请求body超过32kb会有问题,可以先参考这个文档,给configmaps目录下的higress-config设置connectionBufferLimits: 后续会在插件内缓存,不用网关的buffer,更灵活一些 cc @CH3CHO |
@jaymie9019 你可以进容器,看下/var/log/higress/gateway.log的日志确认下,response_code是否是413 |
已经配置,并且重启了 higress 的 pod, 问题并没有得到解决 日志中的 response_code 正常,仍然是 200
|
@jaymie9019 给容器加一下这个环境变量:GATEWAY_COMPONENT_LOG_LEVEL=misc:error,wasm:debug 请求后会有日志输出,注意下日志内容脱敏后发一下看看响应 |
@jaymie9019 你的higress镜像是 higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/all-in-one:1.4.1 吗,我试了多次没问题: |
基于这套测试环境,目前每次更新代码需要1.重新编译wasm插件,2.打包并发布docker镜像,3.在web界面删除并重新配置插件是吗?其中第一步和第二步都比较方便自动化,第三步有什么比较好的自动化测试思路吗? |
不需要这么麻烦,可以参考这篇文档:https://higress.io/zh-cn/docs/user/wasm-go#%E4%B8%89%E6%9C%AC%E5%9C%B0%E8%B0%83%E8%AF%95 |
higress 目录下有个 wasmplugins 子目录,里面有自己插件对应的 yaml 文件,直接改里面的镜像地址就行 |
老师,这个请求外部服务怎么协调多个顺序的服务呢,以请求 A,请求B,请求C为例,我需要的逻辑是等到请求A结束后再开始请求B。然而ai-cache的示例代码里只给出了包含一个异步请求时候的处理逻辑(例如对redis的处理是在外部暂停返回types.ActionPause, 再在回调函数中根据结果ResumeHttpRequest),如果多个请求是用信号变量来控制,还是可以在main函数里注册多个函数呢? |
@Suchun-sv 需要在 A 响应的 callback 里发起请求 B |
请问一下ai-proxy插件能支持类似one-api的多渠道分流吗? 例如在同一个provider下配置多个不同的type和参数映射 |
@KagaJiankui 可以的,这个对于网关来说是通用能力,创建路由通过Header匹配Authorization Header走不同路由就好了,不同的路由可以配不同的ai-proxy配置 |
@johnlanni 按照配置文件在windows docker-desktop (wsl2) 上docker-compose, lobechat和higress gateway.log报错如下: {
"error": {
"headers": {
"content-length": "0",
"date": "Tue, 25 Jun 2024 11:37:47 GMT",
"server": "istio-envoy"
},
"stack": "Error: 404 status code (no body)\n at eE.generate (/app/.next/server/edge-chunks/465.js:4:1790)\n at sx.makeStatusError (/app/.next/server/edge-chunks/465.js:4:14583)\n at sx.makeRequest (/app/.next/server/edge-chunks/465.js:4:15506)\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async Object.chat (/app/.next/server/edge-chunks/305.js:7:7669)\n at async /app/.next/server/app/api/chat/[provider]/route.js:1:1473\n at async /app/.next/server/edge-chunks/614.js:6:67058\n at async $.execute (/app/.next/server/edge-chunks/614.js:6:64768)\n at async $.handle (/app/.next/server/edge-chunks/614.js:6:68325)\n at async e_.handler (/app/.next/server/edge-chunks/614.js:7:33025)",
"status": 404
},
"endpoint": "http://higress:****/v1",
"provider": "openai"
} {
"authority": "higress:8080",
"bytes_received": "929",
"bytes_sent": "0",
"downstream_local_address": "172.20.0.3:8080",
"downstream_remote_address": "172.20.0.2:34694",
"duration": "10",
"istio_policy_status": "-",
"method": "POST",
"path": "/v1/chat/completions",
"protocol": "HTTP/1.1",
"request_id": "a5c006fc-6a11-4492-a0ff-e0dc30b7fd45",
"requested_server_name": "-",
"response_code": "404",
"response_flags": "NR",
"route_name": "-",
"start_time": "2024-06-25T11:37:47.550Z",
"trace_id": "-",
"upstream_cluster": "-",
"upstream_host": "-",
"upstream_local_address": "-",
"upstream_service_time": "-",
"upstream_transport_failure_reason": "-",
"user_agent": "sx/JS 4.52.0",
"x_forwarded_for": "172.20.0.2"
} AI代理插件配置如下: provider:
apiTokens:
- "KEY"
modelMapping:
'*': "qwen-max"
type: "qwen"
qwenEnableSearch: true |
@KagaJiankui qwen这个路由的配置页面截图看看呢 |
@KagaJiankui 你用的不是上面的配置吧,上面的配置不会加这个精确匹配的 header,你把这个header匹配条件删除就可以了 你应该没加这个环境变量:DEFAULT_AI_SERVICE=qwen |
可能是因为配置时设置了错误的环境变量, 删除bind mount的本地data目录后重新配置无此header匹配条件 |
[Envoy (Epoch 0)] [2024-07-09 15:58:07.867][236][warning][config] gRPC config for type.googleapis.com/envoy.config.core.v3.TypedExtensionConfig rejected: Proto constraint validation failed (WasmValidationError.Config: embedded message failed validation | caused by PluginConfigValidationError.VmConfig: embedded message failed validation | caused by VmConfigValidationError.Code: embedded message failed validation | caused by AsyncDataSourceValidationError.Remote: embedded message failed validation | caused by RemoteDataSourceValidationError.Sha256: value length must be at least 1 characters): config { |
@Jerrydesign 你这个看镜像地址不是官方插件 |
第一步:创建一个名为
docker-compose.yml
的文件,并填入以下内容:第二步:在命令行中运行以下命令,启动 docker compose 项目:
第三步:在浏览器里访问 http://localhost:3210/ 打开 LobeChat 页面;
Tips 1:开启联网搜索能力
在浏览器里访问 http://localhost:8001/ 打开 Higress 控制台
在这里做配置调整:
Tips 2:开启 RAG 能力
在浏览器里访问 http://localhost:8001/ 打开 Higress 控制台
上传一份文件用于 RAG (详细可以查看这里的文档):
在这里做配置调整:
注意 RAG 只有 qwen-long 支持,且文件内容转变为 token 数,每次请求都会加上进行计费
其他
Higress AI 相关插件的详细文档可以查阅:https://higress.io/zh-cn/docs/plugins/ai/ai-proxy
The text was updated successfully, but these errors were encountered: