掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1965|回复: 6

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

[复制链接]

该用户从未签到

发表于 2023-5-3 13:11:27 | 显示全部楼层 |阅读模式
& J+ f8 i1 D) c) r, A
参考:
  M& O( K/ F% |3 J/ u3 D- N- [词典讨论] ChatGPT 用作词典 https://www.pdawiki.com/forum/fo ... hread&tid=483268 R3 x& j4 G% m. }/ l) n9 ?& w# {
- [经验交流] GoldenDict 有X词典在线版(Python 在线版) https://pdawiki.com/forum/forum.php?mod=viewthread&tid=33203
, E4 E% g9 l$ g- GoldenDict + Python 调用有道翻译[...]  https://pdawiki.com/forum/forum.php?mod=viewthread&tid=21988
- }! c. V3 L; O& G* ~- [5.16]goldendict 有道释义 & google翻译 [python] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=26565
1 r- F9 r, L! \3 u8 x9 }# y- 人人词典GoldenDict插件[附python3源码] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=31713; y: K2 ?) k2 r
- ChatGPT-Next-Web https://github.com/Yidadaa/ChatGPT-Next-Web' I. M# M5 }. }: ]
1 B* p0 k/ s1 z3 p! I1 g

( V: u+ P1 P' ]9 p前置条件:
4 e! m! ]% _) D( U$ i( k) U1、OpenAI API key https://platform.openai.com/account/api-keys
- p) f$ Q! C6 j: y. }2、Python. B# B6 v, t8 D- |8 r. Q

. o9 T0 ]- W8 l1 d+ g问:0 }- e9 V' F- @. i) `. f) B
1、写一个 mydict.py,调用 OpenAI API key,实现查询功能。
( a$ }  y; c# S2、用 GoldenDict 调用 mydict.py。
$ W5 v+ `% w6 c

' M0 J  I+ w+ v4 R4 @4 YChatGPT 回答:
4 C: j8 c: a& Q4 _& j
这里提供一个基于 OpenAI GPT-3 API 的简单 mydict.py 脚本示例,可以通过命令行传入要查询的单词,输出 OpenAI API 返回的结果:* x) s+ P8 E/ d4 n" f: m
7 P1 s3 C& D" V; {
```python
. I3 b5 B1 O- F! a* g6 jimport openai
  s$ S% s% n5 o# n0 e+ @import sys
# I$ Y* p: y$ c- L' }  c9 u2 m8 F8 ], J( Q0 _# h) |
openai.api_key = "YOUR_OPENAI_API_KEY_HERE"& I' A- n( [' m

/ a, Z5 ]- c5 P0 S( G( P0 K* pdef define(word):- h) k6 t# O  k* X
    prompt = f"Define '{word}'": e8 y2 |5 K: h6 E* U
    response = openai.Completion.create(* g% J! x; Y7 c% l1 ~7 K4 E
        engine="text-davinci-002",  K* z3 b9 i$ V, R  \4 a
        prompt=prompt,6 r" w: E% e! X. \
        max_tokens=1024,
* b6 \9 r; v) K        n=1,$ j$ e3 \: ]8 ]1 X$ T9 i
        stop=None,
