掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1933|回复: 6

[词典讨论] GoldenDict + ChatGPT(利用 OpenAI API)[20230503]

[复制链接]

该用户从未签到

发表于 2023-5-3 13:11:27 | 显示全部楼层 |阅读模式
$ _2 d8 P& M7 f
参考:! s( N4 b6 b% Y) u- l, W" q0 s
- [词典讨论] ChatGPT 用作词典 https://www.pdawiki.com/forum/fo ... hread&tid=48326
1 A9 i1 }2 v0 ]- [经验交流] GoldenDict 有X词典在线版(Python 在线版) https://pdawiki.com/forum/forum.php?mod=viewthread&tid=33203* p: L6 v* X& n0 J
- GoldenDict + Python 调用有道翻译[...]  https://pdawiki.com/forum/forum.php?mod=viewthread&tid=21988; P: K# B- w3 a+ y8 k* `( x, W
- [5.16]goldendict 有道释义 & google翻译 [python] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=26565$ C4 O, h9 a5 _8 ~$ F4 d
- 人人词典GoldenDict插件[附python3源码] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=317138 n' L+ b" A0 a) R1 _& s
- ChatGPT-Next-Web https://github.com/Yidadaa/ChatGPT-Next-Web
$ c3 j9 X' l) ]: a: R$ X9 m5 D" U# c- o# G: k- S- T: p: f
' ^/ e, ^9 c6 h  _; }
前置条件:
% G* p0 s1 f- h" r5 u! T1、OpenAI API key https://platform.openai.com/account/api-keys2 \6 q( n) ~8 Y9 w
2、Python
- a+ u/ ~% p6 @- Y4 L3 e, E# n, V) Q$ ]5 ?: x
问:7 i. L: B% C9 U  q
1、写一个 mydict.py,调用 OpenAI API key,实现查询功能。% z+ X) b) q" a" W: `
2、用 GoldenDict 调用 mydict.py。
: F1 |4 h" L, Q# _& ]" `9 u

( h$ A; t4 ^- M9 ^; d: n# Z% TChatGPT 回答:/ l' p' K# \4 M4 h
这里提供一个基于 OpenAI GPT-3 API 的简单 mydict.py 脚本示例,可以通过命令行传入要查询的单词,输出 OpenAI API 返回的结果:6 K" m/ t3 D# |% L; U& }
" p, Q1 j7 t. G$ z0 |& e+ |$ E
```python# [' Q, p9 X9 s; e8 s
import openai
- y0 w  s5 R2 Y3 u8 ~import sys: B3 i! M* s7 {9 W: j

7 K) b. J6 R0 E! e& Ropenai.api_key = "YOUR_OPENAI_API_KEY_HERE"
1 z, O* q4 k! b5 `: C- G8 c; E2 \" b; g7 H: T& x
def define(word):* m: d* o% Z. l
    prompt = f"Define '{word}'"
1 W$ n( y) R# B    response = openai.Completion.create(
6 D, L: M% ?* _& a        engine="text-davinci-002",% }  N4 |- ?$ P  u
        prompt=prompt,
: l  d/ B: ]. Q        max_tokens=1024,5 C! ]9 l& R' _  N: e# W: F8 V
        n=1,
