example.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. """
  2. 调用火山引擎ARK API的示例
  3. """
  4. from api_modules.ark_client import ArkClient, ArkMessage, APIError
  5. from taskflow.logger import get_logger
  6. logger = get_logger("api_modules.example")
  7. def example_basic_chat():
  8. """示例1:基本文本对话"""
  9. logger.info("=" * 50)
  10. logger.info("示例1:基本文本对话")
  11. logger.info("=" * 50)
  12. # 初始化客户端(API密钥可以从环境变量或配置文件获取)
  13. client = ArkClient()
  14. # 创建用户消息
  15. message = ArkMessage(role="user")
  16. message.add_text("你好,请介绍一下你自己")
  17. try:
  18. # 发送聊天请求
  19. response = client.chat(
  20. messages=[message]
  21. )
  22. logger.info("响应:", response)
  23. # 提取文本响应
  24. text = client.get_response_text(response)
  25. if text:
  26. logger.info(f"AI回复: {text}")
  27. except APIError as e:
  28. logger.error(f"API错误: {e}")
  29. except Exception as e:
  30. logger.error(f"其他错误: {e}")
  31. def example_chat_with_system_prompt():
  32. """示例2:使用系统提示词"""
  33. logger.info("\n" + "=" * 50)
  34. logger.info("示例2:使用系统提示词")
  35. logger.info("=" * 50)
  36. client = ArkClient()
  37. # 创建用户消息
  38. user_message = ArkMessage(role="user")
  39. user_message.add_text("请帮我写一首关于春天的诗")
  40. try:
  41. # 使用字符串形式的系统提示词
  42. response = client.chat(
  43. model="doubao-seed-1-6-251015",
  44. messages=[user_message],
  45. system_prompt="你是一位专业的诗人,擅长写优美的诗歌"
  46. )
  47. logger.info("响应:", response)
  48. text = client.get_response_text(response)
  49. if text:
  50. logger.info(f"AI回复: {text}")
  51. except APIError as e:
  52. logger.error(f"API错误: {e}")
  53. def example_multimodal_chat():
  54. """示例3:多模态对话(文本+图片)"""
  55. logger.info("\n" + "=" * 50)
  56. logger.info("示例3:多模态对话(文本+图片)")
  57. logger.info("=" * 50)
  58. client = ArkClient()
  59. # 创建包含图片和文本的用户消息
  60. user_message = ArkMessage(role="user")
  61. user_message.add_text("图片1中是否含有目标人物")
  62. user_message.add_image("https://ark-project.tos-cn-beijing.volces.com/doc_image/scene_01.png")
  63. user_message.add_text("图片2中是否含有目标人物")
  64. user_message.add_image("https://ark-project.tos-cn-beijing.volces.com/doc_image/scene_02.png")
  65. # 创建系统提示词(也支持多模态)
  66. system_message = ArkMessage(role="system")
  67. system_message.add_text("下面人物是目标人物")
  68. system_message.add_image("https://ark-project.tos-cn-beijing.volces.com/doc_image/target.png")
  69. system_message.add_text("请确认下面图片中是否含有目标人物")
  70. try:
  71. response = client.chat(
  72. model="doubao-seed-1-6-251015",
  73. messages=[user_message],
  74. system_prompt=system_message
  75. )
  76. logger.info("响应:", response)
  77. text = client.get_response_text(response)
  78. if text:
  79. logger.info(f"AI回复: {text}")
  80. except APIError as e:
  81. logger.error(f"API错误: {e}")
  82. def example_chat_simple():
  83. """示例4:使用简化的chat_simple接口"""
  84. logger.info("\n" + "=" * 50)
  85. logger.info("示例4:使用简化的chat_simple接口")
  86. logger.info("=" * 50)
  87. client = ArkClient()
  88. try:
  89. # 仅文本
  90. response = client.chat_simple(
  91. model="doubao-seed-1-6-251015",
  92. text="今天天气怎么样?"
  93. )
  94. logger.info("仅文本响应:", response)
  95. # 文本+图片
  96. response = client.chat_simple(
  97. model="doubao-seed-1-6-251015",
  98. text="你看见了什么?",
  99. image_url="https://ark-project.tos-cn-beijing.volces.com/doc_image/scene_01.png"
  100. )
  101. logger.info("文本+图片响应:", response)
  102. # 带系统提示词
  103. response = client.chat_simple(
  104. model="doubao-seed-1-6-251015",
  105. text="分析这张图片",
  106. image_url="https://example.com/image.png",
  107. system_prompt="你是一个专业的图像分析助手"
  108. )
  109. logger.info("带系统提示词响应:", response)
  110. except APIError as e:
  111. logger.error(f"API错误: {e}")
  112. def example_multiple_messages():
  113. """示例5:多轮对话"""
  114. logger.info("\n" + "=" * 50)
  115. logger.info("示例5:多轮对话")
  116. logger.info("=" * 50)
  117. client = ArkClient()
  118. # 创建多轮对话消息
  119. messages = [
  120. ArkMessage(role="user"),
  121. ArkMessage(role="user"),
  122. ArkMessage(role="user")
  123. ]
  124. messages[0].add_text("我的名字是张三")
  125. messages[1].add_text("我今年25岁")
  126. messages[2].add_text("请记住我的信息")
  127. try:
  128. response = client.chat(
  129. model="doubao-seed-1-6-251015",
  130. messages=messages,
  131. system_prompt="你是一个友好的助手,会记住用户提供的信息"
  132. )
  133. print('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
  134. print(response)
  135. text = client.get_response_text(response)
  136. if text:
  137. logger.info(f"AI回复: {text}")
  138. except APIError as e:
  139. logger.error(f"API错误: {e}")
  140. def example_dict_format():
  141. """示例6:使用字典格式的消息"""
  142. logger.info("\n" + "=" * 50)
  143. logger.info("示例6:使用字典格式的消息")
  144. logger.info("=" * 50)
  145. client = ArkClient()
  146. # 使用字典格式的消息(直接对应API格式)
  147. messages = [
  148. {
  149. "role": "system",
  150. "content": [
  151. {"type": "input_text", "text": "你是一个专业的助手"}
  152. ]
  153. },
  154. {
  155. "role": "user",
  156. "content": [
  157. {"type": "input_text", "text": "你好"},
  158. {
  159. "type": "input_image",
  160. "image_url": "https://example.com/image.png"
  161. }
  162. ]
  163. }
  164. ]
  165. try:
  166. response = client.chat(
  167. model="doubao-seed-1-6-251015",
  168. messages=messages
  169. )
  170. logger.info("响应:", response)
  171. except APIError as e:
  172. logger.error(f"API错误: {e}")
  173. def example_error_handling():
  174. """示例7:错误处理"""
  175. logger.info("\n" + "=" * 50)
  176. logger.info("示例7:错误处理")
  177. logger.info("=" * 50)
  178. try:
  179. # 使用无效的API密钥
  180. client = ArkClient()
  181. message = ArkMessage(role="user")
  182. message.add_text("测试")
  183. response = client.chat(
  184. model="doubao-seed-1-6-251015",
  185. messages=[message]
  186. )
  187. except APIError as e:
  188. logger.error(f"捕获到API错误:")
  189. logger.error(f" 消息: {e.message}")
  190. logger.error(f" 状态码: {e.status_code}")
  191. logger.error(f" 响应: {e.response}")
  192. except ValueError as e:
  193. logger.error(f"参数错误: {e}")
  194. except Exception as e:
  195. logger.error(f"其他错误: {e}")
  196. def example_context_manager():
  197. """示例8:使用上下文管理器"""
  198. logger.info("\n" + "=" * 50)
  199. logger.info("示例8:使用上下文管理器")
  200. logger.info("=" * 50)
  201. # 使用with语句自动管理资源
  202. with ArkClient() as client:
  203. message = ArkMessage(role="user")
  204. message.add_text("你好")
  205. try:
  206. response = client.chat(
  207. model="doubao-seed-1-6-251015",
  208. messages=[message]
  209. )
  210. logger.info("响应:", response)
  211. except APIError as e:
  212. logger.error(f"API错误: {e}")
  213. # 客户端会自动关闭
  214. if __name__ == "__main__":
  215. # 注意:运行前请设置正确的API密钥
  216. # 方式1:通过环境变量设置
  217. # import os
  218. # os.environ["ARK_API_KEY"] = "your_api_key_here"
  219. # 方式2:直接在代码中传入(不推荐用于生产环境)
  220. # client = ArkClient(api_key="your_api_key_here")
  221. logger.info("火山引擎ARK API使用示例")
  222. logger.info("注意:请先设置正确的API密钥才能运行这些示例\n")
  223. # 取消注释以运行相应的示例
  224. # example_basic_chat()
  225. # example_chat_with_system_prompt()
  226. # example_multimodal_chat()
  227. # example_chat_simple()
  228. example_multiple_messages()
  229. # example_dict_format()
  230. # example_error_handling()
  231. # example_context_manager()
  232. logger.info("\n提示:取消注释上面的示例函数调用来运行示例")