news 2026/5/2 12:01:25

ReEdgeGPT逆向调用Copilot:免API密钥的AI对话集成方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ReEdgeGPT逆向调用Copilot:免API密钥的AI对话集成方案

1. 项目概述与核心价值

最近在折腾AI对话应用的朋友,估计都绕不开一个话题:如何让自家的应用也能用上那些强大闭源大模型的对话能力,比如New Bing(现在的Copilot)或者ChatGPT。直接调用官方API当然最省事,但一来有费用,二来对于一些需要特定风格或深度集成的场景,总感觉隔了一层。于是,逆向工程这些模型的网页端接口,自己搭建一个“代理”或“桥梁”服务,就成了很多开发者和技术爱好者的选择。今天要聊的这个“Integration-Automation/ReEdgeGPT”项目,就是在这个背景下诞生的一个非常有意思的Python工具库。

简单来说,ReEdgeGPT是一个Python库,它通过模拟浏览器行为,逆向实现了与微软New Bing(现Copilot)聊天机器人后端的直接交互。你不用去申请官方的API密钥,也不用担心调用额度,只要有一个能正常访问Bing Chat的微软账户,就能通过这个库在你的Python程序里实现一个功能几乎完整的“Copilot”。这对于想要研究对话AI交互逻辑、构建个性化聊天机器人,或者开发一些需要与大型语言模型深度集成的自动化工具来说,是一个极具吸引力的方案。

我第一次接触这个项目,是因为需要为一个内部知识问答系统寻找一个稳定、智能且成本可控的对话引擎。官方API的方案评估下来,长期使用的成本不低,而一些开源模型在特定领域的知识上又不够“通顺”。ReEdgeGPT的出现提供了一个折中的思路:利用现有成熟服务的强大能力,同时保持对交互流程和数据处理的完全控制。经过一段时间的实际使用和代码研读,我发现它不仅仅是一个简单的“爬虫”脚本,其内部对会话管理、流量模拟、安全校验的处理,都体现了相当的设计深度。接下来,我就结合自己的实践经验,把这个项目的里里外外拆解一遍,聊聊它是怎么工作的,怎么用起来,以及过程中会遇到哪些“坑”。

2. 核心原理与架构拆解

要理解ReEdgeGPT,我们不能把它看作一个简单的HTTP请求封装器。它的核心在于完整地模拟了一个真实用户通过Edge浏览器与Bing Chat进行交互的整个流程。这涉及到Cookie管理、WebSocket连接、动态令牌获取以及对话状态维护等一系列复杂操作。

2.1 逆向工程的核心:从浏览器行为到代码逻辑

Bing Chat(Copilot)的网页端应用是一个典型的现代单页应用(SPA),其核心通信并不完全依赖于传统的HTTP请求/响应模式,而是大量使用了WebSocket进行全双工、低延迟的通信,用于实时接收AI返回的流式文本。同时,为了安全和防滥用,服务端会实施一系列校验,包括Cookie验证、请求头校验(如X-Client-DataSec-MSCH-APPC等)、以及动态生成的会话ID和对话ID。

ReEdgeGPT的工作,就是通过分析浏览器与https://www.bing.com/turing/conversation/createhttps://sydney.bing.com/sydney/ChatHub等关键端点的网络交互,提炼出必要的参数和通信协议。它使用aiohttp库来处理异步HTTP请求和WebSocket连接,用curl_cffi来模拟特定版本的TLS指纹(这对绕过一些基础的反爬机制很重要),并用httpx作为备选方案。整个库的设计目标是尽可能低调地模拟真实流量,避免被服务器端识别为自动化脚本而中断会话。

2.2 核心组件与数据流

