掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 4010|回复: 6

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

[复制链接]

该用户从未签到

发表于 2023-5-3 13:11:27 | 显示全部楼层 |阅读模式

. i# J6 ?# s9 K$ \参考:) Z8 o' E0 Y0 }" K
- [词典讨论] ChatGPT 用作词典 https://www.pdawiki.com/forum/fo ... hread&tid=48326$ J6 D) V: _. d- E. J
- [经验交流] GoldenDict 有X词典在线版(Python 在线版) https://pdawiki.com/forum/forum.php?mod=viewthread&tid=33203! r* K  o/ o! B
- GoldenDict + Python 调用有道翻译[...]  https://pdawiki.com/forum/forum.php?mod=viewthread&tid=21988
$ ], r9 z) E3 |  y( u7 N3 F) w; ?0 c- [5.16]goldendict 有道释义 & google翻译 [python] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=26565+ @  Q, J9 U2 X+ x# X) A
- 人人词典GoldenDict插件[附python3源码] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=31713$ V2 B& {1 X$ X" t
- ChatGPT-Next-Web https://github.com/Yidadaa/ChatGPT-Next-Web
2 I" T9 S1 U+ ?2 G/ d5 R6 D3 B. ]8 f7 u, Z0 c

8 s( ?) W/ s- r# l! K3 U/ g前置条件:# n8 A. d0 Q( b
1、OpenAI API key https://platform.openai.com/account/api-keys
' T) C: r9 X" K2、Python
) Y& H1 @7 `. t, M2 O7 n7 n, d! q# X$ Q! D0 k' V0 H2 c
问:6 H! G/ |/ h9 g7 L# Q) H' h
1、写一个 mydict.py,调用 OpenAI API key,实现查询功能。
( n, L. [2 m7 L- p2、用 GoldenDict 调用 mydict.py。
6 k" O0 b6 \: v: ~" H

6 w, |  ]  V" U1 j: mChatGPT 回答:
4 X' H. H: N& `/ f+ G
这里提供一个基于 OpenAI GPT-3 API 的简单 mydict.py 脚本示例,可以通过命令行传入要查询的单词,输出 OpenAI API 返回的结果:% A3 F$ ?4 K8 E. ?& y2 m

) L8 c  c" M& ~2 ]/ w```python
7 D/ s/ q6 J5 }6 ^2 \) g, \) Q0 {import openai
: ~" U7 ^" z, e" p4 jimport sys
. S% K# |; E! g" F
9 m# Z2 B. F* |6 a  K  X; m1 zopenai.api_key = "YOUR_OPENAI_API_KEY_HERE"
% g) n6 C3 V/ \. A# g& }  a# O/ R( z1 M( u: l3 {
def define(word):0 |1 T3 k+ P! _, C3 N4 P3 P- L
    prompt = f"Define '{word}'"
