惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Heimdal Security Blog
P
Privacy International News Feed
S
Schneier on Security
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
Spread Privacy
Spread Privacy
P
Privacy & Cybersecurity Law Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Scott Helme
Scott Helme
K
Kaspersky official blog
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
aimingoo的专栏
aimingoo的专栏
Simon Willison's Weblog
Simon Willison's Weblog
S
Securelist
Help Net Security
Help Net Security
B
Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Security Archives - TechRepublic
Security Archives - TechRepublic
云风的 BLOG
云风的 BLOG
The GitHub Blog
The GitHub Blog
N
News and Events Feed by Topic
Hacker News: Ask HN
Hacker News: Ask HN
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
雷峰网
雷峰网
博客园 - 司徒正美
V
V2EX
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
N
News | PayPal Newsroom
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
PCI Perspectives
PCI Perspectives
Google DeepMind News
Google DeepMind News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
U
Unit 42
C
Cybersecurity and Infrastructure Security Agency CISA
P
Palo Alto Networks Blog
G
Google Developers Blog
T
Threat Research - Cisco Blogs
博客园 - Franky
I
InfoQ
D
DataBreaches.Net
爱范儿
爱范儿
Y
Y Combinator Blog
博客园 - 叶小钗
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

二丫讲梵

学习周刊-总第258期-2026年第15周 学习周刊-总第257期-2026年第14周 学习周刊-总第256期-2026年第13周 学习周刊-总第255期-2026年第12周 学习周刊-总第254期-2026年第11周 学习周刊-总第253期-2026年第10周 临时插播一条羊毛,免费领取450元大模型API代金券 学习周刊-总第252期-2026年第09周 学习周刊-总第251期-2026年第08周 学习周刊-总第250期-2026年第07周 学习周刊-总第249期-2026年第06周 诚邀评论,聊聊你所知欲知的我 学习周刊-总第248期-2026年第05周 我的QQ动态之2015年 我的QQ动态之2014年 我的QQ动态之2013年 我的QQ动态之2012年 我的QQ动态-2010-2011年 我的QQ动态-创栏小叙 学习周刊-总第247期-2026年第04周 Nexus社区版权益阉割--一文告诉你有哪些版本可以选择 学习周刊-总第246期-2026年第03周 学习周刊-总第245期-2026年第02周 学习周刊-总第244期-2026年第01周 学习周刊-总第243期-2025年第52周 学习周刊-总第242期-2025年第51周 开源项目ZenOps:带你领略禅意运维 学习周刊-总第241期-2025年第50周 用京东金融,享负债人生 学习周刊-总第240期-2025年第49周 学习周刊-总第239期-2025年第48周 整理我在静态服务透明代理上的极致求索之路,最后一个你绝想不到 学习周刊-总第238期-2025年第47周 我们输了,但收获颇多 太多了,太多了 学习周刊-总第237期-2025年第46周 学习周刊-总第236期-2025年第45周 学习周刊-总第235期-2025年第44周 二五年国庆二三事 学习周刊-总第234期-2025年第43周 学习周刊-总第233期-2025年第42周 学习周刊-总第232期-2025年第41周 学习周刊-总第231期-2025年第40周 学习周刊-总第230期-2025年第39周 西湖毅行 2025年开源世界逸闻三则 学习周刊-总第229期-2025年第38周 手抄《与妻书》 CNB开发与构建基于docker-cache缓存复用的配置实践心得 学习周刊-总第228期-2025年第37周 父亲善行录 学习周刊-总第227期-2025年第36周 带你认识我之看看我的高中同学录(其二) 学习周刊-总第226期-2025年第35周 带你认识我之看看我的高中同学录(其一) 认识神级MCP工具系列--用anyquery和数据库交互 学习周刊-总第225期-2025年第34周 学习周刊-总第224期-2025年第33周 学习周刊-总第223期-2025年第32周 学习周刊-总第222期-2025年第31周 学习周刊-总第221期-2025年第30周 CNB云原生开发环境届的瑞士军刀,详解qifei项目 vuepress-vdoing主题配置自建不蒜子统计 学习周刊-总第220期-2025年第29周 写在博客发表文章1000篇的节点 从claude cli的体验聊聊最大的敌人是我们自己的成见 学习周刊-总第219期-2025年第28周 学习周刊-总第218期-2025年第27周 学习周刊-总第217期-2025年第26周 理论正确,事实错误 学习周刊-总第216期-2025年第25周 学习周刊-总第215期-2025年第24周 学习周刊-总第214期-2025年第23周 学习周刊-总第213期-2025年第22周 学习周刊-总第212期-2025年第21周 从赵心童世锦赛夺冠聊聊我的斯诺克情缘 学习周刊-总第211期-2025年第20周 记录二五年五一之短暂回归家庭 学习周刊-总第210期-2025年第19周 学习周刊-总第209期-2025年第18周 学习周刊-总第208期-2025年第17周 Go开发实践之Gin框架将前端的dist目录embed到二进制 学习周刊-总第207期-2025年第16周 近期关于cobra库的一些实践心得总结 学习周刊-总第206期-2025年第15周 我的嗜好--嗑瓜子 记大宝参加幼儿园组织的清明烈士陵园扫墓活动 学习周刊-总第205期-2025年第14周 学习周刊-总第204期-2025年第13周 前端开发小笔记--在数组中给字段添加值与删除字段的操作 学习周刊-总第203期-2025年第12周 人生实苦,何以自渡 学习周刊-总第202期-2025年第11周 近期发现的一些优秀的工具提名(一) 学习周刊-总第201期-2025年第10周 学习周刊-总第200期-2025年第09周 记一次女友喝醉使我忍术破功 爱情风波--一次分手又复合的经历 学习周刊-总第199期-2025年第08周 整理我的信息源
基于GO语言实现的体验最好的企微应用集成ChatGPT项目chatgpt-wecom
二丫讲梵 · 2023-07-03 · via 二丫讲梵

