소스 검색

:fire: 接入Gitee AI模型

tycoding 8 달 전
부모
커밋
a3636781d7

+ 6 - 5
README.md

@@ -4,7 +4,7 @@
 
 LangChat是Java生态下企业级AIGC项目解决方案,在RBAC权限体系的基础上,集成AIGC大模型能力,帮助企业快速定制AI知识库、企业AI机器人。
  
-**支持的AI大模型:** 智谱清言 / 阿里通义 / 百度千帆 / DeepSeek / 抖音豆包 / 零一万物 / 讯飞星火 / OpenAI / Gemini / Ollama / Azure / Claude 等大模型。
+**支持的AI大模型:** Gitee AI / 阿里通义 / 百度千帆 / DeepSeek / 抖音豆包 / 智谱清言 / 零一万物 / 讯飞星火 / OpenAI / Gemini / Ollama / Azure / Claude 等大模型。
 
 [English](./README_en.md)
 
@@ -66,11 +66,12 @@ Copyright (c) 2024-present, TyCoding.
 
 ## 版本更新
 
-- 2024.7.15 LangChat正式发布、公开仓库
-- 2024.7.19 LangChat完成分离Server、Client端业务架构,保持业务分离
-- 2024.7.21 LangChat完成多存储方案,支持本地、七牛云、阿里云、腾讯云OSS服务
+- 2024.11.27 支持Gitee AI模型接入
+- 2024.11.16 重新调整项目结构设计、分包设计
 - 2024.7.30 LangChat开发Web SDK,接入API、WEB消息渠道,支持Iframe嵌入
-- 2024.11.16 重构项目架构
+- 2024.7.21 LangChat完成多存储方案,支持本地、七牛云、阿里云、腾讯云OSS服务
+- 2024.7.19 LangChat完成分离Server、Client端业务架构,保持业务分离
+- 2024.7.15 LangChat正式发布、公开仓库
 
 ## Star History
 

+ 1 - 0
langchat-ai/langchat-ai-biz/src/main/java/cn/tycoding/langchat/ai/biz/component/ProviderEnum.java

