{"id":13642831,"url":"https://github.com/jiran214/langup-ai","last_synced_at":"2025-04-09T04:04:35.145Z","repository":{"id":198676600,"uuid":"701312880","full_name":"jiran214/langup-ai","owner":"jiran214","description":"AGI 社交网络 Bot.  BiliBili |  直播聊天数字人 | 视频@自动回复 | 私信bot | 终端聊天  |  语音交互","archived":false,"fork":false,"pushed_at":"2024-03-30T11:14:28.000Z","size":451,"stargazers_count":634,"open_issues_count":8,"forks_count":117,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-02T03:01:46.553Z","etag":null,"topics":["bilibili","bot","chatgpt","gpt","langchain","openai"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/langup/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jiran214.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-06T11:31:16.000Z","updated_at":"2025-04-01T14:00:21.000Z","dependencies_parsed_at":"2023-11-10T11:22:31.642Z","dependency_job_id":"f550bf0c-98b6-40cd-9192-c416b7825e86","html_url":"https://github.com/jiran214/langup-ai","commit_stats":null,"previous_names":["jiran214/langup-ai"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiran214%2Flangup-ai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiran214%2Flangup-ai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiran214%2Flangup-ai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiran214%2Flangup-ai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jiran214","download_url":"https://codeload.github.com/jiran214/langup-ai/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247974715,"owners_count":21026742,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bilibili","bot","chatgpt","gpt","langchain","openai"],"created_at":"2024-08-02T01:01:36.900Z","updated_at":"2025-04-09T04:04:35.102Z","avatar_url":"https://github.com/jiran214.png","language":"Python","funding_links":[],"categories":["Chatbots"],"sub_categories":[],"readme":"# \u003ccenter\u003e Langup\n\u003cp align='center'\u003e\n   llm + bot\n\u003cbr\u003e\n\u003cbr\u003e\n    🚀AGI时代通用机器人🚀\n\u003c/p\u003e\n\n## 安装\n环境：python\u003e=3.8\n\n- 方式一\n  ```shell\n  pip install langup==0.0.10\n  ```\n- 方式二(建议使用python 虚拟环境)\n  ```shell\n  git clone https://github.com/jiran214/langup-ai.git\n  cd langup-ai/\n  python -m pip install –upgrade pip\n  python -m pip install -r requirements.txt\n  ```\n  \n\n## 快速开始\n- 安装完成后，新建.py文件参考以下代码（注意：采用方式二安装时，可以在src/下新建）\n- 所有代码示例 src/examples可见\n\n\u003cdetails\u003e\n    \u003csummary\u003eBilibili 直播数字人\u003c/summary\u003e\n\u003cbr\u003e\n\n```python\nfrom langup import config, VtuBer\n\n# config.proxy = 'http://127.0.0.1:7890'\nup = VtuBer(\n    system=\"\"\"角色：你现在是一位在哔哩哔哩网站的主播，你很熟悉哔哩哔哩上的网友发言习惯和平台调性，擅长与年轻人打交道。\n背景：通过直播中和用户弹幕的互动，产出有趣的对话，以此吸引更多人来观看直播并关注你。\n任务：你在直播过程中会对每一位直播间用户发的弹幕进行回答，但是要以“杠精”的思维去回答，你会怒怼这些弹幕，不放过每一条弹幕，每次回答字数不能超过100字。\"\"\",  # 人设\n    room_id=00000,  # Bilibili房间号\n    openai_api_key=\"\"\"xxx\"\"\",  # 同上\n    is_filter=True,  # 是否开启过滤\n    extra_ban_words=[],  # 额外的违禁词\n    concurrent_num=2  # 控制回复弹幕速度\n  \n    # credential 参数说明\n    # 方式一: credential为空，从工作目录/.env文件读取credential\n    # 方式二: 直接传入 https://nemo2011.github.io/bilibili-api/#/get-credential\n    # credential={\"sessdata\": 'xxx', \"buvid3\": 'xxx', \"bili_jct\": 'xxx'}\n    # 方式三: 从浏览器资源读取\n    # browser='edge'\n)\nup.loop()\n```\n\n```text\n\"\"\"\nbilibili直播数字人参数：\n:param room_id:  bilibili直播房间号\n:param credential:  bilibili 账号认证\n:param is_filter: 是否开启过滤\n:param user_input: 是否开启终端输入\n:param extra_ban_words: 额外的违禁词\n\n...见更多配置\n\"\"\"\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e视频@回复机器人\u003c/summary\u003e\n\u003cbr\u003e\n\n```python\nfrom langup import config, VideoCommentUP\n\n# config.proxy = 'http://127.0.0.1:7890'\nup = VideoCommentUP(\n    up_sleep=10,  # 生成回复间隔事件\n    listener_sleep=60 * 2,  # 2分钟获取一次@消息\n    system=\"你是一个会评论视频B站用户，请根据视频内容做出总结、评论\",\n    signals=['总结一下'],\n    openai_api_key='xxx',\n    model_name='gpt-3.5-turbo',\n  \n    # credential 参数说明\n    # 方式一: credential为空，从工作目录/.env文件读取credential\n    # 方式二: 直接传入 https://nemo2011.github.io/bilibili-api/#/get-credential\n    # credential={\"sessdata\": 'xxx', \"buvid3\": 'xxx', \"bili_jct\": 'xxx'}\n    # 方式三: 自动从浏览器资源读取\n    # browser='edge'\n)\nup.loop()\n```\n\n```text\n\"\"\"\n视频下at信息回复机器人\n:param credential: bilibili认证\n:param model_name: openai MODEL\n:param signals:  at暗号列表 （注意：B站会过滤一些词）\n:param limit_video_seconds: 过滤视频长度 \n:param limit_token: 请求GPT token限制（默认为model name）\n:param limit_length: 请求GPT 字符串长度限制\n:param compress_mode: 请求GPT 压缩过长的视频文字的方式\n    - random：随机跳跃筛选\n    - left：从左到右\n    \n:param up_sleep: 每次回复的间隔运行时间(秒)\n:param listener_sleep: listener 每次读取@消息的间隔运行时间(秒)\n...见更多配置\n\"\"\"\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003eB站私信Bot\u003c/summary\u003e\n\u003cbr\u003e\n\n```python\nfrom langup import ChatUP, Event\n\n\n# bilibili cookie 通过浏览器edge提取，apikey从.env读取\nChatUP(\n    system='你是一位聊天AI助手',\n    # event_name_list 订阅消息列表\n    event_name_list=[Event.TEXT],\n    # credential 参数说明\n    # 方式一: credential为空，从工作目录/.env文件读取credential\n    # 方式二: 直接传入 https://nemo2011.github.io/bilibili-api/#/get-credential\n    # credential={\"sessdata\": 'xxx', \"buvid3\": 'xxx', \"bili_jct\": 'xxx'}\n    # 方式三: 自动从浏览器资源读取\n    # browser='load'\n).loop()\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e实时语音交互助手\u003c/summary\u003e\n\u003cbr\u003e\n\n```python\nfrom langup import UserInputReplyUP, config\n\nconfig.proxy = 'http://127.0.0.1:7890'\n# config.openai_api_key = 'xxx' or 创建.env文件 OPENAI_API_KEY=xxx\n\n# 语音实时识别回复\n# 修改语音识别模块配置 config.convert['speech_rec']\nUserInputReplyUP(system='你是一位AI助手', listen='speech').loop() \n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e终端交互助手\u003c/summary\u003e\n\u003cbr\u003e\n\n```python\nfrom langup import UserInputReplyUP, config\n\n# config.proxy = 'http://127.0.0.1:7890'\n# config.openai_api_key = 'xxx' or 创建.env文件 OPENAI_API_KEY=xxx\n\n# 终端回复\nUserInputReplyUP(system='你是一位AI助手', listen='console').loop()\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e更多配置（可忽略）\u003c/summary\u003e\n\u003cbr\u003e\n\n```text\n\"\"\"\nUploader 所有公共参数：\n:param listeners:  感知\n:param concurrent_num:  并发数\n:param up_sleep: uploader 间隔运行时间 \n:param listener_sleep: listener 间隔运行时间 \n:param system:   人设\n\n:param openai_api_key:  openai秘钥\n:param openai_proxy:   http代理\n:param openai_api_base:  openai endpoint\n:param temperature:  gpt温度\n:param max_tokens:  gpt输出长度\n:param chat_model_kwargs:  langchain chatModel额外配置参数\n:param llm_chain_kwargs:  langchain chatChain额外配置参数\n\n:param brain:  含有run方法的类\n:param mq:  通信队列\n\"\"\"\n```\n\n全局配置文件：\n```python\n\"\"\"\nlangup/config.py\n修改方式：\nform langup import config\nconfig.xxx = xxx\n\"\"\"\nimport os\nfrom typing import Union\n\ncredential: Union['Credential', None] = None\nwork_dir = './'\n\ntts = {\n    \"voice\": \"zh-CN-XiaoyiNeural\",\n    \"rate\": \"+0%\",\n    \"volume\": \"+0%\",\n    \"voice_path\": 'voice/'\n}\n\nlog = {\n    \"handlers\": [\"console\"],  # console打印, file文件存储\n    \"file_path\": \"logs/\"\n}\n\nconvert = {\n    \"audio_path\": \"audio/\"\n}\n\nroot = os.path.dirname(__file__)\nopenai_api_key = None  # sk-...\nopenai_api_base = None  # https://{your_domain}/v1\nproxy = None  # 代理\ndebug = True\n```\n\u003c/details\u003e\n更多机器人开发中...\n\u003cbr\u003e\n\n## 注意事项\n- api_key可自动从环境变量获取\n- 国内环境需要设置代理或者openai_api_base 推荐config.proxy='xxx'全局设置，避免设置局部代理导致其它服务不可用\n- Bilibili UP都需要 认证信息，获取使用方式如下\n  - 登录Bilibili 从浏览器获取cookie:https://nemo2011.github.io/bilibili-api/#/get-credential \n  - 作为字典参数\"credential\"传入，或者api_key和Bilibili cookie等信息可以写到.env文件中，程序会隐式读取，参考src/.env.temple\n  - 10.26更新，不需要手动获取，只要你浏览器最近登录过，程序会自动读取浏览器数据 \n    （可以优先尝试，注意windows用户需要完全关闭浏览器进程，否则会出现资源占用情况）\n\n## 架构设计\n部分模块待实现\n\u003cimg align=\"center\" width=\"50%\" height=\"auto\" src=\"https://cdn.nlark.com/yuque/0/2023/png/32547973/1697191309882-31b247a5-86d2-485c-8c2a-f62d185be1fd.png\" \u003e\n\n## TodoList\n- Uploader\n  - Vtuber\n    - [X] 基本功能\n    - [X] 违禁词\n    - [X] 并发\n  - VideoCommentUP\n    - [X] 基本功能\n  - UserInputUP\n    - [X] 基本功能\n    - [X] 语音识别\n- Listener\n  - [X] 语音识别\n  - [ ] 微信\n  - [ ] Bilibili 私信\n  - [ ] QQ\n- Reaction\n- 其它\n  - 日志记录\n  - pydantic重构部分类\n  - 认证信息自动获取\n\n## 提示\n\u003cdetails\u003e\n    \u003csummary\u003e国内访问ChatGPT方式：Vercel反向代理openai api\u003c/summary\u003e\n    具体见 \u003ca href=\"https://github.com/jiran214/proxy\" target=\"_blank\"\u003ehttps://github.com/jiran214/proxy\u003c/a\u003e\n    \u003cbr\u003e\n    \u003cimg src=\"https://camo.githubusercontent.com/5e471e99e8e022cf454693e38ec843036ec6301e27ee1e1fa10325b1cb720584/68747470733a2f2f76657263656c2e636f6d2f627574746f6e\" alt=\"Vercel\" data-canonical-src=\"https://vercel.com/button\" style=\"max-width: 100%;\"\u003e \n\u003cbr\u003e\n\u003cbr\u003e\n\u003c/details\u003e\n\n## 最后\n- 感谢项目依赖的开源\n  - langchain https://github.com/langchain-ai/langchain\n  - Bilibili API https://github.com/nemo2011/bilibili-api\n  - 必剪API https://github.com/SocialSisterYi/bcut-asr\n- 禁止滥用本库，使用本库请遵守各平台安全规范，可通过提示词、过滤输入等方式\n- 示例代码仅供参考，尤其是提示词编写没有必要一样\n- 代码可能异常，对于改进和报错问题可以在写在issues","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjiran214%2Flangup-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjiran214%2Flangup-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjiran214%2Flangup-ai/lists"}