|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
/ s* P2 h: Q3 c2 C! e7 V0 [2 C7 v" Y7 {7 n
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
: u7 j5 M& N }" o3 }9 |" l
% K0 B" E% A r' n3 b/ h---
' k0 u. n3 T, a; C
7 f$ D1 [: C' x1 J9 H5 s, Z### **1. 环境准备**
- Q; b7 J( w7 G1 T/ K" f#### 1.1 服务器要求
1 P* n' g" W! Y; G% }5 y ?- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
8 v( I& T4 u# l! U% c+ Y- **Node.js**:安装 Node.js v16.x 或更高版本。 v- L. G- |9 T. {
- **数据库**:PostgreSQL(推荐)或 MySQL。
" T, T2 A% F5 s. q+ R$ M- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
! z" D3 ]8 }1 R) Q7 e( e2 m3 r( r/ Z& m3 a8 M
#### 1.2 安装依赖
. P# P$ t& A ~) k- W- 安装 Node.js 和 npm:
4 w5 d* [5 Q8 P ```bash( S) q* R2 D6 Z. E
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -5 d6 h' q& P4 z z9 N. X
sudo apt-get install -y nodejs
1 J* a* u% P" Q1 m2 L ```, J& u! R9 Q5 `+ s7 n
- 安装 PostgreSQL:# k" t$ ]. R& T+ @6 O, C
```bash2 K9 z* F8 |7 k' W' K
sudo apt-get install postgresql postgresql-contrib
2 w( p1 g2 d6 q$ V8 W8 Z sudo systemctl start postgresql' l6 c* U0 R1 R6 @9 ?( z! t6 H& O
sudo systemctl enable postgresql
1 F, Z5 a7 y( g9 x; v; ` ```: o: a% m2 E4 g1 J
' B# e# o" l5 x
---
$ n; N, u. ^! H. X7 ]4 G5 {; Y3 s9 c9 J# d! X
### **2. 安装 NocoBase**
5 c- d6 }) J& w$ ~6 {#### 2.1 下载 NocoBase
" s& K% s9 c) _& F8 ], K- 从 GitHub 克隆 NocoBase 仓库:
( R3 j- \5 ^7 M: G8 _( a ```bash! Z' u5 ^4 y4 _- \$ i/ o
git clone https://github.com/nocobase/nocobase.git
/ @, H9 |9 g% Q* i; s* Z9 x cd nocobase
$ N1 L Z# p3 I& T* F ```
3 v$ S3 |$ H0 H' c4 U
; O2 k/ Z% J- R0 ?. Q#### 2.2 安装依赖3 p& v( e8 c1 R8 A9 H( k- W, N
- 安装项目依赖:
' N1 \! ~+ Z) d ```bash; ]& H2 g: [+ Z/ D* U, s( i& g* n
npm install' W' _ U$ x+ m+ U/ A( D+ w3 G" Q
```1 |6 G4 G3 X6 T& u5 T" \1 ~2 @
& I# S0 O" B, c- T#### 2.3 配置数据库
" }( u1 J, p/ l- 创建 PostgreSQL 数据库:
$ O: l1 `, y: W6 J1 h+ J# q ```bash
, M F8 B4 T8 s3 d) W sudo -u postgres psql0 @2 l- _( m2 I1 V4 t
CREATE DATABASE nocobase;
+ v/ u$ J% z0 [' O7 w; M5 H CREATE USER nocobase_user WITH PASSWORD 'your_password';: F. j% d) W2 c5 O- O8 g& O
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;
- F2 z5 G( h, D8 M \q/ N" c8 f& c% ?3 w. r5 G
```
, u0 p3 t) i, Z: [- 修改 NocoBase 配置文件: A" ]2 ]$ j* O( l
编辑 `config/config.json`,配置数据库连接信息:
3 [ ^/ @; i5 m/ K# } ```json
5 n; m" l" }& d# l- i1 h$ }1 C; }4 v {
( S# K( S" R G "database": {
5 d9 |( P3 |2 d; c( k- c4 x6 G- c "dialect": "postgres",
/ j8 ^5 l) A9 A& v" u. ]) Y+ f "host": "localhost",) s! D# K8 i+ @5 G+ V! q @
"port": 5432,& N1 }/ W8 k" G
"username": "nocobase_user",
0 u' m! E3 q+ X" U% v+ v "password": "your_password",
0 a: b- M2 J0 d "database": "nocobase"; M. ~( q2 I. r; z3 j
}
) A) b. B. b9 [" j }- J0 |2 g( P/ Q. C' f! l, a5 l- ~
```
; z# S; F# B: B% `% G. H" @3 J; b1 L
#### 2.4 初始化数据库9 L# T2 Y! X" Q' T* u5 ]
- 运行数据库迁移脚本:7 D) v) E4 J. H5 U/ Q
```bash
# Z/ K: [* ]; w& l7 ^3 B1 B3 \ npm run db:migrate2 k9 N+ M# ]5 N* J- k6 y
```
% V& {1 f" n+ |4 g* Z& Y' C" ]/ _: w( {% z2 P( ]
#### 2.5 启动 NocoBase8 b/ l" T9 ^# h8 @ d
- 启动开发服务器:: a% Z0 i! D# f! e
```bash1 j6 K/ k' a, @; m
npm run start
0 x1 j2 r: i1 \9 J* Z ```
5 O+ t" \; ]5 R+ ^4 o- 访问 NocoBase:
: B6 K c( T$ ]" N: O; f" P2 c 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
$ }# y! Q' V% y8 [8 M& {- I$ F* d, g2 u8 y2 H& [
---% x( v$ y9 X# R
- [0 g7 l1 Q5 g3 H% A- c### **3. 集成 DeepSeek**8 p. d. C) l3 H, R* ~
#### 3.1 创建 NocoBase 插件
+ [9 I- F* E+ u, _6 Q" l* p$ {% j- 使用 NocoBase CLI 创建插件:. p8 D( }) Y, `* w8 n& x
```bash
1 H S, a, b0 \$ x; {5 N3 u4 _ npm run cli plugin:create deepseek-integration/ p5 d2 w/ m" H
cd plugins/deepseek-integration- Y1 e% m) P! @# Q
```
A6 r& ?' F0 h9 u3 X# d3 ^
1 _' z: A: s- Z* \6 k#### 3.2 安装 DeepSeek SDK
- G p9 V0 m" P' f$ T- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
& V' _- c! R5 F" ^" Z$ } I ```bash
2 _( G7 o* V) p npm install deepseek-sdk2 ~' q- P' s: B& b# n6 s
```% ~- t/ P4 A8 m+ z' H
. H; [& {$ i, r4 n1 y#### 3.3 配置 DeepSeek API 密钥
4 u) w6 ], @; P! ?- 在插件配置文件中添加 DeepSeek API 密钥:
2 R2 m/ C4 D+ B. s& N 编辑 `plugins/deepseek-integration/config/config.json`:
7 T3 D: \$ z! \: Q) W3 G6 I0 x ```json
8 P7 o+ J; P. w {
* m+ s% a1 j7 z: c8 d. j9 e "deepseek": {) T: O0 Q* m% ~* u
"apiKey": "your_deepseek_api_key"
9 b9 Z$ U7 Q* X0 L }; r8 y* F& Z: [5 r2 F- g
}
2 C" m; \& y \- Y5 k2 i- s ```* [3 {( c& {( G* J: M7 C! X
9 D. C3 ]7 q5 g8 \6 Y# p3 L#### 3.4 实现 DeepSeek 服务" T$ Z' I) j% a2 P [' b1 n
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:' _/ S' A2 }; V( v) t% r
```javascript; o; f5 R) _. ]+ R' X/ I2 Y
const DeepSeek = require('deepseek-sdk');0 G5 g9 w0 Q# n2 M8 K- g) Q
. E1 S' w7 G5 i. S8 ? class DeepSeekService {5 ]/ N* N. ]3 X# m
constructor(apiKey) {
8 R7 _* j: t: x H this.deepseek = new DeepSeek(apiKey);; T; w: V% c; y4 b$ Q
}
% O" [1 ]6 b O3 @1 R* I! o3 G/ r. D# }+ _8 p1 W/ z
async query(prompt) {
! k0 p$ X( E/ @7 `+ U6 K) y4 A const response = await this.deepseek.complete({
8 `: `0 u: G( F2 Q# Y prompt: prompt,9 l2 y3 a4 W6 Y- K6 k, m! T- V
max_tokens: 1506 ^ a6 [9 `5 _0 l% v& e: o# [1 j
});7 R& y" p* V' j# v7 k6 ]
return response.choices[0].text.trim();6 S8 e1 i$ B, c
}
5 F; c2 O1 a/ ]6 B% l; S }
6 y4 I5 A" d/ l5 Q; o
, m7 M& N. r2 \ module.exports = DeepSeekService;
$ E- _: s; J4 O$ a ```
; z* n7 b& E; X6 ]9 |
1 Q: e+ G2 R) z, `' l& S#### 3.5 创建 API 路由2 u0 M2 D, m. H; m, _1 S, f
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
- R& j8 U: ] J* R ```javascript
e# V d& U! i. y/ I, u! i' A const express = require('express');+ n' Z6 Y* Z, z
const DeepSeekService = require('../services/deepseekService');8 \9 J0 S; U+ j2 S
const router = express.Router();
7 S& ?( k. }, a5 ? const config = require('config');
1 R3 r$ l, l: ?/ y g6 w* y: N( {2 V5 u3 l3 t$ ?! l @8 T# A: b
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
+ Z/ i$ A6 s/ }+ f) [" O6 b8 k. B4 r
, U- v+ d6 [8 d! J. s# ? router.post('/query', async (req, res) => {, [, H* X6 m4 ]' B* N
const { prompt } = req.body;- C, \: d) r% e0 U$ S+ M: E3 }# j
try {
; U' j* s- c: \ const result = await deepseekService.query(prompt);6 ]7 Z8 k% h3 d' Y+ D
res.json({ success: true, result });% w6 e4 O, T6 v
} catch (error) {) v; @4 \$ l3 N/ E- f
res.status(500).json({ success: false, error: error.message });# c5 F: G5 [+ c- _) s" @3 i
}
: T% B8 W E* [& U8 H! A: e/ B });9 M3 x1 m0 h& H* ]6 h! ~# `3 s8 O: c
! p- ?# |7 l, }. M
module.exports = router;( J; c) C$ t5 X T4 Z
``` _; S5 d( f( Q; u+ T/ z
* X( g! x3 {1 a2 y, W, A# {#### 3.6 注册插件
7 s n, }' |1 y- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:* Y& K1 ?. a. s: a4 S" i/ c
```javascript4 e0 a; n- g& ?/ e
const deepseekRoutes = require('./routes/deepseekRoutes');
7 P, C# B2 W; l @7 N9 u3 m2 I
2 Z+ z; E% I/ m module.exports = function(app) {
, c8 \( f8 k9 T4 P" X* K1 M* C app.use('/api/deepseek', deepseekRoutes);/ E+ O- r9 C; B, E3 g6 B( o6 y) Y
};
1 \/ w4 S- T! c. J0 O" T5 V ```
9 t" M" O7 M8 q* w5 r2 G, }
$ L" {8 q( _) L. A2 J& P---; {- U) ]4 f- J- G( z' a
) p5 I0 W& K2 r8 r; T
### **4. 测试集成**& v, A6 z& H6 _) j
#### 4.1 启动 NocoBase# d1 j* I3 s* l5 i8 ]& O
- 启动 NocoBase:, M6 c) J7 f/ v$ M
```bash* p6 p6 z& d. R7 X/ o+ ~
npm run start
0 H' i5 M" V6 b% ^) z" A ```
S( ]4 o& t- i+ Y4 i
* i T {9 g) @4 \- C# [* E- z7 N#### 4.2 测试 DeepSeek API
& P7 u0 J- K7 P" u8 W+ a" p- J- 使用 `curl` 或 Postman 测试 API:, I& V: y M+ d3 x7 D$ o
```bash
- Z$ e. \2 m6 R5 { curl -X POST http://localhost:3000/api/deepseek/query \/ F# W9 q8 T3 k+ x, s
-H "Content-Type: application/json" \
( B* L$ _: j+ Y1 N4 n/ Q& m" m4 r -d '{"prompt": "显示最近三个月联系过的客户"}'
5 R# m1 x' H" I) E ```# Q7 U' n8 @) {" G2 r
, j* ^6 G# D$ p' U
---
6 E0 ~ U$ \2 H3 }
7 u0 m1 o# p# X* i### **5. 部署到生产环境**
# k# \5 H3 `; K- z, ]+ }. q U3 \#### 5.1 使用 Docker 部署
9 K1 z- [4 T( {) q4 k( X- 创建 `docker-compose.yml` 文件:* T$ ]0 G! G$ s) L# H' J4 J% g
```yaml
5 b2 f& Y4 d( q# y version: '3'
+ _% C3 b& y' w% N5 ], i services:. ~, B, G7 f. ?/ O% k! t" P
app:0 t; r% u2 X& }1 v* ]1 y
image: node:16% a3 I* L6 ]1 w
container_name: nocobase9 T+ a: H2 U: b
working_dir: /app
+ B6 Y8 J& I8 g volumes:% L4 ~( X1 O8 d4 ]
- .:/app/ F7 J; ? e: t9 {0 ^: w$ B A
ports:9 w2 q3 m3 R% f
- "3000:3000"1 v1 [8 u4 [) f/ A, r' W; k# p5 M" l
environment:: h8 Z+ n5 C/ d) k$ L% g3 a
- NODE_ENV=production
& f7 M1 p4 N1 M1 ?( t8 L- d command: npm run start
9 M) {) M+ f+ ? db:
$ v8 v$ b5 d7 @7 `* \1 P4 U# Z/ ] image: postgres:13& R8 s* l+ d0 ^% D( M
container_name: nocobase_db
j( c& g- Z* b/ H environment:5 @5 E& c# T. m# [, Z+ A9 Q, @
POSTGRES_USER: nocobase_user: C2 u+ E. _2 C) h2 [+ }
POSTGRES_PASSWORD: your_password
' @+ m& k! h* b { POSTGRES_DB: nocobase- o% @: }0 f; e) m
ports:
3 B, ~, z! h0 d+ k - "5432:5432", I0 j, }0 e: p/ b# P
```
& i$ D8 |' T0 o; a- 启动 Docker 容器:
$ u' k# o2 r( i3 ^; ~ ```bash- W5 e+ L1 H, |& L8 `* L- y
docker-compose up -d
: ~1 v, f0 s1 n9 L ```
1 t/ @% W) j1 W4 T6 |
3 f9 m2 n. g E( F% r#### 5.2 配置 HTTPS
# w1 ^: l+ w7 M' s A! O- 使用 Nginx 反向代理并配置 HTTPS:
# u! i% c3 K, o& h$ m ```nginx
) r6 v+ \* k2 y: s server {
/ _' ?$ s6 X$ p listen 80;( D7 P! r" _1 Z% [+ o# Q
server_name yourdomain.com;2 g. p5 r7 Z4 P1 H0 G# ^
return 301 https://$host$request_uri;
8 e+ |# g7 l$ a" P( R } b( x2 B! E& [
3 @" C% f" b! Y+ ]' D8 a! d server {
1 T! z2 Z9 s) Z" h- a listen 443 ssl;
4 V y) Y+ W9 w$ a; c2 w8 y server_name yourdomain.com;
4 s) t y" {; F, N; @3 _ ~. A9 q, J( i) e- s+ `
ssl_certificate /path/to/your/certificate.crt;
( `) V. t6 \2 v. h+ S ssl_certificate_key /path/to/your/private.key;+ Y! U; G$ j# V! n0 v( M+ [
- s7 K- J8 t5 P6 F9 Q5 i1 M
location / {! o$ a) E$ ]- f: I" C p7 h
proxy_pass http://localhost:3000;
( L8 {* _+ H" G8 S proxy_set_header Host $host;
' k, r4 e- }4 k7 E( B proxy_set_header X-Real-IP $remote_addr;1 `6 X" q x5 S4 J0 M
}
0 u9 z; m: \3 b( S }
% A, s6 @$ n1 p9 ^ ```
3 ? f# Q# W. v5 \1 V6 y6 h: b( N: N- n1 G% n; O3 L
---% f+ R3 ?9 ~: S3 N. }1 B
* u( M/ H. g6 A0 E# h3 u
### **6. 总结**
n2 P0 V0 ^$ U- _8 O! v通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|