|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。! k8 b/ p4 f" ^ X
* ~/ w; f- s( f6 j8 y. c- { f我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。 W2 Z# |: Y, w8 O0 ^1 E
& l) i( ]* j2 U0 Q$ S, T2 m---
! I* i; p+ F- t3 k1 o
+ ?5 {' O4 k3 r, w4 F4 U5 t9 `### **1. 环境准备**
. {6 d& c. m& }5 D" n6 Y3 i#### 1.1 服务器要求( l- l& D ~$ a% E* c1 H9 \5 f% w
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。# t k$ ~" V& O' `/ h8 c
- **Node.js**:安装 Node.js v16.x 或更高版本。
, N B. K- W3 {' a- **数据库**:PostgreSQL(推荐)或 MySQL。: k' X+ O* |- V/ Z( q! U' u; n) _- `
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
& s( N/ i3 g% O2 P; U
1 [& Q4 B6 U$ _ n1 |. f4 r9 d#### 1.2 安装依赖6 R$ ?! }! |( j0 r$ }& `5 B
- 安装 Node.js 和 npm:
) t* s$ |! N2 Z: a ```bash
0 \) H' M) o. y5 w curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -: [1 [- I& P. q* r& v' r {
sudo apt-get install -y nodejs2 c% T5 R4 k- B* D
```
: n4 S2 c) K+ [- 安装 PostgreSQL:
) i1 t' ~( L8 T4 q* V' P0 u# I ] ```bash" D7 e# }5 Z* q7 @! b
sudo apt-get install postgresql postgresql-contrib
: p" F8 m/ w9 }; k) ?# r sudo systemctl start postgresql
6 p8 `2 f; c! `0 E; V {, v sudo systemctl enable postgresql' I" \. Z! S# a" n1 {3 b( o& y
```
7 H, d0 ~! l C! E. P8 u9 o, x7 I4 Q# x% w& j3 s
---
0 `* ~7 r. N+ S1 o5 o
% \" F. ~! E8 Z& ?4 Q5 @$ h. T### **2. 安装 NocoBase**; K O/ T7 }' W( @' ^& W8 [
#### 2.1 下载 NocoBase
1 j: K. b @# S- z- 从 GitHub 克隆 NocoBase 仓库:
: ~2 U$ C- T0 D3 z! e ```bash
( V" Y! _$ ^' T/ [$ f! A0 Z git clone https://github.com/nocobase/nocobase.git5 l- r- K0 p$ ?- h
cd nocobase g" ^- I6 Y ~7 u& V
```
6 s* ~: E' T7 S( u: M) c
. f1 D0 P9 w/ a5 V5 |* p#### 2.2 安装依赖2 E0 n8 E4 d) c$ J- b9 k$ ]
- 安装项目依赖:& ? O! q% s/ a6 O, d& l
```bash: q% f4 a3 j* |' T
npm install
$ F0 U9 N! ?- F& d ```0 L% p+ u' t2 C; _) g7 j6 \
, L& X2 c V6 d0 C6 l
#### 2.3 配置数据库" S( Y5 S! m# \! h8 ]1 L" Q
- 创建 PostgreSQL 数据库:
; x+ Y* l! N1 D1 Z5 l! l3 \ ```bash
. w! C/ o3 p* a7 U( O% N sudo -u postgres psql! I6 s, G. Z4 y' S' E" x; r0 g F' L
CREATE DATABASE nocobase;
5 p$ T/ T; d+ G5 H3 n9 w$ a! w9 b& B CREATE USER nocobase_user WITH PASSWORD 'your_password';
6 ]- c# K* J: U) F3 n GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;1 W' p! U* d0 H3 r' Q! s2 O
\q' g: j2 F% L/ n( Z
```* {8 L7 h$ T$ d$ s! ?/ H9 F* |* r& I( S2 j
- 修改 NocoBase 配置文件:
. G3 U* \+ ?) S r 编辑 `config/config.json`,配置数据库连接信息:
$ ~! _7 k( [; ?* Q) K! O5 P" W1 o5 q3 p ```json
$ ^! H. A- c U9 V- F4 @ {. _; e7 P( Y! B$ O" O- r
"database": {. `4 l% N: v8 e& f% O
"dialect": "postgres",- C" E3 I" v( M8 [; q5 F! @8 e
"host": "localhost",0 h! W+ q$ a% s* o
"port": 5432,
2 M3 t9 |/ }/ p( ~0 d; ^) L+ B "username": "nocobase_user",
1 S2 h9 r% l* L( g! U4 q5 x, V "password": "your_password",
3 O/ \& _; G1 H/ C% r* Z% B" | "database": "nocobase"4 u! X& c* `" n+ @
}
~" f) j$ d; `- n }
7 j1 L2 ~; W8 m' D C7 a ```
& r. ]# I# q3 O3 t: j9 F' Q4 A) ~( y
#### 2.4 初始化数据库( X1 \! V1 v; k% V; k* O5 ?
- 运行数据库迁移脚本:
/ Q3 Q" K- M, Z ```bash
6 W# h/ a. y# ~) e2 [: H npm run db:migrate" I _5 n- x* v- j" k1 @4 j
```3 j/ A1 H G: S( M' V: P
, r$ {$ L7 d! z* {#### 2.5 启动 NocoBase
# b4 g8 U1 t' b- A8 C- 启动开发服务器:
' _ b& I5 J! ~ ```bash
. x8 y+ _& J. o npm run start) P4 ]3 l. K. R) K% c e9 X
```
" S% N' f4 p* @1 I/ l" N5 @- 访问 NocoBase:
" T7 z/ N5 @: X$ _8 K9 \5 ~ 打开浏览器,访问 `http://localhost:3000`,完成初始设置。) b1 {- V. ?+ R. M7 Q- r1 z; T2 d& j" Z
9 ]; ~/ i) C9 v8 l---
# K2 R" i5 r$ e0 {
; h3 q0 F" L- K### **3. 集成 DeepSeek**$ e! ^% w4 O8 d9 u8 `5 q" n H' @
#### 3.1 创建 NocoBase 插件8 `, u6 e# L+ [( K2 @6 Q) j
- 使用 NocoBase CLI 创建插件:/ J9 N8 s. v" i* A
```bash5 `6 ~$ [" }3 @; W! o
npm run cli plugin:create deepseek-integration
8 x: ~$ {2 W% |, C+ X) @ cd plugins/deepseek-integration
' W$ p. d) a/ }* h8 P ```$ Z7 ^- a1 t5 v: I9 z& K
+ M& K) [3 v9 v Z6 U
#### 3.2 安装 DeepSeek SDK
8 m4 o0 c& v# ]& }- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):1 v! F8 h( l- Q7 U
```bash7 d, i5 B: Q: N, m
npm install deepseek-sdk* y( V3 l2 ^; b' I7 {, v
```
& u) [7 D+ T# d8 W3 b' e* S' L) |( M( V. }3 b( c! Z1 U8 p
#### 3.3 配置 DeepSeek API 密钥
* }, i) k& A# G# @: y1 @( u" `- 在插件配置文件中添加 DeepSeek API 密钥:4 N d5 C. Z9 G# b/ k8 l
编辑 `plugins/deepseek-integration/config/config.json`:
2 x) |' q4 K9 f ```json
5 s/ ~8 A- s% l) E7 X8 ` {
$ X" _2 O7 }' n" W: f "deepseek": {
" C0 o' T8 J8 Y "apiKey": "your_deepseek_api_key"
! Y+ {2 N6 K8 N6 c }
# z# ^+ K6 q/ W, O" q }" }6 r4 t. J: N' {; X5 u3 w
```$ \8 j6 _! O# h, s) O8 r
, ?( v- d/ J4 \/ ^1 u#### 3.4 实现 DeepSeek 服务' N7 N) s: r! E% b6 ? ?$ Z l
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:
. \. B' a& N; D$ `/ K ```javascript! D" ~7 L3 M/ M
const DeepSeek = require('deepseek-sdk');
/ `3 Q& ]" D s3 l4 L x
( t0 _2 e9 X9 j: E' m class DeepSeekService {8 r% `) G6 n7 J
constructor(apiKey) {2 p! R/ E# Z, e- U7 p
this.deepseek = new DeepSeek(apiKey);
# s! p* e5 ?+ E' }9 H+ U6 { }8 M- z( U+ Z# u5 k
0 \9 a) J: R, l async query(prompt) {
7 z* w V3 P# w |8 Z const response = await this.deepseek.complete({* K3 ]# P* H" m6 o
prompt: prompt,
3 c' u, w6 V0 [3 u9 ] max_tokens: 150
! g6 T+ |6 P( q3 X$ S }); u( z' l0 F) M) J( z8 o
return response.choices[0].text.trim();1 ?( l \/ M; F' ]$ H
}! M% K2 E) [, r
}
* C O8 E% J: k3 ^9 t
$ w( E7 Z" F, |7 U6 ~9 m& ]/ y7 M module.exports = DeepSeekService;; I, Z! b8 u( W/ s2 Z
```
; R0 h0 Y, S3 y: _
; g5 N1 {& Q, s5 |; L#### 3.5 创建 API 路由8 M3 N5 B, m7 K. K7 T
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
- c; Q8 W( C ^3 q; O6 y5 }% H ```javascript
. r# z0 I6 }/ W, Z; T% X const express = require('express');
* R. N1 J6 p: E. K/ t, f% x const DeepSeekService = require('../services/deepseekService');
5 g: ?6 p0 F& q7 ] const router = express.Router();
; z" n/ u* H$ s, e" n6 w const config = require('config');& r5 a: e+ q7 F; U$ F5 m5 E: \
H2 E5 h9 ~3 } const deepseekService = new DeepSeekService(config.deepseek.apiKey);
# e% ^) h. r0 y$ [" q/ S9 r/ j5 T% p2 I2 {+ x! _- G. F/ K
router.post('/query', async (req, res) => {; j8 h$ U6 g* r$ V- h3 [
const { prompt } = req.body;" y" z2 Q% V( {9 G0 t' d
try {
$ n, l1 K* O- A$ r/ R const result = await deepseekService.query(prompt);8 A8 m8 Z- O5 k( r1 G
res.json({ success: true, result });1 h8 V' s: h2 ]2 z0 g1 Z! K: M
} catch (error) {& h3 ^ _* Y) X8 `9 {# `# F
res.status(500).json({ success: false, error: error.message });2 r' f$ z2 n! X% ], I$ y
}- |) T- @2 e; w5 K& A- A
});
" ^5 \7 v. f2 Q+ Z! n0 S8 P
~" y5 }- A5 c# z module.exports = router;
2 V$ b7 X; U, k Y ```
; b ^! |# g, V, o& N+ O* ?" t3 x y. @, d- p" Q
#### 3.6 注册插件' `6 [, [' Y( M
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:1 s4 Z0 z' } J
```javascript! g1 U5 e- p" U+ z
const deepseekRoutes = require('./routes/deepseekRoutes');
S4 K5 A" a* P
8 l0 S* u& v1 w3 x2 I' a module.exports = function(app) {
8 k/ N, k! W" O4 q/ ^4 g% e app.use('/api/deepseek', deepseekRoutes);& j0 G0 F5 W ]0 P
};
+ o# a }5 x& Z. k! A3 n& ?) r5 J/ e! O ```) u2 `# X/ M' w; I9 U9 n. x7 R
$ Y' H8 F E8 R+ Y
---# K8 w8 V) L, R
- Q& y) R( S! B, {+ y### **4. 测试集成**8 D7 d5 N! D7 r$ i
#### 4.1 启动 NocoBase: A/ D+ l# V8 Y- W4 _
- 启动 NocoBase:" w8 ~, z- g( b$ [
```bash
" {& D& m k/ U5 ~' L6 o# ? npm run start; x8 t' I2 j9 k9 M( m7 V/ V
```
1 d% b6 A( W- \" [2 N: h) b- k5 u Q" t/ N+ ~% E: C; {9 `
#### 4.2 测试 DeepSeek API
2 E5 _9 |2 f/ K" X7 n& G- 使用 `curl` 或 Postman 测试 API:
7 O5 k# p6 v4 Z) q; ^0 \0 Y) v4 \ ```bash
* Z4 Z" F4 M [" ~ curl -X POST http://localhost:3000/api/deepseek/query \
% W, m6 b- V1 p5 x: [& R9 ` -H "Content-Type: application/json" \( \# b3 X+ ?) t2 ]1 S5 }
-d '{"prompt": "显示最近三个月联系过的客户"}'
9 y; N" k& s: O; F1 R# a, e ```% c" D7 h& L2 _2 q
4 D' h6 z; k7 v: {
---
* x, r3 r+ k5 j2 \5 h
+ C7 V% ^+ F5 }8 ~6 C' q( A### **5. 部署到生产环境**6 [( i7 E9 r! o1 W0 K q
#### 5.1 使用 Docker 部署' p8 F7 t5 @1 `" k+ d+ }) p# z
- 创建 `docker-compose.yml` 文件:
1 r$ l( y- `( T. `& O$ p ```yaml/ j5 f8 }: J/ b( X8 [9 n) R2 m W
version: '3'6 i# R2 e; J% h- Q( o% O P
services:7 y7 t7 E; |! a% k0 J6 ~8 y( k
app:
. I7 H% G# F9 w& t/ ^4 X5 u image: node:168 S/ r. @) H; [3 A/ K Y
container_name: nocobase' }: ~6 u, X2 o/ [6 L: m
working_dir: /app, W; v* b& y, ~4 `6 O" a
volumes:4 |) Y, x" ]; B# z/ N9 b# Z2 Z
- .:/app; ~" r: i2 d. z, N; O- l
ports:; ?9 U4 Z1 e) ^3 X- l
- "3000:3000"% b4 T+ I3 I4 t6 _% z
environment:
4 Q- }- _% z; }% w - NODE_ENV=production
6 R o) R: W' b3 [# y! i- w command: npm run start: I; _, E# y! |2 |( `( G
db: {+ i" n* [+ G+ S1 b
image: postgres:13) o: P' }) f3 o: C, M7 k
container_name: nocobase_db
2 |6 e% i4 `, O: d1 k1 z, w, m environment:# O* X: T0 x+ o3 u1 r
POSTGRES_USER: nocobase_user
: g) Y) Q! m4 y! H( v3 [6 o. r2 d POSTGRES_PASSWORD: your_password
3 J. s! A3 [7 |2 S, F7 i POSTGRES_DB: nocobase, w8 f- v# E- Q/ U4 F0 {+ B0 t
ports:
: M; ~; [. ?% f4 s2 u7 X - "5432:5432"
9 |- {1 f: d( H1 N8 L; |( V ```$ g# |6 h4 r" f
- 启动 Docker 容器:
" _' X7 e m& T5 F' Y3 C ```bash) q9 Q. D6 h( a0 N2 s
docker-compose up -d1 j9 E7 n& Y2 v9 x) F
```
5 m* P- @2 r9 n! o1 J9 r/ B$ Y" y6 c5 Y4 z/ B- ~" H1 A8 r5 ?( N/ v& |
#### 5.2 配置 HTTPS7 L- Q" b3 @8 R" I# m. f v8 G
- 使用 Nginx 反向代理并配置 HTTPS:
# t! ?8 d" Z, H ^ ```nginx: @$ S F- j& Z4 Z& V
server {
% x b: l% c; G. N% _; ?% v b listen 80;' B& s5 X z. P
server_name yourdomain.com;0 j: h$ ^9 _6 v& J+ S, E* h
return 301 https://$host$request_uri;
" B [- |: c1 H, v4 w; b }
; S! S' D& h4 L2 o; X
; K+ B2 p/ y5 d9 J server {$ F" S8 K9 A) J# a/ b% e0 [
listen 443 ssl;0 A% Q8 S$ ~5 _! y
server_name yourdomain.com;
& e- C( |2 m6 f M
8 r$ d0 {- u0 w [3 L4 ]+ q ssl_certificate /path/to/your/certificate.crt;
! R8 E# R7 D+ |8 @ ssl_certificate_key /path/to/your/private.key;, l Y8 |9 o" Z8 a1 W5 ]
! e% V$ X# q: g& |' ^
location / {
' u7 z) D3 t4 Q proxy_pass http://localhost:3000;; `% ?0 G* \$ F( _
proxy_set_header Host $host;5 b4 \+ B; ?, `1 n# V; P
proxy_set_header X-Real-IP $remote_addr;* u2 q3 d) P6 u9 g, z; w1 Q r
}! T( l/ ^8 u9 X1 t8 e, Y
}3 B W8 h6 ~* C4 N9 T/ }8 n D- y
```6 e1 M8 u/ Z7 [9 t: N9 Q
' g8 r4 E+ }/ |7 y0 z8 `
---' J$ M$ ^$ L% M- j& n% z/ ~ @
. I' a/ G5 N8 A( k/ |0 w' [
### **6. 总结**
! [( y# }+ Y+ w6 C9 ~通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|