# 项目

- name: chatgpt-wecom
  desc: openldap Controller
  avatar: https://avatars2.githubusercontent.com/u/416130?s=460&u=8753e86600e300a9811cdc539aa158deec2e2724&v=4 # 可选
  link: https://github.com/eryajf/chatgpt-wecom # 可选
  bgColor: "#0074ff" # 可选,默认var(--bodyBg)。颜色值有#号时请添加单引号
  textColor: "#fff" # 可选,默认var(--textColor)

1
2
3
4
5
6

# 前言

本项目可以助你将 GPT 机器人集成到企微应用当中。当前默认模型为gpt-3.5,支持gpt-4,同时支持 Azure-OpenAI。

  • 📢 注意:当下部署以及配置流程都已非常成熟,文档和 issue 中基本都覆盖到了,因此不再回答任何项目安装部署与配置使用上的问题,如果完全不懂,可考虑通过 邮箱 联系我进行付费的技术支持。

🥳 欢迎关注我的其他开源项目:

🚜 我还创建了一个项目 awesome-chatgpt-answer (opens new window) :记录那些问得好,答得妙的时刻,欢迎提交你与 ChatGPT 交互过程中遇到的那些精妙对话。

⚗️ openai 官方提供了一个 状态页 (opens new window) 来呈现当前 openAI 服务的状态,同时如果有问题发布公告也会在这个页面,如果你感觉它有问题了,可以在这个页面看看。

# 功能介绍

  • [x] 🚀 帮助菜单:通过发送 帮助 将看到帮助列表
  • [x] 🙋 单聊模式:每次对话都是一次新的对话,没有历史聊天上下文联系
  • [x] 🗣 串聊模式:带上下文理解的对话模式
  • [x] 🎭 角色扮演:支持场景模式,通过 #周报 的方式触发内置 prompt 模板
  • [x] 🧑‍💻 频率限制:通过配置指定,自定义单个用户单日最大对话次数
  • [x] 🔗 自定义 api 域名:通过配置指定,解决国内服务器无法直接访问 openai 的问题
  • [x] 🪜 添加代理:通过配置指定,通过给应用注入代理解决国内服务器无法访问的问题
  • [x] 👐 默认模式:支持自定义默认的聊天模式,通过配置化指定
  • [x] 👹 白名单机制:通过配置指定,支持指定群组名称和用户名称作为白名单,从而实现可控范围与机器人对话
  • [x] 💂‍♀️ 管理员机制:通过配置指定管理员,部分敏感操作,以及一些应用配置,管理员有权限进行操作
  • [x] ㊙️ 敏感词过滤:通过配置指定敏感词,提问时触发,则不允许提问,回答的内容中触发,则以 🚫 代替
  • [ ] 🎨 图片生成:通过发送 #图片关键字开头的内容进行生成图片
  • [ ] 📝 查询对话:通过发送#查对话 username:xxx查询 xxx 的对话历史,可在线预览,可下载到本地

