|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
7 t, y0 y7 j# i+ J
8 D/ ?8 K3 r, S/ _! f我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。7 g7 q3 d+ ~$ H N! s+ T) `
) N0 X: _2 X' w( c& ?---, T: C1 r0 s0 Z0 _5 w+ P: @+ l/ b
5 X2 h' A9 z0 S% A& K. l
### **1. 环境准备**
' ^" C% M$ Q- t% q8 N#### 1.1 服务器要求- m `$ G) c$ l+ H
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。' J& v9 Z5 a% _" A
- **Node.js**:安装 Node.js v16.x 或更高版本。- w$ g- o& i/ N! I5 d
- **数据库**:PostgreSQL(推荐)或 MySQL。& u! j9 ^% h2 j {- q$ l
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
; {) [, e/ t- y# w# F- T4 n O( o3 e2 Z; v E* r
#### 1.2 安装依赖
, |+ _5 d6 y# x- 安装 Node.js 和 npm:
* `1 h) ]' B6 z" w8 S ```bash
( P1 ~7 c9 f, O0 T$ \8 s curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
) o# S% z, R3 }0 n8 ` sudo apt-get install -y nodejs
3 }. K& _) i- ~8 C4 c ```) ~. z% L/ ?) u4 K I! j
- 安装 PostgreSQL:& @6 f$ K. [/ U" o
```bash
3 Y! ^( f. z( H& r sudo apt-get install postgresql postgresql-contrib
2 q% |; _7 z' c% T4 j- Q) `7 M sudo systemctl start postgresql
2 n. }0 l* k R3 k sudo systemctl enable postgresql) {* L, U7 n5 e( t. U# `
```
8 J' S3 C" `/ m8 `
7 h9 {/ {# H7 w4 p+ R---' \2 w0 T9 H! w3 Z
2 C5 t( k/ O% p* a8 x### **2. 安装 NocoBase**) K: O6 I& [) k7 K9 v' ?- u2 _
#### 2.1 下载 NocoBase W" [. T* M* }' o' X I6 C: g4 L {
- 从 GitHub 克隆 NocoBase 仓库:4 M) S+ |% v$ H$ V* i
```bash* ?& _2 _* ^6 P7 o% h2 V
git clone https://github.com/nocobase/nocobase.git$ v% e9 i, T5 o- A
cd nocobase
- @& Z! z, t* T5 a7 v ```
c* P8 H2 f5 n
6 F3 r* S8 f) }1 ?0 Q G( a#### 2.2 安装依赖, ]( e4 z5 g: Y4 _/ c
- 安装项目依赖:5 Y# `; U4 G! |4 C, Y8 V
```bash( d4 Z* p, N+ V8 x/ o
npm install
$ r* x. N2 X9 K: [ ```, `) u, e5 F% r" B
M6 W* ]8 w+ C7 |! f9 ]% `#### 2.3 配置数据库
6 d T. p9 B9 C7 n- 创建 PostgreSQL 数据库:8 k9 F6 T7 u% t8 o% N2 t a) F
```bash6 w5 m% y. y o4 j$ R9 N
sudo -u postgres psql
; J( r$ Z' o6 p" v' l1 A CREATE DATABASE nocobase;' r5 K& a' i- n( J+ J$ J( l) m0 G
CREATE USER nocobase_user WITH PASSWORD 'your_password';) w- r1 [5 C4 ]9 Y( L5 f! k! k$ B
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;# y! L' T- Q6 l4 P4 k
\q
2 S" `/ R' Z+ k$ J) Q) \$ ~ ```. B0 A1 K, c4 h- m7 p
- 修改 NocoBase 配置文件:
; U/ _/ X& g7 H& D 编辑 `config/config.json`,配置数据库连接信息:5 I0 k# b6 i& o# o+ ]0 [, `
```json
( {6 a( `3 T. A {
8 c! Y5 ~4 B( \. ?; {! }- G "database": {
9 h7 {1 f. r3 U( E* m% ^ "dialect": "postgres",
9 r2 Q% m: s/ [ "host": "localhost",2 i& M$ Q8 }- [6 J. i5 _
"port": 5432,
8 I4 Z) D5 j7 z7 S: _/ m "username": "nocobase_user",
0 b+ \, v; Q* C' @ "password": "your_password",
5 _" F: i0 t! h3 O: N# l3 ]1 k "database": "nocobase"
4 S% K; u, S G9 a2 A }
) a- a" ~7 a% B5 Z4 J- t } ]. l# q o% F) n
```
+ i; ^4 r8 V Q9 ~+ l4 o: d2 h% h' ]( R
#### 2.4 初始化数据库9 g- A) U! `. u0 u' B
- 运行数据库迁移脚本:. S( T& N) g4 V, A9 i
```bash, a' o U' U3 @4 f
npm run db:migrate
/ |4 h- G1 {. W ```6 T6 i8 A4 ^9 k8 f8 ~
6 w& y. p- q E. N- P9 a+ f#### 2.5 启动 NocoBase
+ Y) o0 a- w2 K$ g- 启动开发服务器:" Y2 y/ c! v6 E: E x
```bash/ l! Q, p, p( d; J! g( e; I/ V$ c( Y: @
npm run start
3 g" @, ]5 p" P9 ^! W A ```
$ a1 n2 c; a6 ?7 J. L- 访问 NocoBase:
: C( N P( Q, k* p 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
0 Z+ v: o$ h4 w6 S' e. o4 m k Y6 }* e9 D+ }0 E( }
---
8 D' C5 P L1 O- V( c( e
1 k& e+ i* I/ O+ Y% J3 l### **3. 集成 DeepSeek**
6 d+ o# i0 _6 ~ \$ V: j#### 3.1 创建 NocoBase 插件3 F) t; j; r0 t0 H3 `' B8 u2 I* M7 B
- 使用 NocoBase CLI 创建插件:% v' V% A5 y/ f% ^
```bash
0 n7 K8 J6 v6 s; W% }) a npm run cli plugin:create deepseek-integration
' S5 [) C( g" Q: _" u& s9 E cd plugins/deepseek-integration
' f* s% B" @( t! H; A2 l e ```
0 f/ h: O0 Q$ z
; k6 m* G/ q0 `6 O* q: C" J5 y. K3 z#### 3.2 安装 DeepSeek SDK. t X3 h2 I& s9 i
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):" m B3 H8 m4 f1 n8 o X
```bash
$ L9 i( c' V h0 M: O' Q1 u/ w3 A; g npm install deepseek-sdk# x, }# e) X5 [2 m
```4 |; ^- K$ Z: P5 R
$ F2 A) K( \7 v! w0 J# ~0 R
#### 3.3 配置 DeepSeek API 密钥
8 H+ l, ~" r9 V- 在插件配置文件中添加 DeepSeek API 密钥:9 X: H$ v9 i, ^) P0 S( U
编辑 `plugins/deepseek-integration/config/config.json`:3 W7 P. v1 r/ |; [, F
```json/ k& A' C! s, {0 z) V# s
{& j2 J% p4 X Q" W" ^9 {+ X: k
"deepseek": {
Y: X; F/ A& F2 P; q' v, w) Q- M "apiKey": "your_deepseek_api_key"
7 G4 h5 X3 I1 k4 x' F+ Y }/ k8 y6 O' B% Q8 S
}, {, H+ s$ T4 j1 F& K, T- D. y
```/ V9 L/ W7 u8 b# p1 p9 \4 b, [
6 C! _4 f0 _4 b$ f2 T( E#### 3.4 实现 DeepSeek 服务
9 ~2 i3 [( a" q2 B* u4 R) p- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:
' U) S( ]' ?6 Y0 y( ~ ```javascript, I! I# {7 K) x$ T) o) ]" c3 K8 Y$ [
const DeepSeek = require('deepseek-sdk');
9 n* m/ q" _. n7 ~, G) [; Z7 [' I; x9 k, Z" j. H& R
class DeepSeekService {
7 d5 M- H) L- Z9 s2 \& S1 @ constructor(apiKey) {! [" A# p' ^" q4 Y
this.deepseek = new DeepSeek(apiKey);
9 } o2 h! F- X! M( Q, m1 c }0 Y/ |) R" \4 D6 j
$ Y m: {- S" b: f8 ]
async query(prompt) {* [9 u0 j0 l% e1 l
const response = await this.deepseek.complete({
# x; o1 ?$ G& Y1 Z prompt: prompt,
! q/ Z$ ^$ ^$ T max_tokens: 150! o& d$ @. u% A. e" v/ e' i' c2 _
});
. O3 Z8 w1 f7 W return response.choices[0].text.trim();
! k2 F& ?& R% ~8 W }6 G5 P) [$ q1 c9 q
}2 p. G6 \5 V1 O, `
" \" e) C0 e6 V2 V module.exports = DeepSeekService;
$ r8 u# w; i0 L9 B6 M( B4 m! c: e ```9 o7 f+ C. ^8 [" R8 t6 _
F, ^' a; i% X% a& u! Y, G7 U
#### 3.5 创建 API 路由' p! D* z" B" P
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
* }1 C1 a% b3 T& [; i6 r ```javascript
. Q7 [' S' ?/ J; E const express = require('express');
* X5 G; p9 B- n1 B+ g& J const DeepSeekService = require('../services/deepseekService');
% I* ?2 V J, F& X; [2 I G& }3 G const router = express.Router();
4 s% C$ G: Z# J. V const config = require('config');$ \+ E) e/ G, O; U
2 l* X& H; e5 A% o. b
const deepseekService = new DeepSeekService(config.deepseek.apiKey);4 x+ N/ F3 q4 u* \
3 p8 Q$ W' S3 C router.post('/query', async (req, res) => {
& f! _0 D5 q0 i5 t; p) M' i* L* B const { prompt } = req.body;
8 s v+ J' c9 T! L# Z try {# C% j& U+ J; V) \: N/ C4 S' q
const result = await deepseekService.query(prompt);
1 A* G4 ]* \0 \( v$ D res.json({ success: true, result });5 w. s6 L* F6 U6 _8 U' \/ q) f7 s
} catch (error) {0 j6 r7 g5 R, L
res.status(500).json({ success: false, error: error.message });
7 s5 P9 |& s2 r: \ }3 d( G& p6 Q3 `8 H; V
});+ [1 u* [/ d, A7 K
7 L1 e2 u3 a; o module.exports = router;
0 M' L1 {& M$ h" j6 p! x ```% u/ v4 x9 S9 W1 e0 G
- w9 A1 Z9 X2 X m- S! g- p5 |#### 3.6 注册插件
3 f! Q! M/ c" h+ S# u& S7 }- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:
- G, R0 t4 m. b0 } ```javascript
; M% z6 W) X+ y# X const deepseekRoutes = require('./routes/deepseekRoutes');
2 U- ]8 x3 V% F5 ?% j/ p- J" b: q) d
module.exports = function(app) {8 E0 ]. E; X9 [" p
app.use('/api/deepseek', deepseekRoutes);
. E- n3 P. R" b; y };
$ [4 O# |, c/ x A! V% r0 ~' D& w1 m ```3 Z9 `0 r1 A& s Q. {
8 E8 d5 L' J% Z6 `# Y
---
( U0 D- B9 o, p- a' e& b6 M6 O
% L$ ]% \# M. ]; r### **4. 测试集成**6 R1 l/ \; O1 O- j; k
#### 4.1 启动 NocoBase
( U5 C% K6 f! I; e g- 启动 NocoBase:
" `( u- p/ a5 c5 |; U2 j ```bash# H! k5 f+ U1 }5 g$ z# _
npm run start
2 I% b; F8 w7 ^" J4 X9 c, } ```
! a) u- u5 ]2 P. M* p; f+ R" q- c1 a% e ^5 h: o* G
#### 4.2 测试 DeepSeek API
5 D9 Y: Z0 U% S Z& N- 使用 `curl` 或 Postman 测试 API:* o5 m% o' y7 L
```bash
* O" b: p; q9 h+ N% o% g8 U curl -X POST http://localhost:3000/api/deepseek/query \
5 r/ E" E2 d7 ^6 d- ~ -H "Content-Type: application/json" \* q! M2 {6 H4 A6 p) o
-d '{"prompt": "显示最近三个月联系过的客户"}'
, y$ B# X6 M! C. e8 H3 G ```
' p& `# [1 `* x+ L a, C/ M; [
1 u" Y! m$ V/ W! S3 `---
: d5 X9 M0 C! S: i. u8 I/ K! ^- P) s q, F- o) R8 y5 P
### **5. 部署到生产环境**$ b! h8 `6 O+ e6 s) q
#### 5.1 使用 Docker 部署
6 V0 D/ e) w/ [3 x! O( C- 创建 `docker-compose.yml` 文件:: ?6 ?4 ~* c2 I8 f3 y0 Y- W
```yaml
8 |& D; i W1 i' ^+ `( Z2 ? version: '3'
+ n& w. @, Q: k* u5 }5 J services:
! d+ E- l! F% V7 Z9 V* _ app:8 }) o# l5 M% ]8 }1 U* f
image: node:16% u7 H p2 d# }+ ]
container_name: nocobase5 [! W, e: {$ c8 i/ U/ B% k+ c9 w
working_dir: /app9 W; ~! o+ Z- w
volumes:
6 q% b9 B& A1 e6 S* } - .:/app
" F# e5 T1 U& a1 u ports:
1 T' H! s- {" T - "3000:3000"
1 ?, U$ ~1 |' @% c1 e environment:8 j, K8 v" @9 }" F9 B9 _. F- M. a* V& I
- NODE_ENV=production
" d: D' ~0 R% D# D8 y) O command: npm run start& G8 ?7 H% H3 H7 o% Q$ A4 K
db:
) i2 Z K( V. B7 Z7 z( u9 m% R image: postgres:133 j6 r* ^" L! `) k
container_name: nocobase_db5 ], I* m. |* |+ q6 N9 x
environment:
0 D7 n0 N. K8 L POSTGRES_USER: nocobase_user1 K1 m& w; t6 {* E a
POSTGRES_PASSWORD: your_password0 ?1 J6 l0 f: W9 g: E7 K" s0 }' U
POSTGRES_DB: nocobase
( p q" i& }1 a5 n) {8 _ ports:
+ `# e- R7 d' M% }$ E9 S% V - "5432:5432") E3 ^" n: s0 H6 C0 F: j# m
```
3 \9 \6 k8 G/ b0 ^4 T/ o5 k7 P- 启动 Docker 容器:: N0 F Y& X. s- V$ [6 ]
```bash2 N8 e( m! h; i2 Q$ c
docker-compose up -d& B0 G( L4 m8 u- ]# X% g0 g
```% K) z+ `/ F h7 K
} U1 R5 \3 L; A
#### 5.2 配置 HTTPS
+ p N$ Y4 ?; C& B" u- 使用 Nginx 反向代理并配置 HTTPS:
: j8 ^, p# g) R ```nginx
+ {3 J) p6 T+ k! A2 t9 V server {
. Y* x! B1 ?( X5 B2 u" R! f listen 80;5 T8 Q0 f q( I! G
server_name yourdomain.com;$ H6 ~5 s( A/ D
return 301 https://$host$request_uri;
, R0 ] Z2 {3 O }
% F( h2 G7 z# ]5 L9 O, K7 C6 A
8 K& n$ S0 R% v9 h! V8 e server {: v: B" Z0 v1 O2 Y
listen 443 ssl;
5 v. f a/ G& v, T3 `; q server_name yourdomain.com;8 p% I# t1 ~& O5 G. V# S- }; |
* m$ u6 j/ Y3 q( L
ssl_certificate /path/to/your/certificate.crt;
9 s) m) X& H1 }) d1 Z: e2 ? ssl_certificate_key /path/to/your/private.key;
! X" F( I% s# T% b4 h4 v, }+ f
" d3 p1 U! @5 x& M7 C location / {
x p! w) t1 h: t2 ` K proxy_pass http://localhost:3000;; z* [/ ]: k! }9 H7 e
proxy_set_header Host $host;' b% T+ l/ x) R1 d6 \; Q
proxy_set_header X-Real-IP $remote_addr;* R n4 B5 m8 Z/ v) W
}
6 i9 ]4 `9 g4 C. [7 W0 H9 C/ H }& d$ h4 N/ f8 Y# p' G: T8 S( u
```$ c3 p2 v4 s/ \& |
7 f+ D" ~! o# P8 I---
, T7 [( T- K" S" X6 [9 H, R2 m! I9 Z* T/ O- ~
### **6. 总结**! M" T3 ^9 b) l- w; h$ y
通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|