, A  T9 W! @7 ~* ?    response = openai.Completion.create(
: ?$ E/ c: c7 {, P6 R! e        engine="text-davinci-002",7 S! w) a+ m& J+ \
        prompt=prompt,4 {4 x+ ^4 \/ U: Y$ A9 h1 a+ u
        max_tokens=1024,
+ D3 h: }5 e  ?+ h5 d* W# b# x        n=1,
( t8 q' T; N' r6 }/ U        stop=None,3 z9 I8 e. j$ E, a3 t
        temperature=0.5,
/ J, a0 u3 @! _7 Y% `    )
) v& i8 a6 j  ~  i  Q! B( m: y3 b3 x
) j% F" k( c" H" |" l    if len(response.choices) > 0:: d7 d# f; K- H
        return response.choices[0].text  g4 P( T. ]1 V# H3 S
    else:% W; g7 ~1 E% H
        return "No definition found."5 Y5 c+ p2 h5 ]0 {; k- y# Q$ r
1 S+ I$ e- P  G& y$ [
if __name__ == "__main__":
, n+ V/ |& H' m# o( b    word = sys.argv[1]
/ w8 b# ~$ I% o    definition = define(word)
7 K, j9 D+ G; W) ?% }& D- z; p    print(definition), N( A3 G! I" I8 m' }5 u2 m% ?5 {
```# W. I3 M( Z( }+ p, a" f$ I/ w% n% O

. S8 v. i# V  ]6 g, D2 x3 F将上述脚本保存为 `mydict.py` 文件。8 u. e" U0 A0 B) [! z9 M
' k& T  C0 ^0 ]* h
接下来,在 GoldenDict 中设置该脚本为自定义命令行词典。, c2 ?4 y+ M; G6 v; s# l9 A

; q. a' B# Z) v) y8 s0 f( B1. 打开 GoldenDict,选择 Edit > Dictionaries。/ h1 I4 F/ `$ N, {
2. 在 Programs 标签页中,点击 Add 按钮。
1 z  n( `) q! p' d: i' Y; |3. 在 Dialog 标题栏中输入 “MyDict”,在 Command 栏中输入 `python /path/to/mydict.py %GDWORD%`(其中 `/path/to/mydict.py` 为脚本的绝对路径),点击 OK 按钮。0 W- P% _/ F2 F
4. 在主界面中,选中一段文本,然后按下 Ctrl+C+C,即可通过 mydict.py 查询该单词的定义。
5 D, M! x0 O# h! j% V+ c- w# X9 x

" N5 q* `* D2 w, [3 }+ p1 [& q# y$ u8 j% J: C" X

+ c7 _/ L0 F' T$ ?! ~. N

评分

1

查看全部评分

本帖被以下淘专辑推荐:

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

    [LV.7]常住居民III

    发表于 2023-5-5 10:16:19 | 显示全部楼层
    本帖最后由 mikeee 于 2023-5-5 11:26 编辑
    . b7 ]6 D. G; `1 ?; a1 L3 M/ T$ S3 W* ~9 [5 a) k
    链接: https://pan.baidu.com/s/1HXpt0U3vb7GJDKpBNm_FOw?pwd=4vph 提取码: 4vph % M6 f/ B$ p8 ?  u
    ) j- I  T# j; W
    这个命令行工具`chatgpt_tr`应该可以设置成在 GoldenDict 里使用。用的是令牌,即是说免费的。
    " ]; r- i& F# `/ x# z4 L: O: y5 R2 O
    9 l, _' x0 G. M- `5 O8 J# @& b" {chatgpt_tr主要是给命令行翻译用的,但也可以自定义提示Prompt以及用于对话。详细用法参看 ``chatgpt_tr.exe --help``。
    3 X7 j( J* Q4 k# v' ~, W  W2 ]- W! \6 w" q
    用法
    7 ^1 G- g3 l: e. [
    9 d! d- T3 w* B4 c! i
    • 解压
    • 获取access token
      9 q4 G) y$ r1 B+ C
      • 登录 chat.openai.com
      • 访问 https://chat.openai.com/api/auth/session
      • 拷 accessToken备用
      • 此操作只需一次。(access token 有效期约14-30天,但内地ip可能需双向提子因为openai和大伙墙的双重封杀,港澳ip则需找未被openai封杀的带理)
        + Y# g/ v, ~8 w6 A% P% [
    • 命令行下设置环境变量OPENAI_ACCESS_TOKEN,例如cmd下 set OPENAI_ACCESS_TOKEN=eyJhbGc... 或用包内的 chatgpt-tr.bat 或sysdm.cpl设置全局环境变量OPENAI_ACCESS_TOKEN
    • 命令行下,例如WIN cmd回车(或开Windows Terminal或cmder或conemu)+ D7 ?$ Q8 e! Z: `9 B# s  o) i) Y
      • chatgpt_tr --help # 帮助
      • chatgpr_tr # 翻译系统剪贴板内容
      • chatgpr_tr this is a test # 翻译 this is a test; G" }5 K$ o/ p+ U
      ( p) ?* h  P- \7 U( C1 V( g$ V3 H& r
    1 y, Z, u1 S3 n
    可以利用 bat 自定义提示Prompt各种使用场景(例如`chatgpt_tr.exe -p "列出5个中文同义词"  make sense` )。该工具的python源码核心部分只有十几行。网友有兴趣的话我可以提供python源码。
    9 j9 }( }' t# M9 S5 I1 X+ j/ v0 y3 R4 r
    该工具基于某个第三方反向代理,代理挂了或被关闭当然工具也就不能用了。 (实测2023-05-05可用)- D4 C$ G/ T6 t* A% A3 B
    & F  n/ G" ?% a
    典型输出: ; L( Z; D+ K' l, H4 b& N" r0 p
    # chatgpt_tr amazon code whisperer
    " H4 I. X7 J# I# n1 ~) I$ \amazon code whisperer3 `* N$ ^" g# K0 m3 O

      I2 H. T7 r8 t- R版本1:
    3 _2 W7 Y( R5 F' V亚马逊代码耳语师4 \' w+ q- b* I% ]5 N3 ?# d1 q# c

    9 C* Y6 ?$ y# D/ u0 k9 n版本2:
      V9 T- q# A8 P4 b* a* N2 S4 l亚马逊代码密语者  X0 X6 |+ X; h( V+ i4 |
    . F' G9 _5 ~3 {8 y& [5 E4 O
    版本3:
    # P0 A$ _( K4 y' \- U- G亚马逊代码秘语师7 e& r8 U' Q0 G, u& v

    , {! H' e, b# i- ^2 O0 ^# chatgpt_tr.exe -p "列出5个中文同义词" make sense
    , \( y" F" d2 U, Z* S/ f* xmake sense8 ~& ]9 A- G4 z6 v

    ; K) X, X' a7 c, `! Z" c1. 有道理9 D) i2 F  i3 k: A
    2. 讲得通
    % r0 a' J& n8 ~6 t; M3. 合理! r$ S% _6 v, v" z
    4. 明智
    ) K- |# E, i3 V" t5. 理性
    8 e/ n. X! ~! r* i+ v( S
    + W  ^* }# c+ t/ G' @2 J' O1 ?# chatgpt_tr.exe --help9 C7 G8 {. W8 q% r* P6 `( ]" c2 V
    / q, q$ b- J  H1 b) ^& q6 [/ t$ N
    Usage: chatgpt_tr.exe [OPTIONS] [TEXT]...
    . W/ d' D. o/ x+ N# s8 Z3 I3 [+ ?1 `6 _/ K* B. j* q8 y
    Translate with chatgpt using access token.
    4 I, T" g+ k: Z6 G7 W# B+ _ set LOGURU_LEVEL=DEBUG or set LOGLEVEL=10 to turn on debug/verbose mode., K# i1 ~9 J5 ?( a6 b
    1 e0 f  x8 R  f/ ?
    ┌─ Arguments ──────────────────────────────────────────────────────────────────┐+ I5 D1 n/ |$ ^" b8 Z; u+ Y" g) ]
    │   text      [TEXT]...  Source text. [default: None]                          │7 q7 O& n( S! @) s) q% N
    └──────────────────────────────────────────────────────────────────────────────┘
    # s1 C* K1 {! n; H┌─ Options ────────────────────────────────────────────────────────────────────┐
    : [- P  |# P) u. {│ --version  -v,-V               Show version info and a list of supported     │
    " d& ~5 r# U; g. X3 q: `$ [│                                languages and exit.                           │
    + l" A6 l7 h7 ^6 S4 `, B│ --clipb    -c                  Use clipboard content if set or if `text` is  │
    1 U/ q) d1 t6 x1 t# X/ c; M│                                empty.                                        │0 \6 H2 ], `" V8 ~/ }5 Z! u- O
    │ --to-lang  -t         TEXT     Target language when using the default        │
    * v5 Q3 A  z/ a/ u│                                prompt.                                       │
    ( ]: q0 B/ D! e2 H1 T4 Z( ~+ m│                                [default: 中文]                               │: B0 w" @2 |8 H8 ~1 e
    │ --numb     -n         INTEGER  number of translation variants when using the │
    6 z' z( s2 l" P. Y4 N7 i│                                default prompt.                               │0 I( {" I4 f% k" o, H- u: f5 n7 J
    │                                [default: 3]                                  │
    : r8 {3 ?. q& U9 [( B) H│ --prompt   -p         TEXT     User defined prompt. [default:                │
    2 f: e, B. s! [( \│                                '将以下内容内容翻成 to_lang                   │. O3 R8 i( W* l! M- ~  y5 h
    │                                (中文),不要自由发挥,列出 numb (3) 个版本:  │) x% [1 D: V9 H; J
    │                                \n']                                          │
    9 H3 ?! u9 o( e/ u% q│ --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 O9 b& q$ ^. W7 {4 b) ?
    $ \# y4 ]3 J9 ?- x3 h$ h
    别的不说,就看下图吧:) s! c4 `3 U- H. J, P7 b# _% m/ r5 F
    $ t8 Y: K- ~, A( ^2 u
    ) S7 A) t9 {6 O& N( y8 G, ~
    + H2 I- [- H; u, p% q2 M0 e5 b
    Define指令不支持中文 用中文吧,它给的解释还是错的2 v) j4 {  n' j' M
    - V' U% L$ O/ R, Y

    # Q( q+ K; K. q: x/ M& d6 p「拉郎配」这个词,《现代汉语词典》就有啊:
      N( T" z' Q# r! H5 Z1 f- e8 m  _4 L# O7 ~3 H. O& ?
    拉郎配) |7 l; ]; ~+ U/ i  h- q
    lā láng pèi# ~" N8 D+ X# T( v& ~: H
    封建时代为逃避家中未婚女子被选入宫中,仓促找男子跟她成亲。比喻不顾实际,强行使双方联合或合并。

    本帖子中包含更多资源

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

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

    [LV.Master]伴坛终老

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

    [LV.9]以坛为家II

    发表于 2023-5-4 12:22:25 | 显示全部楼层
    klwo2 发表于 2023-5-3 17:31+ r6 E$ i  J2 m3 V- M5 z4 o0 }
    我还是觉得GoldenDict + ChatGPT这个组合算拉郎配; `3 L( t1 \  b& J
    8 Z, L; r/ G: |8 N2 c4 z
    别的不说,就看下图吧:
    拉郎配
    + Z: ~$ ]/ y6 S; N; f. Q

    ( V- t2 a6 z+ s8 J恰到好处
    + `- P7 U' e. Q+ N; m" t5 F. k$ o8 i1 p/ Z' x2 m( d' {
    说明问题
  • TA的每日心情
    无聊
    2022-7-11 10:17
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2023-7-24 10:12:50 | 显示全部楼层
    照着弄完报错啊? 麻烦给看看吧- x! f+ G& q/ i2 T7 y/ `; 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, 2025-7-11 16:29 , Processed in 0.024409 second(s), 26 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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