diff --git a/README.md b/README.md index 7d59050a9..985a2403c 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ npm run docs:dev ### 部署细节 -现在使用 Cloudflare Pages 托管,提交后 @RockChinQ 更新分支进行自动部署。 +现在使用 Cloudflare Pages 托管,提交后 [@RockChinQ](https://github.com/RockChinQ) 更新分支进行自动部署。 ### 一些规范化标准 diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 5a1d24559..7924a515f 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -4,6 +4,234 @@ import { defineConfig } from "vitepress"; export default defineConfig({ themeConfig: { logo: "/langbot-logo-0.5x.png", + + nav: [ + { text: "主页", link: "https://langbot.app" }, + { text: "路线图", link: "https://langbot.featurebase.app/roadmap" }, + ], + + sidebar: [ + { + text: "概述", + items: [ + { text: "新手指引(必看)", link: "/insight/guide" }, + { text: "项目介绍", link: "/insight/intro" }, + { text: "社区资源", link: "/insight/community" }, + ], + }, + { + text: "部署", + items: [ + { + text: "部署 LangBot", + collapsed: true, + items: [ + { text: "Docker部署", link: "/deploy/langbot/docker" }, + { text: "宝塔面板部署", link: "/deploy/langbot/one-click/bt" }, + { text: "手动部署", link: "/deploy/langbot/manual" }, + ], + }, + { + text: "连接消息平台", + collapsed: true, + items: [ + { + text: "消息平台说明", + link: "/deploy/platforms/readme", + }, + { + text: "QQ 个人号", + collapsed: true, + items: [ + { + text: "NapCat", + link: "/deploy/platforms/qq/aiocqhttp/napcat", + }, + { + text: "Lagrange", + link: "/deploy/platforms/qq/aiocqhttp/lagrange", + }, + { + text: "llonebot", + link: "/deploy/platforms/qq/aiocqhttp/llonebot", + }, + { + text: "go-cqhttp", + link: "/deploy/platforms/qq/gocq", + }, + ], + }, + { + text: "QQ 官方机器人", + // link: "/deploy/platforms/qq/official", + collapsed: true, + items: [ + { + text: "Webhook 方式", + link: "/deploy/platforms/qq/official_webhook", + }, + { + text: "WebSocket 方式", + link: "/deploy/platforms/qq/official", + }, + ], + }, + { text: "个人微信", + collapsed: true, + items: [ + { + text: "Gewechat", + link: "/deploy/platforms/wechat/gewechat", + }, + ], + }, + { text: "企业微信", + collapsed: true, + items: [ + { + text: "内部应用", + link: "/deploy/platforms/wecom/wecom", + }, + { + text: "对外客服", + link: "/deploy/platforms/wecom/wecomcs", + }, + ], + }, + { text:"微信公众号",link:"/deploy/platforms/wxoa.md"}, + { text: "飞书", link: "/deploy/platforms/lark" }, + { text:"钉钉",link:"/deploy/platforms/dingtalk.md"}, + { text: "Discord", link: "/deploy/platforms/discord" }, + { text: "Telegram", link: "/deploy/platforms/telegram" }, + { text:"Slack", link: "/deploy/platforms/slack"}, + ], + }, + { text: "填写配置信息", link: "/deploy/quick-config/config" }, + { + text: "网络配置详解", + link: "/deploy/network-details", + }, + { + text: "更新 LangBot", + link: "/deploy/update", + }, + ], + }, + { + text: "使用", + items: [ + { text: "命令用法", link: "/usage/command" }, + { text: "常见问题", link: "/usage/faq" }, + ], + }, + { + text: "配置", + items: [ + { + text: "功能配置", + collapsed: true, + items: [ + { text: "platform.json", link: "/config/function/platform" }, + { text: "pipeline.json", link: "/config/function/pipeline" }, + { text: "provider.json", link: "/config/function/provider" }, + { text: "command.json", link: "/config/function/command" }, + { text: "system.json", link: "/config/function/system" }, + ], + }, + { + text: "元数据配置", + collapsed: true, + items: [ + { + text: "敏感词sensitive-words.json", + link: "/config/metadata/sensitive-words", + }, + { + text: "模型列表llm-models.json", + link: "/config/metadata/llm-models", + }, + { + text: "qq-botpy ID 映射 adapter-qq-botpy.json", + link: "/config/metadata/adapter-qq-botpy", + }, + ], + }, + ], + }, + { + text: "插件", + // collapsed: true, + items: [ + { text: "插件介绍", link: "/plugin/plugin-intro" }, + { + text: "插件开发", + collapsed: true, + items: [ + { text: "基础教程", link: "/plugin/dev/tutor" }, + { text: "消息平台实体", link: "/plugin/dev/messages" }, + { text: "API 参考", link: "/plugin/dev/api-ref" }, + { text: "组件扩展", link: "/plugin/dev/extension" }, + ], + }, + // { text: "技术信息", link: "/plugin/tech-info" }, + ], + }, + { + text: "管理面板(Beta测试)", + items: [ + { text: "介绍 & 使用", link: "/webui/intro" }, + { text: "系统操作", link: "/webui/system" }, + { text: "设置项管理", link: "/webui/settings" }, + ], + }, + { + text: "实践", + items: [ + { + text: "如何接入 Dify?", + link: "/workshop/dify-service-api", + }, + { + text: "如何接入 Dify? - NewAPI 中转方案", + link: "/workshop/dify-integration", + }, + { + text: "如何接入 OneAPI、LinkAI 等第三方 OpenAI 格式接口?", + link: "/workshop/one-api", + }, + { + text:"如何使用 Ollama 接入本地模型", + link:"/workshop/ollama" + }, + { + text: "如何实现一个消息平台适配器?", + link: "/workshop/impl-platform-adapter", + }, + { + text: "在 LangBot 接入完整 MCP 生态", + link: "/workshop/mcp-details" + }, + { + text: "接入 PPIO API", + link: "/workshop/ppio-integration" + } + ], + }, + { + text: "开发", + items: [ + { text: "开发配置", link: "/develop/dev-config" }, + { text: "组件架构", link: "/develop/comp-arch" }, + ], + }, + ], + + // 编辑链接 + editLink: { + pattern: + "https://github.com/the-lazy-me/Langbot-Wiki/edit/main/docs/:path", + }, + // 本地搜索 search: { provider: "local", diff --git a/docs/assets/image/config_provider_02.png b/docs/assets/image/config_provider_02.png index da0d52c9d..6100d6242 100644 Binary files a/docs/assets/image/config_provider_02.png and b/docs/assets/image/config_provider_02.png differ diff --git a/docs/assets/image/dashScope_ref_quote.png b/docs/assets/image/dashScope_ref_quote.png new file mode 100644 index 000000000..64bf45bf1 Binary files /dev/null and b/docs/assets/image/dashScope_ref_quote.png differ diff --git a/docs/assets/image/dashscope_application.png b/docs/assets/image/dashscope_application.png new file mode 100644 index 000000000..8ffe82e06 Binary files /dev/null and b/docs/assets/image/dashscope_application.png differ diff --git a/docs/assets/image/dashscope_bitz.png b/docs/assets/image/dashscope_bitz.png new file mode 100644 index 000000000..98e525538 Binary files /dev/null and b/docs/assets/image/dashscope_bitz.png differ diff --git a/docs/assets/image/ding1.png b/docs/assets/image/ding1.png new file mode 100644 index 000000000..097212104 Binary files /dev/null and b/docs/assets/image/ding1.png differ diff --git a/docs/assets/image/ding2.png b/docs/assets/image/ding2.png new file mode 100644 index 000000000..ceb9c847a Binary files /dev/null and b/docs/assets/image/ding2.png differ diff --git a/docs/assets/image/ding3.png b/docs/assets/image/ding3.png new file mode 100644 index 000000000..b386d2be1 Binary files /dev/null and b/docs/assets/image/ding3.png differ diff --git a/docs/assets/image/ding4.png b/docs/assets/image/ding4.png new file mode 100644 index 000000000..7df37c190 Binary files /dev/null and b/docs/assets/image/ding4.png differ diff --git a/docs/assets/image/ding5.png b/docs/assets/image/ding5.png new file mode 100644 index 000000000..eedea8025 Binary files /dev/null and b/docs/assets/image/ding5.png differ diff --git a/docs/assets/image/discord_01.png b/docs/assets/image/discord_01.png new file mode 100644 index 000000000..5399b8f0d Binary files /dev/null and b/docs/assets/image/discord_01.png differ diff --git a/docs/assets/image/discord_02.png b/docs/assets/image/discord_02.png new file mode 100644 index 000000000..50902eee6 Binary files /dev/null and b/docs/assets/image/discord_02.png differ diff --git a/docs/assets/image/discord_03.png b/docs/assets/image/discord_03.png new file mode 100644 index 000000000..32fab084b Binary files /dev/null and b/docs/assets/image/discord_03.png differ diff --git a/docs/assets/image/discord_04.png b/docs/assets/image/discord_04.png new file mode 100644 index 000000000..b999801c0 Binary files /dev/null and b/docs/assets/image/discord_04.png differ diff --git a/docs/assets/image/discord_05.png b/docs/assets/image/discord_05.png new file mode 100644 index 000000000..6c94fbf25 Binary files /dev/null and b/docs/assets/image/discord_05.png differ diff --git a/docs/assets/image/discord_06.png b/docs/assets/image/discord_06.png new file mode 100644 index 000000000..175277e3d Binary files /dev/null and b/docs/assets/image/discord_06.png differ diff --git a/docs/assets/image/discord_07.png b/docs/assets/image/discord_07.png new file mode 100644 index 000000000..39401ce4c Binary files /dev/null and b/docs/assets/image/discord_07.png differ diff --git a/docs/assets/image/discord_08.png b/docs/assets/image/discord_08.png new file mode 100644 index 000000000..876b4282e Binary files /dev/null and b/docs/assets/image/discord_08.png differ diff --git a/docs/assets/image/discord_09.png b/docs/assets/image/discord_09.png new file mode 100644 index 000000000..f767cd87f Binary files /dev/null and b/docs/assets/image/discord_09.png differ diff --git a/docs/assets/image/gewechat_01.png b/docs/assets/image/gewechat_01.png new file mode 100644 index 000000000..7e42d5f22 Binary files /dev/null and b/docs/assets/image/gewechat_01.png differ diff --git a/docs/assets/image/gewechat_02.png b/docs/assets/image/gewechat_02.png new file mode 100644 index 000000000..6b8b9ca74 Binary files /dev/null and b/docs/assets/image/gewechat_02.png differ diff --git a/docs/assets/image/lark_01.png b/docs/assets/image/lark_01.png new file mode 100644 index 000000000..94359fabd Binary files /dev/null and b/docs/assets/image/lark_01.png differ diff --git a/docs/assets/image/lark_02.png b/docs/assets/image/lark_02.png new file mode 100644 index 000000000..b26b64c19 Binary files /dev/null and b/docs/assets/image/lark_02.png differ diff --git a/docs/assets/image/lark_03.png b/docs/assets/image/lark_03.png new file mode 100644 index 000000000..564de83a9 Binary files /dev/null and b/docs/assets/image/lark_03.png differ diff --git a/docs/assets/image/lark_04.png b/docs/assets/image/lark_04.png new file mode 100644 index 000000000..de741dca7 Binary files /dev/null and b/docs/assets/image/lark_04.png differ diff --git a/docs/assets/image/lark_05.png b/docs/assets/image/lark_05.png new file mode 100644 index 000000000..259c186d9 Binary files /dev/null and b/docs/assets/image/lark_05.png differ diff --git a/docs/assets/image/lark_06.png b/docs/assets/image/lark_06.png new file mode 100644 index 000000000..204e594d6 Binary files /dev/null and b/docs/assets/image/lark_06.png differ diff --git a/docs/assets/image/lark_07.png b/docs/assets/image/lark_07.png new file mode 100644 index 000000000..01b708458 Binary files /dev/null and b/docs/assets/image/lark_07.png differ diff --git a/docs/assets/image/lark_08.png b/docs/assets/image/lark_08.png new file mode 100644 index 000000000..e9018b743 Binary files /dev/null and b/docs/assets/image/lark_08.png differ diff --git a/docs/assets/image/lark_09.png b/docs/assets/image/lark_09.png new file mode 100644 index 000000000..a04f16ec1 Binary files /dev/null and b/docs/assets/image/lark_09.png differ diff --git a/docs/assets/image/lark_10.png b/docs/assets/image/lark_10.png new file mode 100644 index 000000000..40516a416 Binary files /dev/null and b/docs/assets/image/lark_10.png differ diff --git a/docs/assets/image/lark_11.png b/docs/assets/image/lark_11.png new file mode 100644 index 000000000..888fc685f Binary files /dev/null and b/docs/assets/image/lark_11.png differ diff --git a/docs/assets/image/lark_12.png b/docs/assets/image/lark_12.png new file mode 100644 index 000000000..92b22c1ca Binary files /dev/null and b/docs/assets/image/lark_12.png differ diff --git a/docs/assets/image/lark_13.png b/docs/assets/image/lark_13.png new file mode 100644 index 000000000..77ac8af0f Binary files /dev/null and b/docs/assets/image/lark_13.png differ diff --git a/docs/assets/image/oa1.png b/docs/assets/image/oa1.png new file mode 100644 index 000000000..a9a8240bd Binary files /dev/null and b/docs/assets/image/oa1.png differ diff --git a/docs/assets/image/oa2.png b/docs/assets/image/oa2.png new file mode 100644 index 000000000..309869a9e Binary files /dev/null and b/docs/assets/image/oa2.png differ diff --git a/docs/assets/image/plugin_dev_tutor_01.png b/docs/assets/image/plugin_dev_tutor_01.png new file mode 100644 index 000000000..865c5f4a7 Binary files /dev/null and b/docs/assets/image/plugin_dev_tutor_01.png differ diff --git a/docs/assets/image/ppio_llm-models.png b/docs/assets/image/ppio_llm-models.png new file mode 100644 index 000000000..27157b584 Binary files /dev/null and b/docs/assets/image/ppio_llm-models.png differ diff --git a/docs/assets/image/ppio_provider.png b/docs/assets/image/ppio_provider.png new file mode 100644 index 000000000..93e588536 Binary files /dev/null and b/docs/assets/image/ppio_provider.png differ diff --git a/docs/assets/image/ppio_provider2.png b/docs/assets/image/ppio_provider2.png new file mode 100644 index 000000000..6409f0c65 Binary files /dev/null and b/docs/assets/image/ppio_provider2.png differ diff --git a/docs/assets/image/qqofficial1.png b/docs/assets/image/qqofficial1.png new file mode 100644 index 000000000..249ff798d Binary files /dev/null and b/docs/assets/image/qqofficial1.png differ diff --git a/docs/assets/image/qqofficial2.png b/docs/assets/image/qqofficial2.png new file mode 100644 index 000000000..aa98bee60 Binary files /dev/null and b/docs/assets/image/qqofficial2.png differ diff --git a/docs/assets/image/slack_01.jpg b/docs/assets/image/slack_01.jpg new file mode 100644 index 000000000..61b656a49 Binary files /dev/null and b/docs/assets/image/slack_01.jpg differ diff --git a/docs/assets/image/slack_02.jpg b/docs/assets/image/slack_02.jpg new file mode 100644 index 000000000..5f9919617 Binary files /dev/null and b/docs/assets/image/slack_02.jpg differ diff --git a/docs/assets/image/slack_03.jpg b/docs/assets/image/slack_03.jpg new file mode 100644 index 000000000..ffa32d1f3 Binary files /dev/null and b/docs/assets/image/slack_03.jpg differ diff --git a/docs/assets/image/slack_04.jpg b/docs/assets/image/slack_04.jpg new file mode 100644 index 000000000..4cdab3cef Binary files /dev/null and b/docs/assets/image/slack_04.jpg differ diff --git a/docs/assets/image/slack_05.jpg b/docs/assets/image/slack_05.jpg new file mode 100644 index 000000000..2afd3a645 Binary files /dev/null and b/docs/assets/image/slack_05.jpg differ diff --git a/docs/assets/image/telegram_01.png b/docs/assets/image/telegram_01.png new file mode 100644 index 000000000..f41d5f353 Binary files /dev/null and b/docs/assets/image/telegram_01.png differ diff --git a/docs/assets/image/telegram_02.png b/docs/assets/image/telegram_02.png new file mode 100644 index 000000000..796a0127c Binary files /dev/null and b/docs/assets/image/telegram_02.png differ diff --git a/docs/assets/image/telegram_03.png b/docs/assets/image/telegram_03.png new file mode 100644 index 000000000..04c9050cd Binary files /dev/null and b/docs/assets/image/telegram_03.png differ diff --git a/docs/assets/image/telegram_04.png b/docs/assets/image/telegram_04.png new file mode 100644 index 000000000..fbde9d791 Binary files /dev/null and b/docs/assets/image/telegram_04.png differ diff --git a/docs/assets/image/telegram_05.png b/docs/assets/image/telegram_05.png new file mode 100644 index 000000000..ebaa1df40 Binary files /dev/null and b/docs/assets/image/telegram_05.png differ diff --git a/docs/assets/image/wecom1.png b/docs/assets/image/wecom1.png new file mode 100644 index 000000000..da1b1b256 Binary files /dev/null and b/docs/assets/image/wecom1.png differ diff --git a/docs/assets/image/wecom2.png b/docs/assets/image/wecom2.png new file mode 100644 index 000000000..c281856d0 Binary files /dev/null and b/docs/assets/image/wecom2.png differ diff --git a/docs/assets/image/wecom3.jpg b/docs/assets/image/wecom3.jpg new file mode 100644 index 000000000..e2a16508e Binary files /dev/null and b/docs/assets/image/wecom3.jpg differ diff --git a/docs/assets/image/wecom4.png b/docs/assets/image/wecom4.png new file mode 100644 index 000000000..537703d40 Binary files /dev/null and b/docs/assets/image/wecom4.png differ diff --git a/docs/assets/image/wecom5.png b/docs/assets/image/wecom5.png new file mode 100644 index 000000000..d1a79c862 Binary files /dev/null and b/docs/assets/image/wecom5.png differ diff --git a/docs/assets/image/wecomcs_01.jpg b/docs/assets/image/wecomcs_01.jpg new file mode 100644 index 000000000..092585909 Binary files /dev/null and b/docs/assets/image/wecomcs_01.jpg differ diff --git a/docs/zh/config/function/platform.md b/docs/zh/config/function/platform.md index f4392f150..0bf058a42 100644 --- a/docs/zh/config/function/platform.md +++ b/docs/zh/config/function/platform.md @@ -8,6 +8,7 @@ ## 消息平台适配器 platform-adapters +以下只列举部分适配器配置。 ```json "platform-adapters": [ { @@ -34,12 +35,31 @@ "public_guild_messages", "direct_message" ] - } + }, + { + "adapter": "qqofficial", + "enable": false, + "appid": "", + "secret": "", + "port": 2284, + "token": "" + }, + { + "adapter": "wecom", + "enable": false, + "host": "0.0.0.0", + "port": 2290, + "corpid": "", + "secret": "", + "token": "", + "EncodingAESKey": "", + "contacts_secret": "" + }, ], ``` -目前支持 `go-cqhttp`、`aiocqhttp`、`qq-botpy` 四种消息平台适配器,也可以同时启用多个同种类或不同种类的平台适配器。 -各个消息平台的配置方式请查看部署文档。 +目前支持 `go-cqhttp`、`aiocqhttp`、`qq-botpy`、`qqofficial`、 `wecom` 等多种消息平台适配器,也可以同时启用多个同种类或不同种类的平台适配器。 +各个消息平台的配置方式请查看[部署文档](/deploy/quick-config/config.html#platform-json)。 ### 多开示例 @@ -122,4 +142,4 @@ "hide-exception-info": true ``` - 是否向用户隐藏AI的异常信息,如果为true,当请求AI接口出现异常时,会返回一个错误的提示给用户。而把报错详情输出在控制台。 \ No newline at end of file + 是否向用户隐藏AI的异常信息,如果为true,当请求AI接口出现异常时,会返回一个错误的提示给用户。而把报错详情输出在控制台。 diff --git a/docs/zh/config/function/provider.md b/docs/zh/config/function/provider.md index 871ddac9b..b901ca5d0 100644 --- a/docs/zh/config/function/provider.md +++ b/docs/zh/config/function/provider.md @@ -44,7 +44,14 @@ ], "gitee-ai": [ "XXXXX" + ], + "xai": [ + "xai-1234567890" + ], + "zhipuai": [ + "xxxxxxx" ] + ... }, ``` @@ -57,6 +64,11 @@ - `moonshot`:[Moonshot](https://moonshot.cn/)(月之暗面 kimi)的密钥组 - `deepseek`:[Deepseek](https://deepseek.com/)(深度求索)的密钥组 - `gitee-ai`: [Gitee AI](https://ai.gitee.com/) Serverless API 的密钥组 +- `siliconflow`: [SiliconFlow](https://siliconflow.cn/) 的密钥组 +- `bailian`: 阿里云百炼模型接口密钥组 +- `volcark`: 火山方舟模型、应用接口密钥组 +- `modelscope`: 魔搭社区接口密钥组 +- `ppio`:[PPIO](https://ppinfra.com/user/register?invited_by=QJKFYD&utm_source=github_langbot) (派欧云)的密钥组 ## 大模型请求器 requester @@ -93,7 +105,18 @@ "base-url": "https://ai.gitee.com/v1", "args": {}, "timeout": 120 + }, + "xai-chat-completions": { + "base-url": "https://api.x.ai/v1", + "args": {}, + "timeout": 120 + }, + "zhipuai-chat-completions": { + "base-url": "https://open.bigmodel.cn/api/paas/v4", + "args": {}, + "timeout": 120 } + ... }, ``` @@ -107,6 +130,14 @@ - `deepseek-chat-completions`:[Deepseek](https://deepseek.com/) 请求器(深度求索) - `ollama-chat`:[Ollama](https://ollama.com/) 请求器,不需要密钥,直接请求目标地址的 Ollama 服务 - `gitee-ai-chat-completions`:[Gitee AI](https://ai.gitee.com/) Serverless API 请求器(OpenAI 兼容接口) +- `xai-chat-completions`:[xAI](https://x.ai/) 请求器 +- `zhipuai-chat-completions`:[智谱 AI](https://open.bigmodel.cn/) 请求器 +- `lmstudio-chat-completions`:[LMStudio](https://lmstudio.ai/) 请求器 +- `siliconflow-chat-completions`:[SiliconFlow](https://siliconflow.cn/) 请求器 +- `bailian-chat-completions`:[阿里云百炼](https://bailian.console.aliyun.com/) 请求器,仅支持模型,应用请使用下方百炼平台运行器 +- `volcark-chat-completions`:[火山方舟](https://console.volcengine.com/ark/region:ark+cn-beijing/model?vendor=Bytedance&view=LIST_VIEW) 请求器,默认为模型调用接口,应用(Bots)调用接口请在`base-url`后方添加`/bots` +- `modelscope-chat-completions`:[魔搭社区](https://modelscope.cn/) 请求器,使用魔搭社区的接口,需要确保账户以绑定阿里云账户 +- `ppio-chat-completions`:[PPIO](https://ppinfra.com/user/register?invited_by=QJKFYD&utm_source=github_langbot) 请求器 `base-url`:设置接口地址。 @@ -180,8 +211,13 @@ 设置聊天消息将由哪个运行器处理,默认是 `local-agent` 目前支持: -- `local-agent`:LangBot 本地实现的一个 Agent 机制,实现会话管理、插件调用。需要设置为 local-agent 才能使用`内容函数`。 +- `local-agent`:LangBot 本地实现的一个 Agent 机制,实现会话管理、插件调用。 - `dify-service-api`:使用 [Dify](https://dify.ai/) 的 Service API 机制,支持 聊天助手、Agent、工作流应用。 +- `dashscope-app-api`:使用 [阿里云百炼平台](https://bailian.console.aliyun.com/#/app-center) 自建应用的 API,支持 普通智能体应用、智能体编排应用。 + +::: info +仅在设置为`local-agent`时,才会使用 LangBot 内部配置的`模型`、`工具(内容函数)`、`提示词(情景预设)`、`本地存储的上下文`。 +::: ## Dify Service API 配置 dify-service-api @@ -189,6 +225,9 @@ "dify-service-api": { "base-url": "https://api.dify.ai/v1", "app-type": "chat", + "options": { + "convert-thinking-tips": "original" + }, "chat": { "api-key": "app-1234567890", "timeout": 120 @@ -205,11 +244,13 @@ } ``` -仅在 `runner` 设置为 `dify-service-api` 时,需要配置以下内容: +**仅在 `runner` 设置为 `dify-service-api` 时使用,需要配置以下内容:** - `base-url`:Dify Service API 的地址,默认是 `https://api.dify.ai/v1`,这是 Dify 官方云服务的地址,如果你使用的是自部署的社区版,请设置为你的自部署地址。 -- `app-type`:使用的 Dify 应用类型。支持 `chat` - 聊天助手(含高级编排)、 `agent` - Agent、 `workflow` - 工作流;请填写下方对应的应用类型 API 参数 -- `chat`:Dify 聊天助手应用的配置 +- `app-type`:使用的 Dify 应用类型。支持 `chat` - 聊天助手(含 Chatflow)、 `agent` - Agent、 `workflow` - 工作流;请填写下方对应的应用类型 API 参数 +- `options`:特殊的选项配置。 + - `convert-thinking-tips`:dify 使用 deepseek-r1 等有思维链的模型时[会携带思考过程回复](https://github.com/RockChinQ/LangBot/issues/1108),此选项控制输出时的处理方式;值为 original 时,不转换思考提示;值为 plain 时,将思考提示转换为类似 DeepSeek 官方的\...\格式;值为 remove 时,删除思考提示 +- `chat`:Dify 聊天助手(或 chatflow)应用的配置 - `api-key`:Dify 聊天助手应用的 API 密钥 - `timeout`:Dify 聊天助手应用的请求超时时间,以秒为单位,默认是 120 秒。 - `agent`:Dify Agent 应用的配置 @@ -222,13 +263,120 @@ ![Dify 工作流应用的输出键](/assets/image/config_provider_01.png) +### 请求变量 + 当使用工作流时,LangBot 会显式传入以下参数,您可以自行在 Dify 工作流的开始节点中添加: -- `langbot_user_message_text`:用户消息的纯文本 -- `langbot_session_id`:用户会话id,私聊为 `person_`,群聊为 `group_` -- `langbot_conversation_id`:用户会话id,由 LangBot 生成。用户重置会话后,会重新生成 +- `user_message_text`:用户消息的纯文本 +- `session_id`:用户会话id,私聊为 `person_`,群聊为 `group_` +- `conversation_id`:字符串,用户会话id,由 LangBot 生成。用户重置会话后,会重新生成 +- `msg_create_time`:数字类型,收到此消息的时间戳(秒) + +您可以[通过插件自定义任何变量](/plugin/dev/api-ref.html#%E8%AE%BE%E7%BD%AE%E8%AF%B7%E6%B1%82%E5%8F%98%E9%87%8F)。 ![Dify 工作流开始节点配置](/assets/image/config_provider_02.png) 使用 工作流 应用或 Agent 应用时,如果开启了`platform.json`中的`track-function-calls`,将会在 Dify 执行每个工具调用时,输出一个`调用函数xxx`的消息给用户。 但如果是使用`chat`应用下的`ChatFlow`(聊天助手->工作流编排),无论如何只会输出 Answer(直接回复)节点返回的文本。 + + +## 阿里云百炼平台自建应用配置 dashscope-app-api + +```json + "dashscope-app-api": { + "app-type": "agent", + "api-key": "sk-1234567890", + "agent": { + "app-id": "Your_app_id", + "references_quote": "参考资料来自:" + }, + "workflow": { + "app-id": "Your_app_id", + "references_quote": "参考资料来自:", + "biz_params": { + "city": "北京", + "date": "2023-08-10" + } + } + } +``` + +**仅在 `runner` 设置为 `dashscope-app-api` 时使用,需要配置以下内容:** + +- `app-type`:使用的百炼平台应用类型。 `agent` - 智能体应用(右-紫色)、 `workflow` - 智能体编排应用(左-橙色) + +![dashscope application](/assets/image/dashscope_application.png) + +- `api-key`:阿里云百炼平台的 API 密钥 +- `agent`:智能体应用的配置 + - `app-id`: "上图中的应用ID", + - `references_quote`:引用来源的提示语,默认为`参考资料来自:` 如果你在智能体应用中添加了展示回答来源这个配置将会起作用 +- `workflow`:智能体编排应用的配置 + - `app-id`: "上图中的应用ID", + - `references_quote`:引用来源的提示语,默认为`参考资料来自:` 如果你在智能体应用中添加了展示回答来源这个配置将会起作用 + - `biz_params`:业务参数,用于传入到智能体编排应用中,city和date对应下方第二章图中的`变量名`,二者的值是要传入的可在其中调用的参数。 + - 与上述 Dify 相同,LangBot 也会传入`请求变量`到百炼应用。 + +`references_quote`解释图片 + +![dashscope application](/assets/image/dashScope_ref_quote.png) + +`biz_params`解释图片 + +![dashscope application](/assets/image/dashscope_bitz.png) + +## [MCP](https://modelcontextprotocol.io/) 配置 mcp + +MCP (Model Context Protocol) 是 Anthropic 设计的 Agent 上下文标准协议,现已被广泛采用。 +LangBot 支持通过 MCP 协议获取丰富工具,以供在 `local-agent` 中使用。 + +```json + "mcp": { + "servers": [ + { + "name": "weather", + "enable": true, + "mode": "sse", + "url": "http://localhost:8000/sse", + "headers": {}, + "timeout": 10 + }, + { + "name": "stock", + "enable": true, + "mode": "stdio", + "command": "python3", + "args": [ + "path/to/your/serverfile" + ], + "env": {} + } + ] + } +``` + +请先自行[阅读 MCP 的介绍](https://modelcontextprotocol.io/introduction),了解如何使用第三方 MCP Server。LangBot 目前仅支持 Stdio(Python) 和 SSE 两种通信方式。 + +- `SSE` 模式: + - `name` 服务器名称,自行定义 + - `enable` 是否启用本 Server + - `mode` 固定填写`SSE` + - `url` MCP SSE Server 的访问 URL + - `headers` 连接时的 headers,可选 + - `timeout` 连接超时时间 +- `stdio` 模式: + - `name` 服务器名称,自行定义 + - `enable` 是否启用本 Server + - `mode` 固定填写`stdio` + - `command` 执行命令 + - `args` 执行命令的参数 + - `env` 执行命令的环境变量,可选 + +::: info + +- 推荐使用 SSE 模式。 +- 使用 Stdio 时,仅支持执行 Python 脚本 Server。若 LangBot 运行在容器中,可以将 MCP Server 执行文件置于 `data` 目录下的新目录中,并使用 `command` 和 `args` 指定执行文件路径。 + +::: + + diff --git a/docs/zh/deploy/langbot/docker.md b/docs/zh/deploy/langbot/docker.md index 38e1f0ecc..21e1aa4a5 100644 --- a/docs/zh/deploy/langbot/docker.md +++ b/docs/zh/deploy/langbot/docker.md @@ -1,4 +1,4 @@ -# Docker部署(仅推荐在Linux上使用) +# Docker部署 :::warning 请**确保**您具有以下能力: @@ -9,7 +9,8 @@ ::: :::info -请先确保 Git、 Docker 和 Docker Compose 已安装 +- 请先确保 Git、 Docker 和 Docker Compose 已安装 +- 推荐使用[阿里云,服务器价格低至 38 元一年,更可以享受8折优惠](https://www.aliyun.com/minisite/goods?userCode=ys4ad8gs) ::: Git 克隆本项目: @@ -28,7 +29,7 @@ docker compose up 首次启动会输出创建配置文件的提示,请继续按照文件配置。 容器会映射`5300`端口供 WebUI 使用,您可以访问`http://127.0.0.1:5300`查看 WebUI。 -还会映射`2280-2290`端口供使用 OneBot 协议的消息平台适配器反向连接,请继续阅读[消息平台接入文档](/deploy/platforms/aiocqhttp/napcat)。 +还会映射`2280-2290`端口供使用 OneBot 协议的消息平台适配器反向连接,请继续阅读[消息平台接入文档](/deploy/platforms/readme)。 ## 注意 diff --git a/docs/zh/deploy/langbot/manual.md b/docs/zh/deploy/langbot/manual.md index 748727c08..87373d299 100644 --- a/docs/zh/deploy/langbot/manual.md +++ b/docs/zh/deploy/langbot/manual.md @@ -1,7 +1,8 @@ -# 手动部署(推荐,可以在所有平台上使用) +# 手动部署 :::warning 1. 请使用Python 3.10.1(不包含3.10.0)及以上版本,推荐3.10.14版本,没有Python的需自行安装。 +2. 不推荐此方式,后续可能不再支持手动部署,请考虑使用 Docker 部署。 ::: @@ -16,14 +17,27 @@ 您也可以使用以下命令克隆最新代码(有可能包含不稳定的代码)并使用: ```bash +# 克隆主仓库 git clone https://github.com/RockChinQ/LangBot cd LangBot +``` +若您位于中国大陆境内,可以从 [GitCode 镜像](https://gitcode.com/RockChinQ/LangBot) 克隆: + +```bash +git clone https://gitcode.com/RockChinQ/LangBot +cd LangBot +``` + +接下来手动构建前端: + +```bash # 构建前端,需要 NodeJS >= 22 cd web npm install && npm run build cd .. ``` + ::: 2. (建议)创建虚拟环境 @@ -47,7 +61,7 @@ pip install -r requirements.txt pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple ``` -3. 运行一次主程序,生成配置文件 +4. 运行一次主程序,生成配置文件 ```bash python main.py @@ -77,7 +91,7 @@ python main.py - data/scenario/default.json ``` -接下来可以使用 Ctrl+C 退出程序,继续查看[部署消息平台](/deploy/platforms/aiocqhttp/napcat.html)页。 +接下来可以使用 Ctrl+C 退出程序,继续查看[部署消息平台](/deploy/platforms/readme)页。 当你部署消息平台和填写配置文件后,再次运行 ```bash diff --git a/docs/zh/deploy/langbot/one-click/bt.md b/docs/zh/deploy/langbot/one-click/bt.md index c381d7aaa..4a86a157f 100644 --- a/docs/zh/deploy/langbot/one-click/bt.md +++ b/docs/zh/deploy/langbot/one-click/bt.md @@ -2,12 +2,18 @@ 使用[宝塔面板](https://www.bt.cn/new/download.html?r=dk_LangBot)一键部署 LangBot。 -## 安装宝塔 - :::warning -如果你已经安装了宝塔,请更新到 **9.2.0** 及以上 +- 除非您打算使用 Discord、飞书等无需额外容器的消息平台,或您熟悉宝塔面板上 Docker 容器间的网络连接,否则不建议使用宝塔面板一键部署,请考虑使用[Docker部署](/deploy/langbot/docker)。 +- 如果你已经安装了宝塔,请更新到 **9.2.0** 及以上 ::: + +:::info +使用[阿里云,服务器价格低至 38 元一年,更可以享受8折优惠](https://www.aliyun.com/minisite/goods?userCode=ys4ad8gs),一键安装宝塔更方便 +::: + +## 安装宝塔 + > 服务器系统推荐(来自宝塔):Debian 12,Ubuntu 22等 > > 本文默认所述的是拥有公网IPv4地址的服务器,如果是家用机器没有公网 IP,可以通过下文中的内网来访问相关页面 @@ -48,4 +54,4 @@ 如果你更偏好于直接修改json配置文件,你可以看上图的查看本地映射目录,进入安装目录,`data`文件夹用于存储配置文件,`plugins`文件夹用于存储插件相关。 -接下来请继续阅读[部署消息平台](/deploy/platforms/aiocqhttp/napcat.html)页。 +接下来请继续阅读[部署消息平台](/deploy/platforms/readme)页。 diff --git a/docs/zh/deploy/network-details.md b/docs/zh/deploy/network-details.md index 0899375b2..35779c138 100644 --- a/docs/zh/deploy/network-details.md +++ b/docs/zh/deploy/network-details.md @@ -1,5 +1,10 @@ # 网络配置详解 +::: info +某些消息平台(如 QQ 个人号)需要使用独立的协议端来处理消息,如果您使用的是此类消息平台,请参考以下网络配置。 +同时,若您的 LangBot 实例需要连接其他在容器中运行的服务(如 Ollama),也可以参考以下配置,自行替换`消息平台`为`您要连接的服务`。 +::: + LangBot 和部分消息平台均可采用 Docker 部署,以下是四种情况下的网络配置详解。 :::info 目录 diff --git a/docs/zh/deploy/platforms/aiocqhttp/llonebot.md b/docs/zh/deploy/platforms/aiocqhttp/llonebot.md index 7adc99ab0..e3cc5a31c 100644 --- a/docs/zh/deploy/platforms/aiocqhttp/llonebot.md +++ b/docs/zh/deploy/platforms/aiocqhttp/llonebot.md @@ -1,5 +1,7 @@ # 部署消息平台 LiteLoaderQQNT +通过 OneBot 11 协议接入,需选择使用`aiocqhttp`作为适配器。 + # LiteLoaderQQNT - [LiteLoaderQQNT 的 OneBot API 插件](https://github.com/LLOneBot/LLOneBot) 注入 QQ 客户端并将其转换为 OneBot 11 协议 @@ -8,6 +10,6 @@ ![image-20240515185909108](/assets/image/llob_cfg.png) -确保地址中 IP地址 是 LangBot 运行的主机的地址(若在同一网络内运行则为 127.0.0.1),端口必须与 LangBot 消息平台配置中的 aiocqhttp 适配器监听的端口相同,后缀必须为`/ws`: +确保地址中 IP地址 是 LangBot 运行的主机的地址(若在同一网络内运行则为 127.0.0.1),端口必须与 LangBot 消息平台配置中的 `aiocqhttp 适配器`监听的端口相同,后缀必须为`/ws`: 接下来请阅读[填写配置信息](/deploy/quick-config/config)。 diff --git a/docs/zh/deploy/platforms/aiocqhttp/napcat.md b/docs/zh/deploy/platforms/aiocqhttp/napcat.md index ca41d2666..76d5c913c 100644 --- a/docs/zh/deploy/platforms/aiocqhttp/napcat.md +++ b/docs/zh/deploy/platforms/aiocqhttp/napcat.md @@ -1,5 +1,7 @@ # 部署消息平台 NapCat +通过 OneBot 11 协议接入,需选择使用`aiocqhttp`作为适配器。 + ## NapCat安装教程 按照 [NapCat 官方文档安装](https://napcat.napneko.icu/guide/start-install) diff --git a/docs/zh/deploy/platforms/dingtalk.md b/docs/zh/deploy/platforms/dingtalk.md new file mode 100644 index 000000000..1bfedf8a4 --- /dev/null +++ b/docs/zh/deploy/platforms/dingtalk.md @@ -0,0 +1,46 @@ +# 部署钉钉机器人 + +部署 LangBot 到钉钉。 + +## 创建机器人 + +进入 [钉钉开发者后台](https://open-dev.dingtalk.com/?spm=ding_open_doc.document.0.0.74f445e5MkawbT#/),登录并且进入组织。登录成功后进入开放平台,是这样的: +![钉钉开放平台](/assets/image/ding1.png) + +点击上方的 `应用开发`,然后点击右面蓝色的按钮 `创建应用`,填写机器人的基本信息,点击保存。 + +进入机器人的后台,比如我们有机器人 langbot2 ,那么它的管理页面是这样的: +![机器人页面](/assets/image/ding2.png) + +## 配置机器人 + + +点击 `添加应用能力`,`其他应用能力`,`机器人`中的 `配置`,点击配置并且填写信息之后,如下图: +![机器人配置](/assets/image/ding3.png) + +点击页面下方的`发布`,发布成功之后,点击机器人页面中左侧最下方的`版本管理与发布`,如图: +![版本管理与发布](/assets/image/ding4.png) + +如果是第一次创建机器人,那么右边是空的,需要点击`创建新版本`,在其中设置信息,然后设置`应用可见范围`,点击保存。 + +点击`事件订阅`,将其中的推送方式改为`Stream模式推送`。 + +## 填写配置信息 + +点击`凭证与基础信息`,记录`Client ID` 和 `Client Secret`, +点击`应用能力`,`机器人`,记录下 RobotCode 和 机器人名称。 +`markdown_card` 为是否启用 Markdown 形式的回复。 +将以上配置项填写入[钉钉机器人配置项](/deploy/quick-config/config.md#钉钉适配器),并且将 `enable` 设置为 `true` 。
+**启动 LangBot** 。 + +## 添加机器人 + +本文使用钉钉 windows 桌面版举例,点击上方的`搜索`,`功能`,然后输入刚才机器人创建的名称,如图: +![robot_png](/assets/image/ding5.png) + +点击机器人即可和机器人聊天。
+ +如果想要添加到群里,那么点击钉钉群的`群管理`,`机器人`,`添加机器人`,然后搜索机器人名称就可以在群中使用。 + + + diff --git a/docs/zh/deploy/platforms/discord.md b/docs/zh/deploy/platforms/discord.md new file mode 100644 index 000000000..aee1183b8 --- /dev/null +++ b/docs/zh/deploy/platforms/discord.md @@ -0,0 +1,54 @@ +# 接入 Discord 机器人 + +## 创建机器人 + +前往[Discord 开发者门户](https://discord.com/developers/applications),登录后,创建应用。 + +![alt text](/assets/image/discord_01.png) + +修改基础信息,点击`Save Changes`保存。 + +![alt text](/assets/image/discord_02.png) + +点击左侧`Bot`,点击`Reset Token`,复制生成的 Token。 + +![alt text](/assets/image/discord_03.png) + +并在此页面的`Privileged Gateway Intents`中勾选所有选项,点击`Save Changes`保存。 + +![alt text](/assets/image/discord_05.png) + +**最后,点击左侧`OAuth2`,复制页面上的`Client ID`。** + +## 在 LangBot 中填写信息并启动 + +根据[填写配置信息](/deploy/quick-config/config)中的 Discord 适配器配置,填写相关信息。 +将上一步获取的`Client ID`和`Token`填写到配置中。 + +![alt text](/assets/image/discord_04.png) + +:::warning +如果你在中国大陆境内使用此适配器,可能需要设置网络代理,具体请查看[system.json配置文件](/config/function/system.html#网络代理-network-proxies)。或直接通过环境变量`http_proxy`设置。 +::: + +填写完成后启动 LangBot,若成功配置,日志中会出现`[02-02 16:48:15.263] manager.py (68) - [INFO] : 初始化平台适配器 1: discord`的字样,保持 LangBot 运行。 + +## 邀请机器人到服务器 + +你需要先创建一个服务器,然后邀请机器人到服务器。 + +前往`OAuth2`页面,选择`URL Generator`,选择`bot`,按照图中所示勾选权限。 + +![alt text](/assets/image/discord_06.png) + +![alt text](/assets/image/discord_07.png) + +点击`Copy`,将生成的 URL 粘贴到浏览器中打开,邀请机器人到你的服务器。 + +![alt text](/assets/image/discord_08.png) + +## 使用机器人 + +现在在群里或者私聊机器人都可以正常使用了。 + +![alt text](/assets/image/discord_09.png) \ No newline at end of file diff --git a/docs/zh/deploy/platforms/lark.md b/docs/zh/deploy/platforms/lark.md new file mode 100644 index 000000000..96d58e4a3 --- /dev/null +++ b/docs/zh/deploy/platforms/lark.md @@ -0,0 +1,83 @@ +# 接入飞书机器人 + +## 创建机器人 + +前往[飞书开放平台](https://open.feishu.cn/app),登录后,创建企业自建应用。 + +![alt text](/assets/image/lark_01.png) + +![alt text](/assets/image/lark_02.png) + +为应用添加机器人能力: +![alt text](/assets/image/lark_03.png) + +在权限管理中添加图中所示权限: + +![alt text](/assets/image/lark_04.png) + +## 在 LangBot 中填写信息并启动 + +根据[填写配置信息](/deploy/quick-config/config)中的飞书适配器配置,填写相关信息。可以在`凭证与基础信息`页找到`app_id`和`app_secret`。 + +![alt text](/assets/image/lark_05.png) + +```json + { + "adapter": "lark", + "enable": true, + "app_id": "cli_abcdefgh", + "app_secret": "XXXXXXXXXX", + "bot_name": "LangBot", + "enable-webhook": false, + "port": 2285, + "encrypt-key": "xxxxxxxxx" + }, +``` + +注意:`bot_name`必须与创建机器人时填写的机器人名称相同。确保`enable`为`true`。 + +填写完成后启动 LangBot,若成功配置,日志中会出现`[01-29 23:42:56.796] manager.py (68) - [INFO] : 初始化平台适配器 1: lark`的字样,保持 LangBot 运行。 + +:::warning +默认使用的是 WebSocket 长连接模式,对应下方的长连接订阅。但某些情况下(如国际版飞书)不具有长连接模式,此时需要使用 Webhook 模式,对应`将事件发送到开发者服务器`模式,请参考以下配置: + +- `enable-webhook`:设置为`true` +- `encrypt-key`:设置为`事件与回调`页面的`加密策略`中的`Encrypt Key` + +注意,在Webhook模式中,LangBot 需要部署在具有公网 IP 的服务器上,并确保防火墙已开放上方配置的端口。 +::: + +## 配置事件订阅 + +前往`事件与回调`页,配置订阅方式为`长连接`: + +![alt text](/assets/image/lark_07.png) + +并添加事件:`接收消息` + +![alt text](/assets/image/lark_08.png) + +:::warning +Webhook 模式配置方式: + +![alt text](/assets/image/lark_13.png) + +请先启动 LangBot,在此处填写你的服务器地址和端口,路径为`/lark/callback`,点击`保存`。 + +::: + +## 发布机器人 + +点击顶部`创建版本`,填写版本号等信息,点击下方`保存`。 + +![alt text](/assets/image/lark_09.png) + +在飞书群中添加机器人,即可使用: + +![alt text](/assets/image/lark_10.png) + +![alt text](/assets/image/lark_11.png) + +私聊也可以直接使用 + +![alt text](/assets/image/lark_12.png) \ No newline at end of file diff --git a/docs/zh/deploy/platforms/official.md b/docs/zh/deploy/platforms/official.md index 6dce3191a..886a7af34 100644 --- a/docs/zh/deploy/platforms/official.md +++ b/docs/zh/deploy/platforms/official.md @@ -1,4 +1,8 @@ -# 使用 QQ 官方机器人 API +# 使用 QQ 官方机器人 API(使用websocket方式) + +:::warning +QQ 官方已停止维护 WebSocket 方式,请使用 Webhook 方式。 +::: QQ官方机器人所有人均可申请,可以在频道和群聊中使用,私聊也可。 diff --git a/docs/zh/deploy/platforms/qq/aiocqhttp/lagrange.md b/docs/zh/deploy/platforms/qq/aiocqhttp/lagrange.md new file mode 100644 index 000000000..5c781ce7d --- /dev/null +++ b/docs/zh/deploy/platforms/qq/aiocqhttp/lagrange.md @@ -0,0 +1,56 @@ +# 部署消息平台 Lagrange + +## Lagrange介绍 + +Lagrange 是一个 QQNT 协议逆向工程框架,轻便且相对稳定。通过 OneBot 11 协议接入,需选择使用`aiocqhttp`作为适配器。 + +::: warning +需要使用 NT QQ 与机器人交互,旧版QQ无法正常使用 +::: + +## 部署步骤 + +以下仅提供 Windows 上的大致步骤,详细步骤或其他平台请参考 [Lagrange官方文档](https://lagrangedev.github.io/Lagrange.Doc/Lagrange.OneBot/) + +### 环境配置 + +安装.NET 8运行时,[点击直达微软官网下载](https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-desktop-8.0.4-windows-x64-installer) + +### 从Github Actions下载最新的build + +需要登录Github后才能下载,如果你不需要部分特性,可以在Release下载,看图片3 + +[Github Actions](https://github.com/KonataDev/Lagrange.Core/actions) + +看图进行下载: + +![图片1](/assets/image/dl_lgr_1.png) + +![图片2](/assets/image/dl_lgr_2.png) + +![图片3](/assets/image/dl_lgr_3.png) + +### 尾声 + +解压你所下载的zip,打开到有Lagrange.OneBot.exe的目录,在此目录下打开cmd命令提示符,输入 + +```bash +.\Lagrange.OneBot +``` + +运行一次,如果输出了一个二维码,即可直接用机器人号扫码登录(若二维码显示不清楚,可以到lagrange的data目录下寻找图片文件)。 + +若无法登录,请检查是否正常填写了lagrange配置文件appsettings.json中的签名地址 SignServerUrl ,签名地址请到lagrange文档中寻找。 + +## 修改配置 + +需要配置 Lagrange 以让其连接上 LangBot,请编辑 Lagrange 的配置文件 appsettings.json,确保 Implementations 中的连接配置符合下图内容: + +![配置连接](/assets/image/config_lgr.png) + +其中 Type 必须为 `ReverseWebSocket`; +Host 为 LangBot 运行的主机 IP,若在同一主机上,可以写 `127.0.0.1`; +Suffix 必须为 `/ws`; +Port 必须与 LangBot 消息平台配置中的 aiocqhttp 适配器监听的端口相同。 + +接下来请阅读[填写配置信息](/deploy/quick-config/config)。 diff --git a/docs/zh/deploy/platforms/qq/aiocqhttp/llonebot.md b/docs/zh/deploy/platforms/qq/aiocqhttp/llonebot.md new file mode 100644 index 000000000..e3cc5a31c --- /dev/null +++ b/docs/zh/deploy/platforms/qq/aiocqhttp/llonebot.md @@ -0,0 +1,15 @@ +# 部署消息平台 LiteLoaderQQNT + +通过 OneBot 11 协议接入,需选择使用`aiocqhttp`作为适配器。 + +# LiteLoaderQQNT + +- [LiteLoaderQQNT 的 OneBot API 插件](https://github.com/LLOneBot/LLOneBot) 注入 QQ 客户端并将其转换为 OneBot 11 协议 + +安装LiteLoaderQQNT的教程:https://llonebot.github.io/zh-CN/guide/getting-started + +![image-20240515185909108](/assets/image/llob_cfg.png) + +确保地址中 IP地址 是 LangBot 运行的主机的地址(若在同一网络内运行则为 127.0.0.1),端口必须与 LangBot 消息平台配置中的 `aiocqhttp 适配器`监听的端口相同,后缀必须为`/ws`: + +接下来请阅读[填写配置信息](/deploy/quick-config/config)。 diff --git a/docs/zh/deploy/platforms/qq/aiocqhttp/napcat.md b/docs/zh/deploy/platforms/qq/aiocqhttp/napcat.md new file mode 100644 index 000000000..76d5c913c --- /dev/null +++ b/docs/zh/deploy/platforms/qq/aiocqhttp/napcat.md @@ -0,0 +1,28 @@ +# 部署消息平台 NapCat + +通过 OneBot 11 协议接入,需选择使用`aiocqhttp`作为适配器。 + +## NapCat安装教程 + +按照 [NapCat 官方文档安装](https://napcat.napneko.icu/guide/start-install) + +## NapCat配置教程 + +仅以 webui 操作为例,其他的配置方式请查看 NapCat 文档。 + +登录后,在控制台或Bash上可以查看日志 , 找到 `[NapCat] [WebUi] WebUi Publish Panel Url: http://x.x.x.x:6099/webui?token=xxxxx ` +![napcat_webui_0](/assets/image/napcat_webui_0.png) + +复制Url到浏览器或者 Windows11 按照Ctrl点击Url即可 扫码登录后即可进入网络配置一页 + +点击添加网络配置 WebSocket客户端 点击启用 然后在Url一栏填入 `ws://127.0.0.1:2280/ws` 并保存即可 +![napcat_webui_1](/assets/image/napcat_webui_1.png) +![napcat_webui_2](/assets/image/napcat_webui_2.png) + +::: info +- 端口号取决于 `data/config/platform.json` 中 `aiocqhttp` 的 `port` 字段,默认是 2280,请查看[填写配置信息](/deploy/quick-config/config)继续配置。 +- 必须使用 WebSocket Client(反向 WS) 连接 LangBot,注意根据实际情况修改 IP 地址和端口,后缀必须为`/ws`。 +- 如果 LangBot 和 NapCat 均运行在容器中,请参考[容器网络配置](/deploy/network-details)。 +::: + +接下来请阅读[填写配置信息](/deploy/quick-config/config)。 diff --git a/docs/zh/deploy/platforms/qq/aiocqhttp/shamrock.md b/docs/zh/deploy/platforms/qq/aiocqhttp/shamrock.md new file mode 100644 index 000000000..313a46a2d --- /dev/null +++ b/docs/zh/deploy/platforms/qq/aiocqhttp/shamrock.md @@ -0,0 +1,77 @@ +# 部署消息平台 shamrock + +> 本文档仅为基本步骤,详细操作、答疑解惑及最新信息请前往[OpenShamrock官方文档](https://whitechi73.github.io/OpenShamrock/)。 + +::: tip + +项目归档,不建议继续使用 + +::: + +## OpenShamrock简介 + +go-cqhttp 之类的是模拟 QQ 的协议进行通信,而 Shamrock 使用的是 安卓的 Hook 来操作 QQ 模拟点击,稳定性较高。 + +可选平台(or设备): + +- 模拟器 +- Linux服务器 +- PVE +- 云手机 +- 实体手机 + +## 步骤(模拟器) + +### 环境配置 + +**注:建议使用[mumu模拟器](https://mumu.163.com/)** + +参考[此文档](https://forum.libfekit.so/d/60-mumu12mo-ni-qi-an-zhuang-magiskhe-lsposed)安装Magisk和LSPosed + +记得打开mumu模拟器的可写系统盘和root权限 + +![](/assets/image/sham_env_1.png) + +![image-20240119154032682](/assets/image/sham_env_2.png) + +### 安装OpenShamrock + +从[OpenShamrock的Actions](https://github.com/whitechi73/OpenShamrock/actions)下载最新的OpenShamrock安装包,注意下载带有`all`字样的版本,如`Shamrock-v1.0.7.r253.81be383-all.zip`,解压,在mumu模拟器安装 + + +#### 配置Shamrock + +1. 在 Shamrock 的设置页面修改设置如图: + +启用被动 Websocket,并填写 LangBot 的 aiocqhttp 适配器监听的地址和端口(详见填写配置信息页)。 + +![img](/assets/image/sham_cfg_1.png) + +![img](/assets/image/sham_cfg_2.png) + +填写的被动 Websocket 地址为 LangBot 的 aiocqhttp 适配器监听的地址和端口,且路径必须为 `/ws`,例如 `ws://127.0.0.1:2280/ws`,详见填写配置信息页。 + +2. 并前往 LSPosed 的模块管理页面 启用模块 Shamrock + +![image-20240119154110877](/assets/image/sham_cfg_3.png) + +### 安装QQ + +参考[此页面](https://whitechi73.github.io/OpenShamrock/guide/faq.html#%E6%94%AF%E6%8C%81%E7%9A%84qq%E7%89%88%E6%9C%AC)给出的支持的QQ版本,选择最新即可 + +在[这里](https://qq.cn.uptodown.com/android/versions)选择对应的版本下载,在mumu模拟器安装即可 + +### 登录机器人QQ + +1. 打开QQ,登录机器人QQ,关闭QQ,重启模拟器。 +2. 启动 LSPosed,Shamrock 将会自动运行,启动 QQ。 +3. 打开 Shamrock 页面,此时应显示 `已激活` 并可以查看到账号信息和相关消息日志。 + +### 后续步骤 + +查看填写配置信息页,通过 aiocqhttp 适配器接入。 + +![img](https://cos.thelazy.cn/pictures/202405292250017.jpeg) + + +接下来请阅读[填写配置信息](/deploy/quick-config/config)。 diff --git a/docs/zh/deploy/platforms/qq/gocq.md b/docs/zh/deploy/platforms/qq/gocq.md new file mode 100644 index 000000000..09eaf3cfb --- /dev/null +++ b/docs/zh/deploy/platforms/qq/gocq.md @@ -0,0 +1,151 @@ +# 部署消息平台 go-cqhttp + +> 本文档仅为基本步骤,详细操作、答疑解惑及最新信息请前往[go-cqhttp官方文档](https://docs.go-cqhttp.org/)。 + +::: warning + +gocq未归档,但原开发者表示:[https://github.com/Mrs4s/go-cqhttp/issues/2471](https://github.com/Mrs4s/go-cqhttp/issues/2471) + +::: + +## 下载go-cqhttp + +从[go-cqhttp的Release](https://github.com/Mrs4s/go-cqhttp/releases/latest)下载最新的go-cqhttp可执行文件(建议直接下载可执行文件压缩包,而不是安装器) + +![下载gocq](/assets/image/dl_gocq.png) + +## 运行并配置go-cqhttp + +解压并运行,首次运行会询问需要开放的网络协议,**请填入`02`并回车,必须输入`02`❗❗❗❗❗❗❗** + +``` +C:\Softwares\go-cqhttp.old> .\go-cqhttp.exe +未找到配置文件,正在为您生成配置文件中! +请选择你需要的通信方式: +> 0: HTTP通信 +> 1: 云函数服务 +> 2: 正向 Websocket 通信 +> 3: 反向 Websocket 通信 +请输入你需要的编号(0-9),可输入多个,同一编号也可输入多个(如: 233) +您的选择是:02 +``` + +提示已生成`config.yml`文件,关闭go-cqhttp。 + +打开go-cqhttp同目录的`config.yml` + +1. 编辑账号登录信息 + +只需要修改下方`uin`和`password`为你要登录的机器人账号的QQ号和密码即可。 + +```yaml +account: # 账号相关 + uin: 1233456 # QQ账号 + password: '' # 密码为空时使用扫码登录 + encrypt: false # 是否开启密码加密 + status: 0 # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态 + relogin: # 重连设置 + delay: 3 # 首次重连延迟, 单位秒 + interval: 3 # 重连间隔 + max-times: 0 # 最大重连次数, 0为无限制 +``` + +2. 修改websocket端口 + +在`config.yml`下方找到以下内容 + +```yaml + - ws: + # 正向WS服务器监听地址 + address: 0.0.0.0:8080 + middlewares: + <<: *default # 引用默认中间件 +``` + +**将`0.0.0.0:8080`改为`0.0.0.0:6700`**,保存并关闭`config.yml`。 + +3. 配置签名服务器 + +按照如下填写, + +```yaml + sign-servers: + - url: 'https://qsign.trpgbot.com/' # 主签名服务器地址, 必填 + key: 'selfshare' + authorization: '-' + - url: 'https://qsign-v3.trpgbot.com/' # 次要服务器地址,选填 + key: 'selfshare' + authorization: '-' + + auto-register: true +``` + +写入文件/data/versions/6.json, + +```json +{ + "apk_id": "com.tencent.mobileqq", + "app_id": 537220362, + "sub_app_id": 537220362, + "app_key": "0S200MNJT807V3GE", + "sort_version_name": "9.0.56.16830", + "build_time": 1713424357, + "apk_sign": "a6b745bf24a2c277527716f6f36eb68d", + "sdk_version": "6.0.0.2560", + "sso_version": 21, + "misc_bitmap": 150470524, + "main_sig_map": 34869472, + "sub_sig_map": 66560, + "dump_time": 1713424357, + "qua": "V1_AND_SQ_9.0.56_6372_YYB_D", + "protocol_type": 6 +} +``` + +感谢zhaodice大佬带来的QQ 9.0.56签名服务器 + +4. 若您的服务器位于公网,强烈建议您填写`access-token` (可选) + +```yaml +# 默认中间件锚点 +default-middlewares: &default + # 访问密钥, 强烈推荐在公网的服务器设置 + access-token: '' +``` + +5. 配置完成,重新启动go-cqhttp + +## 登录 + +双击登录脚本,一段时间后,可以看到提示 + +![登录gocq](/assets/image/first_launch.png) + +把`Captcha link: `后边的链接复制下来,用Chrome或者Edge浏览器打开,按F12打开开发者工具 + +点开 `Network` + +![过验证码](/assets/image/get_captcha.png) + +在浏览器中完成验证, 在 `Network` 中找到名为 `cap_union_new_verify` 的请求, 在最下面 + +![获取token](/assets/image/get_gocq_login_token.png) + +ticket 后那一坨就是要输入回 go-cqhttp 的内容,但不包括首尾的双引号 + +**注意** + +- 复制的时候记得删掉引号(`"`, 前后都有一个), 那个不是ticket内容 +- 速度要快 +- 注意不要漏字符(没复制完, 后面还有很长) + +把复制下来的东西,粘贴到运行go-cq的终端中 + +![粘贴token](/assets/image/paste_token.png) + +> 若启动后登录不成功,请尝试根据[此文档](https://docs.go-cqhttp.org/guide/config.html#%E8%AE%BE%E5%A4%87%E4%BF%A1%E6%81%AF)修改`device.json`的协议编号。 + + +## 后续步骤 + +查看填写配置信息页,通过 Nakuru 适配器接入。 \ No newline at end of file diff --git a/docs/zh/deploy/platforms/qq/mirai.md b/docs/zh/deploy/platforms/qq/mirai.md new file mode 100644 index 000000000..8017c51fe --- /dev/null +++ b/docs/zh/deploy/platforms/qq/mirai.md @@ -0,0 +1,152 @@ +# 部署消息平台 mirai + +> 本文档仅为基本步骤,详细操作、答疑解惑及最新信息请前往[Mirai官方代码库](https://github.com/mamoe/mirai)、[Mirai官方论坛](https://mirai.mamoe.net/) + +::: warning + +此消息平台不稳定,不要使用 + +::: + +## 准备工作 + +> 注意:由于网络环境多样复杂,很多步骤中,有可能需要使用网络魔法,懂的都懂 + +1. 创建文件夹 + + 在你的任意盘(D,E,F什么都都可以)里面新建一个文件夹(例如命名qqbot) + +2. 创建子文件夹 + + 双击进入刚刚创建的文件夹,分别新建两个文件夹(建议命名保持一致):mirai、LangBot + +## 安装 mirai-console + +在 [mcl-installer 的 releases 页面](https://github.com/iTXTech/mcl-installer/releases)下载对应版本的安装包,找到最新的安装包,即有“Latest”标志的安装包,点击`show all 14 assets`,下载 mcl-installer-X.X.X-windows-amd64.exe,如图,则下载`mcl-installer-1.0.7-windows-amd64.exe`,保存在刚才创建的`mirai文件夹`中 +![屏幕截图 2023-11-23 223909.png](/assets/image/mirai_dl_1.png) + +![image-20231218170548696](/assets/image/mirai_dl_2.png) + +双击打开,一路回车。然后,你可以看到多出来一些文件。 + +![image-20231218170726759](/assets/image/mirai_dl_3.png) + +继续点击`mcl.cmd`,看不到文件后缀的,参考这个文章来显示文件后缀名:[如何查看文件后缀](https://jingyan.baidu.com/article/9158e0004c6cbea2541228da.html) + +双击后会显示如下图所示的类似界面,当出现`Enter to continue`时,表明你需要按回车健 + +![屏幕截图 2023-11-24 174015.png](/assets/image/mirai_dl_4.png) +![屏幕截图 2023-11-24 174650.png](/assets/image/mirai_dl_5.png) +当出现上面的一行绿字时,说明安装完成,到这里输入 exit,回车退出 + +## 安装 mirai-api-http + +打开 `mcl.cmd`,输入`mcl --update-package net.mamoe:mirai-api-http --channel stable-v2 --type plugin` ,回车 + +![image-20231218172022449](/assets/image/mah_dl_1.png) + +再次打开`mcl.cmd`,一路回车,直至退出。 + +再打开 mcl.cmd,看到如以下界面,说明成功 +![屏幕截图 2023-11-24 184618.png](/assets/image/mah_dl_2.png) +键盘按下`Ctrl+C`,退出。 +找到mira/config/net.mamoe.mirai-api-http/setting.yml文件,右键用记事本打开 + +![image-20231218172354159](/assets/image/mah_dl_3.png) + +把内容全部删掉,换成 + +```yml +adapters: + - ws +debug: true +enableVerify: true +verifyKey: yirimirai +singleMode: false +cacheSize: 4096 +adapterSettings: + ws: + host: localhost + port: 8080 + reservedSyncId: -1 +``` + +再打开 `mcl.cmd`,可以看到输出 +![image-20231218174112536](/assets/image/mah_dl_4.png) +则 mirai-api-http 安装成功。 + +## 配置签名服务 + +在这个链接下载qsign一键签名包,点击下载最新的那个zip压缩包,如下图的`qsign-1.2.1-beta-dev-d62ddce-all.zip`【写于2023年12月19日】,[点我跳转下载页面](https://github.com/MrXiaoM/qsign/releases) + +![image-20231219211250617](/assets/image/mirai_sign_1.png) + +下载完成后,解压得到如图文件 + +![image-20231219211634274](/assets/image/mirai_sign_2.png) + +将两个文件复制到mirai文件夹中 + +![image-20231219211904375](/assets/image/mirai_sign_3.png) + +打开`txlib`文件夹,发现有若干数字命名的文件夹,记录下最大的那个 + +![image-20231219212926059](/assets/image/mirai_sign_4.png) + +然后,双击运行`mcl.cmd`,稍等一会儿后,当提示`mirai-console started successfully`时,qsign就安装上了 + +之后,打开`mirai/config/top.mrxiaom.qsign`下的`config.yml`文件,用记事本打开 + +![image-20231219213026138](/assets/image/mirai_sign_5.png) + +![image-20231219213255993](/assets/image/mirai_sign_6.png) + +然后,按下`Ctrl+S`保存 + +然后,再次双击运行`mcl.cmd`,可以看到类似提示,如图 + +![image-20231219214603122](/assets/image/mirai_sign_7.png) + +## 运行mirai + +到这里,你已经安装并配置成功了,接下来,你就可以登录机器人QQ了 + +输入,其中 123456 是替换为你机器人的 QQ 号,67890 替换为你机器人 QQ 的密码 + +```bash +login 12345 67890 +``` + +然后,可以看到提示 + +![image-20231219215234389](/assets/image/run_mirai_1.png) + +把`Captcha link: `后边的链接复制下来,用Chrome或者Edge浏览器打开,按F12打开开发者工具 + +点开 `Network` + +![img5](/assets/image/get_captcha.png) + +在浏览器中完成验证, 在 `Network` 中找到名为 `cap_union_new_verify` 的请求, 在最下面 + +![img6](/assets/image/get_gocq_login_token.png) + +ticket 后那一坨就是要输入回 mirai 的内容,但不包括首尾的双引号 + +**注意** + +- 复制的时候记得删掉引号(`"`, 前后都有一个), 那个不是ticket内容 +- 速度要快 +- 注意不要漏字符(没复制完, 后面还有很长) + +把复制下来的东西,粘贴到运行mirai的终端中 + +![image-20231219220645708](/assets/image/paste_token.png) + +然后回车,如果运气好的话,会提示你要收验证码,输入yes并回车,之后把验证码输入上去,然后回车即可成功登录了 + +如果运气不好,报错code=237了,建议换号 + +## 后续步骤 + +查看填写配置信息页,通过 YiriMirai 适配器接入。 \ No newline at end of file diff --git a/docs/zh/deploy/platforms/qq/official.md b/docs/zh/deploy/platforms/qq/official.md new file mode 100644 index 000000000..886a7af34 --- /dev/null +++ b/docs/zh/deploy/platforms/qq/official.md @@ -0,0 +1,15 @@ +# 使用 QQ 官方机器人 API(使用websocket方式) + +:::warning +QQ 官方已停止维护 WebSocket 方式,请使用 Webhook 方式。 +::: + +QQ官方机器人所有人均可申请,可以在频道和群聊中使用,私聊也可。 + +## 注册 QQ 机器人 + +前往[QQ开放平台](https://q.qq.com/#/),找到下方的 QQ 机器人文档,按照指引注册 QQ 频道机器人。 + +## 获取凭证 + +注册完成后,前往机器人控制台,找到 开发设置,获取 `AppId(机器人ID)` 和 `AppSecret(机器人密钥)`,接下来进入填写配置信息步骤。 \ No newline at end of file diff --git a/docs/zh/deploy/platforms/qq/official_webhook.md b/docs/zh/deploy/platforms/qq/official_webhook.md new file mode 100644 index 000000000..eb9578840 --- /dev/null +++ b/docs/zh/deploy/platforms/qq/official_webhook.md @@ -0,0 +1,110 @@ +# 使用 QQ 官方机器人 API(使用webhook方式) + +本文章只提供测试版机器人的发布,具体机器人上线请按照 [发布流程](https://q.qq.com/qqbot/#/home) 进行部署。 + +## 注册 QQ 机器人(测试机器人) + +### 配置机器人基本信息 + +前往 [QQ开放平台](https://q.qq.com/#/) ,找到下方的 `应用管理` ,点击创建机器人,填写基本信息之后,进入机器人页面,如图: + +![机器人主页面](/assets/image/qqofficial1.png) + +`首页` 选项中的 `发布流程` 即为上线机器人的步骤。由于部署的是测试版机器人,所以只需要进行其中的 `资料` 和 `沙箱配置` 。
+ +先进行资料填写,然后点击沙箱配置。 + +#### 配置沙箱配置项 + +点击 `沙箱配置` 。 +如果要部署在QQ群中,那么按照 `QQ群ID` 下方的要求进行选择群聊,在消息列表配置中添加有私聊权限的用户。
+如果要部署在QQ频道中,那么按照 `频道ID` 下方的要求选择频道ID,机器人类型为0。 + +#### 配置开发管理项 + +点击 `开发管理` 。 + +![开发管理页面](/assets/image/qqofficial2.png) + +记录其中的 `AppID` , `Token` , `AppSecret` ,并将 LangBot 所在服务器的IP地址填写到IP白名单中。 + +## 填写适配器 + +将上文获取的 `AppID` , `Token` , `AppSecret` 填写入 [配置信息](/deploy/quick-config/config.md) 中的 qqofficial适配器(使用webhook方式)中,并且将 `enable` 设置为 `true` 。
+**配置项内容:** +```json +{ + "adapter": "qqofficial", + "enable": true, + "appid": "", + "secret": "", + "port": 2284, + "token": "" +}, +``` + + +## 配置回调地址 + +由于QQ官方机器人必须要求回调地址是 https 请求,但 LangBot 仅提供 http 方式,所以需要自行配置反向代理。
+本文建议使用 [Caddy](https://caddy2.dengxiaolong.com/docs/) 反向代理,操作流程如下文。 + +### 操作caddy流程 + +#### 安装caddy + +进入[Caddy安装文档](https://caddy2.dengxiaolong.com/docs/install)。选择对应自己操作系统的安装步骤,进行安装。 + +#### 填写Caddyfile + +本文假设使用 ubuntu 系统部署 LangBot ,那么在系统中,Caddyfile 的默认位置为 `/etc/caddy/Caddyfile`。 +使用 vim 或 nano 编辑 Caddyfile ,Caddyfile文件填写为: +```json +your_domain_name { + reverse_proxy 127.0.0.1:2284 +} +``` +例如,如果你有域名 testlb.com,并且解析地址为本机,同时开启**443**端口,那么填写为: +```json +testlb.com { + reverse_proxy 127.0.0.1:2284 +} +``` + +保存并且退出文件。 + +**注,Caddyfile文件的填写要求非常严苛,请按照正确的格式填写,如果遇到问题请自行查询Caddy文档或者询问AI。** + +#### 启动caddy +输入命令 +```bash +sudo systemctl start caddy +``` + +成功启动后,检查 Caddy 状态命令: +```bash +sudo systemctl status caddy +``` + + +#### 后续配置 + +若 Caddy 启动不成功,请自行阅读 [Caddy文档](https://caddy2.dengxiaolong.com/docs/quick-starts/caddyfile),或者加入 LangBot 社区群请求帮助。
+ +以下是一些可能出现的问题: + +- 没有开启443端口 +- 没有将域名解析到本机 +- 没有成功保存 Caddyfile + +### 设置管理端回调地址 + + +首先 **启动 LangBot** 。
+ +点击 机器人管理端网页中的 `回调配置`,勾选下面 `添加事件` 中的所有事件。 在请求地址中填写 Caddyfile 中设置的域名,后缀为/callback/command。
+比如域名为 testlb.com,那么请求地址中填写 testlb.com/callback/command ,点击确定配置。如果回调地址保存成功,那么意味着部署成功。若出现 `校验失败` 字样,请认真检查上述配置项是否填写正确。 + +## 发布方式 + +进入 `首页` 的发布流程 ,按照流程进行机器人发布,上线。 diff --git a/docs/zh/deploy/platforms/readme.md b/docs/zh/deploy/platforms/readme.md new file mode 100644 index 000000000..5dba87988 --- /dev/null +++ b/docs/zh/deploy/platforms/readme.md @@ -0,0 +1,18 @@ +# 消息平台说明 + +LangBot 需要连接消息平台 API 才能与用户交互,目前支持以下消息平台: + + +| 平台 | 状态 | 备注 |教程 | +| ------ | ---- | ---- | ---- | +| QQ 个人号 | ✅ | 使用普通的 QQ 号作为机器人,需要使用独立的协议端,支持 OneBot v11 和 go-cqhttp 协议 | [NapCat](/deploy/platforms/qq/aiocqhttp/napcat)
[Lagrange](/deploy/platforms/qq/aiocqhttp/lagrange)
[LiteLoaderQQNT](/deploy/platforms/qq/aiocqhttp/llonebot)
[go-cqhttp(不推荐)](/deploy/platforms/qq/gocq) | +| QQ 官方机器人 | ✅ | 接入 QQ 开放平台的机器人 API | [教程](/deploy/platforms/qq/official_webhook) | +| 企业微信 | ✅ | 企业内部机器人 | [教程](/deploy/platforms/wecom/wecom) | +| 企业微信客服 | ✅ | 企业对外机器人 | [教程](/deploy/platforms/wecom/wecomcs) | +| 微信公众号 | ✅ | 微信公众平台机器人 | [教程](/deploy/platforms/wxoa.md) | +| 个人微信 | ✅ | 个人微信机器人 | [Gewechat](/deploy/platforms/wechat/gewechat) | +| 飞书 | ✅ | | [教程](/deploy/platforms/lark) | +| 钉钉 | ✅ | | [教程](/deploy/platforms/dingtalk) | +| Discord | ✅ | | [教程](/deploy/platforms/discord) | +| Telegram | ✅ | | [教程](/deploy/platforms/telegram) | +| Slack | ✅ | | [教程](/deploy/platforms/slack) | \ No newline at end of file diff --git a/docs/zh/deploy/platforms/slack.md b/docs/zh/deploy/platforms/slack.md new file mode 100644 index 000000000..db01d0417 --- /dev/null +++ b/docs/zh/deploy/platforms/slack.md @@ -0,0 +1,55 @@ +# 接入 Slack 机器人 + +## 创建机器人 + +前往 [Slack的App平台](https://api.slack.com/apps)。 + +![Slack平台](/assets/image/slack_01.jpg) + +点击右上角的 `Create New App` ,选择从 `from a manifest` , 选择要部署机器人的工作区,选择下一步, +选择创建机器人。 + +进入左侧 `Basic Information` 选项,记录 `signing_secret`。 + +进入左侧 `OAuth & Permissions` ,往下拉到 `Scopes`,添加如下机器人权限: + +![机器人权限1](/assets/image/slack_02.jpg) + + +![机器人权限2](/assets/image/slack_03.jpg) + +添加上述权限之后,点击 `Install to your workspace`,记录下开头为 `xoxb-xxxxx`的token。
+ +**注:** +**若没有一次性添加成功权限,后续则需要重新安装App。**
+ +进入左侧 `App Home` 栏,滑到最下面有 `Message Tab`,打开并且勾选 +`Allow users to send Slash commands and messages from the messages tab`。 + +## 连接 LangBot + +进入左侧 `Event Subscriptions` ,打开开关,点击 `Subscribe to bot events`, +将如下权限添加进去: +![事件权限](/assets/image/slack_04.jpg) + +上述操作都完成之后,将 `signing_secret` 和 `bot token` 填写入[Slack适配器中](/deploy/quick-config/config.md#slack),并且将 `enable` 设置为 `true` 。 + +## 启动机器人 + + Slack 配置项在填写完成后,**启动 LangBot**。 + 然后在刚才Event Subscriptions的 `Request URL`中,填写入你的 LangBot 的部署地址。 + +::: info +由于 Slack 官方要求使用 https,可以参考[QQ官方机器人部署流程中的Caddy配置部分](/deploy/platforms/qq/official_webhook.html#%E9%85%8D%E7%BD%AE%E5%9B%9E%E8%B0%83%E5%9C%B0%E5%9D%80),注意端口使用 Slack 适配器配置的端口。 + +::: + +上述配置项都填写完成后,点击保存链接,若标识为绿色的**Verified**,那么就说明部署成功。 +否则查看上述配置项是否填写正确。 + +## 效果图 + + + +![效果图](/assets/image/slack_05.jpg) + diff --git a/docs/zh/deploy/platforms/telegram.md b/docs/zh/deploy/platforms/telegram.md new file mode 100644 index 000000000..e99b8ebb4 --- /dev/null +++ b/docs/zh/deploy/platforms/telegram.md @@ -0,0 +1,37 @@ +# 接入 Telegram 机器人 + +## 创建机器人 + +前往 [Telegram 机器人创建页面](https://t.me/botfather),按照提示操作,创建一个机器人。 + +![Telegram 机器人创建](/assets/image/telegram_01.png) + +![Telegram 机器人创建](/assets/image/telegram_02.png) + +创建完成后,BotFather 会返回一个 API Token,请妥善保存。接下来关闭`Privacy Mode`,以便在群聊中使用。 + +![Telegram 机器人 API Token](/assets/image/telegram_03.png) + +## 在 LangBot 中填写信息并启动 + +根据[填写配置信息](/deploy/quick-config/config)中的 Telegram 适配器配置,填写相关信息。 +将上一步获取的 API Token 填写到配置中,`markdown_card` 选项为是否启用 Markdown 形式的回复。 + +```json + { + "adapter": "telegram", + "enable": true, + "token": "xxxxxxx", + "markdown_card":false + }, +``` + +填写完成后启动 LangBot,若成功配置,日志中会出现`[02-02 16:48:15.263] manager.py (68) - [INFO] : 初始化平台适配器 1: telegram`的字样,保持 LangBot 运行。 + +## 使用机器人 + +现在在群里或者私聊机器人都可以正常使用了。 + +![Telegram 机器人使用](/assets/image/telegram_04.png) + +![Telegram 机器人使用](/assets/image/telegram_05.png) \ No newline at end of file diff --git a/docs/zh/deploy/platforms/wechat/gewechat.md b/docs/zh/deploy/platforms/wechat/gewechat.md new file mode 100644 index 000000000..d07ef8737 --- /dev/null +++ b/docs/zh/deploy/platforms/wechat/gewechat.md @@ -0,0 +1,99 @@ +# 通过 Gewechat 接入个人微信 + +:::warning +LangBot接入gewechat,仅供娱乐,请勿用于违法违规行为,否则后果自负。 +::: + +**本教程要求 LangBot 以 Docker 容器部署**,请根据 LangBot 部署文档将 LangBot 部署到 Docker 中。 + +:::info +- 推荐使用 Ubuntu Linux 系统部署。 +- 推荐使用[阿里云,服务器价格低至 38 元一年,更可以享受8折优惠](https://www.aliyun.com/minisite/goods?userCode=ys4ad8gs),系统选择 Ubuntu 22.04 或 24.04。 +::: + +## 创建 Docker 网络 + +我们需要将 Gewechat 和 LangBot 部署到同一个 Docker 网络中,方便它们互相通信。 + +```bash +docker network create langbot-network +``` + +在 LangBot 目录的 `docker-compose.yaml` 文件中添加网络配置(添加到 `services.langbot` 字段下,并在 `networks` 字段下添加 `langbot-network` 网络配置): + +```yaml +services: + langbot: + ... + networks: + - langbot-network + ... + +networks: + langbot-network: + external: true +``` + +在下一步部署 Gewechat 时,请在启动命令(docker run 命令)中的`-itd`后添加额外的网络配置`--network langbot-network`。 + +```bash +# 例如原命令为 +docker run -itd -v /root/temp:/root/temp -p 2531:2531 -p 2532:2532 --privileged=true --name=gewe gewe /usr/sbin/init + +# 添加网络配置后,命令变为 +docker run -itd --network langbot-network -v /root/temp:/root/temp -p 2531:2531 -p 2532:2532 --privileged=true --name=gewe gewe /usr/sbin/init +``` + +## 部署 Gewechat + +请查看 [Gewechat 文档](https://github.com/Devo919/Gewechat) 执行到 `启动服务` 步骤。 + +## 在 LangBot 中填写信息并启动 + +根据[填写配置信息](/deploy/quick-config/config)中的个人微信适配器配置,填写 LangBot 相关配置信息。 + +```json + { + "adapter": "gewechat", + "enable": true, + "gewechat_url": "http://gewe:2531", + "gewechat_file_url": "http://gewe:2532", + "port": 2286, + "callback_url": "http://langbot:2286/gewechat/callback", + "app_id": "", + "token": "" + } +``` + +- `enable` 是否启用个人微信适配器,请修改为 `true` +- `gewechat_url` 上一步部署的 Gewechat 容器地址,端口默认为 2531,不需要填写路径 +- `gewechat_file_url` gewechat文件下载地址,端口默认为 2532,主机和 `gewechat_url` 相同,不需要填写路径 +- `port` LangBot 监听 Gewechat 消息的端口,默认 2286,非必要勿修改 +- `callback_url` 回调地址,是 Gewechat 容器推送消息给 LangBot 容器的地址,需要填写完整路径,例如 `http://langbot:2286/gewechat/callback`,端口与 `port` 一致,路径必须为 `/gewechat/callback` +- `app_id` 和 `token` **请勿填写**,这是用于存储登录信息的,在首次启动扫码登录后会自动保存 + +:::info +在这里我们将`gewechat_url`的主机名设置为`gewe`,即为上一步部署的 Gewechat 容器名称。 +将`callback_url`的主机名设置为`langbot`,即为上一步部署的 LangBot 容器名称。 + +- 如果你按照本教程要求部署,使用上述默认的即可。 +- 如果你使用了其他的容器名称,或者其他情况,请自行更改。 +::: + +## 启动 LangBot + +按照部署 LangBot 文档中的启动命令启动 LangBot。 + +LangBot 启动后,会显示一个二维码,请使用个人微信扫描该二维码进行登录。 + +![alt text](/assets/image/gewechat_01.png) + +成功登录后,会显示登录信息,并开始监听个人微信消息。 + +![alt text](/assets/image/gewechat_02.png) + +:::info +登录后会将`app_id`和`token`保存到配置文件中,下次启动时不需要再次扫码登录。 +::: + +现在即可私聊或在群聊中与 LangBot 对话。 \ No newline at end of file diff --git a/docs/zh/deploy/platforms/wecom/wecom.md b/docs/zh/deploy/platforms/wecom/wecom.md new file mode 100644 index 000000000..1a68d9f2d --- /dev/null +++ b/docs/zh/deploy/platforms/wecom/wecom.md @@ -0,0 +1,71 @@ +# 部署企业微信机器人 + +部署企业微信机器人接入 LangBot 。 + +:::info +此种接入方式为企业内部自建应用,是在企业内部使用的,若需要对外接待,请查看[企业微信客服接入方案](wecomcs.md)。 +::: + + +## 创建机器人 + +进入[企业微信管理后台](https://work.weixin.qq.com/),登陆账号,进入主页面后,点击` 应用管理 `,` 自建 `,` 创建应用 `,填写机器人基本信息,创建好之后,会出现类似这样的界面: +![机器人页面](/assets/image/wecom1.png) + +## 设置回调地址 + +### 获取企业微信配置项 + +1. 打开企业微信管理后台主页,点击`我的企业`,记录下最下面的企业ID。 + +![企业ID](/assets/image/wecom2.png) + +2. 开启通讯录同步权限 + +:::info +- 此配置项是为了实现 LangBot 的群发消息,具体代码位于libs/wecom_api/api.py 。 +- 目前 LangBot 仍在开发,所以未实现此配置项的相关功能。 +- 此配置项可以填写入随机字符,**不能为空**。 +::: + +![通讯录权限](/assets/image/wecom5.png) + +点击`安全与管理`,`管理工具`,`通讯录同步` + +![通讯录同步secret](/assets/image/wecom3.jpg) + +点击`查看secret`,记录下来,这是 contacts_secret(通讯录同步 secret)。 + +3. 点击`应用管理`,找到刚才创建的机器人,查看机器人的 secret ,记录下来。 + +![机器人secret](/assets/image/wecom4.png) + +至此,已经获得了三个配置项,分别是 corpid(企业ID),secret(机器人 secret),contacts_secret(通讯录同步 secret)。 +将他们填写入[企业微信适配器](/deploy/quick-config/config.md#企业微信适配器),并且将 `enable` 设置为 `true` 。 + +### 配置回调地址 + +进入机器人页面。 + +点击最下方的`企业可信IP`,将部署 LangBot 的服务器添加进去。 + +点击` 接收消息 `,` 设置API接收 `,开始填写接收服务器消息配置。 + +URL填写为` http://your_ip_address:2290/callback/command `,你的IP地址就是部署LangBot的服务器的地址。 + +Token 和 EncodingAESKey 点击随机获取,并记录下来,填写到[企业微信适配器](/deploy/quick-config/config.md#企业微信适配器)。 + +## 保存回调地址 +当前面五个配置项已经正确获取,并且准确的填入到企业微信适配器中,那么**启动 LangBot**。
+回到配置回调地址页面并且点击保存,如果以上的配置项填写正确,那么可以保存成功,这意味着企业微信和 LangBot 可以进行通信(部署成功),如果出现**openapi 请求回调地址不通过**,请再三检查你的配置项填写是否正确。 + + + + + + + + + + + diff --git a/docs/zh/deploy/platforms/wecom/wecomcs.md b/docs/zh/deploy/platforms/wecom/wecomcs.md new file mode 100644 index 000000000..f148263eb --- /dev/null +++ b/docs/zh/deploy/platforms/wecom/wecomcs.md @@ -0,0 +1,38 @@ +# 部署企业微信客服 + +:::info + +本文详细讲述 LangBot 部署到企业微信客服号的过程,此功能可以将客服号与普通微信进行对话。若只需要在企业微信内部使用,请参考[企业微信内部应用实现](wecom.md)。 + +**部署企业微信客服号需要企业资质**,具体查看[企业微信客服号接入指南](https://developer.work.weixin.qq.com/document/path/94638),并且根据此文档提供对应的企业资质证明。 + +::: + +## 效果图 + +![效果图](/assets/image/wecomcs_01.jpg) + +## 部署指南 + +企业微信客服号需要四个配置项,如下: + +```json +{ + "adapter": "wecomcs", + "enable": true, + "port": 2289, + "corpid": "", + "secret": "", + "token": "", + "EncodingAESKey": "" +} +``` + +后续的配置方式和配置项和[企业微信内部应用](wecom.md)一样,只是不需要 `contacts_secret`。 + +## 注意事项 + +1. 一定要按照上文的企业微信官方文档步骤走,将客服账号添加入 `api 管理`中。 +2. 步骤与企业微信内部应用一样,不要漏看,同样需要保存回调地址,因为本质上只是在企业微信内部应用上增加了其他的权限。 +3. LangBot 不会读取敏感信息如聊天记录和企业资质内容。 + diff --git a/docs/zh/deploy/platforms/wxoa.md b/docs/zh/deploy/platforms/wxoa.md new file mode 100644 index 000000000..f8c24f568 --- /dev/null +++ b/docs/zh/deploy/platforms/wxoa.md @@ -0,0 +1,52 @@ +# 部署微信公众号机器人 + +部署微信公众号机器人接入 LangBot 。 + +## LangBot 微信公众号接入模式 + +目前,LangBot 提供两种方式接入微信公众号: + +1. **传统收发消息模式** + - 公众号要求请求必须在 **15 秒内** 处理完成,超时的 AI 生成内容将无法发送。 + - 当 AI 生成内容超时发生后,LangBot 会在控制台打印请求超时信息。 + +2. **“发送任意文字回复消息”模式** + - 该方法可突破 **15 秒** 限制,但 **过长的文本** 可能无法成功发送。 + - 使用此方法时,给公众号发消息,公众号会回复“AI正在思考中,请发送任意内容获取回答”,此时,需要发送任意内容获取回答。 + +如需更复杂的功能,请联系 **LangBot 团队** 进行定制化支持。 + +## 创建机器人 + +进入[微信公众平台](https://mp.weixin.qq.com/),如果已经有公众号账号,那么直接扫码登录,进入控制台。 +如果之前没有注册过公众号,那么点击立即注册,选择 `公众号`,依次填写信息,进入控制台。控制台是这样的: +![控制台页面](/assets/image/oa1.png) + + +## 设置回调地址 + +### 获取配置项 + +点击`设置与开发`,`开发接口管理`,出现这样的页面: +![设置开发项](/assets/image/oa2.png) + +记录下来`开发者ID(AppID)`,`开发者密码(AppSecret)`,并将部署 LangBot 的服务器添加入`IP白名单`。 + +### 设置反向代理 + +由于微信公众号的只支持http(80端口),https(443端口),所以本文假设80端口已被占用,使用443端口反向代理至 LangBot 。
+具体的反向代理配置教程与[QQ官方机器人反向代理配置](/deploy/platforms/qq/official_webhook.md#操作caddy流程)相同,只是将`reverse_proxy 127.0.0.1:2284`改为`reverse_proxy 127.0.0.1:2287`。 + +### 保存回调地址 + +点击设置服务器配置,输入`Token`,`EncodingAESKey`,并将消息加解密方式改为`安全模式`。
+至此,将获取到的四个配置项( AppID , AppSecret , token , EncodingAESKey )填入[微信公众号配置项](/deploy/quick-config/config.md#微信公众号适配器)。
+ +在配置项中,`Mode`选项为选择的接入模式,其中默认为`drop`,`drop` 为传统收发消息模式,`passive` 为发送任意文字获取回复模式。
+`LoadingMessage`选项为加载信息,可以更改为其他内容,仅在模式为`passive`下有效。将 `enable` 设置为 `true` 。 + +填写成功后,**启动 LangBot 。**
+ +将 URL 填写为`https://your_domain_name/callback/command`,其中的 `your_domain_name` 就是 Caddy 中填写的域名。点击保存。如果可以保存成功,那么意味着部署成功。如果出现**系统发生错误,请稍后重试**,那么请重新检查以上配置内容是否填写正确。 + + diff --git a/docs/zh/deploy/quick-config/config.md b/docs/zh/deploy/quick-config/config.md index 9d884d16f..28c2de67a 100644 --- a/docs/zh/deploy/quick-config/config.md +++ b/docs/zh/deploy/quick-config/config.md @@ -9,7 +9,7 @@ ## platform.json 修改此配置文件以指定需要连接的消息平台,只需要关注`platform-adapters`字段。 -目前支持 `go-cqhttp`、`aiocqhttp`、`qq-botpy` 消息平台适配器,也可以同时启用多个同种类或不同种类的平台适配器。 +目前支持 `go-cqhttp`(QQ逆向)、`aiocqhttp`(QQ逆向)、`qq-botpy`(QQ官方)、`wecom`(企业微信官方) 等多种消息平台适配器,也可以同时启用多个同种类或不同种类的平台适配器。 请根据你部署的消息平台的情况选择填写。 ::: info @@ -40,7 +40,7 @@ `access-token`:设置访问密钥,与 NapCat/Lagrange/LLOneBot 等框架中设置的保持一致 -### qq-botpy 适配器 +### qq-botpy 适配器(使用websocket方式) 用于接入 QQ 官方机器人 API。 @@ -72,6 +72,33 @@ - `direct_message` QQ 频道私聊消息 - `public_messages` Q群 和 列表私聊消息 +### qqofficial 适配器(使用webhook方式) + +用于接入QQ官方机器人(webhook接入)。 + +```json +{ + "adapter": "qqofficial", + "enable": false, + "appid": "", + "secret": "", + "port": 2284, + "token": "" +}, +``` + +`"adapter": "qqofficial"`,无需改动。 + +`enable`:是否启用,配置完成后请将其设为`true` + +`appid`:申请到的QQ官方机器人的appid + +`secret`:申请到的QQ官方机器人的secret + +`token`: 申请到的QQ官方机器人的token + +`port`: 启动端口,一般不改动。 + ### Nakuru 适配器 用于接入 go-cqhttp。 @@ -99,11 +126,163 @@ `token`:验证密钥,,与`go-cqhttp`的`config.yml`里面的保持一致 +### 企业微信适配器 + +用于接入企业微信机器人,如果不清楚这些内容应该填写什么,请查看[配置企业微信](/deploy/platforms/wecom/wecom.md)。 + +```json +{ + "adapter": "wecom", + "enable": false, + "host": "0.0.0.0", + "port": 2290, + "corpid": "", + "secret": "", + "token": "", + "EncodingAESKey": "", + "contacts_secret": "" +}, +``` +`"adapter": "wecom"`,无需改动。 + +`enable`:是否启用,配置完成后请将其设为`true` + +`host`:运行 企业微信回调地址 的主机地址,一般不改动 + +`port`:运行 企业微信回调地址 的监听端口,一般不改动 + +`corpid`,`secret`,`token`,`EncodingAESKey`,`contacts_secret`都在企业微信配置项页中获取。 + +### 微信公众号适配器 + +用于接入微信公众号机器人。 + +```json +{ + "adapter":"officialaccount", + "enable": true, + "token": "", + "EncodingAESKey":"", + "AppSecret":"", + "AppID":"", + "Mode":"drop", + "LoadingMessage":"AI正在思考中,请发送任意内容获取回复。", + "host": "0.0.0.0", + "port": 2287 +} +``` + +`"adapter": "officialaccount"`,无需改动。 + +`enable`:是否启用,配置完成后请将其设为`true` + +`Mode`:具体参照微信公众号部署页面 + +`LoadingMessage`: 加载信息,可更改为其他内容,仅在模式为 `passive` 下有效 + +`host`:运行 微信公众号回调地址 的主机地址,一般不改动 + +`port`:运行 微信公众号回调地址 的监听端口,一般不改动 + +`AppSecret`,`token`,`EncodingAESKey`,`AppID`都在微信公众号配置项页中获取。 + +## 个人微信 + +具体用法请查看[配置个人微信](/deploy/platforms/wechat/gewechat.md)。 + +```json +{ + "adapter": "gewechat", + "enable": true, + "gewechat_url": "http://gewe:2531", + "port": 2286, + "callback_url": "http://langbot:2286/gewechat/callback", + "app_id": "", + "token": "" +} +``` + +## 飞书 + +具体用法请查看[配置飞书](/deploy/platforms/lark.md)。 + +```json +{ + "adapter": "lark", + "enable": false, + "app_id": "cli_abcdefgh", + "app_secret": "XXXXXXXXXX", + "bot_name": "LangBot", + "enable-webhook": false, + "port": 2285, + "encrypt-key": "xxxxxxxxx" +}, +``` + +## 钉钉适配器 + +具体用法请查看[配置钉钉机器人](/deploy/platforms/dingtalk.md)。 + +```json +{ + "adapter":"dingtalk", + "enable": false, + "client_id":"", + "client_secret":"", + "robot_code":"", + "robot_name":"", + "markdown_card":false +}, +``` + +## Discord + +具体用法请查看[配置 Discord](/deploy/platforms/discord.md)。 + +```json +{ + "adapter": "discord", + "enable": false, + "client_id": "1234567890", + "token": "XXXXXXXXXX" +}, +``` + +### Slack + +具体用法请查看[配置Slack](/deploy/platforms/slack.md)。 + +```json +{ + "adapter":"slack", + "enable":false, + "bot_token":"", + "signing_secret":"", + "port":2288 +} +``` + +### 企业微信客服号 + +具体用法请查看[配置企业微信客服号](/deploy/platforms/wecom/wecomcs.md) + +```json +{ + "adapter": "wecomcs", + "enable": false, + "port": 2289, + "corpid": "", + "secret": "", + "token": "", + "EncodingAESKey": "" +} +``` + ## provider.json -修改此配置文件以设置所连接的 AI 提供商的相关信息,目前支持 `openai(GPT)`, `anthropic(claude)`, `moonshot(月之暗面)` 三种接口及对应模型。 +修改此配置文件以设置所连接的 AI 提供商的相关信息。 -> 如果你没有OpenAI API Key,你可以[在此获取](https://api.qhaigc.net/) +> 如果没有OpenAI API Key,你可以[在此获取](https://api.qhaigc.net/) 以下仅讲解启用 OpenAI 接口的方式,具体设置方法请查看 [功能配置`provider.json` 页](/config/function/provider)。 @@ -149,4 +328,4 @@ 阅读并完成以上教程后,请根据你部署 LangBot 的方式重启,你应该可以成功使用了,如果不能请再次阅读(你或许漏做或错做某些步骤),如果完全阅读并充分理解本文档后仍然确实无法使用,你可以在[这里](/insight/community.html)找到交流群。 -::: \ No newline at end of file +::: diff --git a/docs/zh/deploy/update.md b/docs/zh/deploy/update.md index eb4a5b03e..991407f0c 100644 --- a/docs/zh/deploy/update.md +++ b/docs/zh/deploy/update.md @@ -2,7 +2,13 @@ ## 使用 Docker(或基于 Docker 的一键部署) -直接拉取最新的镜像即可。 +请在 `docker-compose.yaml` 目录下执行: + +```bash +docker compose up --force-recreate --pull always -d +``` + +此命令将拉取最新的 LangBot 镜像并重建容器。 ## 手动部署 diff --git a/docs/zh/develop/dev-config.md b/docs/zh/develop/dev-config.md new file mode 100644 index 000000000..f09c9650c --- /dev/null +++ b/docs/zh/develop/dev-config.md @@ -0,0 +1,24 @@ +# 开发配置 + +> 此文档基于 LangBot 4.0 版本编写 + +LangBot 分为前端和后端,前端使用 Next.js 开发,后端通过 Quart(Flask 的异步版本)开发。 + +## 后端 + +代码位于 `pkg` 目录下,由根目录的 `main.py` 文件引导启动。 + +安装依赖 + +```bash +pip install -r requirements.txt +``` + +启动后端 + +```bash +python main.py +``` + +此时配置文件会自动生成到 `data/config.yaml` 文件中。 + diff --git a/docs/zh/index.md b/docs/zh/index.md index 12d7ea0ae..8c7b3173f 100644 --- a/docs/zh/index.md +++ b/docs/zh/index.md @@ -1,39 +1,3 @@ ---- -# https://vitepress.dev/reference/default-theme-home-page -layout: home - -hero: - name: "LangBot" - image: - src: /zh/public/langbot-logo-block.png - alt: LangBot-logo - text: "" - tagline: "原名 QChatGPT;😎高稳定、🧩支持插件、🦄多模态的 LLM QQ / QQ频道 / OneBot 机器人 / Agent 平台" - actions: - - theme: brand - text: 查看文档 - link: /zh/insight/guide - - theme: alt - text: 代码仓库 - link: https://github.com/RockChinQ/LangBot - -features: - - title: 丰富生态 - details: 支持事件监听、Agent 等插件扩展方式,具有数十种插件生态 - - - title: 功能直观 - details: 集成黑名单、限速、选择响应、上下文控制、Prompt 管理等多种常用功能 - - - title: 多种模型 - details: 适配 OpenAI、Moonshot、Anthropic、Gitee AI 等多个提供商,同时深度支持 OneAPI - - - title: 高稳定性 - details: 采用主流的设计思想,架构清晰,具有高测试覆盖率 - - - title: 快速部署 - details: 支持多种部署方式,包括 宝塔一键部署、Docker 部署、源码部署 - - - title: 持续维护 - details: 长期维护、迭代,持续跟进大模型领域的最新应用实践 ---- - + diff --git a/docs/zh/insight/community.md b/docs/zh/insight/community.md index b84b31e22..ab32c6d7a 100644 --- a/docs/zh/insight/community.md +++ b/docs/zh/insight/community.md @@ -1,21 +1,25 @@ # 社区资源 -## 视频教程 - - [【8月最新】5min部署 最强AI语音聊天+酒馆角色扮演+QQ机器人,全新角色扮演语音聊天QQ机器人](https://www.bilibili.com/video/BV1vypZeBEW1/?share_source=copy_web&vd_source=1335a044d4fd926920999a0e3ba0a731) +## 简化版教程 +> 简化版教程:如视频教程、更简单的文字教程,适合小白 +收录于:https://blog.thelazy.top/tags/langbot ## 本项目交流 QQ 群 -### 社区群 - > 遇到问题请先认真阅读文档,如无法解决再加群提问 -Lazy的交流群:619154800 ([链接](https://qm.qq.com/q/1K9GjQuza)) +### 🥰 社区总群 -### 官方群 +解答各种问题 -> 官方群不解答部署问题 +- LangBot 社区(三):966235608 ([链接](https://qm.qq.com/q/JLi38whHum)) +- 【已满】LangBot 社区(二):1030838208 ([链接](https://qm.qq.com/q/PF9OuQCCcM)) +- 【已满】LangBot 社区(一):619154800 ([链接](https://qm.qq.com/q/1K9GjQuza)) -四群:195992197 ([链接](https://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=cSekvWmyezfCE4O8gXS7lSjkmPinjzpP&authKey=G4jHfz2%2BtQawxCRhn1ZRrQiI8bTvlepQubZL6F9fymFuz8jqZZ4FkYh6lhKLMCd9&noverify=0&group_code=195992197)) \ No newline at end of file +### 🧩 插件开发群 + +插件开发、发布、交流 + +- LangBot 插件开发:1032327138 ([链接](https://qm.qq.com/q/G7ENGTjeou)) diff --git a/docs/zh/insight/guide.md b/docs/zh/insight/guide.md index 03e1b042c..9ea2ce36f 100644 --- a/docs/zh/insight/guide.md +++ b/docs/zh/insight/guide.md @@ -7,10 +7,14 @@ - 阅读 部署 LangBot 页,选择部署方式 - 阅读 部署消息平台页,选择要使用的消息平台 - 阅读 填写配置信息页,根据情况填写配置 + ## 使用板块 + - 阅读命令语法了解机器人可用命令,可以在对话中实现切换预设、切换模型等 - 阅读插件列表,获得插件,增强功能 - 阅读常见问题,可有助于解决部署和使用时的问题 + ## 配置板块 + - 功能配置,具体解释所有的配置信息,实现更多自定义需求 - 元数据配置,控制敏感词、模型列表等 diff --git a/docs/zh/insight/intro.md b/docs/zh/insight/intro.md index adc2a330a..791f87d4f 100644 --- a/docs/zh/insight/intro.md +++ b/docs/zh/insight/intro.md @@ -9,6 +9,7 @@ - Anthropic:Claude 系列 - [OneAPI](https://github.com/songquanpeng/one-api)接口聚合平台:Google Gemini Pro / Azure / Anthropic Claude / 智谱 ChatGLM / 百度文心一言 / 讯飞星火认知 / 阿里通义千问 / 360 智脑等市面上所有 LLM 官方接口 - [free-one-api](https://github.com/RockChinQ/free-one-api)逆向工程库聚合平台:ChatGPT / Claude / Google Bard / gpt4free / 通义千问 +- [PPIO 派欧云 API](https://ppinfra.com/user/register?invited_by=QJKFYD&utm_source=github_langbot):低价开源模型供应商,支持最新的 Llama、DeepSeek、通义千问、智谱等系列模型 ## 功能点列举 @@ -85,19 +86,6 @@ - -## 限制 - -- ❗OpenAI 官方关于模型生成内容的警告: - - May occasionally generate incorrect information(可能会生成不正确的信息) - - May occasionally produce harmful instructions or biased content(可能会产生有害说明或有偏见的内容) - - Limited knowledge of world and events after 2021(对2021年后的世界和事件的了解有限) -- ❗模型无思维能力,仅针对传入的上下文根据数据集生成内容,请勿过于信任其输出 -- ❗模型不了解其运行平台及其使用的模型版本,任何针对其实现原理的问题答案均视为无效,请以项目文档为准 - -以上是关于此程序的限制的最高优先级描述,其他方式(如询问机器人相关信息)获得的描述均应被视为无效 -由于模型生成的内容导致的一切损失,本项目概不负责 - ## 使用方式 对话及绘图功能均直接调用OpenAI的模型进行处理,与机器人程序无关,这意味着模型并不了解此项目的相关信息(如实现方式、技术栈、运行平台等),除非在预设值中写入相关信息。 diff --git a/docs/zh/plugin/dev/api-ref.md b/docs/zh/plugin/dev/api-ref.md index 70307af43..1577a7588 100644 --- a/docs/zh/plugin/dev/api-ref.md +++ b/docs/zh/plugin/dev/api-ref.md @@ -4,14 +4,14 @@ [[toc]] ::: -以下 API 仅针对 事件插件 可用,组件扩展形式请自行阅读源码。 +## 事件 API -## 消息处理 +以下 API 仅在事件处理函数中可用。 ### 回复消息 ```python -ctx.reply(message_chain: MessageChain) +await ctx.reply(message_chain: MessageChain) ``` 回复此次事件的发起会话。 @@ -23,7 +23,7 @@ ctx.reply(message_chain: MessageChain) > 由于 QQ 官方 API 对主动消息的支持性很差,故若用户使用的是 QQ 官方 API,发送主动消息可能会失败 ```python -ctx.send_message(target_type: str, target_id: str, message_chain: MessageChain) +await ctx.send_message(target_type: str, target_id: str, message_chain: MessageChain) ``` 发送主动消息给目标。 @@ -32,8 +32,6 @@ ctx.send_message(target_type: str, target_id: str, message_chain: MessageChain) - `target_id`:目标 ID(QQ 号或群号) - `message_chain`:[消息链对象](./messages.md),程序能自动转换为目标消息平台消息链 -## 事件处理 - ### 阻止事件默认行为 ```python @@ -57,3 +55,110 @@ ctx.add_return(name: str, value: Any) ``` 添加返回值,事件返回值均为**可选**的,每个事件支持的返回值请查看`pkg.plugin.events`中的每个事件的注释。 + +## 请求 API + +`请求(Query)`指的是用户向 LangBot 发送一个问题时,LangBot 处理该问题的程序上下文。此段落的 API 用于与这些上下文交互。 + +- 事件处理函数中,Query 对象一般位于`ctx.event.query` + +### 设置请求变量 + +```python +ctx.event.query.set_variable(key: str, value: typing.Any) +``` + +请求变量是与此次 Query 绑定的一个 `dict`,其中包含了一些程序上下文信息。如果使用的是 Dify 或者 阿里云百炼 等 LLMOps 的runner,[这些变量将被传入对应平台的 API 作为变量](/config/function/provider.html#%E8%AF%B7%E6%B1%82%E5%8F%98%E9%87%8F)。 +如果您需要使用插件设置变量,建议在`PromptPreProcessing`事件时处理。 + +- `key`:该变量的名称 +- `value`:该变量的值 + +### 获取请求变量 + +```python +ctx.event.query.get_variable(key: str) +``` + +获取请求变量。 + +- `key`:变量名称 +- 返回值:`typing.Any` + +### 获取所有请求变量 + +```python +ctx.event.query.get_variables() +``` + +获取此 Query 对象所有已设置的变量值。 + +- 返回值:`dict[str, typing.Any]` + + +## LangBot API + +以下 API 是 LangBot 直接提供给插件调用的,可以在事件处理函数之外调用。 + +- `host` 表示 `pkg.plugin.context.APIHost` 类的对象,会被包含在每个插件类中。 + +### 获取已启用的消息平台适配器列表 + +```python +host.get_platform_adapters() +``` + +获取已启用的消息平台适配器列表。 + +- 返回值:`list[pkg.platform.adapter.MessageSourceAdapter]` + +### 发送主动消息 + +```python +await host.send_active_message(adapter: pkg.platform.adapter.MessageSourceAdapter, target_type: str, target_id: str, message_chain: MessageChain) +``` + +发送主动消息给目标。 + +- `adapter`:消息平台适配器,通过 `host.get_platform_adapters()` 获取并选择其中一个 +- `target_type`:目标类型,可选值:`"person"`、`"group"` +- `target_id`:目标 ID(QQ 号或群号) +- `message_chain`:[消息链对象](./messages.md),程序能自动转换为目标消息平台消息链 + +:::info +- 某些消息平台可能不支持主动消息,或有严格限制 +- 某些消息平台适配器(例如`aiocqhttp`)是作为服务端等待消息平台连接上来推送消息,在连接成功之前,发送主动消息会失败 +::: + +示例: + +```python +import asyncio +import pkg.platform.types as platform_types + +... + + # 某个插件的 initialize 函数 + # 此代码将在 LangBot 启动 10 秒后尝试向 QQ 号 1010553892 发送消息 "hello, world!" + async def initialize(self): + print(self.host.get_platform_adapters()) + + async def send_message(): + print("send message start waiting") + await asyncio.sleep(10) + + try: + await self.host.send_active_message( + adapter=self.host.get_platform_adapters()[0], + target_type="person", + target_id="1010553892", + message=platform_types.MessageChain([ + platform_types.Plain("hello, world!") + ]) + ) + except Exception as e: + traceback.print_exc() + print("send message end") + + asyncio.get_running_loop().create_task(send_message()) +``` \ No newline at end of file diff --git a/docs/zh/plugin/dev/extension.md b/docs/zh/plugin/dev/extension.md index a6040cb43..a5ef49945 100644 --- a/docs/zh/plugin/dev/extension.md +++ b/docs/zh/plugin/dev/extension.md @@ -1,5 +1,9 @@ # 组件扩展 +::: warning +2025年3月~4月:我们正在进行 4.0 版本重构,组件定义变化较大,现阶段不建议使用组件扩展。请优先考虑使用基于事件的插件接口。 +::: + > 请先阅读[插件介绍页](/plugin/plugin-intro) :::info 目录 diff --git a/docs/zh/plugin/dev/messages.md b/docs/zh/plugin/dev/messages.md index 35a590877..888b4fadd 100644 --- a/docs/zh/plugin/dev/messages.md +++ b/docs/zh/plugin/dev/messages.md @@ -64,7 +64,15 @@ msg_chain = MessageChain([ ## 消息平台事件 -这些事件不同于 LangBot 插件事件,是消息平台系统独立的一套事件系统。这些事件是 LangBot 插件事件的源事件,可以从每个 Query.message_event 取得。 +这些事件不同于 LangBot 插件事件,是消息平台系统独立的一套事件系统。这些事件是 LangBot 消息的源事件,可以从每个 Query.message_event 取得。 + +```python + # 例如在插件中 + @handler(GroupMessageReceived) + async def _(self, ctx: EventContext): + # 取得消息平台事件 + message_event = ctx.query.message_event +``` 消息平台事件定义位于`pkg/platform/types/events.py`中。 @@ -80,3 +88,34 @@ msg_chain = MessageChain([ - `import mirai` 改为 `import pkg.platform.types as mirai` - 不建议直接改成 `as mirai`,建议使用 `import pkg.platform.types as platform_types` 并将插件代码中对应的 `mirai.xxx` 替换为 `platform_types.xxx` - `from mirai import *` 改为 `from pkg.platform.types import *` + +## 访问消息平台底层 API + +为了抹平各个平台的差异,LangBot 在消息平台API之上,提供了一个抽象层,即上方所述的内容,以及`pkg/platform/sources`目录下的各个平台适配器。 +但由于各个平台的差异较大,抽象层内的实体和 API 封装并不完整,如果您的插件需要访问特定平台的功能,可以按照以下说明访问底层 API。 + +:::info +其中的`adapter`为每个适配器的实例化对象,对应 `pkg/platform/sources/` 下各个文件中的 `xxxAdapter(adapter.MessagePlatformAdapter)` 类。可以在插件事件的`query.adapter`中取得,例如: + +```python + # 例如在插件中 + @handler(GroupMessageReceived) + async def _(self, ctx: EventContext): + # 取得适配器对象 + adapter = ctx.query.adapter +``` +::: + + +| 平台 | 适配器 | 访问方式 | 说明 | +| --- | --- | --- | --- | +| QQ 个人号| aiocqhttp | adapter.bot | bot 对象对应 [aiocqhttp](https://github.com/nonebot/aiocqhttp) 的 CQHttp 对象,详细使用方式请参考 aiocqhttp 文档 | +| QQ 官方API | qqofficial | adapter.bot | bot 对象为 libs/qq_official_api 下的 SDK 对象,详细使用方式可以参考 libs/qq_official_api/api.py 中`QQOfficialClient`中的`send_group_text_msg`方法发起 HTTP 请求的方式,具体接口文档请查看 QQ 官方 API 文档| +| 个人微信 | gewechat | adapter.bot | bot 对象为 [hanfangyuan4396/gewechat-client](https://github.com/hanfangyuan4396/gewechat-python) 的 GewechatClient 对象,详细使用方式可以参考文档 | +| 企业微信 | wecom | adapter.bot | 参考 libs/wecom_api/api.py 中`WecomClient`中的`send_image`方法发起 HTTP 请求的方式,具体接口文档请查看企业微信 API 文档 | +| 微信公众号 | officialaccount | - | 请参考微信公众号的 API 文档中的接口文档信息,相关的凭据信息可以在 adapter.bot 中取得 | +| 飞书 | lark | adapter.api_client | 飞书 SDK 的 API Client 对象,具体请参考[oapi-sdk-python](https://github.com/larksuite/oapi-sdk-python) | +| 钉钉 | dingtalk | - | 请参考钉钉 API 文档,相关的凭据信息可以在 adapter.bot 中取得 | +| Discord | discord | adapter.bot | bot 对象为 [Rapptz/discord.py](https://github.com/Rapptz/discord.py) 的 Discord 对象,详细使用方式请参考文档 | +| Telegram | telegram | adapter.bot | bot 对象为 [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) 的 Telegram 对象,详细使用方式请参考文档 | +| Slack | slack | adapter.bot | bot 对象 libs/slack_api/api.py 中的对象,详细使用方式请参考其代码以及 Slack SDK | \ No newline at end of file diff --git a/docs/zh/plugin/dev/tutor.md b/docs/zh/plugin/dev/tutor.md index e3a943fac..16a492adb 100644 --- a/docs/zh/plugin/dev/tutor.md +++ b/docs/zh/plugin/dev/tutor.md @@ -10,18 +10,18 @@ [[toc]] ::: -## 💬简介 +## 💬 简介 本页讲解普通插件开发步骤,插件内部有两种方法:事件监听器、内容函数。 事件监听器能在某些事件触发时进行响应,更改行为。内容函数可供大语言模型调用,具体请查看插件介绍页。 LangBot 还支持组件扩展,可以不局限于监听预定事件,做到整个组件替换,具体请阅读完此页后查看**组件扩展**页。 -## 💻快速开始 +## 💻 快速开始 按照文档部署此项目,并使其正常运行。 -使用[hello_plugin](https://github.com/RockChinQ/hello_plugin)作为模板生成插件代码仓库,然后将仓库代码克隆到`plugins`目录下。 +使用[HelloPlugin](https://github.com/langbot-app/HelloPlugin)作为模板生成插件代码仓库,然后将仓库代码克隆到`plugins`目录下。 修改插件的 README.md 文件中需要修改的部分。 @@ -104,14 +104,18 @@ class HelloPlugin(BasePlugin): 编写完毕保存后,重新启动主程序,向机器人发送`!plugin`命令,若有`Hello`插件则说明插件加载成功 -## ❗规范(重要) +## ❗ 规范(重要) - 请每个插件独立一个目录以便管理,建议在Github上创建一个仓库储存单个插件,以便获取和更新 -- 插件名使用`大驼峰命名法`,如`Hello`、`ExamplePlugin`、`ChineseCommands`等 +- 命名规范(重要): + - 插件作者:使用英文,大小写均可,如`RockChinQ` + - 插件名:使用`大驼峰命名法`,如`Hello`、`ExamplePlugin`、`ChineseCommands`等 + - 插件仓库:请使用大驼峰命名法,建议直接与插件名相同,如`HelloPlugin` + - 插件简介:建议携带`LangBot 插件`字样 - 一个目录内可以存放多个Python程序文件,以独立出插件的各个功能,便于开发者管理,但不建议在一个目录内注册多个插件 - 插件需要的依赖库请在插件目录下的`requirements.txt`中指定,程序从储存库获取此插件时将自动安装依赖 -## 🪝内容函数 +## 🪝 内容函数 通过[GPT的Function Calling能力](https://platform.openai.com/docs/guides/gpt/function-calling)实现的`内容函数`,这是一种嵌入对话中,由GPT自动调用的函数。 @@ -197,7 +201,13 @@ async def access_web(self, query, url: str): - 这仅仅是一个示例,需要更高效的网络访问能力支持插件,请查看[WebwlkrPlugin](https://github.com/RockChinQ/WebwlkrPlugin) -## 📄名词解释 +## 📦 上架插件市场 + +当你的插件开发完成后,请上传到 GitHub,并在 [LangBot 仓库提出 issue](https://github.com/RockChinQ/LangBot/issues/new?assignees=&labels=%E7%8B%AC%E7%AB%8B%E6%8F%92%E4%BB%B6&projects=&template=submit-plugin.yml&title=%5BPlugin%5D%3A+%E8%AF%B7%E6%B1%82%E7%99%BB%E8%AE%B0%E6%96%B0%E6%8F%92%E4%BB%B6) ,待审核后将会添加到插件市场,约半个小时后会在 LangBot WebUI 插件页的插件市场上可见。 + +![](/assets/image/plugin_dev_tutor_01.png) + +## 📄 名词解释 ### 说明 @@ -223,3 +233,9 @@ async def access_web(self, query, url: str): ### API 参考 关于插件可以调用的 API,请查看 [API 参考](./api-ref) + +### 插件开发交流群 + +插件开发、发布、交流 + +- LangBot 插件开发:1032327138 ([链接](https://qm.qq.com/q/G7ENGTjeou)) diff --git a/docs/zh/plugin/plugin-intro.md b/docs/zh/plugin/plugin-intro.md index f5fa55234..165f159bd 100644 --- a/docs/zh/plugin/plugin-intro.md +++ b/docs/zh/plugin/plugin-intro.md @@ -43,7 +43,7 @@ GPT将会回复一个对`access_the_web`的函数调用请求,LangBot将调用 例如安装`hello_plugin`插件 ``` -!plugin get https://github.com/RockChinQ/hello_plugin +!plugin get https://github.com/langbot-app/HelloPlugin ``` 安装完成后重启程序。 @@ -102,10 +102,10 @@ GPT将会回复一个对`access_the_web`的函数调用请求,LangBot将调用 以下是部分插件列表,所有插件请查看[RockChinQ的Star集](https://github.com/stars/RockChinQ/lists/qchatgpt-%E6%8F%92%E4%BB%B6) +- [ElvisChenML/Waifu](https://github.com/ElvisChenML/Waifu) - 一个LangBot的插件,旨在利用程式逻辑搭配LLM创建真实感聊天机器人,探索真实的聊天体验。 - [WebwlkrPlugin](https://github.com/RockChinQ/WebwlkrPlugin) - 让机器人能联网!! - [https://github.com/the-lazy-me/NewChatVoice](https://github.com/the-lazy-me/miHoYoVoice) - LangBot语音插件,可利用多个TTS平台实现语音聊天 - [Yuumi0221/URLMaskerPlugin](https://github.com/Yuumi0221/URLMaskerPlugin) - 用于掩码(替换)URL,以应对QQ官方机器人API对消息中URL的限制 -- [ElvisChenML/Waifu](https://github.com/ElvisChenML/Waifu) - 一个LangBot的插件,旨在利用程式逻辑搭配LLM创建真实感聊天机器人,探索真实的聊天体验。 - [Pevernow/LangBot_Plugin_Emoticon_v3](https://github.com/Pevernow/QChatGPT_Plugin_Emoticon_v3) - LangBot v3可用,基于在线api的表情包插件。 - [https://github.com/kirifujinagisa/RussianRoulette](https://github.com/kirifujinagisa/RussianRoulette) - 一个 LangBot 俄罗斯轮盘赌的游戏插件 - [https://github.com/kirifujinagisa/FileSender](https://github.com/kirifujinagisa/FileSender) - 基于 LangBot 的将本机指定文件发送给申请人的插件 diff --git a/docs/zh/webui/system.md b/docs/zh/webui/system.md index 7a4e42e9d..729e4f02a 100644 --- a/docs/zh/webui/system.md +++ b/docs/zh/webui/system.md @@ -11,7 +11,7 @@ ## 热重载 -目前支持热重载 消息平台 和 插件,点击侧栏下方的系统信息中的对应按钮即可。 -在修改了 `消息平台适配器配置` 之后需要手动热重载,插件更改则会自动热重载。 +目前支持热重载 消息平台、插件和 LLM 管理器,点击侧栏下方的系统信息中的对应按钮即可。 +在修改了 `消息平台适配器配置`或`provider.json 内的配置` 之后需要手动热重载`消息平台`或`LLM 管理器`,插件更改则会自动热重载。 ![热重载](/assets/image/webui_system_04.png) \ No newline at end of file diff --git a/docs/zh/workshop/dify-service-api.md b/docs/zh/workshop/dify-service-api.md index 44f7f224e..6c2ea2674 100644 --- a/docs/zh/workshop/dify-service-api.md +++ b/docs/zh/workshop/dify-service-api.md @@ -1,9 +1,9 @@ # 在 LangBot 上使用 Dify [Dify](https://dify.ai) 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。 -Dify 可以创建聊天助手(含高级编排)、Agent、文本生成应用、工作流等应用。 +Dify 可以创建聊天助手(含Chatflow)、Agent、文本生成应用、工作流等应用。 -LangBot 目前支持`聊天助手`、`Agent`、`工作流`三种 Dify 应用类型。 +LangBot 目前支持`聊天助手`(含Chatflow)、`Agent`、`工作流`三种 Dify 应用类型。 ## 在 Dify 上创建应用 @@ -15,6 +15,13 @@ LangBot 目前支持`聊天助手`、`Agent`、`工作流`三种 Dify 应用类 保存 API 服务器和 API 密钥,在 LangBot 的 `provider.json` 文件中配置。 +:::info +以上为 Dify 云服务版本的示例,若您使用本地自部署的社区版本,请使用 LangBot 访问你自己 Dify 服务的地址作为 `base-url`,后方需要添加 `/v1` 作为路径。 + +- 若 LangBot 与 Dify 部署在同一台主机,并且都是使用 Docker 部署的,可以参考文章:[网络配置详解](/deploy/network-details.html#langbot-%E5%92%8C%E6%B6%88%E6%81%AF%E5%B9%B3%E5%8F%B0%E5%9D%87%E8%BF%90%E8%A1%8C%E5%9C%A8-docker-%E5%AE%B9%E5%99%A8%E4%B8%AD)。其中,请将启动 Dify 的 docker-compose.yaml 中所有容器的`networks`均添加`langbot-network`,并为`nginx`容器添加容器名`dify-nginx`,最后在 LangBot 配置中将`base-url`设置为`http://dify-nginx/v1`。 +- 其他情况请咨询贵司运维人员。 +::: + ## 配置 LangBot 参考 [Dify Service API 配置](../config/function/provider#dify-service-api-%E9%85%8D%E7%BD%AE-dify-service-api) 文档,配置 LangBot 的 `provider.json` 文件。 diff --git a/docs/zh/workshop/mcp-details.md b/docs/zh/workshop/mcp-details.md new file mode 100644 index 000000000..ae6f143c7 --- /dev/null +++ b/docs/zh/workshop/mcp-details.md @@ -0,0 +1,26 @@ +# MCP 生态详解 + +[MCP协议](https://modelcontextprotocol.io/) 是一种描述应用程序与 LLM 交互的协议,目前已经被多种产品采用。LangBot 可以作为 MCP Client 接入 MCP Server,大量扩展工具供 LLM 在与用户对话时使用。 + +## 寻找 MCP Server + +要在 LangBot 使用 MCP 工具,需要找到已有的 MCP Server 并接入。 +市面上有两种类型的 MCP Server: + +- 基于 node 或 python 实现的可执行文件,通过 `stdio`(标准输入输出)与 LangBot 通信 +- 基于 http 协议的 web 服务,通过 http 协议与 LangBot 通信 + + +:::info + +- 可以到 [MCP Server 列表](https://github.com/punkpeye/awesome-mcp-servers) 查看已有的 MCP Server。 +- 在线托管的 MCP Server 可以到 [Composio MCP](https://mcp.composio.dev/) 查找。 +- 自行编写 MCP Server 可以参考 [MCP 协议文档](https://modelcontextprotocol.io/quickstart/server) 和 [MCP Server 示例](https://modelcontextprotocol.io/examples)。 + +::: + +## 配置 MCP Server + +查看 [配置文档](/config/function/provider.html#mcp-%E9%85%8D%E7%BD%AE-mcp) + +配置完成后即可在聊天中通过`!func`命令查看已经注册的 MCP 工具,在与支持 Function Calling 的模型对话时,LangBot 会自动调用 MCP 工具。 \ No newline at end of file diff --git a/docs/zh/workshop/ollama.md b/docs/zh/workshop/ollama.md new file mode 100644 index 000000000..348ce30ce --- /dev/null +++ b/docs/zh/workshop/ollama.md @@ -0,0 +1,73 @@ +# 使用 Ollama 接入本地模型 + +## 安装 Ollama + +参考此教程:[https://datawhalechina.github.io/handy-ollama](https://datawhalechina.github.io/handy-ollama) + +详细介绍了各个平台如何安装部署 Ollama + +当你成功安装 Ollama 后 + +你可以在此找到支持的模型:[https://ollama.com/search](https://ollama.com/search) + +然后复制对应指令下载模型即可 + +> 下文以`deepseek-r1:7b`模型为例 +> +> ```powershell +> C:\Users\Lazy>ollama list +> NAME ID SIZE MODIFIED +> deepseek-r1:7b 0a8c26691023 4.7 GB 52 minutes ago +> ``` + +## 修改 provider.json + +打开`data/config/provider.json`,找到`model`配置项,值填写你在 Ollama 中下载的模型,例如我这里填写为: + +```json +"model": "ollama/deepseek-r1:7b" +``` + +*💡Tips: 为什么写了`ollama/`前缀?个人习惯,便于区分* + +**注意:这里的模型名称要和下文的`llm-model.json`配置文件相对应** + +> **另附:** +> +> 如果你想更改 Ollama 的请求地址,比如说你的 Ollama 并没有在`本地的 11434 端口`运行 +> +> 那么你可以在这个文件中找到 +> +> ```json +> "ollama-chat": { +> "base-url": "http://127.0.0.1:11434", +> "args": {}, +> "timeout": 600 +> }, +> ``` +> +> 修改`ollama-chat`的`base-url`为 Ollama 的实际运行地址即可 + +## 修改 llm-models.json + +打开`data/metadata/llm-models.json`,在`list`数组的末尾,追加如下 + +```json +{ + "model_name": "deepseek-r1:7b", + "name": "ollama/deepseek-r1:7b", + "requester": "ollama-chat" +} +``` + +`model_name`:意思是请求的实际模型名称 + +`name`:意思是在 LangBot 中标识的名称 + +`requester`:意思是使用的请求器为`ollama-chat`,即为使用 Ollama + +> 以上是我使用`deepseek-r1:7b`模型为例 +> +> 其他模型同理可得 + +## 对话中使用 diff --git a/docs/zh/workshop/one-api.md b/docs/zh/workshop/one-api.md index d5543f5bf..ffa5fd20c 100644 --- a/docs/zh/workshop/one-api.md +++ b/docs/zh/workshop/one-api.md @@ -6,7 +6,7 @@ 自从 OneAPI 流行之后,各种“牛鬼蛇神”模型都能以 OpenAI 的格式访问了,还有中转站也开始流行,OpenAI 的格式也成为了 AI App 平台等各种 AI 工具的访问格式,本文介绍如何将上述的支持 OpenAI 格式的接口接入 LangBot。 -首先我们先按照 LangBot 的文档,部署好 消息平台、LangBot 主程序,并将其连接上,进行到 provider.json 配置这一步时,看此文档。 +首先我们先按照 LangBot 的文档,部署好 消息平台、LangBot 主程序,并将其连接上,进行到 `provider.json` 配置这一步时,看此文档。 以下我们不再区分 LinkAI、OneAPI、中转站,统一以 OneAPI接口 代指 第三方OpenAI接口。 @@ -32,13 +32,13 @@ ## 填写到 LangBot 配置文件 -修改 data/config/provider.json 中的 provider 配置,使用 openai-chat-completions 请求器: +修改 `data/config/provider.json` 中的 `provider` 配置,使用 `openai-chat-completions` 请求器: ![填写到 LangBot 配置文件](/assets/image/one-api-03.png) -把你刚刚的地址填写到图中显示位置的 base-url 中,本例是我的 OneAPI 站(自用)。 +把你刚刚的地址填写到图中显示位置的 `base-url` 中,本例是我的 OneAPI 站(自用)。 -接着把你刚刚的密钥填写到 keys 的 openai 组中: +接着把你刚刚的密钥填写到 `keys` 的 `openai` 组中: ![填写到 LangBot 配置文件](/assets/image/one-api-04.png) @@ -49,13 +49,13 @@ ![填写到 LangBot 配置文件](/assets/image/one-api-05.png) -注意,可用的模型名称已经预设了一些在 data/metadata/llm-models.json 元数据里,如果你使用的模型没有相应的元数据,需要自己添加。 +注意,可用的模型名称已经预设了一些在 `data/metadata/llm-models.json` 元数据里,如果你使用的模型没有相应的元数据,需要自己添加。 ## 添加不在预设中的模型 -查看 data/metadata/llm-models.json 中 list 字段所有的元素,若没有任何元素的 name 是你要使用的模型名称,或其对应的 requester、token_mgr 不是 openai-chat-completions、openai,则需要添加。 +查看 `data/metadata/llm-models.json` 中 list 字段所有的元素,若没有任何元素的 `name` 是你要使用的模型名称,或其对应的 `requester`、`token_mgr` 不是 `openai-chat-completions`、`openai`,则需要添加。 -参考 元数据配置,本例中我们添加的模型 requester 设置为 openai-chat-completions ,token_mgr 设置为 openai,例如: +参考 元数据配置,本例中我们添加的模型 `requester` 设置为 `openai-chat-completions` ,`token_mgr` 设置为 `openai`,例如: ```json { @@ -67,8 +67,8 @@ }, ``` -name 为你的模型名称,对应 OneAPI 提供的模型名称,对应 上述 model 字段填写的值。 +`name 为你的模型名称,对应 OneAPI 提供的模型名称,对应 上述 model 字段填写的值。` -tool_call_supported:是否支持使用工具,根据实际模型情况设置 +`tool_call_supported`:是否支持使用工具,根据实际模型情况设置 -vision_supported:是否支持视觉,根据实际模型情况设置 \ No newline at end of file +`vision_supported`:是否支持视觉,根据实际模型情况设置 \ No newline at end of file diff --git a/docs/zh/workshop/ppio-integration.md b/docs/zh/workshop/ppio-integration.md new file mode 100644 index 000000000..bade2ad01 --- /dev/null +++ b/docs/zh/workshop/ppio-integration.md @@ -0,0 +1,22 @@ +# 接入 PPIO 派欧云 API + +1. 修改`data/config/provider.json` + +在部署完成 LangBot 后,打开 LangBot 根目录下的`data/config/provider.json` + +在`keys`中找到`ppio`,填入密钥,获取地址:https://ppinfra.com/settings/key-management + +例如你的密钥为`sk_lA8Ra66Ed0s8Yu9mMw53sj45nNVkFHA-ALeewmqkmd0`,则写为: + +![PPIO 设置](/assets/image/ppio_provider.png) + +例如要使用模型为`deepseek/deepseek-r1-turbo`,则下面模型设置为 + +![PPIO 设置](/assets/image/ppio_provider2.png) + +2. 修改`data/metadata/llm-models.json` + +例如要使用模型为`deepseek/deepseek-r1-turbo` + +![PPIO 设置](/assets/image/ppio_llm-models.png) +