|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。- M( ]) s' a {
7 R9 k( e* e$ q我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
. D# K2 v) t6 e. v1 _& |3 d% G, Y9 g$ F
---7 b+ R. s+ Y4 j* \4 [# N# F
* X" z( J) I) I% _: l; R4 K
### **1. 环境准备**
7 A! ~2 [, V8 Y0 B& G1 x, k#### 1.1 服务器要求
" Y# s( ^, r* t! {( q b- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
- y m8 N' S% |$ Z- **Node.js**:安装 Node.js v16.x 或更高版本。1 a4 L. t* x- G5 w' n0 I
- **数据库**:PostgreSQL(推荐)或 MySQL。
7 s M8 E% j4 r% r3 P* J' w- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
. h1 ?9 \1 _+ b# M1 t5 ~5 u- i+ r" C* B9 W- V
#### 1.2 安装依赖
' j, r- c1 r9 M) i4 C; i1 ]2 s' ~: {- 安装 Node.js 和 npm:
$ R& Y! F1 [ u" t, C ```bash
0 N: K( u* o- Z6 m" T4 q curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
b% D/ C/ J; ]& H1 v' H: |+ s5 [, L sudo apt-get install -y nodejs
' e. T; K5 s" k: T6 {# |5 U ```* g9 z; G/ J2 m4 ~! p" j
- 安装 PostgreSQL:( G. O0 [/ I6 G' y m. L
```bash+ l! z( G+ z& Z1 g
sudo apt-get install postgresql postgresql-contrib" d( p' M7 H+ ? f3 h/ c3 ^
sudo systemctl start postgresql
& R, E- N7 x& I8 s sudo systemctl enable postgresql2 {% a) P$ O/ b' o+ ^. M
```
( e0 F) L, I6 N3 o
# |. `% O% a" I1 D6 s) T6 n m---
. }" r2 {9 T5 N; Z( | W* l4 Q
# v3 N+ f. \8 z, d### **2. 安装 NocoBase**
1 p! n6 U% k; Y#### 2.1 下载 NocoBase: u- K0 {6 A8 L, o- {6 p. G
- 从 GitHub 克隆 NocoBase 仓库:0 G7 e4 r1 w( Z) h5 g3 g! h
```bash* V: `8 x1 z/ T1 F
git clone https://github.com/nocobase/nocobase.git; W/ r( I/ s( `; b1 m( O! D
cd nocobase; @' T9 s c: ^* l, x6 ?
```
6 ^% H0 E' G, d( z9 t5 z: b' R" I5 h' O6 M2 w
#### 2.2 安装依赖! a7 d/ l9 j7 n& q
- 安装项目依赖:
! z# f6 _9 J9 h/ N1 x/ X; F) U ```bash
6 J9 w5 y0 j6 u5 T" Z7 B' {/ N8 f npm install1 b8 K5 g" n! T- a: ~3 E' M' r8 w
```/ C% N+ v# u; u
/ J ~5 B* G5 p
#### 2.3 配置数据库
% Q( S' i0 q$ M# C- 创建 PostgreSQL 数据库:6 d* ~) }% }& g8 \9 T2 e2 c
```bash
8 I, V6 B5 ~* `& a* D- W( I1 C sudo -u postgres psql
% |3 Z2 a0 m2 `$ k8 Q) B7 S CREATE DATABASE nocobase;4 F! X" g; D& D% t* [0 w* p- y
CREATE USER nocobase_user WITH PASSWORD 'your_password';
& V/ B! d: u/ ~ [2 i: p. n5 ^- q& y GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;; Q6 P* D+ H0 w {* t
\q
# f7 n% `4 j) T ```7 g: t3 C3 v0 x; l4 V( q
- 修改 NocoBase 配置文件:
Z8 b8 O. }& e0 t8 Y 编辑 `config/config.json`,配置数据库连接信息:5 B& k/ a0 p) [& \2 s3 d
```json8 d3 e$ l$ B0 Y3 V' o
{
) C( L( I4 Y* o "database": {
7 Q; S' o, @7 b) D5 T "dialect": "postgres",6 i9 z- o+ r1 r+ x# B8 n
"host": "localhost",
3 h2 T1 ~* B' Z "port": 5432,/ v) a4 Z: _! q$ ^; q6 p# w
"username": "nocobase_user"," ~4 O0 x. ]' R
"password": "your_password",
% w1 B y, x/ j2 w1 C; T. U E6 j "database": "nocobase"
6 b0 _0 e$ o6 ]! r- q }; F2 `8 m5 D& {# R8 E
}/ u! S0 j. V6 p; Z# ` n4 \
```+ o7 n1 l3 N4 w* B
5 B; Z$ i4 B! |0 B6 P#### 2.4 初始化数据库
, f$ M& T6 o4 X! _, {# b- 运行数据库迁移脚本:
2 s' p+ P% l* `( { R ```bash
: w) A' ]4 F. X npm run db:migrate+ T1 v/ g, F- D8 c" b, _
```6 N; w! d5 z6 B
: K5 B" Y" H8 {7 K- n7 N/ n
#### 2.5 启动 NocoBase6 z+ b' b1 Y" k, T! N- i( i
- 启动开发服务器:1 x2 P) N F5 t/ {2 e9 O
```bash
. q& r: Y, O; {/ p npm run start1 p1 M! B- w8 y
```
, s% }" F( V' @- 访问 NocoBase:0 q/ h% h) M* K1 u+ D2 o$ n6 p
打开浏览器,访问 `http://localhost:3000`,完成初始设置。
, Q7 ?8 i6 a6 A3 x, Q. }+ v4 B9 ^0 k5 W1 p! M% f0 N: b2 D
---
, T8 u7 A, y7 {/ `6 B( Z
/ \ t9 Z ~9 N7 N### **3. 集成 DeepSeek**0 I! ^' D l+ ~1 Z- A7 v+ q) G; b
#### 3.1 创建 NocoBase 插件$ F0 r# B3 g- H. E; `/ B
- 使用 NocoBase CLI 创建插件:4 p6 O2 s# D9 L- E. E& b
```bash
) W- _) `4 | F$ k. [' m/ M npm run cli plugin:create deepseek-integration
9 v) t* t' [- u$ n cd plugins/deepseek-integration7 B+ X) [; e; ~
```4 q6 v4 G$ i) j, C9 S+ v
( T8 u1 h. e# g1 y5 [$ M
#### 3.2 安装 DeepSeek SDK# k3 }/ z. K h+ G
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
; u b7 J9 s' A/ F ```bash2 T ^% g$ _; N+ @2 ^5 t# k+ @
npm install deepseek-sdk$ k* [4 u& G8 K6 ?# g9 V+ Z, E9 Q
```
1 u. |, f! R' o: l @( H5 K
* H1 M/ _- a. j2 |3 Q/ Y6 w#### 3.3 配置 DeepSeek API 密钥5 V9 O/ b" o [" H
- 在插件配置文件中添加 DeepSeek API 密钥:( U" L' \: c- ]- i
编辑 `plugins/deepseek-integration/config/config.json`:0 b0 F9 N- w8 T6 d
```json h. P; @/ C" a" m3 J ^( x& W7 N: R
{0 G! R0 F+ n" P1 d
"deepseek": {- A5 @% y! F9 s |
"apiKey": "your_deepseek_api_key"9 [8 h' f6 K& l( f
}
" o" |) H, b% J9 {1 d8 A5 n }3 W7 n' {! T7 @
```+ ?& B5 f' W- ?8 K- g0 E/ m
& l* h% K0 A/ \2 b! t& X( b% F#### 3.4 实现 DeepSeek 服务; I3 X1 L) P9 t/ g+ m) `0 O
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:
9 D# Y C' p K5 n7 N ```javascript
+ w1 b8 f4 s+ e* K; A4 m const DeepSeek = require('deepseek-sdk');. O" r' C+ ], Q9 e6 t' S' Z
0 z! V* c4 J: t+ U, R8 z
class DeepSeekService {
0 j% p) S* j& f% a9 R. [. z constructor(apiKey) {
% F3 k$ B* ?) @- ]+ h this.deepseek = new DeepSeek(apiKey);
' D$ ~, v0 y+ u, W9 N }
6 h8 q0 a! s. M2 I2 ^4 j9 X E" r: j& n
async query(prompt) {3 F$ ]- `2 E- a
const response = await this.deepseek.complete({6 O2 q7 G2 v4 x
prompt: prompt,
4 M) e$ ~! R1 P1 u1 C0 y: t max_tokens: 150
2 a' Q3 Z, L% L7 r6 P });
4 F7 I% x, x) {. @- h2 a return response.choices[0].text.trim();
* b0 B0 @( ~8 D9 O2 H% e) p) R' A# o }
/ ^2 d, l7 ?7 B% C2 ~6 Z" Z }
0 n r: v6 ^! n, M7 b( x0 e% p3 ]& b" L t! e7 i
module.exports = DeepSeekService;3 e. a$ ~, t: g3 o6 y
```/ f# p* n0 s- ?/ D, _* x- U
" a/ R7 _3 s/ i0 e#### 3.5 创建 API 路由
$ M3 z- {- ]. H- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
4 Z$ M1 O& b9 A% }* p, f ```javascript
9 e% h' J5 R- m# v* a const express = require('express');
/ L. y) j; I: A0 E+ X. \ const DeepSeekService = require('../services/deepseekService');% h$ O2 P5 f, l5 Z2 p
const router = express.Router();9 t# N" s" Y) r
const config = require('config');* [7 a& V- L; P
( U- f) p) d8 m8 B# l, W; ?" S, \ g
const deepseekService = new DeepSeekService(config.deepseek.apiKey);" Z( Z) T5 d6 E1 R& j ]! h
r6 C4 X3 f0 c4 R* `! p+ C
router.post('/query', async (req, res) => {
( J% L" B6 B% S' N/ h! }' { l const { prompt } = req.body;
o1 |2 @* ]( Z try {" @- C ^5 J }( u8 m
const result = await deepseekService.query(prompt);
3 w/ O7 A7 R1 x7 y1 }, c res.json({ success: true, result });" h- I% F3 M" L! W: C( S
} catch (error) {
' q! g1 `% z- V res.status(500).json({ success: false, error: error.message });
8 G7 _) P% O2 g+ i. l4 ` }# w+ |5 i6 V8 M
});" r6 t' R8 ?" v! W: W/ ?
6 N, e; g9 ?8 {. s6 }/ o module.exports = router;
! W6 S, u! o. }6 d ```
# U; I% B) A3 e+ N0 Y1 H1 Y
% `$ y4 g" q# f' e, j9 J#### 3.6 注册插件
8 V! H+ c; k/ g- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:) I% j- ?8 ?/ c J7 `
```javascript, a( n& Q. ^# K: M
const deepseekRoutes = require('./routes/deepseekRoutes');
0 G3 `- G- Y5 C8 e, \) ? M4 o7 S8 \' |; p @" ?
module.exports = function(app) {
# V1 Z+ F9 f2 ]1 |, ^ p' W app.use('/api/deepseek', deepseekRoutes); v4 v0 [/ v8 g7 j( X( M; ?/ R. \" d
};
/ b$ y# F5 S2 l( [; i: L ```
( I( ]# a* n% w$ t' Y( Y
, f) E0 [& K" E8 S% M! j---0 \1 O9 `$ ?1 F
- s' S3 L* L6 V' _ \4 ^### **4. 测试集成**
" C& w8 Q8 K' {% `% W2 E/ V5 F7 z#### 4.1 启动 NocoBase" Z2 n. N( E" h/ a
- 启动 NocoBase:* ]1 j. N( c2 j) A/ ?. ]3 M
```bash" z5 _# a$ {! g% _8 z0 |1 y
npm run start) k; L8 l" P& e: O; m( l9 \
```
2 G+ I# T8 J, b4 f% C
e' }8 Q% z l# m% X$ ^& y#### 4.2 测试 DeepSeek API
9 q! [3 }5 d! V, T4 }3 U3 \- 使用 `curl` 或 Postman 测试 API:
' r0 u. c ^) d* @9 } ```bash
& l: O N# v, ~# J+ q4 w curl -X POST http://localhost:3000/api/deepseek/query \
- ~5 L! S3 [" Y- p e! j -H "Content-Type: application/json" \
9 b" h0 r0 K8 b. J: e: e! n8 j9 I -d '{"prompt": "显示最近三个月联系过的客户"}'( g9 S2 n- _$ l3 ~- x& _' n: g2 e) h
```0 X: O/ P0 X: X3 {6 y, b; e; r% f: J
F: ^4 ?% b7 l6 n ^---
$ I9 e. D& `7 Q+ b
% q$ w* e Z0 q1 C. e! {### **5. 部署到生产环境**5 z/ h8 I6 N4 K5 U% K9 t/ v
#### 5.1 使用 Docker 部署
. ]7 c6 m+ B, s- Y1 j. n9 N- 创建 `docker-compose.yml` 文件:
6 O; i$ ~/ G2 b6 I. y" e ```yaml
+ p% D$ p& h; t- ^) M& E ~ version: '3'* ~' E _( U6 ~; U* S, O$ f
services:
: K( ~5 r& {9 m4 X; k app:
6 U! x/ i& U! r image: node:16
/ |6 P- u" T8 X container_name: nocobase
" i: [+ ^/ S8 M s: A9 T working_dir: /app+ y2 ~3 i1 b4 E9 P. H
volumes:
# A" e. ?6 L" |! V8 f7 h% S - .:/app
- E! ^, e( { W( F8 x3 W" U- B ports:' B/ Y' m7 p+ E$ E
- "3000:3000"
( L3 J5 ~$ ^) W" C. ~* B% g6 \2 [8 @ environment:
W5 K- v1 g. n7 r X! x - NODE_ENV=production
6 A9 N+ h: d! l command: npm run start
( v! w6 R3 Y5 X6 R db:
! H; H1 E* g, M0 i. [ image: postgres:13
5 Z' A. X2 \) f% T! G2 b container_name: nocobase_db
c6 P. r. i9 k* y6 E environment:6 \; m) y% I* M* R" A( w. i% ^
POSTGRES_USER: nocobase_user
. C+ Y5 F3 `8 Q$ v; b POSTGRES_PASSWORD: your_password
' h9 h& ]- c4 S% o POSTGRES_DB: nocobase& H) O; E; c; j/ {# g4 o! p5 T. P
ports:5 A5 u# i5 |" B
- "5432:5432"8 }7 t: l! b/ S& W
```- o; p( K' @1 U1 m
- 启动 Docker 容器:
) N# [; b* F) O, [9 u ```bash7 q* }; L) `5 [9 I
docker-compose up -d
- u# T# r! j2 Z) J ```$ W& ^+ F3 x0 L0 g
$ }1 D ^$ c# c# w: j, V#### 5.2 配置 HTTPS# Y9 N8 R- {; L# B5 Y h
- 使用 Nginx 反向代理并配置 HTTPS:7 u3 i) P% r. _ S
```nginx
. g( p! p& {# `2 O server {7 _( x8 _ e( U+ M/ f
listen 80;
: d* f: G& G6 [4 {0 ~3 V server_name yourdomain.com;3 i0 ]1 H+ E, Y$ g
return 301 https://$host$request_uri;: ]. W6 ?% J& R) Z6 R% D f& o
}
+ @7 W! x& F- d1 v2 _; G: {9 ?: @0 X# S/ H+ L
server {
1 G( Q3 {% V; W+ B' h$ H listen 443 ssl;0 B0 k8 n' r' |: G% |
server_name yourdomain.com;
5 F* f' }8 Z9 L7 \+ l! M( b8 Z+ E; E8 S& i8 @- F/ x
ssl_certificate /path/to/your/certificate.crt;
X1 ?( B" V' s$ \) L7 t ssl_certificate_key /path/to/your/private.key;5 P- m3 z! @' b+ l1 ]( B1 }
) U# B1 F+ X$ Z& ?; w location / {1 F6 F" {/ P( R4 u. e
proxy_pass http://localhost:3000;) {1 X3 g+ ?1 {. _0 X
proxy_set_header Host $host;2 Y4 B' v( q% Q! X4 n
proxy_set_header X-Real-IP $remote_addr;
; }/ q$ [# i# {- C9 { }; d: P5 X! y/ ^( G
}" Y; g0 X+ T$ o9 d: b
```. ?# r$ V( s9 R; _' P- N) ?6 z
' K- z9 U/ m. n1 f8 Y---
6 ~: k: z$ m# Y- I7 W( c/ X7 }2 @: e: n( @' N: m- ~
### **6. 总结**
( |7 z# b& Z8 a通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|