|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
% V2 Q. Y6 \. p6 D: z& ?+ L3 N& n# F6 c6 ?7 b
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
- |7 I Z& m5 A3 J1 w S6 H7 J- ^" J* M7 V6 n# O" E' O
---( Q' w w3 c2 \/ F0 X" i( v
( Q) ]& w8 u* W2 u### **1. 环境准备**0 r1 j. _2 W2 O7 \% o! C
#### 1.1 服务器要求
" M3 A0 l- l: b/ p* z- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。. ]+ a4 B$ N! O( Q$ V% S
- **Node.js**:安装 Node.js v16.x 或更高版本。
1 T/ `/ n- N8 s+ D/ b* V! J1 Z- **数据库**:PostgreSQL(推荐)或 MySQL。2 W5 C6 r* Y8 a6 M: r# b& N
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。4 Y W6 r' ]5 Z1 i
. o9 J; u3 |: F4 f
#### 1.2 安装依赖
9 L1 [. `4 m3 S- 安装 Node.js 和 npm:2 m+ s z& i7 X# x2 z0 R
```bash
% B- S9 W$ w) u; @8 x0 Y curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -! \2 P7 r6 @0 q, o! m1 z7 T, G
sudo apt-get install -y nodejs9 C8 p1 | I. d* l
```
5 I `8 ^8 L4 n `) U, ?. f, O- 安装 PostgreSQL:* V1 o! y7 _1 Y/ I
```bash' r; }- H/ U; o3 E! N0 F
sudo apt-get install postgresql postgresql-contrib9 u, ]2 ?6 c9 o1 J& ?* A, V
sudo systemctl start postgresql8 S V& t H3 s- E
sudo systemctl enable postgresql
, V: Y+ T( F9 t9 W" h ```
% [; j: a1 ^7 s3 x' a9 z6 Y8 Q0 b. t6 v7 N
---, Y6 v+ T4 D/ S
6 L5 u% K1 ^ D7 V" U8 N' A### **2. 安装 NocoBase**
- A* i. D5 D' D0 W2 [#### 2.1 下载 NocoBase8 C( i( m+ S8 @4 F* d
- 从 GitHub 克隆 NocoBase 仓库:
, ^5 Q- @% C2 e ```bash
; d9 F$ x. z- V git clone https://github.com/nocobase/nocobase.git
8 Y0 P3 H! v. ^2 o cd nocobase# r+ W+ z$ Q$ V0 W6 g/ ~) Q
```/ {% r- X0 ?' ]/ h
* D ?% y& J3 b3 Z: y& Q
#### 2.2 安装依赖* s) u# M/ S9 y) P7 z% F- x7 c
- 安装项目依赖:2 k9 y5 u& U) B7 W$ ?! U1 ?( [
```bash
2 j% a7 M+ e/ b3 h" S% q npm install- S5 S4 X2 H+ i% ]0 T& `
```& b$ y% m8 }: ~: i5 x7 I# [! L' ^
. L; r9 u0 I( I4 C/ K/ H2 e
#### 2.3 配置数据库
1 ^9 c2 ?0 u4 h+ Q: S& G0 F1 q- 创建 PostgreSQL 数据库:: O9 r* [+ C+ b$ D
```bash- Z& u, x) h7 U8 o" @- X) {
sudo -u postgres psql
, K( [- ^, v1 h2 l3 k6 H CREATE DATABASE nocobase;7 f) r' j( i% U6 e
CREATE USER nocobase_user WITH PASSWORD 'your_password';5 P5 G& E$ O8 T) Z0 W4 Y$ C
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;$ D) c5 q+ H( A
\q( f- {# j6 w1 V
```& }+ k( j0 m5 h. f& v9 I
- 修改 NocoBase 配置文件:+ v0 g; R! X) V) Z9 k
编辑 `config/config.json`,配置数据库连接信息:& m$ W( z( i- E. p4 k! t
```json
" l5 s+ _( f4 S% k8 X {- w3 P3 D7 d$ W! ?! w1 G8 t! C
"database": {
1 ^# P+ Q/ W2 v8 t5 q "dialect": "postgres",
8 n! |( t _9 @+ h1 v6 r/ a2 C "host": "localhost",
9 l+ r5 g9 Q. _3 i "port": 5432,
4 ]7 }; I4 }) w( R# f8 A7 Q& v& g "username": "nocobase_user",
S. U. Z2 K8 `7 `( \4 n8 l, m; x "password": "your_password",
! S2 c* s) R. s) m' d; V0 [ "database": "nocobase"
/ L5 D1 \0 v2 w2 W1 ^8 E* T }
; B% k4 m3 z2 O+ ]; A }
+ F/ [" A! H4 o( B/ l1 b" R8 @- q ```# u. _0 Y7 `+ h1 `" K+ A
+ q( }1 Q$ b ]$ ?3 K4 `1 F
#### 2.4 初始化数据库( O6 \ @7 [8 a
- 运行数据库迁移脚本:
& S! z" F1 a& U6 h4 |3 J6 h* o ```bash
" ~( Z7 i0 u6 V/ E* H7 _3 X npm run db:migrate* h- i8 Z% E# m6 }, J
```) k. q' [8 y2 `% T" V
$ @8 w: U9 ^2 b#### 2.5 启动 NocoBase
5 ]% }8 I+ S% |, P2 ?/ r- 启动开发服务器:$ p: x! s; k/ S8 ^3 ^, M* Y$ T
```bash
5 m% j# R B& W! R$ N: m npm run start1 N% U3 X% a5 y# y2 D
```7 s7 r: C. ~( b3 h
- 访问 NocoBase:9 Q! l1 R* A- G2 \! F
打开浏览器,访问 `http://localhost:3000`,完成初始设置。( {+ }- T# M5 A% n! H, \
7 Y4 W( z# h* M6 `8 U, ]+ c" ?) a
---/ t! R8 A$ Y% C' ]
" D$ ], G! t5 R### **3. 集成 DeepSeek**
: I$ t) b7 E5 L; G! G#### 3.1 创建 NocoBase 插件
9 k7 C% Z+ q% X2 Y7 q- 使用 NocoBase CLI 创建插件:
4 L' q5 r' t" N ```bash1 Y$ X: d0 S2 J2 B7 M2 T
npm run cli plugin:create deepseek-integration6 l8 \1 o! ?8 @" s& R
cd plugins/deepseek-integration
* y4 v3 d5 z7 o) }! ?7 [ ```
& ?+ x4 [7 l9 C
3 K s; }2 j4 E" r. J+ Y#### 3.2 安装 DeepSeek SDK h6 k) O% U4 H. `# }% i: |6 O5 U
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
3 S7 ^& e. |' S* E* r& H! u ```bash
: A' S5 m& f8 @! E! \3 { npm install deepseek-sdk
) |1 |% y5 }; X! d$ k' B ```/ @3 p2 ]! b7 M! h8 z
4 U4 [0 O% b1 F+ \
#### 3.3 配置 DeepSeek API 密钥2 i3 I4 c$ F8 N+ {
- 在插件配置文件中添加 DeepSeek API 密钥:
- `9 f# }( u E 编辑 `plugins/deepseek-integration/config/config.json`:
( U, {6 H% o4 e) N4 ^3 k ```json% O1 r+ D d4 @2 r& `% ^* L W
{4 C! | O1 m0 X0 [
"deepseek": {" o7 x, X3 ^' \# A" j) \+ m0 s
"apiKey": "your_deepseek_api_key"* R" c* H0 _- Z$ a. |$ {: A/ e
}! A( ^6 n3 {% z
}* p. r5 u2 X" U3 g& c! N! C
```% `1 k. m# y$ o& Q2 m8 w
' c g0 k7 p* J9 A7 ~% r% A5 n. G. M
#### 3.4 实现 DeepSeek 服务
+ s0 q1 X8 U4 s6 Y( t5 b- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:( @4 j2 x0 t2 O6 d' w
```javascript; q7 k2 K1 p4 B! U, c
const DeepSeek = require('deepseek-sdk');
7 A/ h8 m" _( [6 v7 T2 V
3 E+ L" t: q) w; i9 p2 W" E3 U* p! H class DeepSeekService {7 x7 c- S! n% F" ^) [
constructor(apiKey) {
" P" K4 `' k6 V3 u this.deepseek = new DeepSeek(apiKey);6 N2 |! ~' v/ l
}; `" l$ _3 O& N/ P, M+ _
6 {, T+ f$ A% c2 O, p4 r async query(prompt) {
5 I. s' ^: [' K4 Z' X$ H( Y9 }4 K const response = await this.deepseek.complete({7 }# m7 k/ V( |4 M0 K
prompt: prompt,% k. ~( d- X9 n% q! v& {
max_tokens: 1507 a, B3 z: |( C! k. ^' J9 m
});
3 _ I- s) P1 x- P4 N return response.choices[0].text.trim();& b7 ]- A+ V6 U- ~8 U
}) t. `1 M( }( B. r$ U
}
3 k5 e8 p& b# v- m4 k5 j$ Z" `) `0 S8 b6 K8 l& E* J0 D2 ]
module.exports = DeepSeekService;
3 h; _' }( z4 I- }: A; q ```
* b& ^1 T& b; u
6 v$ {4 S5 n2 _! N$ m' v- {6 @#### 3.5 创建 API 路由
" T. _- B" c9 [- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
+ O7 P2 u3 A9 r4 Z" K& J8 i ```javascript
2 `0 Q& L6 g0 n* T7 D: j7 e& \5 [ const express = require('express');
% N/ |, E9 A$ K7 z2 i O const DeepSeekService = require('../services/deepseekService');0 g6 N" g6 V5 `
const router = express.Router();
7 d+ b7 ^7 v' r9 f const config = require('config');3 H2 i) f6 g# ]: ], Y+ L, ]
0 l! r/ `# D- N; a6 Y' M$ X( P
const deepseekService = new DeepSeekService(config.deepseek.apiKey);7 y L* K" S0 n% {" p/ b
6 J, g3 D: x# X router.post('/query', async (req, res) => {
' \1 k4 i# e2 M const { prompt } = req.body;
- ?* u7 ]" F; |1 h try {9 j3 A) ?. d0 v" M6 |9 O% j
const result = await deepseekService.query(prompt);9 ?6 b$ H+ f/ a6 A9 e, b
res.json({ success: true, result });
4 R9 C' d! @& ]0 P' F& s1 x \ } catch (error) {/ Y9 P9 l& F* {) N+ a
res.status(500).json({ success: false, error: error.message });
) U0 a% A, w7 `$ J5 N Q% t }0 @; Z6 _" y5 K3 N8 e
});$ G6 `/ ?' n; p! S
% o8 ^5 e4 m* M) w4 m module.exports = router;
7 l; d3 `. n* i% x+ t T ```
( T- u+ x1 w8 u1 h' h/ d0 P& P
, {& O) _6 V! ?2 U5 ?#### 3.6 注册插件
7 F, w- K3 j) z( O- O+ r- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:$ a3 x5 P! }5 \- \- o# n8 A0 ^
```javascript9 S6 Q' S, _' r( \/ s# z
const deepseekRoutes = require('./routes/deepseekRoutes');
# f9 f, i" x$ @% H
0 X* t8 E" ]1 Z module.exports = function(app) {
+ X0 ^/ w4 q" C+ f* x$ Y app.use('/api/deepseek', deepseekRoutes);: ~: a/ h3 O* G6 S: C: g
};" O+ r0 `( y' l$ Y$ `; y6 M
```
0 }5 y) h: r+ e
% _* Z8 r: a! k; `4 l5 k---
6 @) V5 Z- p% L: P4 T& ~; h6 @2 u& F, B2 X
### **4. 测试集成**6 x! v- G7 k" e8 }3 ~
#### 4.1 启动 NocoBase# p3 }% W' l" @0 A2 `. z
- 启动 NocoBase:3 j @+ \3 m5 p, `6 ?3 m4 Z
```bash
2 P1 N9 d( u4 F npm run start& ?/ P& k1 W3 J0 X6 Q( D& T7 E1 x
```9 J) f* @, w# b
3 Z$ |. X x# T" A9 M7 M
#### 4.2 测试 DeepSeek API4 `$ Q4 _% I. y% U; L
- 使用 `curl` 或 Postman 测试 API:. P4 K5 z0 G0 j( P1 p
```bash
+ W1 N* s5 \! }/ ]9 O curl -X POST http://localhost:3000/api/deepseek/query \
% |- Z4 r6 A- @* @$ h- M -H "Content-Type: application/json" \
7 L0 f, A5 M, o; _0 ?, ]1 a) D -d '{"prompt": "显示最近三个月联系过的客户"}'
# R9 `* _; i- {4 t' I) T8 R7 |) j ```
8 i# J( E1 U1 J4 |9 Q5 m, m
" E8 R" o5 e+ P' `8 W* h+ W---
+ h- H, `/ N* K/ X: Y6 o' I; x) U8 c, M
### **5. 部署到生产环境**
, z* V3 s" h7 P5 @; O#### 5.1 使用 Docker 部署
+ [: |7 w( W: [- 创建 `docker-compose.yml` 文件:! a0 n1 i! q0 q& V) l, a# j- l
```yaml
6 N9 Q# ? s) [0 e- J! ~8 _ version: '3'- e8 [# _% r z) ]% Q
services:
8 D) P# m2 C. K app:& Z: o* N0 k) [* T" @+ U0 k/ o
image: node:16
7 Z7 d% [5 f$ {9 j D6 E4 R) ^7 O container_name: nocobase
9 m2 l; z8 N+ V8 P5 { working_dir: /app
) S1 A# i% Z; _% G6 U6 g volumes:7 t( K& j# a2 I1 w; W$ G+ F; J* @6 Q
- .:/app
7 F5 l3 X8 S/ Q s9 C ports:8 l' R9 ~) e: T. g* d) G; z
- "3000:3000"0 `# v: X I# {9 x4 Q, V
environment:; b: D# H- V5 W
- NODE_ENV=production! n: e6 _8 g( s8 c( o" G7 B! [
command: npm run start* Y6 c$ G( ?" K+ I& \
db:$ s/ L: o! q- {9 A5 f
image: postgres:13
* L: |8 a3 G; F; G container_name: nocobase_db
# B9 `( T3 ^9 L& `% J8 U environment:" } @1 k! H3 I1 w
POSTGRES_USER: nocobase_user. U) j- x+ L) f, y# M6 L
POSTGRES_PASSWORD: your_password- `* Z% c. Z7 R" B
POSTGRES_DB: nocobase
; F4 {6 ]. y7 M- O- t( F2 w9 h ports:; g+ q& _1 t; N4 @/ c# \( n
- "5432:5432"
+ j' D- P2 [7 e9 o( M# M4 Z) [ ```2 _3 J E2 J! U; y* G
- 启动 Docker 容器:
8 E/ Y8 m8 D1 p+ } \. _3 [ ```bash. W$ k, Z4 F- P1 R! ~% o, ^4 M
docker-compose up -d1 {+ o6 j1 d& n1 {9 |, M3 {/ W8 J
```
! G+ k+ t. X8 {# s8 o# i
6 b% c6 i6 k e#### 5.2 配置 HTTPS2 ^7 M! f. a" q
- 使用 Nginx 反向代理并配置 HTTPS:
& Z+ n. ~7 @! u/ ?1 Z ```nginx* M0 }" E' p' W. D
server {7 N: b5 e4 Y; N+ g+ r" \; q: W
listen 80;1 e+ h3 H9 ]: ~- J( w
server_name yourdomain.com;
* a+ Y% H& j5 _. O+ c9 s& ~/ a. i return 301 https://$host$request_uri;
& t0 J) H6 P& r! l. @7 s! K. M% h5 V }. F5 \1 T' j3 `- _- F
' B+ x" A! I( p; l* [: B server {% X. c+ ]7 a5 u& @
listen 443 ssl;" e; m" x7 j* l0 D6 h: i
server_name yourdomain.com;
- w( O+ t8 O/ j' D+ o( m( n
* F6 _* ?5 p2 b+ z4 s. k ssl_certificate /path/to/your/certificate.crt;
. \$ [7 u( Z) G$ s5 ?, ]) ?% _ ssl_certificate_key /path/to/your/private.key;
x0 P: v/ {# `$ c+ {1 h- L, v
! ^6 ]. E! J# Q' L location / {8 ^+ F) o' X3 j& M9 S: p
proxy_pass http://localhost:3000;1 j) [/ N* |, p0 ~
proxy_set_header Host $host;
/ ], f% R2 o/ V8 V; e proxy_set_header X-Real-IP $remote_addr;
0 a2 O# O' d T1 {6 h }
4 r, p$ n3 g8 ] }% p7 D- l% B1 K/ ~. P
```3 C: I' Y! r* `9 U4 D( u
1 ^1 m2 K" w+ l/ u
---2 I8 a& ?: f9 X: r
# f/ E" R8 e6 \* g! ]4 G### **6. 总结**
- p0 K- D4 L4 _3 ]0 A) K通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|