# 使用前提

  • 有 Openai 账号,并且创建好api_key,关于这个的申请创建,这里不过多赘述。
  • 在企微开发者后台创建应用,需要如下五个配置信息:
    • corp_id:企业 ID
    • agent_id: 应用 ID
    • agent_secret: 应用秘钥
    • receive_msg_token: API 接收消息的 token
    • receive_msg_key: API 接收消息的 key

接下来跟随如下教程,保你一次配置成功。

# 使用教程

# 第一步,创建应用

  1. 点我登陆 (opens new window)企业微信管理后台。

    此时点击我的企业可以获取到企业 IDcorp_id

    🖼 点我查看示例图
  2. 点击应用,创建一个新的应用。

    🖼 点我查看示例图
  3. 创建成功之后,能够获取到应用的agent_idagent_secret

    🖼 点我查看示例图
  4. 点击接收消息的设置 API 接收,进入回调地址配置页面,点击两个随机获取,可以获得receive_msg_tokenreceive_msg_key

    🖼 点我查看示例图
  • 📢 注意:此时点击保存会提示 openapi回调地址请求不通过,是因为保存配置的时候企微会向服务发送请求进行校验。所以此时这个页面先放这儿,去部署应用。应用部署起来之后,再回来保存配置就能成功了。

# 第二步,部署项目

# docker 部署

推荐你使用 docker-compose 快速运行本项目。

version: "3"
services:
  chatgpt:
    container_name: chatgpt
    image: registry.cn-hangzhou.aliyuncs.com/eryajf/chatgpt-wecom
    restart: always
    environment:
      LOG_LEVEL: "info" # 应用的日志级别 info/debug
      CORP_ID: "" # 企业ID
      AGENT_ID: "" # 应用ID
      AGENT_SECRET: "" # 应用秘钥
      RECEIVE_MSG_TOKEN: "" # API接收消息的token
      RECEIVE_MSG_KEY: "" # API接收消息的key
      APIKEY: xxxxxx # 你的 api_key
      BASE_URL: "" # 如果你使用官方的接口地址 https://api.openai.com,则留空即可,如果你想指定请求url的地址,可通过这个参数进行配置,注意需要带上 http 协议
      MODEL: "gpt-3.5-turbo" # 指定模型,默认为 gpt-3.5-turbo , 可选参数有: "gpt-4-32k-0613", "gpt-4-32k-0314", "gpt-4-32k", "gpt-4-0613", "gpt-4-0314", "gpt-4", "gpt-3.5-turbo-16k-0613", "gpt-3.5-turbo-16k", "gpt-3.5-turbo-0613", "gpt-3.5-turbo-0301", "gpt-3.5-turbo",如果使用gpt-4,请确认自己是否有接口调用白名单,如果你是用的是azure,则该配置项可以留空或者直接忽略
      SESSION_TIMEOUT: 600 # 会话超时时间,默认600秒,在会话时间内所有发送给机器人的信息会作为上下文
      MAX_QUESTION_LEN: 2048 # 最大问题长度,默认4096 token,正常情况默认值即可,如果使用gpt4-8k或gpt4-32k,可根据模型token上限修改。
      MAX_ANSWER_LEN: 2048 # 最大回答长度,默认4096 token,正常情况默认值即可,如果使用gpt4-8k或gpt4-32k,可根据模型token上限修改。
      MAX_TEXT: 4096 # 最大文本 = 问题 + 回答, 接口限制,默认4096 token,正常情况默认值即可,如果使用gpt4-8k或gpt4-32k,可根据模型token上限修改。
      HTTP_PROXY: http://host.docker.internal:15777 # 指定请求时使用的代理,如果为空,则不使用代理,注意需要带上 http 协议 或 socks5 协议
      DEFAULT_MODE: "单聊" # 指定默认的对话模式,可根据实际需求进行自定义,如果不设置,默认为单聊,即无上下文关联的对话模式
      MAX_REQUEST: 0 # 单人单日请求次数上限,默认为0,即不限制
      PORT: 8090 # 指定服务启动端口,默认为 8090,容器化部署时,不需要调整,一般在二进制宿主机部署时,遇到端口冲突时使用,如果run_mode为stream模式,则可以忽略该配置项
      SERVICE_URL: "" # 指定服务的地址,就是当前服务可供外网访问的地址(或者直接理解为你配置在企微回调那里的地址),用于生成图片时给企微做渲染
      # 以下 ALLOW_USERS、DENY_USERS、VIP_USERS、ADMIN_USERS 配置中填写的是用户的userid
      # 比如 ["1301691029702722","1301691029702733"],这个信息需要在企微管理后台的通讯录当中获取:hhttps://work.weixin.qq.com/wework_admin/frame#contacts
      # 哪些用户可以进行对话,如果留空,则表示允许所有用户,如果要限制,则列表中写用户的userid
      ALLOW_USERS: "" # 哪些用户可以进行对话,如果留空,则表示允许所有用户,如果要限制,则填写用户的userid
      DENY_USERS: "" # 哪些用户不可以进行对话,如果留空,则表示允许所有用户(如allow_user有配置,需满足相应条件),如果要限制,则列表中写用户的userid,黑名单优先级高于白名单
      VIP_USERS: "" # 哪些用户可以进行无限对话,如果留空,则表示只允许管理员(如max_request配置为0,则允许所有人),如果要针对指定VIP用户放开限制(如max_request配置不为0),则列表中写用户的userid
      ADMIN_USERS: "" # 指定哪些人为此系统的管理员,如果留空,则表示没有人是管理员,如果要限制,则列表中写用户的userid
      SENSITIVE_WORDS: "" # 敏感词,提问时触发,则不允许提问,回答的内容中触发,则以 🚫 代替
      AZURE_ON: "false" # 是否走Azure OpenAi API, 默认false ,如果为true,则需要配置下边的四个参数
      AZURE_API_VERSION: "" # Azure OpenAi API 版本,比如 "2023-03-15-preview"
      AZURE_RESOURCE_NAME: "" # Azure OpenAi API 资源名称,比如 "openai"
      AZURE_DEPLOYMENT_NAME: "" # Azure OpenAi API 部署名称,比如 "openai"
      AZURE_OPENAI_TOKEN: "" # Azure token
      HELP: "Commands:\n\n=================================\n\n🙋 单聊 👉 单独聊天,缺省\n\n🗣 串聊 👉 带上下文聊天\n\n🔃 重置 👉 重置带上下文聊天\n\n🚀 帮助 👉 显示帮助信息\n\n=================================\n\n💪 Power By [eryajf/chatgpt-wecom](https://github.com/eryajf/chatgpt-wecom)" # 帮助信息,放在配置文件,可供自定义
    volumes:
      - ./data:/app/data
    ports:
      - "8000:8000"
    extra_hosts:
      - host.docker.internal:host-gateway

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

