开发Azure AI Bot 和 实现 SSO 登录获取Access Token

166 阅读2分钟

1.首先我们需要登录Microsoft Azure,然后点击App registration,注册一个应用。

创建应用,然后选择需要的account type,和name。点击Register,就会成功创建一个应用。

image.png

image.png

进入应用后,会看到这些application信息,其中Application ID 和 Tenant ID 未来是会用到的。

image.png

下一步创建密钥,创建成功后,记得保存value。 未来也会用到

image.png

2. 创建Azure bot (因为需要使用SSO)

我们在市场里面找到 Azure bot,然后点击Create创建。 image.png

创建时,此处需要注意填写刚才创建 Application 的 id image.png

打开刚才创建的机器人,去配置oauth,点开过后右侧底部会看到Add OAuth Connection Settings

image.png

然后这里按需要填写。 下面的id和 secret分别对应创建application的id和 密钥的密码

image.png

配置endpoint,也就是当机器人接受一条消息,去调用了哪个接口

image.png

3. 至此,微软这边配置是都完成了。

4. vscode 或者 cursor 在插件市场安装teams toolkit插件。点击创建新应用。按照自己需求创建,会生成模板代码

image.png

5. 需要在/env文件夹下面配置 Local 和 dev 的环境变量

其中BOT_ID就是application id,TEAMS_APP_ID是自己随机生成的UUID,BOT_DOMAIN是自己的服务端的地址,需要把你src的服务端代码部署到远端,例baidu.com,BOT_ENDPOINT是完整的服务端路径,例如baidu.com ,BOT_TYPE则是创建的时候选择的 MultiTenant。

需要在manifest.json中配置 validDomains

  "validDomains": ["your domain", "token.botframework.com"],

6.这里开始基本配置就已经配置好,然后就可以开始进行开发,需要在teams toolkit工具打个zip包,然后上传到teams里面自定义应用。然后就可以进行调试开发了。

7. 添加SSO登录,以及打印AI日志,因为我们创建的时候是创建了AI机器人,所以使用了teams-ai这个库。


logger = logging.getLogger(__name__)

ai_logger = logging.getLogger("ai_requests")
ai_logger.setLevel(logging.DEBUG)

# 添加控制台处理器
console_handler = logging.StreamHandler()
console_handler.setFormatter(
    logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
)
ai_logger.addHandler(console_handler)


config = Config()
model: OpenAIModel

model = OpenAIModel(
    AzureOpenAIModelOptions(
        api_key=config.AZURE_OPENAI_API_KEY,
        default_model=config.AZURE_OPENAI_MODEL_DEPLOYMENT_NAME,
        endpoint=config.AZURE_OPENAI_ENDPOINT,
        logger=ai_logger,
    )
)

prompts = PromptManager(
    PromptManagerOptions(prompts_folder=f"{os.getcwd()}/src/prompts")
)

planner = ActionPlanner(
    ActionPlannerOptions(
        model=model,
        prompts=prompts,
        default_prompt="planner",
    )
)

# Define storage and application
storage = MemoryStorage()

# Create adapter instance
adapter = TeamsAdapter(config)

app = Application[TurnState[ConversationState, UserState, TempState]](
    ApplicationOptions(
        bot_app_id=config.APP_ID,
        storage=storage,
        adapter=adapter,  # Use the adapter instance
        auth=AuthOptions(
            default="graph",
            auto=True,
            settings={
                "graph": OAuthOptions(
                    connection_name=config.OAUTH_CONNECTION_NAME,
                    title="Sign In",
                    text="please sign in",
                    end_on_invalid_message=True,
                ),
            },
        ),
        ai=AIOptions(
            planner=planner,
            enable_feedback_loop=True,
        ),
    )
)


现在机器人就会开启sso登录,并且你可以在有state的地方,直接取出来access token 。

 access_token = state.temp.auth_tokens.get("graph")