0

0

我的第一个开源贡献

DDD

DDD

发布时间:2024-09-19 10:58:25

|

856人浏览过

|

来源于dev.to

转载

提交问题

对于我的第一个贡献,我提交了一个问题以向另一个项目添加新功能,即添加一个新的标志选项来显示用于提示和完成生成的令牌。

我的第一个开源贡献 功能:聊天完成令牌信息标志选项 #8

我的第一个开源贡献
克莱布恩特拉 发布于

描述

一个标志选项,为用户提供发送和接收的令牌计数。 我认为这是一个重要的功能,可以引导用户在发出聊天完成请求时保持在代币预算之内!

实施

为此,我们需要添加另一个选项标志,可以是 -t 和 --token-usage。当用户在命令中包含此标志时,它应该清楚地详细显示在生成完成过程中使用了多少个令牌,以及在提示中使用了多少个令牌。

github 上查看

我选择为 fadingna 的开源项目 chat-minal 做出贡献,这是一个用 python 编写的 cli 工具,允许您利用 openai 来做各种事情,例如使用它生成代码审查、文件转换、从文本和摘要文本。

我的拉取请求

我以前用python写过代码,但这不是我最强的技能。因此,为这个项目做出贡献为我提供了具有挑战性但良好的学习经历。
挑战在于我必须阅读和理解别人的代码,并以不破坏代码设计的方式提供正确的解决方案。理解流程至关重要,这样我就可以高效地添加功能,而无需对代码进行大的更改并保持代码一致。

我的第一个开源贡献 feat:代币使用标志 #9

我的第一个开源贡献
克莱布恩特拉 发布于

功能

添加了为用户添加 --token_usage 标志选项的功能。 此选项向用户提供用于提示和生成完成的令牌数量的信息。

实施

我根据代码设计提出的解决方案是检查 token_usage 标志是否存在。 如果未使用 token_usage 标志,我不希望代码检查任何不必要的 if 语句,因此我制作了两个单独的相同循环逻辑,不同之处在于检查块内是否存在 use_metadata。

if token_usage:
    for chunk in runnable.stream({"input_text": input_text}):
        print(chunk.content, end="", flush=true)
        answer.append(chunk.content)

        if chunk.usage_metadata:
            completion_tokens = chunk.usage_metadata.get('output_tokens')
            prompt_tokens = chunk.usage_metadata.get('input_tokens')
else:
    for chunk in runnable.stream({"input_text": input_text}):
        print(chunk.content, end="", flush=true)
        answer.append(chunk.content)
进入全屏模式 退出全屏模式

显示

在 get_completions() 方法执行结束时,添加对标记 token_usage 的检查,然后如果使用了该标记,则将令牌使用详细信息显示到 stderr。

if token_usage:
    logger.error(f"tokens used for completion: <span class="pl-s1"><span class="pl-kos">{completion_tokens}</span>"</span>)
    logger.error(f"tokens used for prompt: <span class="pl-s1"><span class="pl-kos">{prompt_tokens}</span>"</span>)
进入全屏模式 退出全屏模式
在 github 上查看

我的解决方案

检索令牌使用情况

if token_usage:
    for chunk in runnable.stream({"input_text": input_text}):
        print(chunk.content, end="", flush=true)
        answer.append(chunk.content)

        if chunk.usage_metadata:
            completion_tokens = chunk.usage_metadata.get('output_tokens')
            prompt_tokens = chunk.usage_metadata.get('input_tokens')
else:
    for chunk in runnable.stream({"input_text": input_text}):
        print(chunk.content, end="", flush=true)
        answer.append(chunk.content)

最初,代码只有一个 for 循环,它从流中检索内容并将其附加到一个数组,该数组形成完成的响应。

我为什么要这样写呢?

我在添加不同的 if 块时复制 for 的原因是为了防止代码重复检查 if 块,即使用户没有使用新添加的 --token_usage 标志。因此,我首先检查该标志是否存在,然后决定执行哪个 for 循环。

实现

尽管我的拉取请求已被项目所有者接受,但我后来意识到这种方式增加了代码可维护性的复杂性。例如,如果处理流的 for 循环中需要进行更改,则意味着需要修改代码两次,因为有两个相同的 for 循环。

我认为我可以做的改进就是将其变成一个函数,这样任何需要的更改都可以在一个函数中完成,保持代码的可维护性。这只是证明,即使我在编写代码时考虑到了优化,我仍然可能会错过其他对项目至关重要的东西,在本例中就是可维护性。

收到拉取请求

我的工具genereadme也收到了贡献。我收到了 mounayer 的 pr,旨在将相同的功能添加到我的项目中。

我的第一个开源贡献 壮举:添加了一个新标志,显示提示中发送的令牌数和完成时收到的令牌数 #13

我的第一个开源贡献
穆奈尔 发布于

描述

关闭#12。

阿里云AI平台
阿里云AI平台

阿里云AI平台

下载
  • 添加了一个新标志 --token-usage,指定该标志后,会打印提示中发送的令牌数量以及完成时返回到 `stderr 的令牌数量。

这只需要添加另一个标志检查 --token-usage:

   .option("--token-usage", "show prompt and completion token usage")
进入全屏模式 退出全屏模式

我还确保保持命名约定/格式风格一致,在为每个处理的文件完成聊天完成的 for 循环中,我累计了发送和接收的总令牌:

    prompttokens += response.usage.prompt_tokens;
    completiontokens += response.usage.completion_tokens;
进入全屏模式 退出全屏模式

如果这样提供 --token-usage 标志,我会在程序运行时结束时显示它:

    if (program.opts().tokenusage) {
      console.error(`prompt tokens: <span class="pl-s1"><span class="pl-kos">${prompttokens}</span>`</span>);
      console.error(`completion tokens: <span class="pl-s1"><span class="pl-kos">${completiontokens}</span>`</span>);
    }
进入全屏模式 退出全屏模式
  • 更新了 readme.md 以解释新标志。

测试

测试 1

genereadme examples/sum.js --token-usage
进入全屏模式 退出全屏模式

这应该显示类似:

我的第一个开源贡献

测试2

您也可以尝试使用多个文件,即:

genereadme examples/sum.js examples/createUser.js --token-usage
进入全屏模式 退出全屏模式
在 github 上查看

这一次,不必阅读别人的代码,而是必须有人阅读我的代码并为其做出贡献。很高兴知道有人能够为我的项目做出贡献。对我来说,这意味着他们了解我的代码是如何工作的,因此他们能够添加该功能,而不会破坏任何内容或增加代码库的任何复杂性。
话虽如此,阅读代码也是一项不可低估的技能。我的代码还远未达到完美,我知道还有一些地方可以改进,所以功劳也归功于能够阅读和理解代码。

这个特定的拉取请求实际上不需要任何来回更改,因为 mounayer 编写的代码就是我自己编写的。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6631

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

843

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1092

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

2200

2024.03.01

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

4290

2026.01.21

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

136

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

47

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号