启动服务:

# 二进制部署

如果你想通过命令行直接部署,可以直接下载 release 中的压缩包 (opens new window) ,请根据自己系统以及架构选择合适的压缩包,下载之后直接解压运行。

下载之后,在本地解压,即可看到可执行程序,与配置文件:

$ tar xf chatgpt-wecom-v0.0.4-darwin-arm64.tar.gz
$ cd chatgpt-wecom-v0.0.4-darwin-arm64
$ cp config.example.yml  config.yml
$ ./chatgpt-wecom  # 直接运行

# 如果要守护在后台运行
$ nohup ./chatgpt-wecom &> run.log &
$ tail -f run.log

1
2
3
4
5
6
7
8

# 第三步,完善企微配置

此时服务如正常启动,可再回到企微管理后台的配置页面,尝试保存配置。如果服务正常,应该就能保存成功了,从服务日志当中,也可以看到企微发起的回调:

[GIN] 2023/07/02 - 21:33:53 | 200 |      78.469µs |  113.108.92.100 | GET      "/ai/callback?msg_signature=fb23b8490965c74600dcb08b2e8b86d2aff664e4&timestamp=1688304833&nonce=1688533588&echostr=I5D3M3C%2Fk7AqBFRkACk8eHZAzt%2Fjx14IKk8wXUpA85xsQ2aU67lxEhgHVudLSrCWEPRFapeQ3EcYbni0Bqj01Q%3D%3D"

1

此时还需要将部署服务的 IP 加入到企微的白名单当中:

🖼 点我查看示例图

到这里配置步骤就完成了,可以尽情享用与智能机器人的交互了。

来到企业微信,点击工作台,然后可以看到我们添加的应用,点击应用,即可开始对话。

🖼 点我查看示例图

# 配置文件说明