一个典型的ReEdgeGPT对话生命周期包含以下几个关键阶段和组件:

  1. 会话初始化:首先,库需要用户提供有效的Cookie。这个Cookie通常包含_U字段,是登录状态的凭证。通过Cookie,库会向Bing的会话创建端点发起请求,获取一个初始的会话对象。这个对象里包含了本次对话的全局唯一标识conversationId、一个用于轮询的clientId,以及一个关键的conversationSignature。这个签名在后续的每一次消息交换中都需要携带,用于验证请求的连续性和合法性。

  2. 聊天枢纽连接:获得会话参数后,库会建立一个到Bing Sydney ChatHub的WebSocket连接。这个连接是整个对话的“主干道”。建立连接后,客户端需要发送一个握手消息,协议号通常是1,以协商通信的版本和模式。

  3. 消息交换循环

    • 用户发送:当用户输入一条消息时,库会构造一个符合Bing Chat内部协议格式的JSON数据包。这个数据包非常复杂,包含了conversationId,conversationSignature,clientId,invocationId(一个自增的调用ID),消息内容,以及大量的上下文选项,如对话风格(Creative, Balanced, Precise)、是否开启搜索、地理位置信息等。这个数据包通过WebSocket发送。
    • AI响应:服务器会通过同一条WebSocket连接返回一系列消息。这些消息是流式的,类型多样。最常见的是类型为1的文本片段消息,我们需要将这些片段拼接起来,形成完整的回复。还有类型为2的消息,表示回复结束。类型为3的消息可能包含建议的后续提问。类型为6的消息通常包含内部错误或速率限制信息。库需要实时解析这些消息,并提供一个回调接口,让调用者能实时处理每一个文本片段。
  4. 会话管理与重置:每个会话通常有轮数限制。在达到限制或用户主动结束时,需要关闭WebSocket连接。如果想开始新的话题,通常需要创建一个全新的会话,因为直接复用旧的conversationId可能会导致上下文混乱或错误。

注意:整个逆向协议是高度脆弱且非官方的。微软可以随时更新其前端代码或后端接口,导致现有的通信方式失效。这就是为什么这类项目需要社区持续维护,也意味着在生产环境中使用需要承担一定的服务中断风险。

3. 环境准备与快速上手

理论讲了不少,我们直接上手,看看如何最快地让ReEdgeGPT跑起来。我的操作环境是Ubuntu 22.04,Python版本是3.10。Windows和macOS的流程大同小异。

3.1 基础环境搭建

首先,确保你的Python环境已经就绪。我强烈建议使用虚拟环境来管理依赖,避免污染全局环境。

# 创建并进入一个名为‘edgegpt’的虚拟环境 python3 -m venv edgegpt_env source edgegpt_env/bin/activate # Linux/macOS # 在Windows上使用:edgegpt_env\Scripts\activate # 升级pip pip install --upgrade pip

接下来,安装ReEdgeGPT库。最直接的方式是通过pip从GitHub安装最新版本。

pip install git+https://github.com/Integration-Automation/ReEdgeGPT.git

这个命令会自动安装ReEdgeGPT及其所有依赖,包括aiohttp,curl_cffi,httpx,rich(用于美化输出)等。如果网络环境导致从GitHub安装缓慢或失败,你也可以先克隆仓库再安装。

git clone https://github.com/Integration-Automation/ReEdgeGPT.git cd ReEdgeGPT pip install -e .

3.2 获取并配置Cookie

这是最关键也最容易出错的一步。你的Cookie必须是登录了微软账户,并且能够正常访问https://www.bing.com/chat的Cookie。

获取Cookie的步骤:

  1. 在任何浏览器(推荐使用Edge或Chrome的无痕模式,避免其他扩展干扰)中打开https://www.bing.com
  2. 点击右上角登录,使用你的微软账户完成登录。
  3. 登录后,访问https://www.bing.com/chat,确保你能看到Copilot的聊天界面。
  4. 打开浏览器的开发者工具(F12),切换到“网络”(Network)标签页。
  5. 刷新页面(F5),在网络请求列表中,找到任意一个对bing.comsydney.bing.com域名的请求。
  6. 点击该请求,在右侧的“标头”(Headers)部分,找到“请求标头”(Request Headers)下的Cookie字段。
  7. 将整个Cookie字段的值完整地复制出来。它应该是一长串由分号和空格连接的键值对,其中必定包含_U=开头的部分。

配置Cookie:

