Skip to main content

使用函数调用在AutoGen中与OpenAI助手聊天:高级GitHub数据分析的OSS洞察

在Colab中打开 在GitHub上打开

这个Jupyter Notebook演示了如何通过在AutoGen中定义函数调用来利用OSS Insight(开源软件洞察)进行高级GitHub数据分析。

该笔记本分为四个主要部分:

  1. 函数模式和实现
  2. 在AutoGen中定义OpenAI助手代理
  3. 使用函数调用获取GitHub洞察数据

要求

AutoGen需要Python>=3.8。要运行此笔记本示例,请安装以下内容:

要求

安装pyautogen

pip install pyautogen

有关更多信息,请参阅安装指南

%%capture --no-stderr
# %pip install "pyautogen>=0.2.3"

函数模式和实现

本节提供了函数模式定义和它们的实现细节。这些函数旨在从GitHub获取和处理数据,利用OSS Insight的功能。

import logging
import os

from autogen import UserProxyAgent, config_list_from_json
from autogen.agentchat.contrib.gpt_assistant_agent import GPTAssistantAgent

logger = logging.getLogger(__name__)
logger.setLevel(logging.WARNING)

ossinsight_api_schema = {
"name": "ossinsight_data_api",
"parameters": {
"type": "object",
"properties": {
"question": {
"type": "string",
"description": (
"以清晰明确的问题形式输入您的 GitHub 数据问题,以确保返回的数据准确有价值。"
"为了获得最佳结果,请在请求中指定数据表的期望格式。"
),
}
},
"required": ["question"],
},
"description": "这是一个 API 端点,允许用户(分析师)以文本格式输入关于 GitHub 的问题,以检索相关的结构化数据。",
}


def get_ossinsight(question):
"""
[模拟] 检索 GitHub 上关注者最多的前 10 名开发者。
"""
report_components = [
f"问题: {question}",
"SQL: SELECT `login` AS `user_login`, `followers` AS `followers` FROM `github_users` ORDER BY `followers` DESC LIMIT 10",
"""结果:
{'followers': 166730, 'user_login': 'torvalds'}
{'followers': 86239, 'user_login': 'yyx990803'}
{'followers': 77611, 'user_login': 'gaearon'}
{'followers': 72668, 'user_login': 'ruanyf'}
{'followers': 65415, 'user_login': 'JakeWharton'}
{'followers': 60972, 'user_login': 'peng-zhihui'}
{'followers': 58172, 'user_login': 'bradtraversy'}
{'followers': 52143, 'user_login': 'gustavoguanabara'}
{'followers': 51542, 'user_login': 'sindresorhus'}
{'followers': 49621, 'user_login': 'tj'}""",
]
return "\n" + "\n\n".join(report_components) + "\n"

在 AutoGen 中定义一个 OpenAI Assistant Agent

在这里,我们将探讨如何在 AutoGen 中定义一个 OpenAI Assistant Agent。这包括设置代理以利用之前定义的用于数据检索和分析的函数调用。

assistant_id = os.environ.get("ASSISTANT_ID", None)
config_list = config_list_from_json("OAI_CONFIG_LIST")
llm_config = {
"config_list": config_list,
}
assistant_config = {
"assistant_id": assistant_id,
"tools": [
{
"type": "function",
"function": ossinsight_api_schema,
}
],
}

oss_analyst = GPTAssistantAgent(
name="OSS Analyst",
instructions=(
"Hello, Open Source Project Analyst. You'll conduct comprehensive evaluations of open source projects or organizations on the GitHub platform, "
"analyzing project trajectories, contributor engagements, open source trends, and other vital parameters. "
"Please carefully read the context of the conversation to identify the current analysis question or problem that needs addressing."
),
llm_config=llm_config,
assistant_config=assistant_config,
verbose=True,
)
oss_analyst.register_function(
function_map={
"ossinsight_data_api": get_ossinsight,
}
)
GPTAssistantAgent(OSS Analyst) 的 OpenAI 客户端配置 - 模型: gpt-4-turbo-preview
GPT Assistant 只支持一个 OpenAI 客户端。正在使用列表中的第一个客户端。
未找到匹配的助手,正在创建一个新的助手
tip

了解有关为代理配置 LLM 的更多信息,请点击这里

使用函数调用获取 GitHub Insight 数据

本笔记本的这部分演示了定义的函数和 OpenAI Assistant Agent 在获取和解释 GitHub Insight 数据时的实际应用。

user_proxy = UserProxyAgent(
name="user_proxy",
code_execution_config={
"work_dir": "coding",
"use_docker": False,
}, # 如果 docker 可用以运行生成的代码,请将 use_docker 设置为 True。使用 docker 比直接运行生成的代码更安全。
is_termination_msg=lambda msg: "TERMINATE" in msg["content"],
human_input_mode="NEVER",
max_consecutive_auto_reply=1,
)

user_proxy.initiate_chat(oss_analyst, message="Top 10 developers with the most followers")
oss_analyst.delete_assistant()
user_proxy (给 OSS 分析师):

拥有最多关注者的前 10 名开发者

--------------------------------------------------------------------------------

>>>>>>>> 执行函数 ossinsight_data_api...

输入参数: {'question': '拥有最多关注者的前 10 名开发者'}
输出:

问题: 拥有最多关注者的前 10 名开发者

SQL: SELECT `login` AS `user_login`, `followers` AS `followers` FROM `github_users` ORDER BY `followers` DESC LIMIT 10

结果:
{'followers': 166730, 'user_login': 'torvalds'}
{'followers': 86239, 'user_login': 'yyx990803'}
{'followers': 77611, 'user_login': 'gaearon'}
{'followers': 72668, 'user_login': 'ruanyf'}
{'followers': 65415, 'user_login': 'JakeWharton'}
{'followers': 60972, 'user_login': 'peng-zhihui'}
{'followers': 58172, 'user_login': 'bradtraversy'}
{'followers': 52143, 'user_login': 'gustavoguanabara'}
{'followers': 51542, 'user_login': 'sindresorhus'}
{'followers': 49621, 'user_login': 'tj'}

OSS 分析师 (给 user_proxy):

GitHub 上拥有最多关注者的前 10 名开发者是:

1. **Linus Torvalds** (`torvalds`),拥有 166,730 位关注者
2. **Evan You** (`yyx990803`),拥有 86,239 位关注者
3. **Dan Abramov** (`gaearon`),拥有 77,611 位关注者
4. **Ruan YiFeng** (`ruanyf`),拥有 72,668 位关注者
5. **Jake Wharton** (`JakeWharton`),拥有 65,415 位关注者
6. **Peng Zhihui** (`peng-zhihui`),拥有 60,972 位关注者
7. **Brad Traversy** (`bradtraversy`),拥有 58,172 位关注者
8. **Gustavo Guanabara** (`gustavoguanabara`),拥有 52,143 位关注者
9. **Sindre Sorhus** (`sindresorhus`),拥有 51,542 位关注者
10. **TJ Holowaychuk** (`tj`),拥有 49,621 位关注者


--------------------------------------------------------------------------------
user_proxy (给 OSS 分析师):



--------------------------------------------------------------------------------
OSS 分析师 (给 user_proxy):

看起来我没有问题或提示需要回答。请提供更多细节或提出您需要帮助的问题。


--------------------------------------------------------------------------------
永久删除助手...