/ I8 l; b9 C, y        temperature=0.5,
, _& n: E  w# w" q+ q/ V* N    )
! W+ r. E7 S$ \, z# m/ p
# q0 I& x7 V; {% E" y) ?) w5 S    if len(response.choices) > 0:
8 X  m* [, H1 S& K, P) W  S        return response.choices[0].text
8 H3 {; ~0 H" O) ?  Z" i, T8 j/ D( ~" i2 s    else:
& Y/ _  `% l* ~        return "No definition found."( R- X7 A/ y* b- ]4 K: W

1 ^5 u( |5 k0 Q3 X# `if __name__ == "__main__":
' D7 n+ F; }+ m% `; r: C# ^    word = sys.argv[1]
0 l1 |  [$ ?/ z    definition = define(word)
( R2 k0 p2 b* |. r; m2 E- a    print(definition)
( Y0 h# ?- M. f+ P```
: R" O# K$ t1 K8 D# v9 c9 d! g; d6 N+ j1 o2 _+ U5 u
将上述脚本保存为 `mydict.py` 文件。
9 |2 Z. W2 {) h4 {0 o( S! E5 Q1 ]) F" c
接下来,在 GoldenDict 中设置该脚本为自定义命令行词典。
# @+ h6 h' c/ ]& z8 F* u
! {, L# ]0 O6 |2 h1. 打开 GoldenDict,选择 Edit > Dictionaries。* A+ o/ |. j8 o' ?- c
2. 在 Programs 标签页中,点击 Add 按钮。# ~* v6 I; ~  ^
3. 在 Dialog 标题栏中输入 “MyDict”,在 Command 栏中输入 `python /path/to/mydict.py %GDWORD%`(其中 `/path/to/mydict.py` 为脚本的绝对路径),点击 OK 按钮。, e* i7 Y' L" @& V( @) \& \0 {, d' Z
4. 在主界面中,选中一段文本,然后按下 Ctrl+C+C,即可通过 mydict.py 查询该单词的定义。
% H3 R  ~* r7 S/ q% Y

, T2 a3 y, M" z- Z: J3 X6 R8 U+ c! K# v. M# k* c) x! w/ d
1 R6 Y, p  A4 R& I3 Q; q

评分

1

查看全部评分

本帖被以下淘专辑推荐:

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

    [LV.7]常住居民III

    发表于 2023-5-5 10:16:19 | 显示全部楼层
    本帖最后由 mikeee 于 2023-5-5 11:26 编辑
    ! Q4 a& v9 U; [5 l  X. h2 L% K# p1 ?5 y( }) V2 K0 J
    链接: https://pan.baidu.com/s/1HXpt0U3vb7GJDKpBNm_FOw?pwd=4vph 提取码: 4vph 1 C3 `' U9 @: p3 ]* p4 ~$ c" r

    6 k' J2 p  f2 ^! t2 h% \这个命令行工具`chatgpt_tr`应该可以设置成在 GoldenDict 里使用。用的是令牌,即是说免费的。
    ; c* j) r$ u; p+ u4 C7 v0 D+ m) ^' I' j1 J9 q! e
    chatgpt_tr主要是给命令行翻译用的,但也可以自定义提示Prompt以及用于对话。详细用法参看 ``chatgpt_tr.exe --help``。$ [9 N1 F: S4 }9 s5 a
    4 x% ~+ L" f$ Y: `* C
    用法
    # Y* r+ U! J3 e. W# `0 E
    / G1 t$ x, A/ }$ t
    • 解压
    • 获取access token  r8 ]4 Y4 P: J: i& p, o3 v
      • 登录 chat.openai.com
      • 访问 https://chat.openai.com/api/auth/session
      • 拷 accessToken备用
      • 此操作只需一次。(access token 有效期约14-30天,但内地ip可能需双向提子因为openai和大伙墙的双重封杀,港澳ip则需找未被openai封杀的带理)
        ! W5 u5 L2 R3 y6 y" j- R; a# C
    • 命令行下设置环境变量OPENAI_ACCESS_TOKEN,例如cmd下 set OPENAI_ACCESS_TOKEN=eyJhbGc... 或用包内的 chatgpt-tr.bat 或sysdm.cpl设置全局环境变量OPENAI_ACCESS_TOKEN
    • 命令行下,例如WIN cmd回车(或开Windows Terminal或cmder或conemu)" O* C3 Y$ V: W: c5 Z  }8 U6 [$ N1 }
      • chatgpt_tr --help # 帮助
      • chatgpr_tr # 翻译系统剪贴板内容
      • chatgpr_tr this is a test # 翻译 this is a test3 T. y6 x) f: T9 h) w. _
      " t7 l* o- G" _& z4 |8 A6 t/ k: {

    7 Z- j  U# x% @可以利用 bat 自定义提示Prompt各种使用场景(例如`chatgpt_tr.exe -p "列出5个中文同义词"  make sense` )。该工具的python源码核心部分只有十几行。网友有兴趣的话我可以提供python源码。
      b! o8 I8 L) n& R) T) e/ c  {5 o
    . y, H6 O0 X  j. y1 G8 @该工具基于某个第三方反向代理,代理挂了或被关闭当然工具也就不能用了。 (实测2023-05-05可用)$ i& r. z" e% E9 a
    + B# c" @* M# b  W
    典型输出:
    5 u  o# W3 }& f
    # chatgpt_tr amazon code whisperer8 u5 F2 E/ D* o8 ^0 o! Y) ]) Q
    amazon code whisperer2 O7 n. U4 Z4 T7 w5 |/ S

    + \3 q3 u! h0 @. S) F版本1:
    # e( Q2 ]) _* z, @: k亚马逊代码耳语师, G  e9 p# {8 C. b- f3 N7 w& |# K
    ) \# S7 }' J+ C; I
    版本2:
    " {4 `- N4 Z% A1 D4 g+ R# u2 L6 V; d亚马逊代码密语者8 {) c- r: S2 `: }3 O4 u  ]# [/ p
    8 F& G6 `' D* Z  d
    版本3:" ]% s& r7 e, C  v$ J; z) H
    亚马逊代码秘语师- v- s7 U- a# V- v8 g$ v

    * K8 f7 W' r) O0 s3 T# chatgpt_tr.exe -p "列出5个中文同义词" make sense9 Y" D2 q- i# F/ G) [, Y
    make sense
    4 e  p% j6 r/ E4 e% _
    % g3 N; Y) I& |1. 有道理* _7 n  a$ u1 J% U
    2. 讲得通' {: o+ |- I& V& P1 r3 x/ Z
    3. 合理
    $ C  W. O, R2 P6 ^4. 明智
    , Z( h6 T4 b$ k: c5. 理性; G* f7 M$ d5 S
    6 D9 \% }: h% y2 [1 f8 |4 j
    # chatgpt_tr.exe --help
    0 Q# Q, x( {+ ]+ G7 q' E+ _. M
    % ?% j$ N7 D, z; B6 K* V Usage: chatgpt_tr.exe [OPTIONS] [TEXT]...
    4 B  a3 Z& Y. Z) P9 x. A3 C# b/ `9 Q; \. u& [- N
    Translate with chatgpt using access token.9 a. w& k) e0 m/ [' i1 Q
    set LOGURU_LEVEL=DEBUG or set LOGLEVEL=10 to turn on debug/verbose mode.
    6 S  \" d1 ^  g; [
    & H' M* \: X  F, g, A┌─ Arguments ──────────────────────────────────────────────────────────────────┐; p2 I" G( O$ G% m. ~' X
    │   text      [TEXT]...  Source text. [default: None]                          │
    # [: T' ?  }' S$ o└──────────────────────────────────────────────────────────────────────────────┘
    % Y2 Q1 I, j  P5 b. x2 C┌─ Options ────────────────────────────────────────────────────────────────────┐
    $ L8 x2 ]8 D1 }6 b% j$ X9 J+ s│ --version  -v,-V               Show version info and a list of supported     │
    ; f$ t8 f! e4 P│                                languages and exit.                           │
    3 Z$ @6 ~' H) W6 a9 s* Q; j│ --clipb    -c                  Use clipboard content if set or if `text` is  │; y( P% J, w! u' ?- }* W
    │                                empty.                                        │/ S6 k4 Z5 R) X$ \
    │ --to-lang  -t         TEXT     Target language when using the default        │* H) Y! z) U/ W% o( T# j
    │                                prompt.                                       │
      b: |* |( t! `$ P. ~2 H│                                [default: 中文]                               │8 B( i9 m* n8 x" R) y
    │ --numb     -n         INTEGER  number of translation variants when using the │! m, S" ~- T$ u
    │                                default prompt.                               │
    2 e! m0 T4 P" D8 ?3 l- e8 P│                                [default: 3]                                  │
      \$ d; t5 y* K2 U  E" F# x7 m+ _│ --prompt   -p         TEXT     User defined prompt. [default:                │3 t! k" N5 @2 H- f, E
    │                                '将以下内容内容翻成 to_lang                   │2 x/ b! N1 M) [# {- [2 L) y( U4 B
    │                                (中文),不要自由发挥,列出 numb (3) 个版本:  │
    8 {4 c: @  W* T" Y) b- _│                                \n']                                          │
    3 s- a" i4 t. }1 P9 @1 q. {( e│ --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这个组合算拉郎配
    3 K3 A& n# m& F9 h# h0 W6 h0 Z
    % v5 l2 T$ V1 u9 M别的不说,就看下图吧:
      Y( J, ^/ y8 [) l
    6 t5 b0 z* j  |+ `  a* l' b+ [$ e* C

    7 {6 g6 b+ Y$ eDefine指令不支持中文 用中文吧,它给的解释还是错的& ~7 p% ^+ X8 i2 ~- Z
    ; ~0 z- l9 G! A

    ( l1 V( g& [0 @, w) l8 v6 I「拉郎配」这个词,《现代汉语词典》就有啊:
    2 A7 ~: n4 a) ~" Z
    , R1 L0 l& A5 C
    拉郎配8 A  t% d, V8 K
    lā láng pèi
    ! X' ^9 E! \8 p! y1 g9 c封建时代为逃避家中未婚女子被选入宫中,仓促找男子跟她成亲。比喻不顾实际,强行使双方联合或合并。

    本帖子中包含更多资源

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

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

    [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" z$ R0 ]" ?7 i3 @& e
    我还是觉得GoldenDict + ChatGPT这个组合算拉郎配9 ]0 N5 y# Z) X
    ' d! F& z* x. v9 j4 Y
    别的不说,就看下图吧:
    拉郎配
      P+ n+ K* J6 w3 l* z

    . T3 ]4 m1 E/ W% f+ |3 B. Z恰到好处
    % t: Q8 ?! x; ]; m  W, _( N5 u1 a$ i% ~5 g) D- c1 v0 t* L( u
    说明问题
  • TA的每日心情
    无聊
    2022-7-11 10:17
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2023-7-24 10:12:50 | 显示全部楼层
    照着弄完报错啊? 麻烦给看看吧
    1 A$ J. N5 e+ X7 [* g  U- m. y查询错误: 程序返回,退出代码为 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-5-4 13:25 , Processed in 0.048528 second(s), 11 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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