ReEdgeGPT支持多种方式传入Cookie,最方便的是将其保存为JSON文件。创建一个名为cookies.json的文件,内容格式如下:

[ { "name": "_U", "value": "你复制的那一串很长的Cookie值中_U对应的部分", "domain": ".bing.com", "path": "/" } ]

实际上,为了更高的成功率,我建议你把复制到的整个Cookie字符串,通过工具(如浏览器扩展“EditThisCookie”)导出为JSON格式,或者手动构造一个包含多个关键字段的数组。一个更完整的示例可能包含_UMUID_EDGE_S等字段。你可以把多个Cookie对象都放在这个JSON数组里。

实操心得:Cookie失效是最常见的问题。如果遇到“Unauthorized”或“Challenge”错误,首先检查Cookie是否有效。一个快速验证的方法是,在浏览器无痕模式下重新登录并获取新的Cookie。另外,Cookie有生命周期,可能几天后就会过期,需要定期更新。对于自动化项目,考虑实现一个Cookie池和自动更新机制是必要的。

3.3 编写第一个对话脚本

环境准备好了,Cookie也有了,我们来写一个最简单的交互脚本。创建一个chat.py文件。

#!/usr/bin/env python3 import asyncio import json from re_edge_gpt import Chatbot from re_edge_gpt import ConversationStyle async def main(): # 1. 从文件加载Cookie cookies = None try: with open('./cookies.json', 'r', encoding='utf-8') as f: cookies = json.load(f) except FileNotFoundError: print("未找到cookies.json文件,请先配置Cookie。") return # 2. 初始化Chatbot,指定对话风格为“平衡” bot = await Chatbot.create(cookies=cookies, conversation_style=ConversationStyle.balanced) try: # 3. 发起提问 prompt = "用简单的语言解释一下量子计算的基本原理。" print(f"我: {prompt}") # 4. 获取流式回复 answer = [] async for final, response in bot.ask_stream(prompt=prompt): if not final: # response是一个字典,文本内容通常在'messages'键下的第一个元素的'text'字段 # 这里是一个简化的解析,实际处理可能需要根据响应结构调整 if response.get('type') == 1: for msg in response.get('item', {}).get('messages', []): if 'text' in msg: print(msg['text'], end='', flush=True) answer.append(msg['text']) else: # 最终响应,可能包含建议的提问等 print("\n--- 回复结束 ---") # 将回答拼接起来 full_answer = ''.join(answer) print(f"\n完整回答: {full_answer[:200]}...") # 打印前200字符 except Exception as e: print(f"对话过程中出现错误: {e}") finally: # 5. 非常重要!关闭会话,释放资源 await bot.close() if __name__ == "__main__": asyncio.run(main())

运行这个脚本:python chat.py。如果一切顺利,你应该能看到Copilot开始流式地打印出关于量子计算的解释。

这个简单的脚本揭示了几个关键点:

  1. 异步编程:ReEdgeGPT完全基于asyncio,所以你的主程序也必须是异步的。
  2. 流式响应ask_stream方法是一个异步生成器,它会不断产出响应片段,直到最终完成。这允许我们实现打字机效果或实时处理。
  3. 资源清理:使用完Chatbot对象后,务必调用await bot.close()来关闭内部的WebSocket连接和HTTP会话,否则可能导致资源泄露或程序无法正常退出。

4. 高级功能与配置详解

基础对话跑通后,我们可以深入探索ReEdgeGPT提供的更多能力,让它更好地服务于我们的具体场景。

4.1 对话风格与参数调优

初始化Chatbot时,conversation_style参数至关重要,它直接决定了AI回复的“性格”。

  • ConversationStyle.creative:创意模式。回复会更具想象力、更详尽,也更可能生成诗歌、故事或代码。但相应地,它也可能更容易产生“幻觉”(即编造不准确的信息)。适合用于头脑风暴、创意写作。
  • ConversationStyle.balanced:平衡模式。在信息准确性和创造性之间取得平衡。这是默认模式,也是大多数通用场景下的推荐选择。
  • ConversationStyle.precise:精确模式。回复会更简洁、更注重事实准确性,创造性会受到抑制。适合需要获取明确、可靠信息的场景,比如查询事实、总结文档。