; N* T; V0 F  Q        stop=None,
$ ^$ q2 T& `- y* W# S; }. x        temperature=0.5,
1 T! d0 d& w: y; b. P& E% A; w    )
; Y4 `" x1 C2 S  u7 Q6 T% C8 {! f' M! n) q& b' }3 C* l
    if len(response.choices) > 0:- b/ R6 |& l9 C& u* @2 q: ?
        return response.choices[0].text# ?8 m5 K- A  z; {0 N0 r
    else:/ e$ W6 M$ g! e4 m+ D( u/ O
        return "No definition found."; k, q& I8 X: p( ?$ u8 d% m
  L9 a' Z& i6 R+ R& r
if __name__ == "__main__":
' u; k! b' C+ l& E4 A, W2 t  F    word = sys.argv[1]
: S. ]( h: _2 @! E+ x    definition = define(word)
+ K) e% X% I2 L/ z7 S+ b) U    print(definition)
6 i& B1 D7 Z9 w% u```
- m3 r5 C' E& P0 t" S6 r$ G7 U/ {+ a+ K4 J$ s" w! ^4 f) W
将上述脚本保存为 `mydict.py` 文件。* d$ ?8 [+ h  `* [6 p% |' V" h

& M/ _4 n4 I# U& e接下来,在 GoldenDict 中设置该脚本为自定义命令行词典。
/ M9 B: e, Y' Z: N6 \3 G! W7 u8 V9 s9 |  @2 V
1. 打开 GoldenDict,选择 Edit > Dictionaries。
% Z# ~. W" }. }5 Q2. 在 Programs 标签页中,点击 Add 按钮。
/ _* i8 @& ^' b6 C- E& A* g3. 在 Dialog 标题栏中输入 “MyDict”,在 Command 栏中输入 `python /path/to/mydict.py %GDWORD%`(其中 `/path/to/mydict.py` 为脚本的绝对路径),点击 OK 按钮。& N: @* Y$ G' h) C. e( O$ A& J! J
4. 在主界面中,选中一段文本,然后按下 Ctrl+C+C,即可通过 mydict.py 查询该单词的定义。

9 e% ?9 g% p, N# b0 \5 _; ^7 q, H8 z" t9 z8 Y  T3 h4 J2 a

. O, n; q; f* Q2 N% [+ M, ^2 f! ?/ p7 f, {9 F' a

评分

1

查看全部评分

本帖被以下淘专辑推荐:

  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    发表于 2023-5-5 10:16:19 | 显示全部楼层
    本帖最后由 mikeee 于 2023-5-5 11:26 编辑
    ) k7 S& k- U9 r; d3 @) ^' t
    6 J# K* T3 T/ k  Q) K 链接: https://pan.baidu.com/s/1HXpt0U3vb7GJDKpBNm_FOw?pwd=4vph 提取码: 4vph   \$ z$ L( h, s0 n7 e( J

    " N) ?2 E# w- C# d# Q这个命令行工具`chatgpt_tr`应该可以设置成在 GoldenDict 里使用。用的是令牌,即是说免费的。
    ) }+ H- v' Z; a: K; Y8 q5 G! Y! I0 x: g3 ]4 q- R0 G+ W9 u) @& l
    chatgpt_tr主要是给命令行翻译用的,但也可以自定义提示Prompt以及用于对话。详细用法参看 ``chatgpt_tr.exe --help``。  Q2 z4 [$ k4 p. ~( x& E
    ; g/ }% z+ }) S& S" H
    用法
    4 K3 g8 {) b) m! Y( m! E& i% o
      q+ v3 [+ M( t& _8 n' e
    • 解压
    • 获取access token5 o/ ]8 e- O1 G) V& e+ W
      • 登录 chat.openai.com
      • 访问 https://chat.openai.com/api/auth/session
      • 拷 accessToken备用
      • 此操作只需一次。(access token 有效期约14-30天,但内地ip可能需双向提子因为openai和大伙墙的双重封杀,港澳ip则需找未被openai封杀的带理)/ @  L$ Z8 R, [* C/ ]. J
    • 命令行下设置环境变量OPENAI_ACCESS_TOKEN,例如cmd下 set OPENAI_ACCESS_TOKEN=eyJhbGc... 或用包内的 chatgpt-tr.bat 或sysdm.cpl设置全局环境变量OPENAI_ACCESS_TOKEN
    • 命令行下,例如WIN cmd回车(或开Windows Terminal或cmder或conemu)
      , H* P/ v& d% z3 R
      • chatgpt_tr --help # 帮助
      • chatgpr_tr # 翻译系统剪贴板内容
      • chatgpr_tr this is a test # 翻译 this is a test
        ! \) ?* V" H0 P; O! o3 o; T. z

      7 ~% B, L( [+ R, x1 ?
    & ]6 d3 N" I0 F
    可以利用 bat 自定义提示Prompt各种使用场景(例如`chatgpt_tr.exe -p "列出5个中文同义词"  make sense` )。该工具的python源码核心部分只有十几行。网友有兴趣的话我可以提供python源码。5 A& Z0 P5 l0 R4 j; ~5 B' [) a6 a

    ) P% \; k- Q3 h+ m该工具基于某个第三方反向代理,代理挂了或被关闭当然工具也就不能用了。 (实测2023-05-05可用)% e0 B% t1 z7 J
      m% H/ u, W, V. W% x( b
    典型输出: 2 Z0 P/ q# i& x! s7 `
    # chatgpt_tr amazon code whisperer
    5 N4 O7 \1 l3 l# X2 N0 s+ Mamazon code whisperer$ ?- T9 P0 ]9 y

    3 V8 ~; P/ _3 X* L1 n) p6 @. f" V' V) T版本1:& T% X" o# g$ z- j$ I
    亚马逊代码耳语师
    ; y3 B# C  Z# G1 W+ P
    ) _* `9 C; T" ~# t版本2:1 c. |# R4 J. Q/ U
    亚马逊代码密语者
    6 Z4 Q. ~; C$ u# @8 n' V8 i
    . Z  ?$ \" L- e版本3:+ @3 {1 \1 G1 J. Z" \6 H8 z& ~
    亚马逊代码秘语师
    ( g9 ^1 X1 {) R3 J6 [/ T% {4 ~9 N: t* @4 |: D
    # chatgpt_tr.exe -p "列出5个中文同义词" make sense( \6 Q) e+ W  O6 }
    make sense/ Z0 I: M# c$ P  f& x7 C6 g% F/ \
    ! @. t' t3 a; N: W
    1. 有道理
    8 z* U# `; w( D: Q% R: Q" u2. 讲得通' N2 s8 E/ w, H+ `+ J5 R) B
    3. 合理/ P8 @% j" H7 s8 Y9 ?
    4. 明智
    ' g  T) _. {! ]5. 理性
    ) ~  F3 a. i$ S" F6 x- {* N/ g; I; Q) n
    # chatgpt_tr.exe --help
      H. l2 m) W# ]3 J
    ' h  d/ m$ L/ y8 g- c0 r; J Usage: chatgpt_tr.exe [OPTIONS] [TEXT]...
    - j% s5 x. ]: h9 t6 ^8 g5 D( X- t
    & h+ Q7 {# j. R1 Z4 _6 { Translate with chatgpt using access token.
    ' f, p. l. l% k* Q set LOGURU_LEVEL=DEBUG or set LOGLEVEL=10 to turn on debug/verbose mode.
    ' e- s& F2 @1 t8 ~& ^4 s
    1 Z, _& I8 A0 x9 ?4 i* K┌─ Arguments ──────────────────────────────────────────────────────────────────┐8 H0 r2 {- Y! p: H
    │   text      [TEXT]...  Source text. [default: None]                          │
    # @% x- n+ m! |/ x# F( g└──────────────────────────────────────────────────────────────────────────────┘' h) s" `3 D$ k! H3 R# G" ?
    ┌─ Options ────────────────────────────────────────────────────────────────────┐
    $ g2 q) f$ F' c. |" B│ --version  -v,-V               Show version info and a list of supported     │' W' d1 b2 @6 C" k
    │                                languages and exit.                           │
    9 d, `) v! i* m; a+ V. D  s: s│ --clipb    -c                  Use clipboard content if set or if `text` is  │( B3 X& x/ P1 _! e7 ?3 L! q1 O
    │                                empty.                                        │( f3 }) C8 {* P# ?9 l; L5 w
    │ --to-lang  -t         TEXT     Target language when using the default        │) ~/ l* i7 M! E
    │                                prompt.                                       │! Q+ g8 s9 H* W% o8 f* h
    │                                [default: 中文]                               │
    , Q5 ?. ^: p/ @( K. k) e│ --numb     -n         INTEGER  number of translation variants when using the │4 p& W) d% h5 W7 r% Q: q
    │                                default prompt.                               │' u+ u& }- M( N8 k4 w; N4 H
    │                                [default: 3]                                  │
    . J9 b) A! G, z3 L9 M│ --prompt   -p         TEXT     User defined prompt. [default:                │
    . T* v" f( |2 \, _+ i6 o│                                '将以下内容内容翻成 to_lang                   │% I0 a# y/ n. }" R) d
    │                                (中文),不要自由发挥,列出 numb (3) 个版本:  │& X7 ^/ ~- G/ L# q7 S) w; n: `
    │                                \n']                                          │
    $ q- V! ^# E0 X│ --help                         Show this message and exit.
  • TA的每日心情
    开心
    2018-8-26 14:41
  • 签到天数: 45 天

    [LV.5]常住居民I

    发表于 2023-5-3 20:03:13 | 显示全部楼层
    有点浪费token

    该用户从未签到

    发表于 2023-5-3 17:31:29 | 显示全部楼层
    我还是觉得GoldenDict + ChatGPT这个组合算拉郎配
    " t/ E  O0 D6 c
    / U* F9 K! H: M$ x, b. A别的不说,就看下图吧:1 d5 o. r% `! E- c4 j: [1 b
    4 }8 F# ~2 T- V- [, m

    ) U+ r3 ^: V& |' j3 |* A  C
    4 Z  |, O+ _7 C$ Q4 |/ u4 Q, uDefine指令不支持中文 用中文吧,它给的解释还是错的* f' R  G+ K. e) n# b* x: G

    - b, S2 w9 x8 c* x/ {, {. P3 ]; t* Q; Z" v* k+ d. h0 b
    「拉郎配」这个词,《现代汉语词典》就有啊:
    - r, N9 ?2 a3 ~6 E
    0 h8 P1 }8 v) r" p# ~5 [7 e
    拉郎配  W' S6 E- k/ ]6 g6 C- P9 |* m
    lā láng pèi
    3 x' W2 D* q3 K" n封建时代为逃避家中未婚女子被选入宫中,仓促找男子跟她成亲。比喻不顾实际,强行使双方联合或合并。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 2344 天

    [LV.Master]伴坛终老

    发表于 2023-5-3 17:36:36 | 显示全部楼层
    ChatGPT發展甚速。用來辨識漢字。或者要增加設備。
  • TA的每日心情
    开心
    2024-4-9 16:31
  • 签到天数: 440 天

    [LV.9]以坛为家II

    发表于 2023-5-4 12:22:25 | 显示全部楼层
    klwo2 发表于 2023-5-3 17:31/ t7 N3 m! n( ^! `' N# \3 D% q
    我还是觉得GoldenDict + ChatGPT这个组合算拉郎配
    . {, l) f$ z$ t. h4 m* b' W& ?& ?# _8 n) B& r( _. w1 `1 y
    别的不说,就看下图吧:
    拉郎配

    7 ~! k* G9 U, k/ I9 o4 m' B+ I+ k# c
    恰到好处. b- R# n! h/ A! m- h1 m4 X4 C

    4 Q: s0 V/ F7 O; Z# r4 R说明问题
  • TA的每日心情
    无聊
    2022-7-11 10:17
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2023-7-24 10:12:50 | 显示全部楼层
    照着弄完报错啊? 麻烦给看看吧& O$ G' w0 T% s' r1 r$ J
    查询错误: 程序返回,退出代码为 1. Traceback (most recent call last): File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 700, in urlopen self._prepare_proxy(conn) File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 994, in _prepare_proxy conn.connect() File "D:\APP\miniconda3\lib\site-packages\urllib3\connection.py", line 364, in connect conn = self._connect_tls_proxy(hostname, conn) File "D:\APP\miniconda3\lib\site-packages\urllib3\connection.py", line 501, in _connect_tls_proxy socket = ssl_wrap_socket( File "D:\APP\miniconda3\lib\site-packages\urllib3\util\ssl_.py", line 453, in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls) File "D:\APP\miniconda3\lib\site-packages\urllib3\util\ssl_.py", line 495, in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock) File "D:\APP\miniconda3\lib\ssl.py", line 500, in wrap_socket return self.sslsocket_class._create( File "D:\APP\miniconda3\lib\ssl.py", line 1040, in _create self.do_handshake() File "D:\APP\miniconda3\lib\ssl.py", line 1309, in do_handshake self._sslobj.do_handshake() ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1131) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\APP\miniconda3\lib\site-packages\requests\adapters.py", line 440, in send resp = conn.urlopen( File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 813, in urlopen return self.urlopen( File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 813, in urlopen return self.urlopen( File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 785, in urlopen retries = retries.increment( File "D:\APP\miniconda3\lib\site-packages\urllib3\util\retry.py", line 592, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1131)'))) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\APP\miniconda3\lib\site-packages\openai\api_requestor.py", line 596, in request_raw result = _thread_context.session.request( File "D:\APP\miniconda3\lib\site-packages\requests\sessions.py", line 529, in request resp = self.send(prep, **send_kwargs) File "D:\APP\miniconda3\lib\site-packages\requests\sessions.py", line 645, in send r = adapter.send(request, **kwargs) File "D:\APP\miniconda3\lib\site-packages\requests\adapters.py", line 517, in send raise SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1131)'))) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "D:\APP\GoldenDict-addition\mydict.py", line 24, in <module> definition = define(word) File "D:\APP\GoldenDict-addition\mydict.py", line 8, in define response = openai.Completion.create( File "D:\APP\miniconda3\lib\site-packages\openai\api_resources\completion.py", line 25, in create return super().create(*args, **kwargs) File "D:\APP\miniconda3\lib\site-packages\openai\api_resources\abstract\engine_api_resource.py", line 153, in create response, _, api_key = requestor.request( File "D:\APP\miniconda3\lib\site-packages\openai\api_requestor.py", line 288, in request result = self.request_raw( File "D:\APP\miniconda3\lib\site-packages\openai\api_requestor.py", line 609, in request_raw raise error.APIConnectionError( openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1131)')))
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2024-4-26 08:26 , Processed in 0.053520 second(s), 11 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

    快速回复 返回顶部 返回列表