我的第一个开源贡献

提交问题

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

我的第一个开源贡献 功能:聊天完成令牌信息标志选项 #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: {completion_tokens}")    logger.error(f"tokens used for prompt: {prompt_tokens}")
进入全屏模式退出全屏模式
在 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。

添加了一个新标志 –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: ${prompttokens}`);      console.error(`completion tokens: ${completiontokens}`);    }
进入全屏模式退出全屏模式

更新了 readme.md 以解释新标志。

测试

测试 1

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

这应该显示类似:

我的第一个开源贡献

测试2

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

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

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

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

以上就是我的第一个开源贡献的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1349810.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 13:42:39
下一篇 2025年12月13日 13:42:56

相关推荐

  • 首次合作!

    在本周的实验中,我们的任务是通过 GitHub 为其他人的工作做出贡献。我们需要做的是在他们的项目中添加一个输出代币信息的新功能,并且我们需要使用命令行标志来触发该功能。 她的项目正在使用 OpenAI 为源代码创建自述文件。 第一个想法。 关于合作另一项工作,我的第一个想法是我需要学习他们的编码风…

    好文分享 2025年12月13日
    000
  • 学习编码的顶级人工智能工具:有抱负的开发人员的游戏规则改变者

    AI 编码工具、学习编码的最佳 AI 工具、GitHub Copilot、Kite、OpenAI 的 Codex、编码助手、学习编码 AI 工具、初学者编码工具、AI 驱动的编码平台、面向开发人员的 AI 工具。 在当今快节奏的科技世界中,学习如何编码变得比以往任何时候都更加重要。无论您是想转行、增…

    2025年12月13日
    000
  • 了解Python的heapq模块

    在python中,堆是一个强大的工具,可以有效地管理元素集合,在这些元素集合中,您经常需要快速访问最小(或最大)的项目。 python中的heapq模块提供了堆队列算法的实现,也称为优先级队列算法。 本指南将解释堆的基础知识以及如何使用 heapq 模块,并提供一些实际示例。 什么是堆? 堆是一种特…

    2025年12月13日
    000
  • 阿毛老师python爬虫课怎么样

    阿毛老师的 Python 爬虫课非常值得推荐,适合初学者和想要深入学习爬虫的学生。课程内容全面涵盖了 Python 爬虫技术的全套知识,包括 Python 基础、HTTP 协议、HTML 和 XML 解析、正则表达式、requests 和 beautifulsoup 库的使用、数据持久化和可视化。阿…

    2025年12月13日
    000
  • python爬虫键值为空怎么改

    处理Python爬虫中键值为空的方法包括:使用默认值使用lambda函数使用try-except语句使用None Python爬虫中,如何处理键值为空的情况 在使用Python爬虫时,有时会遇到键值为空的情况。这可能是由于页面上没有相关数据,或者是页面结构发生了变化。如果不进行处理,可能会导致程序出…

    2025年12月13日
    000
  • python爬虫怎么爬取电影评论

    可使用 Python 爬取电影评论,具体步骤包括:安装 requests 和 BeautifulSoup 库,获取电影页面 HTML,解析 HTML 提取评论,存储评论到文件或数据库。 用 Python 爬取电影评论 如何用 Python 爬取电影评论? 要使用 Python 爬取电影评论,可以遵循…

    2025年12月13日
    000
  • python爬虫运行时怎么办

    Python爬虫运行时常见错误解决方法:ImportError:确保已安装模块并设置正确路径。AttributeError:验证模块属性是否存在,确保导入正确版本。ConnectionError:检查服务器可用性、代理有效性和请求间隔。TimeoutError:增加超时时间、使用重试机制和优化请求频…

    2025年12月13日
    000
  • 安卓怎么调用python写的爬虫

    在安卓设备上调用 Python 爬虫时,需要使用 SL4A 作为桥梁。具体步骤包括:1. 安装 SL4A;2. 创建 Python 爬虫脚本;3. 将脚本转换为 SL4A 模块;4. 在安卓应用程序中加载模块;5. 调用模块中的方法执行爬虫任务。 安卓调用 Python 爬虫 如何调用 在安卓设备上…

    2025年12月13日
    000
  • python爬虫怎么获取链家网

    如何使用 Python 爬取链家网获取 HTML?使用 requests 库获取网页 HTML。使用 BeautifulSoup 库解析 HTML。使用 Beautiful Soup 查找特定数据,如房屋列表。从找到的元素中提取所需信息,如标题、价格和面积。 如何使用 Python 爬取链家网 获取…

    2025年12月13日
    000
  • python爬虫的内容怎么去重

    Python 爬虫数据去重有四种常用方法:1. 使用集合(Set);2. 使用字典(Dictionary);3. 使用 Bloom 过滤器;4. 使用外部数据库。具体选择取决于需求和数据量。 Python 爬虫数据去重方法 数据去重是爬虫过程中一项重要的任务,它可以防止重复抓取相同的数据并占用资源。…

    2025年12月13日
    000
  • python爬虫怎么解析网页数据

    技巧:使用 Beautiful Soup 库,导入库,使用 find() 和 find_all() 查找 HTML 元素。提取文本和属性,使用 text 和 attrs 属性提取数据。导航 DOM 结构,使用 parent、children 和 next_sibling 属性。处理复杂页面,使用正则…

    2025年12月13日
    000
  • python爬虫论文摘要怎么写

    使用 Python 进行网络爬虫具有以下优势:易于学习、可扩展、社区支持。其挑战包括反爬虫措施、数据处理和伦理问题。最佳实践包括尊重网站条款、采用反反爬虫技术以及进行数据清洗。 Python 爬虫论文摘要 引言在当今数据驱动的时代,网络爬虫已成为获取大量在线信息的重要工具。Python 是一种用途广…

    2025年12月13日
    000
  • Python – 如何在类中定义公共、私有和受保护变量

    介绍 python 作为一种面向对象的编程语言,提供了多种将数据封装在类中的方法。 这种封装的关键方面之一是类变量的可见性,类变量可以分为公共变量、受保护变量和私有变量。在本文中,我们将探讨如何在 python 类中定义公共、私有和受保护变量。 这些变量的行为与其他编程语言非常不同。这些访问控制只是…

    好文分享 2025年12月13日
    000
  • 用python写买火车票的程序

    可以使用 Python 编写一个程序来购买火车票,具体步骤包括:获取火车时刻表,选择火车,填写乘车信息,发送购票请求,判断是否购票成功,支付。 用 Python 购买火车票程序 需求:编写一个 Python 程序,用于购买火车票。 步骤: 1. 导入必要的库 立即学习“Python免费学习笔记(深入…

    好文分享 2025年12月13日
    000
  • 用 Python 创建恶意软件

    **提高网络安全意识::根据我的项目了解恶意软件 事实上,在数字时代,保护数据安全变得越来越重要,了解导致这种不安全的威胁始终很重要。为此,我开发了一个简单的恶意软件项目,其目标是提高人们对网络安全威胁的认识。 该软件是出于教育目的而创建的,模仿常规恶意软件的行为。它简单地表明,当系统没有受到黑客的…

    2025年12月13日
    000
  • Streamlit 部分写入和文本元素

    streamlit 入门:初学者指南 代码可以在这里找到:github – jamesbmour/blog_tutorials: 博客的视频版本可以在这里找到:https://youtu.be/eqcqnw7nw7m 介绍 streamlit 是一个开源应用程序框架,可让您以最少的努力创…

    2025年12月13日
    000
  • python抢票神器app

    Python凭借自动化、高并发、定制性优势,成为抢票神器App开发的首选。Python抢票神器App流程包括:模拟浏览器、获取抢票信息、提交订单。开发步骤依次为:安装Python及库、获取网站规则、编写脚本、部署运行。使用时需遵守网站规则、限时抢票、适当使用。 Python抢票神器App 随着互联网…

    2025年12月13日
    000
  • python代码源码哪里找

    Python 代码源码可从以下渠道获取:官方 Python 文档网站:获取标准库源码GitHub:搜索特定 Python 项目和源码库PyPI:查找 Python 包的源码和文档开源社区:在 Stack Overflow 和 Reddit 等论坛获取代码片段和建议书籍和教程:提供示例代码和分步指南,…

    2025年12月13日
    000
  • python装逼代码

    “装逼代码”是一种展示编码技能而非增强代码可读性或实用性的复杂代码,其特征包括:使用晦涩语法和高级概念过度抽象和泛化滥用反射和元编程缺乏注释和文档忽视可读性和可维护性避免装逼代码:遵循编码规范优先考虑可读性添加注释谨慎使用抽象避免过度使用反射考虑团队协作 Python 装逼代…

    2025年12月13日
    000
  • python看电影代码展示

    使用Python观看电影的步骤:安装requests和bs4库。获取电影流媒体链接。发送HTTP请求获取电影页面。解析HTML提取视频源链接。使用PyQt5或VLC播放电影。 如何使用Python观看电影 前言Python是一种强大的编程语言,可用于执行各种任务,包括观看电影。本文将逐步指导您使用P…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信