{"id":13560532,"url":"https://github.com/AIDotNet/Thor","last_synced_at":"2025-04-03T16:30:46.175Z","repository":{"id":228004842,"uuid":"772904796","full_name":"AIDotNet/Thor","owner":"AIDotNet","description":"Thor(雷神托尔) 是一款强大的人工智能模型管理工具，其主要目的是为了实现多种AI模型的统一管理和使用。通过Thor(雷神托尔)，用户可以轻松地管理和使用众多AI模型，而且Thor(雷神托尔)兼容OpenAI的接口格式，使得使用更加方便。","archived":false,"fork":false,"pushed_at":"2025-04-02T17:56:44.000Z","size":3574,"stargazers_count":184,"open_issues_count":1,"forks_count":44,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-02T18:50:08.293Z","etag":null,"topics":["ai","dotnet"],"latest_commit_sha":null,"homepage":"http://api.token-ai.cn/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AIDotNet.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":"2024-03-16T07:37:45.000Z","updated_at":"2025-04-02T17:56:48.000Z","dependencies_parsed_at":"2024-04-28T06:30:52.750Z","dependency_job_id":"5551039a-b7bf-4006-a815-59d06e5bf88c","html_url":"https://github.com/AIDotNet/Thor","commit_stats":null,"previous_names":["aidotnet/aidotnet.api","aidotnet/thor"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AIDotNet%2FThor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AIDotNet%2FThor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AIDotNet%2FThor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AIDotNet%2FThor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AIDotNet","download_url":"https://codeload.github.com/AIDotNet/Thor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247036869,"owners_count":20873036,"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":["ai","dotnet"],"created_at":"2024-08-01T13:00:46.030Z","updated_at":"2025-04-03T16:30:46.160Z","avatar_url":"https://github.com/AIDotNet.png","language":"C#","funding_links":[],"categories":["Plugins"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n\u003cimg height=\"160\" src=\"https://github.com/AIDotNet/Thor/assets/61819790/a3eb7557-0ff4-4edd-a472-e5a0a745616d\"\u003e\n\n\u003ch1\u003eThor(雷神托尔)\u003c/h1\u003e\n\nThor(雷神托尔),一个AI大模型管理网关。\n\n[![][github-contributors-shield]][github-contributors-link]\n[![][github-forks-shield]][github-forks-link]\n[![][github-stars-shield]][github-stars-link]\n[![][github-issues-shield]][github-issues-link]\n[![][github-license-shield]][github-license-link]\n\n[Changelog](./CHANGELOG.md) · [Report Bug][github-issues-link] · [Request Feature][github-issues-link]\n\n![](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png)\n\n\u003c/div\u003e\n\n[npm-release-shield]: https://img.shields.io/npm/v/@lobehub/chat?color=369eff\u0026labelColor=ffcb47\u0026logo=npm\u0026logoColor=white\u0026style=flat-square\n\n[npm-release-link]: https://www.npmjs.com/package/@lobehub/chat\n\n[github-releasedate-shield]: https://img.shields.io/github/release-date/AIDotNet/AIDotNet.API?color=8ae8ff\u0026labelColor=ffcb47\u0026style=flat-square\n\n[github-releasedate-link]: https://github.com/AIDotNet/AIDotNet.API/releases\n\n[github-action-test-shield]: https://img.shields.io/github/actions/workflow/status/AIDotNet/AIDotNet.API/test.yml?color=8ae8ff\u0026label=test\u0026labelColor=ffcb47\u0026logo=githubactions\u0026logoColor=white\u0026style=flat-square\n\n[github-action-test-link]: https://github.com/AIDotNet/AIDotNet.API/actions/workflows/test.yml\n\n[github-action-release-shield]: https://img.shields.io/github/actions/workflow/status/AIDotNet/AIDotNet.API/release.yml?color=8ae8ff\u0026label=release\u0026labelColor=ffcb47\u0026logo=githubactions\u0026logoColor=white\u0026style=flat-square\n\n[github-action-release-link]: https://github.com/AIDotNet/AIDotNet.API/actions/workflows/release.yml\n\n[github-contributors-shield]: https://img.shields.io/github/contributors/AIDotNet/AIDotNet.API?color=c4f042\u0026labelColor=ffcb47\u0026style=flat-square\n\n[github-contributors-link]: https://github.com/AIDotNet/AIDotNet.API/graphs/contributors\n\n[github-forks-shield]: https://img.shields.io/github/forks/AIDotNet/AIDotNet.API?color=8ae8ff\u0026labelColor=ffcb47\u0026style=flat-square\n\n[github-forks-link]: https://github.com/AIDotNet/AIDotNet.API/network/members\n\n[github-stars-shield]: https://img.shields.io/github/stars/AIDotNet/AIDotNet.API?color=ffcb47\u0026labelColor=ffcb47\u0026style=flat-square\n\n[github-stars-link]: https://github.com/AIDotNet/AIDotNet.API/network/stargazers\n\n[github-issues-shield]: https://img.shields.io/github/issues/AIDotNet/AIDotNet.API?color=ff80eb\u0026labelColor=ffcb47\u0026style=flat-square\n\n[github-issues-link]: https://github.com/AIDotNet/AIDotNet.API/issues\n\n[github-license-shield]: https://img.shields.io/github/license/AIDotNet/AIDotNet.API?color=white\u0026labelColor=ffcb47\u0026style=flat-square\n\n[github-license-link]: https://github.com/AIDotNet/AIDotNet.API/blob/main/LICENSE\n\n# Thor(雷神托尔)\n\nThor(雷神托尔) 是一款强大的人工智能模型管理工具，其主要目的是为了实现多种AI模型的统一管理和使用。通过Thor(雷神托尔)，用户可以轻松地管理和使用众多AI模型，而且Thor(雷神托尔)兼容OpenAI的接口格式，使得使用更加方便。\n\nThor(雷神托尔)提供了丰富的功能：\n\n1. 管理功能：支持用户管理，渠道管理以及token管理，简化了管理流程。\n2. 数据统计预览：可以清晰地看到各种数据的统计情况，帮助用户更好地了解使用情况。\n3. 日志查看：支持日志查看，方便用户跟踪和解决问题。\n4. 系统设置：可以根据需要进行各种系统设置。\n5. 外部Chat链接接入：支持接入外部Chat链接，提升交互体验。\n6. 支付宝购买账号余额：提供支付宝购买账号余额的功能，方便用户进行充值。\n\n此外，Thor(雷神托尔)还支持多种AI大模型，包括OpenAI、星火大模型、Claudia、智谱AI、Ollama、通义千问（阿里云）、AzureOpenAI以及腾讯混元大模型，满足了用户对各种AI模型的需求。\n\nThor(雷神托尔)还支持多种数据库，包括SqlServer、PostgreSql、Sqlite以及MySql，用户可以根据自己的需要选择合适的数据库。\n\n清晰的数据统计\n\n![image](https://github.com/user-attachments/assets/eb508d89-6834-4064-95c2-937c939ddbd7)\n\n## 功能实现\n\n- [x] 支持用户管理\n- [x] 支持渠道管理\n- [x] 支持token管理\n- [x] 提供数据统计预览\n- [x] 支持日志查看\n- [x] 支持系统设置\n- [x] 支持接入外部Chat链接\n- [x] 支持支付宝购买账号余额\n- [x] 支持Rabbit消费日志（默认情况下使用本地事件）\n- [x] 支持分布式多级缓存 \n\n# AI大模型支持列表\n\n- [x] OpenAI （支持function）\n- [x] Kimi（月之暗面）（支持function）\n- [x] 星火大模型（支持function）\n- [x] Claudia （支持function）\n- [x] 智谱AI (支持function)\n- [x] 微软Azure（支持function）\n- [x] Ollama（支持function）\n- [x] 通义千问（阿里云）（支持function）\n- [x] 腾讯混元大模型\n- [x] 支持百度大模型(ErnieBot)\n- [x] Gitee AI (支持function)\n- [x] MiniMax AI（支持function）\n- [x] SiliconFlow AI（支持function）\n- [x] DeepSeek AI（支持function）\n- [x] 火山引擎 （支持function） \n- [x] 亚马逊 （支持function） \n- [x] 谷歌Claude （支持function） \n      ( 代理地址：[LocationId]-aiplatform.googleapis.com|[ProjectId]|[LocationId]|rawPredict  ) [这里面填写你的区域/项目id]\n      (密钥：在Google平台创建的大json 就是autu 2.0授权码 )\n\n# 支持数据库\n\n- [x] SqlServer 配置类型[sqlserver,mssql]\n- [x] PostgreSql 配置类型[postgresql,pgsql]\n- [x] Sqlite 配置类型[sqlite,默认]\n- [x] MySql 配置类型[mysql]\n- [x] 达梦数据库 配置类型[dm]\n\n修改`appsettings.json`的`ConnectionStrings:DBType`配置项即可切换数据库类型。请注意切换数据库不会迁移数据。\n\n```mermaid\ngraph LR\n    A(用户)\n    A ---\u003e|使用 Thor 分发的 key 进行请求| B(Thor)\n    B --\u003e|中继请求| C(OpenAI)\n    B --\u003e|中继请求| D(Azure)\n    B --\u003e|中继请求| E(其他 OpenAI API 格式下游渠道)\n    B --\u003e|中继并修改请求体和返回体| F(非 OpenAI API 格式下游渠道)\n```\n\n## 简单使用\n\n默认账号密码\nadmin admin\n\n### 注意事项\n需要注意的是，如果克隆项目后，项目根目录缺少`data`时，需要手动创建，`docker compose up` 时，需要挂载本地目录`data`。\n\n### **国内用户请切换registry.cn-shenzhen.aliyuncs.com/tokengo/thor镜像**\n\n### 环境变量\n\n- DBType\n  sqlite | [postgresql,pgsql] | [sqlserver,mssql] | mysql\n- ConnectionStrings:DefaultConnection\n  主数据库连接字符串\n- ConnectionStrings:LoggerConnection\n  日志数据连接字符串\n- CACHE_TYPE\n  缓存类型 Memory|Redis\n- CACHE_CONNECTION_STRING\n  缓存连接字符串 如果是Redis则为Redis连接字符串，Memory则为空\n- HttpClientPoolSize\n  HttpClient连接池大小\n- RunMigrationsAtStartup\n  是否在启动时运行迁移 如果是首次启动则需要设置为true\n\n使用`docker compose`启动服务：\n\n```yaml\nversion: '3.8'\n\nservices:\n  thor:\n    image: aidotnet/thor:latest\n    ports:\n      - 18080:8080\n    container_name: thor\n    volumes:\n      - ./data:/data\n    environment:\n      - TZ=Asia/Shanghai\n      - DBType=sqlite # sqlite | [postgresql,pgsql] | [sqlserver,mssql] | mysql\n      - ConnectionStrings:DefaultConnection=data source=/data/token.db\n      - ConnectionStrings:LoggerConnection=data source=/data/logger.db\n      - RunMigrationsAtStartup=true\n```\n\n使用docker run启动服务\n\n```sh\ndocker run -d -p 18080:8080 --name thor --network=gateway -v $PWD/data:/data -e Theme=lobe -e TZ=Asia/Shanghai -e DBType=sqlite -e ConnectionStrings:ConnectionString=\"data source=/data/token.db\" -e RunMigrationsAtStartup=true -e ConnectionStrings:LoggerConnectionString=\"data source=/data/logger.db\" aidotnet/thor:latest\n```\n\n### Sqlite构建\n`docker compose`版本\n\n项目根目录创建`docker-compose.yml`文件，内容如下：\n\n```yaml\nversion: '3.8'\n\nservices:\n  thor:\n    image: aidotnet/thor:latest\n    container_name: thor\n    ports:\n      - 18080:8080\n    volumes:\n      - ./data:/data\n    environment:\n      - TZ=Asia/Shanghai\n      - DBType=sqlite\n      - ConnectionStrings:DefaultConnection=data source=/data/token.db\n      - ConnectionStrings:LoggerConnection=data source=/data/logger.db\n      - RunMigrationsAtStartup=true\n```\n执行如下命令打包镜像\n```shell\nsudo docker compose build\n```\n\n执行以下命令启动服务\n\n```shell\nsudo docker compose up -d\n```\n\n\ndocker run版本\n\n```shell\ndocker run -d -p 18080:8080 --name ai-dotnet-api-service -v $(pwd)/data:/data -e RunMigrationsAtStartup=true  -e Theme=lobe -e TZ=Asia/Shanghai -e DBType=sqlite -e ConnectionStrings:DefaultConnection=data source=/data/token.db -e ConnectionStrings:LoggerConnection=data source=/data/logger.db aidotnet/thor:latest\n```\n\n然后访问 http://localhost:18080 即可看到服务启动成功。\n\n### PostgreSql构建\n`docker compose`版本\n\n项目根目录创建`docker-compose.yml`文件，内容如下：\n\n```yaml\nversion: '3.8'\n\nservices:\n  thor:\n    image: aidotnet/thor:latest\n    container_name: thor\n    ports:\n      - 18080:8080\n    volumes:\n      - ./data:/data\n    environment:\n      - TZ=Asia/Shanghai\n      - DBType=postgresql\n      - ConnectionStrings:DefaultConnection=Host=127.0.0.1;Port=5432;Database=token;Username=token;Password=dd666666\n      - ConnectionStrings:LoggerConnection=Host=127.0.0.1;Port=5432;Database=logger;Username=token;Password=dd666666\n      - RunMigrationsAtStartup=true\n```\n\n执行如下命令打包镜像\n```shell\nsudo docker compose build\n```\n\n执行以下命令启动服务\n\n```shell\nsudo docker compose up -d\n```\n\ndocker run版本\n\n```shell\ndocker run -d \\\n  --name thor \\\n  -p 18080:8080 \\\n  -v $(pwd)/data:/data \\\n  -e TZ=Asia/Shanghai \\\n  -e DBType=postgresql \\\n  -e RunMigrationsAtStartup=true \\\n  -e ConnectionStrings:DefaultConnection=Host=127.0.0.1;Port=5432;Database=token;Username=token;Password=dd666666 \\\n  -e ConnectionStrings:LoggerConnection=Host=127.0.0.1;Port=5432;Database=logger;Username=token;Password=dd666666 \\\n  aidotnet/thor:latest\n```\n\n然后访问 http://localhost:18080 即可看到服务启动成功。\n\n### SqlServer构建\n`docker compose`版本\n\n项目根目录创建`docker-compose.yml`文件，内容如下：\n\n```yaml\nversion: '3.8'\n\nservices:\n  thor:\n    image: aidotnet/thor:latest\n    container_name: thor\n    ports:\n      - 18080:8080\n    volumes:\n      - ./data:/data\n    environment:\n      - TZ=Asia/Shanghai\n      - DBType=sqlserver\n      - ConnectionStrings:DefaultConnection=Server=127.0.0.1;Database=token;User Id=sa;Password=dd666666;\n      - ConnectionStrings:LoggerConnection=Server=127.0.0.1;Database=logger;User Id=sa;Password=dd666666;\n      - RunMigrationsAtStartup=true\n```\n\n执行如下命令打包镜像\n```shell\nsudo docker compose build\n```\n\n执行以下命令启动服务\n\n```shell\nsudo docker compose up -d\n```\n\ndocker run版本\n\n```shell\ndocker run -d \\\n  --name thor \\\n  -p 18080:8080 \\\n  -v $(pwd)/data:/data \\\n  -e TZ=Asia/Shanghai \\\n  -e RunMigrationsAtStartup=true \\\n  -e DBType=sqlserver \\\n  -e ConnectionStrings:DefaultConnection=Server=127.0.0.1;Database=token;User Id=sa;Password=dd666666; \\\n  -e ConnectionStrings:LoggerConnection=Server=127.0.0.1;Database=logger;User Id=sa;Password=dd666666; \\\n  aidotnet/thor:latest\n```\n\n然后访问 http://localhost:18080 即可看到服务启动成功。\n\n### MySql构建\n`docker compose`版本\n\n项目根目录创建`docker-compose.yml`文件，内容如下：\n\n```yaml\nversion: '3.8'\n\nservices:\n  thor:\n    image: aidotnet/thor:latest\n    container_name: thor\n    ports:\n      - 18080:8080\n    volumes:\n      - ./data:/data\n    environment:\n      - TZ=Asia/Shanghai\n      - DBType=mysql\n      - \"ConnectionStrings:DefaultConnection=mysql://root:dd666666@localhost:3306/token\"\n      - \"ConnectionStrings:LoggerConnection=mysql://root:dd666666@localhost:3306/logger\"\n      - RunMigrationsAtStartup=true\n```\n\n执行如下命令打包镜像\n```shell\nsudo docker compose build\n```\n\n执行以下命令启动服务\n\n```shell\nsudo docker compose up -d\n```\ndocker run版本\n\n```shell\ndocker run -d \\\n  --name thor \\\n  -p 18080:8080 \\\n  -v $(pwd)/data:/data \\\n  -e TZ=Asia/Shanghai \\\n  -e DBType=mysql \\\n  -e \"ConnectionStrings:DefaultConnection=mysql://root:dd666666@localhost:3306/token\" \\\n  -e \"ConnectionStrings:LoggerConnection=mysql://root:dd666666@localhost:3306/logger\" \\\n  -e RunMigrationsAtStartup=true \\\n  aidotnet/thor:latest\n```\n\n然后访问 http://localhost:18080 即可看到服务启动成功。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAIDotNet%2FThor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAIDotNet%2FThor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAIDotNet%2FThor/lists"}