• [问题求助] 操作暂不可用:工程正在建立索引中,请稍后再试
     我有一个工程,运行的时候都已经构建完成了,但是提示【操作暂不可用:工程正在建立索引中,请稍后再试】,页面建立索引的过程已经结束了的 
  • [案例共创] AI Agent应用开发 - 利用AI创建一个Slogan生成大师的小助手
    AI Agent应用开发AI Agent应用开发 - 利用AI创建一个Slogan生成大师的小助手案例介绍基于华为云MaaS提供的免费DeepSeek-V3-32k大模型生成一个快速生成吸引人注意事项力的宣传口号,拥有广告营销的理论知识以及丰富的实践经验,擅长理解产品特性,定位用户群体,抓住用户的注意事项的Slogan生成工具。案例内容1 概述1.1 案例介绍Slogan生成大师是一款基于华为DeepSeek-V3-32k大模型的市场营销类AI智能体,专为企业主、营销人员及创意工作者设计,能够根据用户需求快速生成高质量、个性化、符合品牌定位的各类宣传标语与口号。该智能体具备强大的自然语言理解与生成能力,能够精准适配不同行业、场景和目标受众要求,并提供创意灵感与优化建议,有效提升品牌传播效率和营销效果。1.2 适用对象企业主营销人员创意工作者1.3 案例时间本案例总时长预计60分钟。1.4 案例流程1、进入华为开发者空间的AI Agent集成Versatile空间2、创建相关Agent3、创建示例问题4、发布智能体会要求输入APIKEY到 我的凭证-》平台API KEY 下新增加一个KEY5、进行测试用户输入:“给一个新锐奶茶品牌生成一组秋季限定宣传标语”1.5 资源总览本案例预计花费0元。资源名称规格单价(元)时长(分钟)开发者空间–云主机4vCPUs8GB armUbuntu 22.04 Server定制版2 环境配置2.1 开发者空间配置面向广大开发者群体,华为开发者空间提供一个随时访问的“开发桌面云主机”、丰富的“预配置工具集合”和灵活使用的“场景化资源池”,开发者开箱即用,快速体验华为根技术和资源。如果还没有领取开发者空间云主机,可以参考免费领取云主机文档领取。领取云主机后可以直接进入华为开发者空间工作台界面,点击进入桌面连接云主机。2.2 浏览器登录华为云开发者2.3 打开相关Versatile 页面3 项目构建为进入智能体界面填写名称、介绍、提示词基础信息:Slogan生成大师 / Slogan生成大师,助力品牌更精准地传递核心价值开场白:你好,我是一个专业的Slogan生成大师,不要犹豫来找我生成口号吧!问题推荐:推荐一个新消费品牌的标语/推荐一个传统企业的转型口号/给科技产品生成一组传播标语/给新锐奶茶品牌生成一组秋季限定宣传标语角色设定提示词:你是一个Slogan生成大师,能够快速生成吸引人注意的宣传口号,拥有广告营销的理论知识以及丰富的实践经验,擅长理解产品特性,定位用户群体,抓住用户的注意力,用词精练而有力。• Slogan 是一个短小精悍的宣传标语,它需要紧扣产品特性和目标用户群体,同时具有吸引力和感染力。##目标 :• 理解产品特性• 分析定位用户群体• 快速生成宣传口号限制 :• 口号必须与产品相关• 口号必须简洁明了,用词讲究,简单有力量• 不用询问用户,基于拿到的基本信息,进行思考和输出技能 :• 广告营销知识• 用户心理分析• 文字创作示例 :• 产品:一款健身应用。口号:“自律,才能自由”• 产品:一款专注于隐私保护的即时通信软件。口号:“你的私密,我们守护!”工作流程 :• 输入:用户输入产品基本信息• 思考:一步步分析理解产品特性,思考产品受众用户的特点和心理特征• 回答:根据产品特性和用户群体特征,结合自己的行业知识与经验,输出五个Slogan,供用户选择##注意事项:• 只有在用户提问的时候你才开始回答,用户不提问时,请不要回答初始语句:“我是一个Slogan生成大师,喊出让人心动的口号是我的独门绝技,请说下你想为什么产品生成Slogan!”发布程序:发布完成至此,基于华为开发者空间云主机创建Slogan生成大师智能体服务到此结束。我正在参加【案例共创】第5期 开发者空间 AI Agent 开发https://developer.huaweicloud.com/signup/0e966198e87a4210b5f88c0d759d4f3b
  • [案例共创] 【案例共创】基于仓颉编程语言+DeepSeek实现模拟课堂讨论助手
    【案例共创】基于仓颉编程语言+DeepSeek实现模拟课堂讨论助手项目概述本项目旨在通过华为开发者空间云主机,结合仓颉编程语言和DeepSeek API,开发一个简单的模拟课堂讨论助手。用户可以通过命令行输入相关知识点或问题,应用会返回该知识点的详细解释和记忆方法。这个助手可以用诙谐幽默的方式学习各种知识。适用对象喜欢用诙谐幽默的方式学习知识的爱好者。案例流程说明:① 使用CodeArts IDE for Cangjie编辑器开发仓颉程序调用;② 领取免费 DeepSeeK Tokens;③ 仓颉对接DeepSeek接口。开发步骤1. 环境准备注册并登录华为开发者空间:访问华为开发者空间官网,注册并登录账户。创建云主机实例:在华为开发者空间中创建一个新的云主机实例,选择默认的配置。使用开箱即用的云主机实例开发,点击 打开云主机 再点击打开远程桌面。图示即可看出是开箱即用的CodeArts IDE for Cangjie编辑器2. 项目初始化创建新项目:首先我们进入到开发者空间后,双击打开CodeArts IDE for Cangjie,在CodeArts IDE for Cangjie中创建一个新的项目,命名为“demo”(随便你怎么命名)。名称和位置可以自定义,产物类型选择executable。产物类型说明: executable,可执行文件;static,静态库,是一组预先编译好的目标文件的集合;dynamic,动态库,是一种在程序运行时才被加载到内存中的库文件,多个程序共享一个动态库副本,而不是像静态库那样每个程序都包含一份完整的副本。配置项目结构:设置项目的基本目录结构,包括源代码文件、配置文件等。创建项目后,打开src目录下main.cj文件,在预置代码中增加函数和函数调用代码(没有的话可以自己新建一份,代码内容下文我有附上)。然后点击右上的运行按钮运行项目,在终端中查看输出内容。如果遇到弹窗提示运行/调试配置,点击确定继续操作。修改后的main.cj文件代码:package demo func println_add(a: Int64, b:Int64): Int64 { let number: Int64 = a+b println(number) return number } main(): Int64 { println("hello world") println_add(3,4) println("hello Cangjie") return 0 } 调试项目:点击右上调试按钮,首次会提示配置调试,点击新增配置项,选择Cangjie(cjdb)Debug——launch。调试模式说明:Launch模式,启动调试器的同时加载被调程序;Attach,针对正在运行的程序,附加到已启动的程序。然后可以在main.cj代码中设置断点,再次点击调试按钮。可以在顶部看到调试按钮,在左侧看到调试过程中的变量、监视、调用堆栈、断点信息。2.1 版本管理 可选 (链接到gitcode)点完之后会要求你填入访问密钥先登录gitcode 然后点访问令牌 新建访问令牌 一直下一步即可 会得到一串令牌 然后将令牌输入即可。然后新建一个仓库 名字你自己取当前项目代码仓是空仓库你可以通过克隆仓库开始或使用以下方式为你的项目添加文件:或为你的项目添加以下文件: 添加 README.md添加 LICENSE添加 .gitignore命令行指引你还可以按照以下说明从你的电脑中上传现有文件或项目。Git 全局设置git config --global [user.name](http://user.name/) "weixin_41024010" git config --global user.email "[weixin_41024010@noreply.gitcode.com](mailto:weixin_41024010@noreply.gitcode.com)" 创建一个新仓库git clone [https://gitcode.com/weixin_41024010/test.git](https://gitcode.com/weixin_41024010/test.git) cd test echo "# test" >> [README.md](http://readme.md/) git add [README.md](http://readme.md/) git commit -m "add README" git branch -m main git push -u origin main推送现有的文件cd existing_folder git init git remote add origin [https://gitcode.com/weixin_41024010/test.git](https://gitcode.com/weixin_41024010/test.git) git add . git commit -m "Initial commit" git branch -m main git push -u origin main推送现有的 Git 仓库cd existing_repo git remote rename origin old-origin git remote add origin [https://gitcode.com/weixin_41024010/test.git](https://gitcode.com/weixin_41024010/test.git) git push -u origin --all git push -u origin --tags � 配置好git 就可以使用了 ,但是有个地方要先设置一下:提交文件限制改大一些 ,不然如果没有配置好GIT忽略文件的话 ,会推送不上去。改动可以从这里提交 ,这样就完成了代码的版本控制3. Cangjie对接DeepSeek接口华为云提供了单模型200万免费Tokens,包含DeepSeek-R1&V3满血版,我们可以登录华为云ModelArts Studio(MaaS)控制台领取免费额度,这里我们选择DeepSeek-R1满血版来搭建我们的工程。在云主机桌面底部菜单栏,点击打开火狐浏览器。用火狐浏览器访问ModelArts Studio首页:https://www.huaweicloud.com/product/modelarts/studio.html,点击ModelArts Studio控制台跳转到登录界面,按照登录界面提示登录,即可进入ModelArts Studio控制台。你也可以在本地浏览器打开进行相关操作。领取后点击调用说明,可以获取到对应的API地址、模型名称。当然API Key也要创建下,这里创建很简单,按提示跳转过去就成,我这里就不介绍了。记录对应的API地址、模型名称、API Key留作下面步骤使用。4. Cangjie对接DeepSeek编写代码进入云主机桌面,右键选择Open Terminal Here打开终端命令窗口,克隆仓颉示例代码仓库。git clone https://gitcode.com/CaseDeveloper/Cangjie-Examples.git 使用CodeArts IDE for Cangjie打开AIChat示例项目。左上点击文件—打开项目,选择前面克隆的示例代码目录Cangjie-Examples下的AIChat打开。修改配置config.json配置文件,配置DeepSeek的API信息。配置项:model、model、base_url{ "model": "DeepSeek-V3", "api_key": "Your KEY", "base_url": "[https://maas-cn-southwest-2.modelarts-maas.com/v1/infers/8a062fd4-7367-4ab4-a936-5eeb8c4/v1/chat/completions](https://maas-cn-southwest-2.modelarts-maas.com/v1/infers/8a062fd4-7367-4ab4-a936-5eeb8fb821c4/v1/chat/completions)", "system_prompt": "模拟课堂讨论 - Simulated Classroom Discussion,I need you to help me memorize the noun explanation, after I type a noun, you will simulate 5 students in the class to generate their speeches about the noun. The discussion must be humorous, and easy to understand. The entire conversation and instructions should be provided in Chinese. The first term is: 主题是" } 打开main.cj,运行项目,我们就可跟AI助手进行聊天了。(* 注意:打开main.cj可能提示Console标红,不影响程序运行,可以忽略。亦可以删除import std.console.Console重新编写该导入语句)至此,基于仓颉编程语言+DeepSeek实现模拟课堂讨论助手开发就完成了。接下来我们在聊天项目基础上,改编成“模拟课堂讨论助手”助手,有时候英文提示词会更有效其实超级简单,我们只需要再修改 “system_prompt” 即可。修改内容如下:"system_prompt": "模拟课堂讨论 - Simulated Classroom Discussion,I need you to help me memorize the noun explanation, after I type a noun, you will simulate 5 students in the class to generate their speeches about the noun. The discussion must be humorous, and easy to understand. The entire conversation and instructions should be provided in Chinese. The first term is: 主题是" 运行程序:最后我把代码完整的给大家呈现下(chat.cj):所有代码开源在git clone [https://gitcode.com/weixin_41024010/HUAWEIDEMO.git](https://gitcode.com/weixin_41024010/HUAWEIDEMO.git) 大家可以克隆我的代码使用。使用时要根目录是CHATDEEPSEEK (就是如图所示)不然编译会有问题。具体代码如下:package openai_chat import encoding.json.stream.* import net.http.ClientBuilder import net.http.HttpHeaders import net.http.HttpRequestBuilder import net.tls.TlsClientConfig import net.tls.CertificateVerifyMode import std.collection.ArrayList import std.io.ByteArrayStream import std.time.Duration public struct FunctionCall <: JsonDeserializable<FunctionCall> & JsonSerializable { public let name: String public let arguments: String public init(name: String, arguments: String) { this.name = name this.arguments = arguments } public static func fromJson(r: JsonReader): FunctionCall { var temp_name: String = "" var temp_arguments: String = "" while (let Some(v) <- r.peek()) { match(v) { case BeginObject => r.startObject() while(r.peek() != EndObject) { let n = r.readName() match (n) { case "name" => temp_name = r.readValue<String>() case "arguments" => temp_arguments = r.readValue<String>() case _ => r.skip() } } r.endObject() break case _ => throw Exception("can't deserialize for FunctionCall") } } return FunctionCall(temp_name, temp_arguments) } public func toJson(w: JsonWriter) { w.startObject() w.writeName("name").writeValue<String>(this.name) w.writeName("arguments").writeValue<String>(this.arguments) w.endObject() w.flush() } } public enum RoleType { User | Assistant | System | Function | NULL } public func role_type_to_str(role: RoleType): Option<String> { return match(role) { case RoleType.User => Some("user") case RoleType.Assistant => Some("assistant") case RoleType.System => Some("system") case RoleType.Function => Some("function") case RoleType.NULL => None } } public func str_to_role_type(role_option_str: Option<String>): RoleType { return match(role_option_str) { case Some(role_option) => match (role_option) { case "user" => RoleType.User case "assistant" => RoleType.Assistant case "system" => RoleType.System case "function" => RoleType.Function case x => throw Exception("unknow enum ${x} for RoleType") } case None => RoleType.NULL } } public struct Message<: JsonDeserializable<Message> & JsonSerializable { public let role: RoleType public var content: String public let function_call: Option<FunctionCall> public init(role: RoleType, content: String) { this.role = role this.content = content this.function_call = None } public init(role: RoleType, content: String, function_call: Option<FunctionCall>) { this.role = role this.content = content this.function_call = function_call } public static func fromJson(r: JsonReader): Message { var temp_role: Option<String> = None // role may null in stream chat var temp_content: String = "" var temp_functional_call: Option<FunctionCall> = None while (let Some(v) <- r.peek()) { match(v) { case BeginObject => r.startObject() while(r.peek() != EndObject) { let n = r.readName() match (n) { case "role" => temp_role = r.readValue<Option<String>>() case "content" => temp_content = r.readValue<String>() case "function_call" => temp_functional_call = r.readValue<Option<FunctionCall>>() case _ => r.skip() } } r.endObject() break case _ => throw Exception("can't deserialize for Message") } } let role_type: RoleType = str_to_role_type(temp_role) return Message(role_type, temp_content) } public func toJson(w: JsonWriter) { w.startObject() w.writeName("role").writeValue<Option<String>>(role_type_to_str(this.role)) w.writeName("content").writeValue<String>(this.content) w.endObject() w.flush() } } public struct ChatRequest <: JsonSerializable { private let model: String private let messages: ArrayList<Message> private let max_tokens: Int64 private let temperature: Float64 private let top_p: Float64 private let n: Int32 private let stream: Bool public init( model: String, messages: ArrayList<Message>, max_tokens: Int64, temperature: Float64, top_p: Float64, n: Int32, stream: Bool ) { // construction function with messages this.model = model this.messages = messages this.max_tokens = max_tokens this.temperature = temperature this.top_p = top_p this.n = n this.stream = stream } public init( model: String, prompt: String, history: ArrayList<(String, String)>, system_prompt: String, max_tokens: Int64, temperature: Float64, top_p: Float64, n: Int32, stream: Bool ){ // construction function with prompt and system_prompt this.model = model this.messages = ArrayList<Message>([ Message(RoleType.System, system_prompt) ]) for ((use_msg, bot_msg) in history) { this.messages.append(Message(RoleType.User, use_msg)) this.messages.append(Message(RoleType.Assistant, bot_msg)) } this.messages.append(Message(RoleType.User, prompt)) this.max_tokens = max_tokens this.temperature = temperature this.top_p = top_p this.n = n this.stream = stream } public init( model: String, prompt: String, history: ArrayList<(String, String)>, system_prompt: String, stream: Bool ){ // construction function with prompt and default arguments this.model = model this.messages = ArrayList<Message>([ Message(RoleType.System, system_prompt) ]) for ((use_msg, bot_msg) in history) { this.messages.append(Message(RoleType.User, use_msg)) this.messages.append(Message(RoleType.Assistant, bot_msg)) } this.messages.append(Message(RoleType.User, prompt)) this.max_tokens = 2000 this.temperature = 0.7 this.top_p = 1.0 this.n = 1 this.stream = stream } public func toJson(w: JsonWriter) { w.startObject() w.writeName("model").writeValue<String>(this.model) w.writeName("messages").writeValue<ArrayList<Message>>(this.messages) w.writeName("max_tokens").writeValue<Int64>(this.max_tokens) w.writeName("temperature").writeValue<Float64>(this.temperature) w.writeName("top_p").writeValue<Float64>(this.top_p) w.writeName("n").writeValue<Int32>(this.n) w.writeName("stream").writeValue<Bool>(this.stream) w.endObject() w.flush() } } public struct Choice <: JsonDeserializable<Choice> & JsonSerializable { public let index: Int32 public let message: Option<Message> public let delta: Option<Message> public let finish_reason: Option<String> public let logprobs: Option<Float64> // dashscope for qwen need public init( index: Int32, message: Option<Message>, delta: Option<Message>, finish_reason: Option<String>, logprobs: Option<Float64> ) { this.index = index this.message = message this.delta = delta this.finish_reason = finish_reason this.logprobs = logprobs } public static func fromJson(r: JsonReader): Choice { var temp_index: Int32 = -1 var temp_message: Option<Message> = None var temp_delta: Option<Message> = None var temp_finish_reason: Option<String> = None var temp_logprobs: Option<Float64> = None while (let Some(v) <- r.peek()) { match(v) { case BeginObject => r.startObject() while(r.peek() != EndObject) { let n = r.readName() match (n) { case "index" => temp_index = r.readValue<Int32>() case "message" => temp_message = r.readValue<Option<Message>>() case "delta" => temp_delta = r.readValue<Option<Message>>() case "finish_reason" => temp_finish_reason = r.readValue<Option<String>>() case "logprobs" => temp_logprobs = r.readValue<Option<Float64>>() case _ => r.skip() } } r.endObject() break case _ => throw Exception("can't deserialize for Choice") } } return Choice(temp_index, temp_message, temp_delta, temp_finish_reason, temp_logprobs) } public func toJson(w: JsonWriter) { w.startObject() w.writeName("index").writeValue<Int32>(this.index) w.writeName("message").writeValue<Option<Message>>(this.message) w.writeName("delta").writeValue<Option<Message>>(this.delta) w.writeName("finish_reason").writeValue<Option<String>>(this.finish_reason) w.writeName("logprobs").writeValue<Option<Float64>>(this.logprobs) w.endObject() w.flush() } } public struct Usage <: JsonDeserializable<Usage> & JsonSerializable { public let prompt_tokens: UInt64 public let completion_tokens: UInt64 public let total_tokens: UInt64 public init(prompt_tokens: UInt64, completion_tokens: UInt64, total_tokens: UInt64) { this.prompt_tokens = prompt_tokens this.completion_tokens = completion_tokens this.total_tokens = total_tokens } public static func fromJson(r: JsonReader): Usage { var temp_prompt_tokens: UInt64 = 0 var temp_completion_tokens: UInt64 = 0 var temp_total_tokens: UInt64 = 0 while (let Some(v) <- r.peek()) { match(v) { case BeginObject => r.startObject() while(r.peek() != EndObject) { let n = r.readName() match (n) { case "prompt_tokens" => temp_prompt_tokens = r.readValue<UInt64>() case "completion_tokens" => temp_completion_tokens = r.readValue<UInt64>() case "total_tokens" => temp_total_tokens = r.readValue<UInt64>() case _ => r.skip() } } r.endObject() break case _ => throw Exception("can't deserialize for Usage") } } return Usage(temp_prompt_tokens, temp_completion_tokens, temp_total_tokens) } public func toJson(w: JsonWriter) { w.startObject() w.writeName("prompt_tokens").writeValue<UInt64>(this.prompt_tokens) w.writeName("completion_tokens").writeValue<UInt64>(this.completion_tokens) w.writeName("total_tokens").writeValue<UInt64>(this.total_tokens) w.endObject() w.flush() } } public struct ChatResponse <: JsonDeserializable<ChatResponse> { // some api names `id`, and some names `request_id` public let id: Option<String> public let request_id: Option<String> public let system_fingerprint: Option<String> public let model: String public let object: String public let created: UInt64 public let choices: ArrayList<Choice> public let usage: Option<Usage> public init( id: Option<String>, request_id: Option<String>, system_fingerprint: Option<String>, model: String, object: String, created: UInt64, choices: ArrayList<Choice>, usage: Option<Usage> ) { this.id = id this.request_id = request_id this.system_fingerprint = system_fingerprint this.model = model this.object = object this.created = created this.choices = choices this.usage = usage } public static func fromJson(r: JsonReader): ChatResponse { var temp_id: Option<String> = None var temp_request_id: Option<String> = None var temp_system_fingerprint: Option<String> = None var temp_model: String = "" var temp_object: String = "" var temp_created: UInt64 = 0 var temp_choices: ArrayList<Choice> = ArrayList<Choice>([]) var temp_usage: Option<Usage> = None while (let Some(v) <- r.peek()) { match(v) { case BeginObject => r.startObject() while(r.peek() != EndObject) { let n = r.readName() match (n) { case "id" => temp_id = r.readValue<Option<String>>() case "request_id" => temp_request_id = r.readValue<Option<String>>() case "system_fingerprint" => temp_system_fingerprint = r.readValue<Option<String>>() case "model" => temp_model = r.readValue<String>() case "object" => temp_object = r.readValue<String>() case "created" => temp_created = r.readValue<UInt64>() case "choices" => temp_choices = r.readValue<ArrayList<Choice>>() case "usage" => temp_usage = r.readValue<Option<Usage>>() case _ => r.skip() } } r.endObject() break case _ => throw Exception("can't deserialize for ChatResponse") } } return ChatResponse( temp_id, temp_request_id, temp_system_fingerprint, temp_model, temp_object, temp_created, temp_choices, temp_usage ) } } public func get_domain( url: String ): String { var temp_url = url if (temp_url.startsWith("https://")) { temp_url = temp_url["https://".size..] } else if (temp_url.startsWith("http://")) { temp_url = temp_url["http://".size..] } let domain: String = temp_url.split("?")[0].split("/")[0] return domain } public func build_http_client( prompt: String, env_info: EnvInfo, history: ArrayList<(String, String)>, stream!: Bool ){ // prepare input data var array_stream = ByteArrayStream() let json_writer = JsonWriter(array_stream) let chat_res = ChatRequest( env_info.model, prompt, history, env_info.system_prompt, stream ) chat_res.toJson(json_writer) let post_data: Array<UInt8> = array_stream.readToEnd() var headers: HttpHeaders = HttpHeaders() headers.add("Authorization", "Bearer ${env_info.api_key}") headers.add("Content-Type", "application/json") if (stream) { headers.add("Accept", "text/event-stream") } let request = HttpRequestBuilder() .url(env_info.base_url) .method("POST") .body(post_data) .readTimeout(Duration.second * 120) .addHeaders(headers) .build() let client = if (env_info.base_url.startsWith("https")) { var tls_client_config = TlsClientConfig() tls_client_config.verifyMode = CertificateVerifyMode.TrustAll tls_client_config.domain = get_domain(env_info.base_url) ClientBuilder() .tlsConfig(tls_client_config) .build() } else { ClientBuilder().build() } return (request, client) } public func chat( prompt: String, env_info: EnvInfo, history: ArrayList<(String, String)> ): Option<String> { let (request, client) = build_http_client( prompt, env_info, history, stream: false ) var result_message: Option<String> = None var res_text = "" try { // call api let response = client.send( request ) // read result (support max revice 100k data) let buffer = Array<Byte>(102400, item: 0) let length = response.body.read(buffer) res_text = String.fromUtf8(buffer[..length]) // println("res_text: ${res_text}") var input_stream = ByteArrayStream() input_stream.write(res_text.toArray()) // convert text to ChatResponse object let json_reader = JsonReader(input_stream) let res_object = ChatResponse.fromJson(json_reader) let choices: ArrayList<Choice> = res_object.choices if (choices.size > 0) { let message = choices[0].message.getOrThrow() // println("message: ${message.content}") result_message = Some(message.content) } else { println("can't found any response") } } catch (e: Exception) { println("ERROR: ${e.message}, reviced text is ${res_text}") } client.close() return result_message } public func stream_chat( prompt: String, env_info: EnvInfo, history: ArrayList<(String, String)> ): Option<String> { let (request, client) = build_http_client( prompt, env_info, history, stream: true ) var result_response: String = "" var temp_text2 = "" try { // call api let response = client.send( request ) // read result let buffer = Array<Byte>(10240, item: 0) var finish_reason: Option<String> = None while(finish_reason.isNone() && temp_text2 != "[DONE]") { let length = response.body.read(buffer) let res_text = String.fromUtf8(buffer[..length]) for (temp_text in res_text.split("\n")) { temp_text2 = if (temp_text.startsWith("data: ")) { temp_text["data: ".size..] } else { temp_text } if (temp_text2.size == 0) { continue } if (temp_text2 == "[DONE]") { break } // println("========================") // println("temp_text: ${temp_text2}") // println("========================") var input_stream = ByteArrayStream() input_stream.write(temp_text2.toArray()) // convert text to ChatResponse object let json_reader = JsonReader(input_stream) let res_object = ChatResponse.fromJson(json_reader) let choices: ArrayList<Choice> = res_object.choices if (choices.size > 0) { finish_reason = choices[0].finish_reason if (finish_reason.isNone()) { let delta = choices[0].delta.getOrThrow() print("${delta.content}", flush: true) result_response += delta.content } } else { println("can't found any response") } } } } catch (e: Exception) { println("ERROR: ${e.message}, reviced text is ${temp_text2}") } client.close() if (result_response.size > 0) { return Some(result_response) } else { return None } } 5. 运行和测试最后我们测试下DeepSeek,如下图:到此整个项目案例创建完成,可见是非常简单且实用的,希望能给大家带来帮助。我正在参加【案例共创】第4期 基于华为开发者空间+仓颉/DeepSeek/MCP完成应用构建开发实践 cid:link_1参考链接https://gitcode.com/weixin_41024010/HUAWEIDEMOhttps://gitcode.com/Cangjie/Cangjie-Examples
  • [热门活动] 【获奖已公布】PaaS产品开年体验季·一起玩转DeepSeek!赢取华为耳机、云宝手办等好礼~
    各位小伙伴久等啦~感谢大家的参与,现公布获奖名单,请在5月14日前>点此反馈收货地址<,逾期视为放弃礼品,请耐心等待礼品发出哦~注:有奖问卷的礼品近期也会安排发出,请注意查收。期待小伙伴后续持续关注我们更多精彩活动!【活动原文】新年新气象,在这充满机遇与挑战的 2025 年开篇之际,我们为您筹备了一场PaaS 产品开年体验季,PaaS产品结合当下炙手可热的 DeepSeek,推出最新的体验案例,帮助您在开发道路上更上一层楼!>>活动报名入口<<【活动内容】一、资源准备,限时优惠套餐•         Astro Zero 5.99元套餐(仅面向新注册用户)•         免费领取200万Tokens,体验DeepSeek系列等模型•         创建CodeArts API示例项目•         CodeArts Repo15元套餐(仅面向新注册用户)•    免费开通CodeArts体验套餐•         免费领取开发者空间云主机二、免费课程学习,产品入门指导1、看视频,学CodeArts开发2、华为云Astro实操指导课程3、华为云Astro介绍与开发实战4、图解开发者空间三、DeepSeek实践体验案例1、 在华为开发者空间快速部署DeepSeek2、 基于Astro的校级就业指导应用接入DeepSeek智能分析实践体验有奖互动:分享实践体验案例成果+体验心得/建议到本活动贴评论区,筛选8名优质分享内容,随机送出华为半入耳式耳机、华为云云宝手办。四、有奖调研,反馈您的真实声音 有奖问卷:完成问卷填写,即可参与抽奖哦(奖品:华为云云宝手办、鼠标垫) 加入PaaS产品交流群,与大家共同进步。
  • [热门活动] 【专家坐堂答疑】探秘仓颉编程语言:华为开发者空间的创新利器技术直播在线答疑,还有好礼相送!
    直播简介【直播时间】2025年2月22日 15:00-16:30【直播专家】郭老师 仓颉虚拟机高级工程师李老师 仓颉三方库工程师郭老师 华为云DTSE技术布道师【直播简介】本期直播将与您一起探秘颉编程语言上线华为开发者空间后,显著提升开发效率,在智能化开发支持、全场景跨平台适配能力、工具链与生态完备性、语言简洁与高性能特性等方面展现出的独特优势。直播看点:1.Java转仓颉的小工具 (点击查看实操案例) 2.仓颉动画三方库Lottie  (点击查看实操案例)3.开发者空间介绍及如何在空间用仓颉编程语言开发(点击免费领取云主机)点击观看直播活动介绍【互动方式】直播前您可以在本帖留下您疑惑的问题,专家会在直播时为您解答。直播后您可以继续在本帖留言,与专家互动交流。我们会在全部活动结束后对参与互动的用户进行评选。【活动时间】2025年2月22日—2025年2月28日【奖励说明】评奖规则:活动期间在本帖提出与直播内容相关的问题,对专家评选为优质问题的开发者进行奖励。奖品:定制水杯 更多仓颉相关学习资料1. 仓颉官网(点击查看)2. 仓颉开发鸿蒙应用入门指南(鸿蒙文档)3. HarmonyOS Developer 终端鸿蒙开发者联盟仓颉主页4. Cangjie 社区主页(存放仓颉开发示例代码和仓颉鸿蒙原生应用示例代码)5. Cangjie-TPC 社区主页(存放仓颉三方库)【注意事项】1、所有参与活动的问题,如发现为复用他人内容,则取消获奖资格。2、为保证您顺利领取活动奖品,请您在活动公示奖项后2个工作日内私信提前填写奖品收货信息,如您没有填写,视为自动放弃奖励。3、活动奖项公示时间截止2025年3月5日,如未反馈邮寄信息视为弃奖。本次活动奖品将于奖项公示后30个工作日内统一发出,请您耐心等待。4、活动期间同类子活动每个ID(同一姓名/电话/收货地址)只能获奖一次,若重复则中奖资格顺延至下一位合格开发者,仅一次顺延。5、如活动奖品出现没有库存的情况,华为云工作人员将会替换等价值的奖品,获奖者不同意此规则视为放弃奖品。6、其他事宜请参考【华为云社区常规活动规则】。
  • [工具链] MDS编译器能像vscode一样设置json文件寻找头文件?????
    如标题,在写代码的时候,adsfi头文件总是找不到,但实际在交叉编译环境中有,除了拷贝过来,有没有类似vscode 编辑vscode.json文件一样的方法让编译器project自己寻找到合适的头文件,以提高代码书写效率。
  • [问题求助] 激活“huaweicloud.smartassist-java-ls”扩展失败:\smartassist-java-ls-2308.0.46\data\unhar64.
    激活“huaweicloud.smartassist-java-ls”扩展失败:\smartassist-java-ls-2308.0.46\data\unhar64.
  • [问题求助] CodeArts IDE多模块的时候只识别一个模块的maven
    我想问一下,我一个工程里面,有多个模块,例如一个是A模块,一个是B模块,一个是common模块,但是Java智能助手只识别到了A模块的maven,另外的两个模块没有识别到。
  • [其他问题] 鸿蒙DevEco Studio支持开放IDE插件的开发、支持与集成吗?
    DevEco Studio中IDE插件市场对外开放吗?是否类似于IDEA, VSCode IDE,支持开发者开发IDE插件,上传至其IDE插件市场中?华为云是否有计划提供相关的IDE插件?
  • [技术干货] FAQ—CodeArts&AstroZero社区(问题求助)总结-2024.01
    首次使用华为云CodeArts时,开发者们总会遇到一些问题,小编针对大家遇到的问题做了分类总结,比如标准页面的表格数据问题、标准页面的表格数据问题、如何在标准页面的事件里面通过JS代码,获得下拉框选择的值?、标准页面的表格数据问题。憋着急!下面小编就来为大家一一解答遇到这几类问题时该如何快速解决,一步解决大家的困扰。 华为云CodeArts系列产品参考手册:1、CodeArts:软件开发平台(CodeArts)官方手册:https://support.huaweicloud.com/devcloud/index.html软件开发平台(CodeArts)相关文章:https://bbs.huaweicloud.com/forum/thread-59032-1-1.html产品官方页面:https://devcloud.cn-north-4.huaweicloud.com/home2、CodeArts项目管理:项目管理(ProjectMan)官方手册:https://support.huaweicloud.com/projectman/index.html项目管理(ProjectMan)更新预览:https://support.huaweicloud.com/wtsnew-projectman/index.html产品官方页面:https://www.huaweicloud.com/product/projectman.html3、低代码平台Astro:应用魔方官方手册:https://support.huaweicloud.com/qs-appcube/appcube_02_0110.html操作指导:https://support.huaweicloud.com/appcube_video/index.html产品官方页面:https://appcube.cn-north-4.huaweicloud.com/studio/index.html#/projects/零代码官方手册:https://support.huaweicloud.com/usermanual-appcube/appcube_05_1404.html问题汇总:(以↓问题都是由官方人员解答后的文章链接)1月:如何实现所有组件都加载完成后,再执行某段逻辑?cid:link_6Astro Canvas页面如何恢复之前配置的数据?cid:link_7开发者如何使用自己的邮箱发送邮件?cid:link_8Astro低代码平台,现在是只能做工作流、表格应用,或者大屏展示吗?能像微信小程序一样,做成商城应用这种的吗?cid:link_9Astro完整的设计界面,到发布应用到小程序上,有博客或者文档吗(希望能详细说明要做的每一步)?cid:link_10怎么创建自己的工作流节点来处理任务?cid:link_0Astro Flow 流程执行过程中,如果想撤销,是否可以手动终止其中的某一条流程?cid:link_11在创建工作流的时候,比如我想在之前的节点上添加或删除某个节点,能否把之前创建的工作流复制过来,基于上面进行修改?cid:link_12单选或多选组件无法批量添加选项值cid:link_13项目结束后如何回收/归档项目资料到本地 ?cid:link_1CodeArts Check 能否添加自己公司的规则集?(比如命名规范等)cid:link_14 CodeArts Check现在支持哪些语言?cid:link_15CodeArts Check现在支持集成到哪些编译工具上,作为插件辅助开发?cid:link_16我知道CodeArts Check能用来检测代码质量,但是我想了解下检测代码漏洞的功能在哪里?cid:link_2smartassist java 激活失败cid:link_17公有云上云,保证研发数据安全,上互联网的同时,保证代码、文档等不外泄 cid:link_18后续是否支持远程项目开发cid:link_19是否有交叉编译的支持cid:link_3没有中文 cid:link_20启动报错,CodeArts IDE for C/C++ 客户端cid:link_4在安装CodeArtsIDE完成后,打开时提示激活失败cid:link_21CodeArts Snap异常。cid:link_22codeArts IDE不支持Windows7系统安装吗,一直卡在最后一步cid:link_23codearts snap 申请了多久能通过呀?cid:link_24gradle怎么配置指定gradle版本 cid:link_25有没有导入本地已有maven项目的操作步骤cid:link_26经常出现窗口未响应cid:link_27RemoteShell用户凭证无法输入中文用户cid:link_5登录不了cid:link_28如何在流水线中截取git tag 中的版本号例如 v1.0.0 截取为1.0.cid:link_29CodeArts IDE For Java不显示登录图标cid:link_30本帖内容会持续刷新维护和新增问答,如您有本类型问题或问题仍无法解决,欢迎留言交流!更新日期  2024.01.09
  • [问题求助] codeArts IDE 新建工程没有反应
    codeArts IDE 新建工程没有反应
  • [问题求助] CodeArts IDE for Java 插件 java Debug Support 激活失败
    CodeArts IDE for Java 插件 java Debug Support 激活失败
  • [热门活动] 福利活动 |【DevRun】云上开发创新实践
    【DevRun】云上开发创新实践专场”以进阶式云上开发成长训练,带你学会使用云端开发工具、DevOps平台、提供场景实践、最佳实践案例,掌握一站式云端项目开发实战能力!点击>>活动报名入口<<立即报名活动!本次活动有什么?学习内容一、【认识CodeArts】【知识点1】:从0到1深度体验CodeArts【知识点2】: 软件开发平台CodeArts介绍及实战【知识点3】: 基于云服务的软件开发技术二、【云上开发进阶实践】【CodeArts实战初体验】基于CodeArts进行黑白棋实时对战游戏开发【CodeArts场景实战】使用 CodeArts IDE for C/C++ 开发网页搜索框功能CodeArts10分钟开发增值税发票文字识别应用练习1:通过DevStar实现一站式增值税发票文字识别应用练习2:基于CodeArts IDE for C/C++的增值税发票识别应用【CodeArts最佳案例实践】华为端到端(HE2E)DevOps 开发者认证福利:报名活动可1元兑换价值500元开发者认证考试券!活动礼品:参与活动体验完成任务,还有机会获得精美学习好礼!
  • [大赛专区] “哈工大APP”大赛抽奖得好礼热身活动-通过华为云CodeArts IDE和开发者插件Toolkit,快速实现语音合成应用
    完成任务抽好礼~!快速入门上手华为云云服务,体验云上开发之旅哈喽同学们,本期活动任务为:通过华为云CodeArts IDE和开发者插件Toolkit,快速实现语音合成应用本期热身活动是围绕着“应用开发”的主题为大家提供了一个云上开发Demo,赶快完成活动任务抽奖领取以下礼品吧!!本次活动抽奖概率及中奖数量如下:【活动步骤1】点击链接,报名大赛>>“哈工大APP”应用创意开发设计大赛<<【活动步骤2】点击链接,按照操作手册完成>>语音合成应用的云上开发体验<<开发者可以通过语音合成应用的云上开发体验案例,基于华为云CodeArts IDE和开发者插件ToolKit,使用华为云API,来实现一个文字合成语音的应用。【活动步骤3】体验案例分为初阶、高阶和进阶三个难度,参赛开发者可以按照指导手册和兴趣完成任意一个环节,并将完成后的截图发至评论区。凭借报名大赛+完成体验任务,即可参与抽奖。大赛结束后,工作人员将统一私信抽奖链接,请注意查收论坛的私信通知。回复截图进行抽奖本帖规则参与活动的同学回复本帖:体验的华为云账号+语音合成应用体验截图,下面以不同阶段任务为例进行提交示例:(1)环境部署任务-CodeArts IDE账号激活成功:华为云账号:XXXX(2)初阶任务-体验语音生成API,合成语音华为云账号:XXXX(3)高阶版:通过编写代码实现语音合成的应用​华为云账号:XXXX【活动须知】工作人员判定截图有效后,会在您回帖下方评论告知有效与否。请注意查收回帖的评论通知来判断是否有效参与抽奖。等大赛活动结束后工作人员将统一私信发送抽奖链接,请注意查收论坛的私信通知。礼品发放数量有限,优先原则,名满即止。【传送门】本次大赛设置了丰富的奖项和有趣好玩,并且有奖的云上开发体验活动,欢迎体验!助力大赛,且完成任意活动,即可100%抽奖!报名大赛:“哈工大APP”应用创设计大赛>>LinkAstro知识问答活动:完成考试即可获得电子参赛证书>>Link解密挑战活动:破解低代码之谜,《低代码开发这一百零一问》免费下载>>Link抽奖得好礼热身活动:基于Astro零代码快速搭建微信小程序(智慧校园建设主题)>>Link
  • [分享交流] 如何优雅地处理Java多线程编程中的共享资源问题?
    如何优雅地处理Java多线程编程中的共享资源问题,以确保线程安全和高性能?