# 应用的日志级别,info or debug
log_level: "info"
# openai api_key,如果你是用的是azure,则该配置项可以留空或者直接忽略
api_key: "xxxxxxxxx"
# 如果你使用官方的接口地址 https://api.openai.com,则留空即可,如果你想指定请求url的地址,可通过这个参数进行配置,注意需要带上 http 协议,如果你是用的是azure,则该配置项可以留空或者直接忽略
base_url: ""
# 指定模型,默认为 gpt-3.5-turbo , 可选参数有: "gpt-4-32k-0613", "gpt-4-32k-0314", "gpt-4-32k", "gpt-4-0613", "gpt-4-0314", "gpt-4", "gpt-3.5-turbo-16k-0613", "gpt-3.5-turbo-16k", "gpt-3.5-turbo-0613", "gpt-3.5-turbo-0301", "gpt-3.5-turbo",如果使用gpt-4,请确认自己是否有接口调用白名单,如果你是用的是azure,则该配置项可以留空或者直接忽略
model: "gpt-3.5-turbo"
# 会话超时时间,默认600秒,在会话时间内所有发送给机器人的信息会作为上下文
session_timeout: 600
# 最大问题长度
max_question_len: 2048
# 最大回答长度
max_answer_len: 2048
# 最大上下文文本长度,通常该参数可设置为与模型Token限制相同
max_text: 4096
# 指定请求时使用的代理,如果为空,则不使用代理,注意需要带上 http 协议 或 socks5 协议,如果你是用的是azure,则该配置项可以留空或者直接忽略
http_proxy: ""
# 指定默认的对话模式,可根据实际需求进行自定义,如果不设置,默认为单聊,即无上下文关联的对话模式
default_mode: "单聊"
# 单人单日请求次数上限,默认为0,即不限制
max_request: 0
# 指定服务启动端口,默认为 8090,一般在二进制宿主机部署时,遇到端口冲突时使用,如果run_mode为stream模式,则可以忽略该配置项
port: "8090"
# 指定服务的地址,就是当前服务可供外网访问的地址(或者直接理解为你配置在企微回调那里的地址),用于生成图片时给企微做渲染,最新版本中将图片上传到了企微服务器,理论上你可以忽略该配置项,如果run_mode为stream模式,则可以忽略该配置项
service_url: "http://xxxxxx"
# 以下 allow_users、deny_users、vip_users、admin_users 配置中填写的是用户的userid,outgoing机器人模式下不适用这些配置
# 比如 ["1301691029702722","1301691029702733"],这个信息需要在企微管理后台的通讯录当中获取:https://oa.dingtalk.com/contacts.htm#/contacts
# 哪些用户可以进行对话,如果留空,则表示允许所有用户,如果要限制,则列表中写用户的userid
allow_users: []
# 哪些用户不可以进行对话,如果留空,则表示允许所有用户(如allow_user有配置,需满足相应条件),如果要限制,则列表中写用户的userid,黑名单优先级高于白名单
deny_users: []
# 哪些用户可以进行无限对话,如果留空,则表示只允许管理员(如max_request配置为0,则允许所有人)
# 如果要针对指定VIP用户放开限制(如max_request配置不为0),则列表中写用户的userid
vip_users: []
# 指定哪些人为此系统的管理员,如果留空,则表示没有人是管理员,如果要限制,则列表中写用户的userid
admin_users: []
# 敏感词,提问时触发,则不允许提问,回答的内容中触发,则以 🚫 代替
sensitive_words: []
# 帮助信息,放在配置文件,可供自定义
help: "Commands:\n\n=================================\n\n🙋 单聊 👉 单独聊天,缺省\n\n🗣 串聊 👉 带上下文聊天\n\n🔃 重置 👉 重置带上下文聊天\n\n🚀 帮助 👉 显示帮助信息\n\n=================================\n\n💪 Power By [eryajf/chatgpt-wecom](https://github.com/eryajf/chatgpt-wecom)"

# Azure OpenAI 配置
azure_on: false # 如果是true,则会走azure的openai接口
azure_resource_name: "eryajf" # 对应你的主个性域名
azure_deployment_name: "gpt-35-turbo" # 对应的是 /deployments/ 后边跟着的这个值
azure_api_version: "2023-03-15-preview" # 对应的是请求中的 api-version 后边的值
azure_openai_token: "xxxxxxx"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

# 常见问题

  • 企微只支持与应用一对一聊天,不支持群聊当中添加机器人的对话形式。

# 感谢

这个项目能够成立,离不开这些开源项目:

# 赞赏

如果觉得这个项目对你有帮助,你可以请作者喝杯咖啡 ☕️ (opens new window)