1.首先我们需要登录Microsoft Azure,然后点击App registration,注册一个应用。
创建应用,然后选择需要的account type,和name。点击Register,就会成功创建一个应用。
进入应用后,会看到这些application信息,其中Application ID 和 Tenant ID 未来是会用到的。
下一步创建密钥,创建成功后,记得保存value。 未来也会用到
2. 创建Azure bot (因为需要使用SSO)
我们在市场里面找到 Azure bot,然后点击Create创建。
创建时,此处需要注意填写刚才创建 Application 的 id
打开刚才创建的机器人,去配置oauth,点开过后右侧底部会看到Add OAuth Connection Settings
然后这里按需要填写。 下面的id和 secret分别对应创建application的id和 密钥的密码
配置endpoint,也就是当机器人接受一条消息,去调用了哪个接口
3. 至此,微软这边配置是都完成了。
4. vscode 或者 cursor 在插件市场安装teams toolkit插件。点击创建新应用。按照自己需求创建,会生成模板代码
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")