@@ -33,6 +33,7 @@ public enum ProviderEnum {
     Q_FAN,
     Q_WEN,
     ZHIPU,
+    GITEEAI,
     YI,
     DOUYIN,
     DEEPSEEK,

+ 2 - 0
langchat-ai/langchat-ai-core/src/main/java/cn/tycoding/langchat/ai/core/provider/ProviderInitialize.java

@@ -33,6 +33,7 @@ import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.Async;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -56,6 +57,7 @@ public class ProviderInitialize implements ApplicationContextAware {
         init();
     }
 
+    @Async
     public void init() {
         modelStore = new ArrayList<>();
 

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 95 - 0
langchat-ui/langchat-ui-server/src/assets/iframe-option.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 26 - 0
langchat-ui/langchat-ui-server/src/assets/link-option.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 157 - 0
langchat-ui/langchat-ui-server/src/assets/widget-option.svg


+ 15 - 0
langchat-ui/langchat-ui-server/src/views/aigc/model/components/chat/consts.ts

@@ -70,6 +70,21 @@ export const LLMProviders: any[] = [
       'chatglm_turbo',
     ],
   },
+  {
+    model: ProviderEnum.GITEEAI,
+    name: 'Gitee AI',
+    models: [
+      'Qwen2-72B-Instruct',
+      'Qwen2-7B-Instruct',
+      'Qwen2.5-72B-Instruct',
+      'glm-4-9b-chat',
+      'deepseek-coder-33B-instruct',
+      'codegeex4-all-9b',
+      'Yi-34B-Chat',
+      'code-raccoon-v1',
+      'Qwen2.5-Coder-32B-Instruct',
+    ],
+  },
   {
     model: ProviderEnum.DEEPSEEK,
     name: 'DeepSeek',

+ 5 - 0
langchat-ui/langchat-ui-server/src/views/aigc/model/components/chat/schemas.ts

@@ -132,6 +132,11 @@ export function getSchemas(provider: string) {
   let labelMessage: any = '模型的基础请求URL地址(或中转地址)';
   let disabled = false;
   switch (provider) {
+    case ProviderEnum.GITEEAI:
+      disabled = true;
+      defaultValue = 'https://ai.gitee.com/v1';
+      labelMessage = '对于Gitee AI,此Url固定不可修改';
+      break;
     case ProviderEnum.DEEPSEEK:
       disabled = true;
       defaultValue = 'https://api.deepseek.com/v1';

+ 1 - 0
langchat-ui/langchat-ui-server/src/views/aigc/model/provider.ts

@@ -7,6 +7,7 @@ export enum ProviderEnum {
   Q_FAN = 'Q_FAN',
   Q_WEN = 'Q_WEN',
   ZHIPU = 'ZHIPU',
+  GITEEAI = 'GITEEAI',
   DEEPSEEK = 'DEEPSEEK',
   DOUYIN = 'DOUYIN',
   SILICON = 'SILICON',

+ 1 - 0
langchat-ui/langchat-ui-server/src/views/app/channel-api/index.vue

@@ -16,6 +16,7 @@
 
 <script lang="ts" setup>
   import Docs from './components/docs.vue';
+  import ApiTable from '@/views/app/ApiTable.vue';
   import { CHANNEL } from '@/views/app/columns';
 </script>
 

+ 1 - 1
langchat-ui/langchat-ui-server/src/views/app/channel-web/components/edit.vue

@@ -20,7 +20,7 @@
   import CodePane from './CodePane.vue';
   import SettingPane from './SettingPane.vue';
   import WindowPane from './WindowPane.vue';
-  import ApiTable from '@/views/app/channel/ApiTable.vue';
+  import ApiTable from '@/views/app/ApiTable.vue';
   import { CHANNEL } from '@/views/app/columns';
 
   const emit = defineEmits(['reload']);

+ 9 - 5
langchat-ui/langchat-ui-server/src/views/app/info.vue

@@ -17,6 +17,7 @@
 <script lang="ts" setup>
   import AppBase from './base/index.vue';
   import ApiChannel from './channel-api/index.vue';
+  import WebChannel from './channel-web/index.vue';
   import SvgIcon from '@/components/SvgIcon/index.vue';
   import router from '@/router';
   import { onMounted, ref } from 'vue';
@@ -27,9 +28,9 @@
   const form = ref<any>({});
   const loading = ref(false);
   const activeMenus = [
-    { key: 1, icon: 'uil:setting', label: '应用配置' },
-    { key: 2, icon: 'hugeicons:api', label: 'API接入渠道' },
-    { key: 2, icon: 'hugeicons:api', label: 'Web接入渠道' },
+    { key: 'setting', icon: 'uil:setting', label: '应用配置' },
+    { key: 'api', icon: 'hugeicons:api', label: 'API接入渠道' },
+    { key: 'web', icon: 'hugeicons:api', label: 'Web接入渠道' },
   ];
 
   onMounted(async () => {
@@ -96,8 +97,11 @@
       </div>
     </div>
 
-    <AppBase v-if="appStore.activeMenu === 1" />
-    <ApiChannel v-if="appStore.activeMenu === 2" />
+    <AppBase v-if="appStore.activeMenu === 'setting'" />
+
+    <ApiChannel v-if="appStore.activeMenu === 'api'" />
+
+    <WebChannel v-if="appStore.activeMenu === 'web'" />
   </div>
 </template>
 

+ 3 - 3
langchat-ui/langchat-ui-server/src/views/app/store/index.ts

@@ -18,7 +18,7 @@ import { defineStore } from 'pinia';
 import { update } from '@/api/aigc/app';
 
 export interface AppState {
-  activeMenu: number;
+  activeMenu: string;
   info: any;
   modelId: string | null;
   knowledgeIds: any[];
@@ -28,7 +28,7 @@ export interface AppState {
 export const useAppStore = defineStore('app-store', {
   state: (): AppState =>
     <AppState>{
-      activeMenu: 1,
+      activeMenu: 'setting',
       info: {},
       modelId: '',
       knowledgeIds: [],
@@ -38,7 +38,7 @@ export const useAppStore = defineStore('app-store', {
   getters: {},
 
   actions: {
-    setActiveMenu(active: number) {
+    setActiveMenu(active: string) {
       this.activeMenu = active;
     },
     addKnowledge(item: any) {

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.