除了风格,在ask_stream方法中,还可以通过options参数传递更多精细控制:

async for final, response in bot.ask_stream( prompt="写一首关于春天的五言绝句。", conversation_style=ConversationStyle.creative, # 这里可以覆盖初始化的风格 options={ "locale": "zh-CN", # 区域设置,影响回复语言偏好 # "sliceIds": ["..."] # 可选的切片ID,高级功能,通常不需要设置 } ): # ... 处理响应

4.2 上下文管理与多轮对话

ReEdgeGPT的Chatbot对象在内部维护了对话上下文。你连续调用ask_stream,AI会记住之前的对话历史。这对于实现多轮对话至关重要。

async def multi_turn_chat(): cookies = load_cookies() bot = await Chatbot.create(cookies=cookies) try: # 第一轮 question1 = "Python中列表和元组的主要区别是什么?" print(f"Q1: {question1}") async for final, resp in bot.ask_stream(question1): if not final: # 简化处理,只打印流式文本 print(resp.get('item', {}).get('messages', [{}])[0].get('text', ''), end='') print("\n") # 第二轮:基于上一轮的上下文提问 question2 = "那在什么情况下应该用元组而不是列表呢?" print(f"Q2: {question2}") async for final, resp in bot.ask_stream(question2): if not final: print(resp.get('item', {}).get('messages', [{}])[0].get('text', ''), end='') print("\n") finally: await bot.close()

在这个例子中,AI在回答第二个问题时,会知道我们之前讨论的是Python中列表和元组的区别,从而给出更具上下文关联性的建议。

4.3 处理复杂响应与结构化数据

Bing Chat的回复不仅仅是纯文本。它可能包含:

  • 内部引用:以[^1^]形式标注,指向其生成答案时参考的网络来源。
  • 建议的后续问题:在回复结束后提供。
  • 限制信息:如“我已达到本次对话的轮数限制”。
  • 图片生成提示:当请求生成图片时,会返回图片的URL。

ReEdgeGPT的响应对象结构比较复杂,我们需要根据type字段来解析。一个更健壮的响应处理函数可能长这样:

async def ask_and_parse(bot, prompt): """提问并解析响应""" full_text = "" suggested_questions = [] citations = [] async for final, response in bot.ask_stream(prompt): if final: # 最终消息,可能包含元数据 final_item = response.get('item', {}) if final_item: # 提取建议的问题 suggested_questions = final_item.get('suggestedResponses', []) # 提取引用 messages = final_item.get('messages', []) if messages: last_msg = messages[-1] if 'sourceAttributions' in last_msg: citations = last_msg['sourceAttributions'] else: # 流式文本消息 if response.get('type') == 1: messages = response.get('item', {}).get('messages', []) for msg in messages: if 'text' in msg: text_segment = msg['text'] print(text_segment, end='', flush=True) full_text += text_segment elif response.get('type') == 6: # 类型6可能是错误或限制信息 print(f"\n[系统信息] {response}") print("\n" + "="*50) if citations: print("\n📚 本次回答参考了以下来源:") for cite in citations: print(f" - {cite.get('providerDisplayName')}: {cite.get('seeMoreUrl')}") if suggested_questions: print("\n💡 建议的后续问题:") for q in suggested_questions: print(f" - {q.get('text')}") return full_text

4.4 代理与网络配置

如果你的运行环境需要通过代理访问外部网络,可以在创建Chatbot时配置。ReEdgeGPT底层使用aiohttp,因此支持标准的HTTP/HTTPS代理格式。

import os # 方法一:通过环境变量(对底层库生效) os.environ['HTTP_PROXY'] = 'http://your-proxy:port' os.environ['HTTPS_PROXY'] = 'http://your-proxy:port' # 方法二:在创建Chatbot时传入(更推荐,作用域清晰) proxy = "http://user:pass@your-proxy:port" # 如果需要认证 bot = await Chatbot.create( cookies=cookies, proxy=proxy )

注意事项:代理设置需要稳定可靠。不稳定的代理会导致WebSocket连接频繁中断,表现为对话突然停止、长时间无响应或直接抛出连接错误。在服务器部署时,确保代理网络通畅是保证服务可用的前提。

5. 实战:构建一个简单的命令行聊天客户端

理解了核心API后,我们可以构建一个更实用的工具:一个支持多轮对话、历史记录和简单标记的命令行客户端。

# cli_chat.py import asyncio import json import os import readline # 用于支持命令行历史记录(Unix-like系统) from re_edge_gpt import Chatbot, ConversationStyle HISTORY_FILE = "chat_history.json" def load_history(): """加载聊天历史""" if os.path.exists(HISTORY_FILE): with open(HISTORY_FILE, 'r', encoding='utf-8') as f: return json.load(f) return [] def save_history(history): """保存聊天历史""" with open(HISTORY_FILE, 'w', encoding='utf-8') as f: json.dump(history, f, ensure_ascii=False, indent=2) async def chat_session(bot, conversation_style): """交互式聊天会话""" history = load_history() print("\n=== ReEdgeGPT 命令行聊天客户端 ===") print("输入 '/style creative|balanced|precise' 切换风格") print("输入 '/history' 查看本次会话历史") print("输入 '/exit' 或 '/quit' 退出") print("="*40) session_history = [] # 本次会话历史 while True: try: user_input = input("\nYou> ").strip() if not user_input: continue # 处理命令 if user_input.startswith('/'): cmd = user_input[1:].split() if cmd[0] == 'exit' or cmd[0] == 'quit': print("再见!") break elif cmd[0] == 'style' and len(cmd) > 1: style_map = { 'creative': ConversationStyle.creative, 'balanced': ConversationStyle.balanced, 'precise': ConversationStyle.precise } if cmd[1] in style_map: conversation_style = style_map[cmd[1]] print(f"已切换至 {cmd[1]} 模式。") else: print("未知风格,请使用 creative, balanced 或 precise。") continue elif cmd[0] == 'history': print("\n--- 本次会话历史 ---") for i, entry in enumerate(session_history, 1): print(f"{i}. You: {entry['question'][:50]}...") print(f" AI: {entry['answer'][:70]}...") continue else: print(f"未知命令: {user_input}") continue # 正常提问 print(f"\nAI ({conversation_style.name})> ", end='', flush=True) answer_parts = [] try: async for final, response in bot.ask_stream( prompt=user_input, conversation_style=conversation_style ): if not final and response.get('type') == 1: messages = response.get('item', {}).get('messages', []) for msg in messages: if 'text' in msg: text = msg['text'] print(text, end='', flush=True) answer_parts.append(text) except Exception as e: print(f"\n[请求出错] {e}") answer_parts = [f"[Error: {e}]"] full_answer = ''.join(answer_parts) print() # 换行 # 记录历史 session_history.append({ "question": user_input, "answer": full_answer, "style": conversation_style.name }) history.append({ "question": user_input, "answer": full_answer[:200], # 只保存一部分到长期历史 "timestamp": asyncio.get_event_loop().time() }) # 每5轮保存一次历史,避免频繁IO if len(session_history) % 5 == 0: save_history(history) except KeyboardInterrupt: print("\n\n中断接收,可以输入新问题。按 Ctrl+D 或输入 /exit 退出。") except EOFError: print("\n退出。") break # 退出前保存历史 save_history(history) return session_history async def main(): cookies = load_cookies() # 假设有一个load_cookies函数 if not cookies: print("无法加载Cookie。") return bot = await Chatbot.create(cookies=cookies) try: await chat_session(bot, ConversationStyle.balanced) finally: await bot.close() if __name__ == "__main__": asyncio.run(main())

这个客户端实现了基本的交互循环、风格切换和会话历史记录。你可以在此基础上扩展更多功能,比如将历史记录导入Markdown、支持图片链接预览、或者添加一个简单的REST API接口。

6. 常见问题、错误排查与优化策略

在实际使用ReEdgeGPT的过程中,你几乎一定会遇到各种问题。下面我整理了一份常见错误清单和排查思路,这些都是我踩过坑后总结的经验。

6.1 认证与Cookie相关错误

错误现象可能原因解决方案
401 Unauthorized或直接返回登录页面HTMLCookie无效、过期或格式错误。1.重新获取Cookie:在浏览器无痕模式下重新登录bing.com/chat,复制全新的Cookie。2.检查JSON格式:确保cookies.json是有效的JSON数组,每个对象包含name,value,domain,path。3.包含关键字段:确保Cookie中包含_U这个核心字段。
收到包含challenge的响应触发了Bing的风控机制,IP或行为被怀疑。1.更换IP或使用代理。2.降低请求频率,模拟真人操作间隔。3.检查User-Agent:确保库模拟的UA是常见的浏览器版本。4.暂时停止,稍后再试
403 Forbidden权限不足,可能是Cookie对应的账户没有访问Bing Chat的权限(例如某些区域账户)。确认你的微软账户在对应区域可以正常使用网页版Copilot。

6.2 网络与连接错误

错误现象可能原因解决方案
TimeoutErrorasyncio.TimeoutError网络连接超时,或Bing服务器响应慢。1. 增加超时设置(在创建Chatbot时传递timeout参数)。2. 检查代理稳定性。3. 可能是服务器临时问题,重试。
WebSocket connection closedWebSocket连接意外断开。这是此类逆向项目最常见的问题。原因很多:网络波动、服务器主动断开、长时间无活动、达到对话轮数限制。处理策略:在代码中捕获相关异常,并实现自动重连机制。当连接断开时,尝试创建一个新的Chatbot实例(需要新的会话)。
SSL相关错误Python环境或curl_cffi的SSL证书问题。1. 更新Python和pip。2. 重装curl_cffi:pip install --force-reinstall curl-cffi。3. 如果在内网或特殊环境,可能需要指定自定义CA证书包。

6.3 逻辑与运行时错误

错误现象可能原因解决方案
KeyErrorIndexError在解析响应时Bing的响应格式发生了微小变化,而ReEdgeGPT库的解析逻辑未及时更新。1. 首先更新ReEdgeGPT到最新版本:pip install --upgrade git+https://github.com/Integration-Automation/ReEdgeGPT.git。2. 查看GitHub仓库的Issues,看是否有类似问题。3. 临时修改本地代码,根据实际的响应结构调整解析逻辑。
回复突然截断或不完整可能达到了单次回复的长度限制,或网络流中断。1. 检查final标志,确保收到了完整的回复。2. 对于长文生成,可以尝试将任务分解为多个连续的提问。
程序无法退出或卡住未正确关闭Chatbot,导致事件循环中仍有任务在运行。务必try...finally块或使用异步上下文管理器确保await bot.close()被调用。

6.4 性能与稳定性优化策略

  1. 连接池与会话复用:对于需要频繁对话的场景,不要为每次提问都创建新的Chatbot。一个Chatbot实例代表一个持续的会话,可以处理多轮对话。在长时间运行的服务中,维护一个健康的Chatbot实例池。
  2. 优雅的重试机制:实现一个带退避策略的重试装饰器,针对网络错误、连接断开等进行自动重试。例如,第一次重试等待2秒,第二次等待5秒,第三次等待10秒。
  3. 请求频率限制:严格遵守人类用户的交互频率。不要以机器人的速度疯狂发送请求,这极易导致Cookie被封或IP被限制。在请求之间添加随机延迟(例如1-3秒)。
  4. 监控与告警:记录日志,监控成功率、响应时间、错误类型。当错误率突然升高或连续出现认证错误时,应触发告警,提示可能需要更换Cookie或检查网络。
  5. 备用方案:由于逆向接口的不稳定性,对于生产环境,ReEdgeGPT不应作为唯一的AI对话来源。最好能有备用方案,如其他开源模型API或降级处理逻辑。

7. 项目总结与扩展思考

经过上面几个部分的拆解,你应该对ReEdgeGPT从原理到实践有了比较全面的认识。它本质上是一个精巧的“桥梁”项目,在官方API和完全自研之间提供了一个有趣的折中选择。它的最大优势在于零成本(仅需一个微软账户)和功能完整(继承了Copilot的全部对话能力、三种风格和联网搜索)。

但是,它的缺点也同样明显:极度脆弱。微软前端的任何一次更新都可能让当前的逆向协议失效,导致项目短期内不可用。因此,它更适合用于个人学习、研究、原型验证或对稳定性要求不高的自动化脚本。如果用于商业产品或关键业务,你需要有强大的监控和快速响应能力,或者准备好随时切换到备用方案。

从技术学习角度看,研究ReEdgeGPT的代码是一次非常好的学习机会。你可以学到:

  • 如何通过浏览器开发者工具分析复杂的现代Web应用网络交互。
  • 如何处理WebSocket、长连接、流式数据。
  • 如何管理会话状态、Cookie和动态令牌。
  • 如何设计一个健壮的、面向可能变化的第三方服务的客户端库。

如果你想基于此做更多扩展,可以考虑以下几个方向:

  • 开发图形界面:使用PyQt、Tkinter或Web框架(如Gradio、Streamlit)包装这个库,做一个本地的Copilot客户端。
  • 集成到现有系统:将其作为一个插件集成到你的笔记软件(如Obsidian)、代码编辑器(通过LSP)或机器人框架(如NoneBot、Hubot)中。
  • 实现函数调用:通过精心设计的Prompt,让Copilot的回复结构化,进而模拟出类似OpenAI的Function Calling能力,用于控制外部工具。
  • 研究提示工程:由于你可以完全控制发送的Prompt,可以深入研究如何设计系统提示、上下文组织来获得更精准、更符合需求的回答。

最后,使用此类工具务必遵守微软的服务条款,尊重知识产权,不要用于任何滥用或违规的目的。技术的乐趣在于创造和探索,希望ReEdgeGPT这个项目能成为你探索AI世界的一块有用的跳板。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 11:59:30

D3keyHelper终极指南:如何用智能宏系统解放你的暗黑3双手

D3keyHelper终极指南:如何用智能宏系统解放你的暗黑3双手 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破坏神3中反复点击技…

作者头像 李华
网站建设 2026/5/2 11:58:56

在多模型间切换时体验 Taotoken 的路由与选型便利性

在多模型间切换时体验 Taotoken 的路由与选型便利性 1. 多模型选型的实际需求 在实际开发中,我们常常需要根据不同的场景选择合适的模型。例如,某些任务可能需要更长的上下文窗口,而另一些任务则对响应速度有更高要求。传统方式下&#xff…

作者头像 李华
网站建设 2026/5/2 11:57:48

多模态大模型在红外图像分析中的应用与优化

1. 项目背景与核心价值 红外图像分析一直是计算机视觉领域的特殊分支,相比可见光图像,红外成像具有穿透烟雾、夜间工作、温度感知等独特优势,在安防监控、工业检测、医疗诊断、自动驾驶等领域具有不可替代性。但传统红外图像处理方法面临三大…

作者头像 李华
网站建设 2026/5/2 11:57:17

对比直连与聚合接入在延迟体感与稳定性上的实际差异

对比直连与聚合接入在延迟体感与稳定性上的实际差异 1. 网络连接稳定性的实际体验 在实际使用中,通过 Taotoken 聚合端点调用模型时,网络连接的稳定性表现较为可靠。由于聚合平台内置了多服务商路由机制,当某个服务商出现临时性网络波动时&…

作者头像 李华
网站建设 2026/5/2 11:55:57

使用taotoken cli在ubuntu上一键配置开发环境与密钥

使用 Taotoken CLI 在 Ubuntu 上一键配置开发环境与密钥 1. 安装 Taotoken CLI 在 Ubuntu 终端中执行以下命令安装 Taotoken CLI 工具。推荐使用 npx 直接运行以避免全局安装依赖: npx taotoken/taotoken如需频繁使用 CLI,可通过 npm 全局安装&#x…

作者头像 李华